@midscene/harmony 1.15.6 → 1.16.1

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.
@@ -0,0 +1,876 @@
1
+ /*! For license information please see index.b3706c8e.js.LICENSE.txt */
2
+ (()=>{var e,t,r,n,o,i,a,s={95902(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=95902,e.exports=t},75845(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=75845,e.exports=t},57125(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=57125,e.exports=t},39545(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=39545,e.exports=t},54593(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=54593,e.exports=t},8297(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=8297,e.exports=t},73657(e,t,r){"use strict";let n,o;var i,a=r(65723),s=r(22155),l=r(58997);let c=e=>{let{hideLogo:t=!1,lightSrc:r="https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/midscene_with_text_light.png",darkSrc:n="https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/midscene_with_text_dark.png"}=e,{isDarkMode:o}=function(){let[e,t]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{let e=()=>{var e;t("dark"===(null==(e=document.querySelector("[data-theme]"))?void 0:e.getAttribute("data-theme")))};e();let r=new MutationObserver(e),n=document.querySelector("[data-theme]")||document.documentElement;return r.observe(n,{attributes:!0,attributeFilter:["data-theme"]}),()=>r.disconnect()},[]),{isDarkMode:e}}();return t?null:(0,a.jsx)("div",{className:"logo",children:(0,a.jsx)("a",{href:"https://midscenejs.com/",target:"_blank",rel:"noreferrer",children:(0,a.jsx)("img",{alt:"Midscene_logo",src:o?n:r})})})};var A=r(4177),u=r(56766),d=r(66419),p=r(28594),h=r(49488),m=r(18926),f={};f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var g={};f.r(g),f.d(g,{create:()=>m.vt});let{create:y}=g,v="midscene-auto-zoom",b="midscene-background-visible",w="midscene-elements-visible",E="midscene-model-call-details",x="midscene-dark-mode",k="midscene-playback-speed",S="midscene-subtitle-enabled",I=e=>{if("undefined"==typeof window)return;var t=new URLSearchParams(window.location.search).get(e);if(null===t)return;let r=t.trim().toLowerCase();return!!["1","true","yes","on"].includes(r)||!["0","false","no","off"].includes(r)&&void 0},C=y(e=>{let t="false"!==localStorage.getItem(v),r="false"!==localStorage.getItem(b),n="false"!==localStorage.getItem(w),o="true"===localStorage.getItem(E),i="true"===localStorage.getItem(x),a=Number.parseFloat(localStorage.getItem(k)||"1"),s=Number.isNaN(a)?1:a,l="false"!==localStorage.getItem(S),c=I("focusOnCursor"),A=I("showElementMarkers"),u=I("darkMode"),d=void 0===u?i:u;return void 0!==u&&localStorage.setItem(x,d.toString()),{backgroundVisible:r,elementsVisible:void 0===A?n:A,autoZoom:void 0===c?t:c,modelCallDetailsEnabled:o,darkModeEnabled:d,playbackSpeed:[.5,1,1.5,2].includes(s)?s:1,setBackgroundVisible:t=>{e({backgroundVisible:t}),localStorage.setItem(b,t.toString())},setElementsVisible:t=>{e({elementsVisible:t}),localStorage.setItem(w,t.toString())},setAutoZoom:t=>{e({autoZoom:t}),localStorage.setItem(v,t.toString())},setModelCallDetailsEnabled:t=>{e({modelCallDetailsEnabled:t}),localStorage.setItem(E,t.toString())},setDarkModeEnabled:t=>{e({darkModeEnabled:t}),localStorage.setItem(x,t.toString())},setPlaybackSpeed:t=>{e({playbackSpeed:t}),localStorage.setItem(k,t.toString())},subtitleEnabled:l,setSubtitleEnabled:t=>{e({subtitleEnabled:t}),localStorage.setItem(S,t.toString())}}}),O="midscene-env-config",R="midscene-service-mode",j="midscene-tracking-active-tab",P="midscene-deep-locate",M="midscene-deep-think",T="midscene-screenshot-included",N="midscene-dom-included",D="midscene-ime-strategy",z="midscene-screenshot-strategy",B="midscene-auto-dismiss-keyboard",F="midscene-keyboard-dismiss-strategy",L="midscene-always-refresh-screen-info",U=()=>localStorage.getItem(O)||"",K=e=>{let t=e.split("\n"),r={};return t.forEach(e=>{let t=e.trim();if(t.startsWith("#"))return;let n=t.replace(/^export\s+/i,"").replace(/;$/,"").trim().match(/^(\w+)\s*=\s*(.*)$/);if(n){let[,e,t]=n,o=t.trim();(o.startsWith("'")&&o.endsWith("'")||o.startsWith('"')&&o.endsWith('"'))&&(o=o.slice(1,-1)),r[e]=o}}),r},Z=y((e,t)=>{let r=U(),n=K(r),o=window.location.href.startsWith("chrome-extension"),i=localStorage.getItem(R),a="false"!==localStorage.getItem(j),s="true"===localStorage.getItem(P),l=localStorage.getItem(M),c="false"!==localStorage.getItem(T),A=localStorage.getItem(N)||"false";return{serviceMode:o?"In-Browser-Extension":i||"Server",setServiceMode:t=>{if(o)throw Error("serviceMode cannot be set in extension");e({serviceMode:t}),localStorage.setItem(R,t)},config:n,configString:r,setConfig:t=>e({config:t}),loadConfig:t=>{e({config:K(t),configString:t}),localStorage.setItem(O,t)},syncFromStorage:()=>{let t=U();e({config:K(t),configString:t})},forceSameTabNavigation:a,setForceSameTabNavigation:t=>{e({forceSameTabNavigation:t}),localStorage.setItem(j,t.toString())},deepLocate:s,setDeepLocate:t=>{e({deepLocate:t}),localStorage.setItem(P,t.toString())},deepThink:"true"===l||"false"!==l&&"unset",setDeepThink:t=>{e({deepThink:t}),localStorage.setItem(M,t.toString())},screenshotIncluded:c,setScreenshotIncluded:t=>{e({screenshotIncluded:t}),localStorage.setItem(T,t.toString())},domIncluded:"visible-only"===A?"visible-only":"true"===A,setDomIncluded:t=>{e({domIncluded:t}),localStorage.setItem(N,t.toString())},popupTab:"playground",setPopupTab:t=>{e({popupTab:t})},imeStrategy:localStorage.getItem(D)||"yadb-for-non-ascii",setImeStrategy:t=>{e({imeStrategy:t}),localStorage.setItem(D,t)},screenshotStrategy:localStorage.getItem(z)||"auto",setScreenshotStrategy:t=>{e({screenshotStrategy:t}),localStorage.setItem(z,t)},autoDismissKeyboard:"false"!==localStorage.getItem(B),setAutoDismissKeyboard:t=>{e({autoDismissKeyboard:t}),localStorage.setItem(B,t.toString())},keyboardDismissStrategy:localStorage.getItem(F)||"esc-first",setKeyboardDismissStrategy:t=>{e({keyboardDismissStrategy:t}),localStorage.setItem(F,t)},alwaysRefreshScreenInfo:"true"===localStorage.getItem(L),setAlwaysRefreshScreenInfo:t=>{e({alwaysRefreshScreenInfo:t}),localStorage.setItem(L,t.toString())}}});var J=r(64174),Q=r(68928),q=r(65584),X=r(7991),W=r(56620),H=r(25656);function Y(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function G(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){Y(i,n,o,a,s,"next",e)}function s(e){Y(i,n,o,a,s,"throw",e)}a(void 0)})}}let{TextArea:V}=J.A,$={},_=[{key:"MIDSCENE_MODEL_BASE_URL",placeholder:"https://dashscope.aliyuncs.com/compatible-mode/v1"},{key:"MIDSCENE_MODEL_API_KEY",placeholder:"sk-..."},{key:"MIDSCENE_MODEL_NAME",placeholder:"qwen3-vl-plus"},{key:"MIDSCENE_MODEL_FAMILY",placeholder:"qwen3-vl"}],ee=[{key:"replanningCycleLimit",label:"Replanning Cycle Limit",placeholder:"Model default"},{key:"waitAfterAction",label:"Wait After Action (ms)",placeholder:"Default: 300"},{key:"screenshotShrinkFactor",label:"Screenshot Shrink Factor",placeholder:"Default: 1"}];function et(e){var t,r,n,o,i,a;return{replanningCycleLimit:null!=(o=null==(t=e.replanningCycleLimit)?void 0:t.toString())?o:"",waitAfterAction:null!=(i=null==(r=e.waitAfterAction)?void 0:r.toString())?i:"",screenshotShrinkFactor:null!=(a=null==(n=e.screenshotShrinkFactor)?void 0:n.toString())?a:""}}function er(e){let t={};for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith("#"))continue;let n=e.indexOf("=");if(n<=0)continue;let o=e.slice(0,n).trim(),i=e.slice(n+1).trim();o&&(t[o]=i.replace(/^['"]|['"]$/g,""))}return t}function en(e,t,r){let n=e.split(/\r?\n/).filter(Boolean),o=n.findIndex(e=>e.trim().startsWith(`${t}=`));return r?o>=0?n[o]=`${t}=${r}`:n.push(`${t}=${r}`):o>=0&&n.splice(o,1),n.join("\n")}function eo(){return(0,a.jsx)("svg",{"aria-hidden":"true",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,a.jsx)("path",{d:"M5 8.00002V3.95856L8.5 5.97929L12 8.00002L8.5 10.0208L5 12.0415V8.00002Z",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:"1.33333"})})}function ei(e){let{isLoading:t}=e;return(0,a.jsx)("span",{className:"midscene-config-modal-verify-icon",children:t?(0,a.jsx)("svg",{"aria-hidden":"true",className:"midscene-config-modal-spinner",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,a.jsx)("path",{d:"M8 1.5A6.5 6.5 0 1 0 14.5 8",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.5"})}):(0,a.jsx)(eo,{})})}function ea(e){var t,r,n;let{open:o,className:i,width:l=640,textValue:c="",agentOptionsValue:A=$,initialTab:u="text",showEnvStyleSelect:p=!1,envTextareaMinRows:h=7,envTextareaAutoSize:m=!0,showAgentOptions:f=!0,envFields:g=_,parseEnvText:y=er,setEnvFieldValue:v=en,validateEnvText:b,onClose:w,onSave:E,onVerify:x}=e,[k,S]=(0,s.useState)(u),[I,C]=(0,s.useState)(c),[O,R]=(0,s.useState)(()=>et(A)),[j,P]=(0,s.useState)({kind:"idle"}),[M,T]=(0,s.useState)(!1),[N,D]=(0,s.useState)(null),z=(0,s.useRef)(0);(0,s.useEffect)(()=>{o&&(z.current+=1,S(u),C(c),R(et(A)),P({kind:"idle"}),D(null))},[A,u,o,c]);let B=(0,s.useMemo)(()=>y(I),[y,I]),F=(0,s.useMemo)(()=>(function(e){let t={},r=e.replanningCycleLimit.trim(),n=e.waitAfterAction.trim(),o=e.screenshotShrinkFactor.trim();if(r){let e=Number(r);if(!Number.isInteger(e)||e<0)return{options:null,error:"Replanning cycle limit must be an integer greater than or equal to 0."};t.replanningCycleLimit=e}if(n){let e=Number(n);if(!Number.isFinite(e)||e<0)return{options:null,error:"Wait after action must be a number greater than or equal to 0."};t.waitAfterAction=e}if(o){let e=Number(o);if(!Number.isFinite(e)||e<1)return{options:null,error:"Screenshot shrink factor must be a number greater than or equal to 1."};t.screenshotShrinkFactor=e}return{options:t,error:null}})(O),[O]),L=null!=(t=null==b?void 0:b(I))?t:null,U=null!=L?L:"error"===j.kind?j.message:null,K=()=>{z.current+=1,P(e=>"idle"===e.kind?e:{kind:"idle"}),D(null)};return(0,a.jsx)(Q.A,{centered:!0,className:["midscene-config-modal",`midscene-config-modal--${k}`,i].filter(Boolean).join(" "),destroyOnClose:!0,footer:(0,a.jsxs)("div",{className:"midscene-config-modal-footer-actions",children:[(0,a.jsx)(q.Ay,{onClick:w,children:"Cancel"}),(0,a.jsx)(q.Ay,{disabled:!F.options,loading:M,onClick:()=>void G(function*(){if(F.options&&!M){T(!0),D(null);try{yield E({text:I,agentOptions:F.options})}catch(e){D(e instanceof Error?e.message:String(e))}finally{T(!1)}}})(),type:"primary",children:"Save"})]}),maskClosable:!0,onCancel:w,open:o,title:"Config",width:l,children:(0,a.jsxs)("div",{className:"midscene-config-modal-body-content",children:[(0,a.jsxs)("section",{className:"midscene-config-modal-env-section",children:[(0,a.jsxs)("div",{className:"midscene-config-modal-section-heading",children:[(0,a.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,a.jsx)(d.A.Text,{strong:!0,children:"Model Env Config"}),(0,a.jsxs)(d.A.Text,{type:"secondary",children:["The format is KEY=VALUE and separated by new lines. These data will be saved ",(0,a.jsx)("strong",{children:"locally in your browser"}),"."]})]}),p?(0,a.jsx)(X.A,{"aria-label":"Model env config style",className:"midscene-config-modal-env-style-select",onChange:e=>{K(),S(e)},options:[{label:".env Style",value:"text"},{label:"Form Style",value:"form"}],value:k}):null]}),"form"===k&&p?(0,a.jsx)("div",{className:"midscene-config-modal-env-fields",children:g.map(e=>{var t;return(0,a.jsxs)("div",{className:"midscene-config-modal-env-field",children:[(0,a.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,a.jsx)(d.A.Text,{children:e.key})}),(0,a.jsx)(J.A,{"aria-label":`${e.key} value`,id:`config-modal-${e.key}`,onChange:t=>{K(),C(v(I,e.key,t.target.value))},placeholder:e.placeholder,value:null!=(t=B[e.key])?t:""})]},e.key)})}):(0,a.jsx)(V,{"aria-label":"Model environment configuration",className:"midscene-config-modal-env-textarea",onChange:e=>{K(),C(e.target.value)},autoSize:!!m&&{minRows:h},placeholder:"MIDSCENE_MODEL_BASE_URL=...\nMIDSCENE_MODEL_API_KEY=...\nMIDSCENE_MODEL_NAME=...\nMIDSCENE_MODEL_FAMILY=...",rows:h,value:I,wrap:"off"}),(0,a.jsxs)("div",{className:`midscene-config-modal-verify-row${U?" midscene-config-modal-verify-row--error":""}`,children:["success"===j.kind?(0,a.jsx)(W.A,{className:"midscene-config-modal-verify-alert",message:"Verified",showIcon:!0,type:"success"}):U?(0,a.jsx)(W.A,{className:"midscene-config-modal-verify-alert",message:U,showIcon:!0,type:"error"}):(0,a.jsx)("span",{}),x?(0,a.jsx)(q.Ay,{className:"midscene-config-modal-verify-button",disabled:!!L||"running"===j.kind,icon:(0,a.jsx)(ei,{isLoading:"running"===j.kind}),onClick:()=>void G(function*(){if(!x||L||"running"===j.kind)return;let e=z.current+1;z.current=e,P({kind:"running"});try{let t=yield x(B);if(z.current!==e)return;if(t.passed)return void P({kind:"success"});P({kind:"error",message:t.message||"Connectivity test failed without details."})}catch(t){if(z.current!==e)return;P({kind:"error",message:t instanceof Error?t.message:String(t)})}})(),children:"running"===j.kind?"Verifying":"Verify"}):null]})]}),f?(0,a.jsxs)("section",{className:"midscene-config-modal-agent-options",children:[(0,a.jsx)(H.A,{}),(0,a.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,a.jsx)(d.A.Text,{strong:!0,children:"Agent Option Config"}),(0,a.jsx)(d.A.Text,{type:"secondary",children:"Leave a field empty to use the default value. Changes apply on the next Agent connection."})]}),(0,a.jsx)("div",{className:"midscene-config-modal-option-fields",children:ee.map(e=>(0,a.jsxs)("div",{className:"midscene-config-modal-option-field",children:[(0,a.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,a.jsx)(d.A.Text,{children:e.label})}),(0,a.jsx)(J.A,{"aria-label":e.label,id:`config-modal-${e.key}`,min:+("screenshotShrinkFactor"===e.key),onChange:t=>{K(),R(r=>{var n,o;return n=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},r),o=o={[e.key]:t.target.value},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(o)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(o,e))}),n})},placeholder:e.placeholder,type:"number",value:O[e.key]})]},e.key))}),(null!=(r=F.error)?r:N)?(0,a.jsx)(W.A,{message:null!=(n=F.error)?n:N,showIcon:!0,type:"error"}):null]}):null]})})}function es(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function el(e){let{showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:o="icon",playgroundSDK:i,onVerify:l,agentOptions:c,onAgentOptionsSave:A,configModalClassName:u,configModalWidth:d,envTextareaAutoSize:m,envTextareaMinRows:f}=e,{config:g,configString:y,loadConfig:v,syncFromStorage:b}=Z(),[w,E]=(0,s.useState)(!1),x=g.MIDSCENE_MODEL_NAME,k=(0,s.useRef)(null),S=null!=l?l:(null==i?void 0:i.runConnectivityTest)?i.runConnectivityTest.bind(i):void 0,I=e=>{b(),E(!0),e.preventDefault(),e.stopPropagation()};return(0,s.useEffect)(()=>{w&&b()},[w,b]),(0,a.jsxs)("div",{ref:k,style:{alignItems:"center",display:"flex",gap:"10px",height:"100%",justifyContent:"flex-end",minHeight:"32px"},children:[r?x:null,(0,a.jsx)(h.A,{align:{offset:[-10,5]},getPopupContainer:()=>k.current,open:!w&&(t?0===Object.keys(g).length:void 0),placement:n,title:"Please set up your environment variables before using.",children:"icon"===o?(0,a.jsx)(p.A,{onClick:I}):(0,a.jsx)("span",{onClick:I,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,a.jsx)(ea,{agentOptionsValue:c,className:u,envTextareaAutoSize:m,envTextareaMinRows:f,width:d,onClose:()=>E(!1),onSave:e=>{var t;let{text:r,agentOptions:n}=e;return(t=function*(){let e=!1,t=!1;try{yield null==A?void 0:A(n),e=!!A,t=!0,v(r),E(!1)}catch(n){let r=[];if(t)try{v(y)}catch(e){r.push(e)}if(e)try{yield null==A?void 0:A(null!=c?c:{})}catch(e){r.push(e)}if(r.length>0)throw Error(`Saving configuration failed and rollback was incomplete. Original error: ${String(n)}. Rollback errors: ${r.map(String).join("; ")}`);throw n}},function(){var e=this,r=arguments;return new Promise(function(n,o){var i=t.apply(e,r);function a(e){es(i,n,o,a,s,"next",e)}function s(e){es(i,n,o,a,s,"throw",e)}a(void 0)})})()},onVerify:S?e=>S(e):void 0,open:w,parseEnvText:K,showAgentOptions:!!A,textValue:y})]})}function ec(e){let{showEnvConfig:t=!0,showTooltipWhenEmpty:r=!1,showModelName:n=!1,githubUrl:o="https://github.com/web-infra-dev/midscene",helpUrl:i="https://midscenejs.com/quick-start.html#chrome-extension",className:s="",playgroundSDK:l,onVerify:c,agentOptions:p,onAgentOptionsSave:h,configModalClassName:m,configModalWidth:f,envTextareaAutoSize:g,envTextareaMinRows:y}=e;return(0,a.jsxs)("div",{className:`nav-actions ${s}`,children:[(0,a.jsx)(d.A.Link,{href:o,target:"_blank",children:(0,a.jsx)(A.A,{className:"nav-icon"})}),(0,a.jsx)(d.A.Link,{href:i,target:"_blank",children:(0,a.jsx)(u.A,{className:"nav-icon"})}),t&&(0,a.jsx)(el,{showTooltipWhenEmpty:r,showModelName:n,playgroundSDK:l,onVerify:c,agentOptions:p,configModalClassName:m,configModalWidth:f,envTextareaAutoSize:g,envTextareaMinRows:y,onAgentOptionsSave:h})]})}var eA=r(46453),eu=r(34458);let ed=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:24,height:24,fill:"none",viewBox:"0 0 24 24"},e),r=r={children:[(0,a.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M22 9.483A14.53 14.53 0 0 0 9.75 5.674M19 12.9a9.85 9.85 0 0 0-4.75-2.642M5 12.9a10 10 0 0 1 2.18-1.65M8 16.157a5.63 5.63 0 0 1 2.5-1.455"}),(0,a.jsx)("path",{fill:"#6D6D6D",fillRule:"evenodd",d:"M12 20a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5",clipRule:"evenodd"}),(0,a.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20 20 4 4M2 9.483a15 15 0 0 1 1.75-1.42"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function ep(e){let{title:t="Connect to a device"}=e;return(0,a.jsx)("div",{style:{display:"flex",height:"100%",width:"100%",alignItems:"center",justifyContent:"center"},children:(0,a.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:4},children:[(0,a.jsx)(ed,{"aria-hidden":"true",style:{width:24,height:24,objectFit:"contain"}}),(0,a.jsx)("h2",{style:{margin:0,whiteSpace:"nowrap",textAlign:"center",fontSize:13,lineHeight:"24px",fontWeight:400,color:"rgba(0, 0, 0, 0.85)"},children:t})]})})}var eh=r(1352),em=r(80955),ef=r(16921);function eg(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function ey(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){eg(i,n,o,a,s,"next",e)}function s(e){eg(i,n,o,a,s,"throw",e)}a(void 0)})}}function ev(e){let{getScreenshot:t,getInterfaceInfo:r,serverOnline:n,isUserOperating:o=!1,mjpegUrl:i,mode:l="default",contentRef:c}=e,[A,u]=(0,s.useState)(null),[d,p]=(0,s.useState)(!1),[m,f]=(0,s.useState)(null),[g,y]=(0,s.useState)(0),[v,b]=(0,s.useState)(null),[w,E]=(0,s.useState)(()=>String(Date.now())),x=(0,s.useRef)(null),k=!!(i&&n),S=["screenshot-viewer","screen-only"===l&&"screen-only"].filter(Boolean).join(" "),I=(0,s.useRef)(null),C=(0,s.useRef)(!1);(0,s.useEffect)(()=>{if(!k)return;let e=()=>{let e=x.current;!e||e.naturalWidth>0||e.naturalHeight>0||E(String(Date.now()))},t=window.setTimeout(e,2500),r=window.setInterval(e,2500);return()=>{window.clearTimeout(t),window.clearInterval(r)}},[k,w,i]);let O=(0,s.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return ey(function*(){if(n){p(!0),e&&f(null);try{let e=yield t();if(console.log("Screenshot API response:",e),null==e?void 0:e.screenshot){let t=e.screenshot.toString().trim();t?(u(t),f(null),y(Date.now())):f("Empty screenshot data received")}else f("No screenshot data in response")}catch(e){console.error("Screenshot fetch error:",e),f(e instanceof Error?e.message:"Failed to fetch screenshot")}finally{p(!1)}}})()},[t,n]),R=(0,s.useCallback)(()=>ey(function*(){if(n&&r)try{let e=yield r();e&&b(e)}catch(e){console.error("Interface info fetch error:",e)}})(),[r,n]),j=(0,s.useCallback)(()=>{I.current&&clearInterval(I.current),console.log("Starting screenshot polling (5s interval)"),I.current=setInterval(()=>{!C.current&&n&&O(!1)},5e3)},[O,n]),P=(0,s.useCallback)(()=>{I.current&&(console.log("Stopping screenshot polling"),clearInterval(I.current),I.current=null)},[]),M=(0,s.useCallback)(()=>{console.log("Pausing screenshot polling"),C.current=!0},[]),T=(0,s.useCallback)(()=>{console.log("Resuming screenshot polling"),C.current=!1},[]),N=(0,s.useCallback)(()=>{O(!0)},[O]);if((0,s.useEffect)(()=>{if(!n){u(null),f(null),b(null),P();return}return(R(),k)?void P():(O(!1),j(),()=>{P()})},[n,k,j,P,O,R]),(0,s.useEffect)(()=>{n&&!k&&(o?M():(T(),O(!1)))},[o,M,T,O,n,k]),(0,s.useEffect)(()=>()=>{P()},[P]),!n)return(0,a.jsx)("div",{className:`${S} offline`,children:(0,a.jsxs)("div",{className:"screenshot-placeholder",children:[(0,a.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,a.jsx)("p",{children:"Start the playground server to see real-time screenshots"})]})});if(!k&&d&&!A)return(0,a.jsxs)("div",{className:`${S} loading`,children:[(0,a.jsx)(ef.A,{size:"large"}),(0,a.jsx)("p",{children:"Loading screenshot..."})]});if(!k&&m&&!A)return(0,a.jsx)("div",{className:`${S} error`,children:(0,a.jsxs)("div",{className:"screenshot-placeholder",children:[(0,a.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,a.jsx)("p",{className:"error-message",children:m})]})});let D=(0,a.jsx)("div",{className:"screenshot-content",ref:c,children:k?(0,a.jsx)("div",{className:"screenshot-image-shell",children:(0,a.jsx)("img",{ref:x,src:w?`${i}${(null==i?void 0:i.includes("?"))?"&":"?"}_mjpegRetry=${encodeURIComponent(w)}`:i,alt:"Device Live Stream",className:"screenshot-image",onError:()=>{window.setTimeout(()=>E(String(Date.now())),500)}},w||"initial")}):A?(0,a.jsx)("div",{className:"screenshot-image-shell",children:(0,a.jsx)("img",{src:A.startsWith("data:image/")?A:`data:image/png;base64,${A}`,alt:"Device Screenshot",className:"screenshot-image",onLoad:()=>console.log("Screenshot image loaded successfully"),onError:e=>{console.error("Screenshot image load error:",e),console.error("Screenshot data preview:",A.substring(0,100)),f("Failed to load screenshot image")}})}):(0,a.jsx)("div",{className:"screenshot-placeholder",children:(0,a.jsx)("p",{children:"No screenshot available"})})});return"screen-only"===l?(0,a.jsx)("div",{className:S,children:D}):(0,a.jsxs)("div",{className:S,children:[(0,a.jsx)("div",{className:"screenshot-header",children:(0,a.jsx)("div",{className:"screenshot-title",children:(0,a.jsx)("h3",{children:(null==v?void 0:v.type)?v.type:"Device Name"})})}),(0,a.jsxs)("div",{className:"screenshot-container",children:[(0,a.jsxs)("div",{className:"screenshot-overlay",children:[(0,a.jsxs)("div",{className:"device-name-overlay",children:["Device Name",(0,a.jsx)(h.A,{title:null==v?void 0:v.description,children:(0,a.jsx)(eh.A,{size:16,className:"info-icon"})})]}),!k&&(0,a.jsxs)("div",{className:"screenshot-controls",children:[g>0&&(0,a.jsxs)("span",{className:"last-update-time",children:["Last updated ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:new Date(e).toLocaleTimeString()})(g)]}),(0,a.jsx)(h.A,{title:"Refresh screenshot",children:(0,a.jsx)(q.Ay,{icon:(0,a.jsx)(em.A,{}),onClick:N,loading:d,size:"small"})}),o&&(0,a.jsxs)("span",{className:"operation-indicator",children:[(0,a.jsx)(ef.A,{size:"small"})," Operating..."]})]})]}),D]})]})}var eb=r(43393),ew=r(2651),eE=r(22397);let ex=new Set(["Backspace","Delete","Enter","Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]),ek=new Set(["Alt","Control","Meta","Shift"]);function eS(e,t){let r=t.width/t.height;if(e.height<=0||e.width<=0)return e;if(e.width/e.height>r){let t=e.height*r;return{left:e.left+(e.width-t)/2,top:e.top,width:t,height:e.height}}let n=e.width/r;return{left:e.left,top:e.top+(e.height-n)/2,width:e.width,height:n}}function eI(e){let{enabled:t,deviceSize:r,onTap:n,onSwipe:o,scrollEnabled:i=!1,onWheelScroll:l,keyboardEnabled:c=!1,onTextInput:A,onKeyboardPress:u,contentRef:d,tapMaxDistance:p=8,tapMaxDurationMs:h=250,style:m}=e,f=(0,s.useRef)(null),g=(0,s.useRef)(null),y=(0,s.useRef)(null),v=(0,s.useRef)(!1),b=(0,s.useRef)(!1),w=(0,s.useRef)(0),E=(0,s.useRef)(null),x=(0,s.useRef)(null),k=(0,s.useRef)(null),S=(0,s.useCallback)(()=>{if(c){b.current=!0;let e=g.current;e&&document.activeElement!==e&&e.focus({preventScroll:!0})}},[c]),I=(0,s.useCallback)((e,t)=>{c&&Promise.resolve(t).catch(()=>void 0).then(()=>{window.setTimeout(()=>{b.current&&w.current===e&&S()},0)})},[S,c]),C=(0,s.useCallback)((e,t)=>{let r=f.current,n=g.current;if(!r||!n)return;let o=r.getBoundingClientRect();n.style.left=`${Math.max(0,e-o.left)}px`,n.style.top=`${Math.max(0,t-o.top)}px`},[]),O=(0,s.useCallback)((e,t,n)=>{if(!r)return null;let o=(e-n.left)/n.width,i=(t-n.top)/n.height;return{x:Math.max(0,Math.min(r.width-1,Math.round(o*r.width))),y:Math.max(0,Math.min(r.height-1,Math.round(i*r.height)))}},[r]),R=(0,s.useCallback)(e=>{var n;if(!t||!r||!f.current||0!==e.button&&"mouse"===e.pointerType)return;let o=eS((null!=(n=null==d?void 0:d.current)?n:f.current).getBoundingClientRect(),r);if(e.clientX<o.left||e.clientX>o.left+o.width||e.clientY<o.top||e.clientY>o.top+o.height){b.current=!1;return}C(e.clientX,e.clientY);let i=w.current+1;w.current=i,S();try{f.current.setPointerCapture(e.pointerId)}catch(e){}y.current={startX:e.clientX,startY:e.clientY,startTime:performance.now(),contentRect:o,keyboardFocusRequestId:i},e.preventDefault()},[d,t,r,S,C]),j=(0,s.useCallback)((e,t)=>{let r=y.current;if(y.current=null,!r)return;try{var i;null==(i=f.current)||i.releasePointerCapture(e.pointerId)}catch(e){}if(t)return;let a=e.clientX-r.startX,s=e.clientY-r.startY,l=Math.sqrt(a*a+s*s),c=Math.max(0,performance.now()-r.startTime),A=O(r.startX,r.startY,r.contentRect),u=O(e.clientX,e.clientY,r.contentRect);A&&u&&(E.current=u,l<=p&&c<=h?I(r.keyboardFocusRequestId,null==n?void 0:n(A)):null==o||o(A,u,Math.round(c)))},[n,o,O,I,p,h]),P=(0,s.useCallback)(e=>j(e,!1),[j]),M=(0,s.useCallback)(e=>j(e,!0),[j]),T=(0,s.useCallback)(()=>{let e=x.current;x.current=null,k.current&&(clearTimeout(k.current),k.current=null),e&&(null==l||l(e.point,{deltaX:e.deltaX,deltaY:e.deltaY}))},[l]),N=(0,s.useCallback)(e=>{var n;if(!t||!i||!r||!f.current)return;let o=eS((null!=(n=null==d?void 0:d.current)?n:f.current).getBoundingClientRect(),r);if(e.clientX<o.left||e.clientX>o.left+o.width||e.clientY<o.top||e.clientY>o.top+o.height)return;let a=O(e.clientX,e.clientY,o);if(!a)return;e.preventDefault(),e.stopPropagation();let s=x.current;x.current={point:a,deltaX:((null==s?void 0:s.deltaX)||0)+e.deltaX,deltaY:((null==s?void 0:s.deltaY)||0)+e.deltaY},k.current&&clearTimeout(k.current),k.current=setTimeout(T,80)},[d,r,t,T,O,i]),D=(0,s.useCallback)(()=>{var e;(null==(e=g.current)?void 0:e.value)&&(g.current.value="")},[]),z=(0,s.useCallback)(e=>{var t;if(c&&b.current){if(!e.altKey&&(e.metaKey||e.ctrlKey)&&"c"===e.key.toLowerCase()&&function(e){let t=window.getSelection();if(!t||t.isCollapsed||!e)return!1;let{anchorNode:r,focusNode:n}=t;return!!r&&!!n&&!e.contains(r)&&!e.contains(n)}(f.current)){b.current=!1;return}if(!v.current&&!e.isComposing&&!function(e){if("F5"===e.key||"F11"===e.key||"F12"===e.key)return!0;if(!(e.metaKey||e.ctrlKey))return!1;let t=e.key.toLowerCase();return!!e.altKey&&"i"===t||!!e.shiftKey&&("i"===t||"j"===t)||new Set(["r","q","w","m","h","n","t","+","=","-","_","0"]).has(t)}(e)&&(ex.has(e.key)||e.altKey||e.ctrlKey||e.metaKey)){let r=function(e){if(ek.has(e.key))return null;let t=[];return e.ctrlKey&&t.push("Control"),e.metaKey&&t.push("Meta"),e.altKey&&t.push("Alt"),e.shiftKey&&"Shift"!==e.key&&t.push("Shift"),t.push(" "===e.key?"Space":e.key),t.join("+")}(e);if(!r)return;e.preventDefault(),e.stopPropagation(),null==u||u(r,null!=(t=E.current)?t:void 0)}}},[c,u]),B=(0,s.useCallback)(e=>{var t;if(!c||!b.current)return;let r=e.clipboardData.getData("text");r&&(e.preventDefault(),e.stopPropagation(),null==A||A(r,null!=(t=E.current)?t:void 0))},[c,A]),F=(0,s.useCallback)(e=>{var t,r,n,o,i;if(!c||!b.current){v.current||D();return}if(v.current)return;let a=e.nativeEvent;if("insertLineBreak"===a.inputType){D(),e.preventDefault(),e.stopPropagation(),null==u||u("Enter",null!=(r=E.current)?r:void 0);return}if("deleteContentBackward"===a.inputType){D(),e.preventDefault(),e.stopPropagation(),null==u||u("Backspace",null!=(n=E.current)?n:void 0);return}if("deleteContentForward"===a.inputType){D(),e.preventDefault(),e.stopPropagation(),null==u||u("Delete",null!=(o=E.current)?o:void 0);return}let s=a.data||(null==(t=g.current)?void 0:t.value)||"";D(),s&&(e.preventDefault(),e.stopPropagation(),null==A||A(s,null!=(i=E.current)?i:void 0))},[D,c,u,A]);return((0,s.useEffect)(()=>{t||(y.current=null,x.current=null,k.current&&(clearTimeout(k.current),k.current=null),v.current=!1,b.current=!1,E.current=null)},[t]),(0,s.useEffect)(()=>{if(!t||!c){b.current=!1;return}let e=e=>{let t=f.current;t&&e.target instanceof Node&&t.contains(e.target)||(b.current=!1)};return window.addEventListener("keydown",z,!0),window.addEventListener("pointerdown",e,!0),()=>{window.removeEventListener("keydown",z,!0),window.removeEventListener("pointerdown",e,!0)}},[t,z,c]),(0,s.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[]),(0,s.useEffect)(()=>{let e=f.current;if(e&&t&&i)return e.addEventListener("wheel",N,{passive:!1}),()=>{e.removeEventListener("wheel",N)}},[t,N,i]),t&&r)?(0,a.jsx)("div",{ref:f,onPointerDown:R,onPointerUp:P,onPointerCancel:M,onContextMenu:e=>e.preventDefault(),"data-midscene-device-interaction-layer":"true",style:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({position:"absolute",inset:0,zIndex:5,cursor:c?"default":"crosshair",outline:"none",color:"transparent",caretColor:"transparent",touchAction:"none",userSelect:"none"},m),children:c?(0,a.jsx)("textarea",{ref:g,"data-midscene-keyboard-sink":"true",tabIndex:-1,onPaste:B,onCompositionStart:()=>{b.current=!0,v.current=!0},onCompositionEnd:e=>{var t,r;if(!c||!b.current)return;v.current=!1;let n=e.data||(null==(t=g.current)?void 0:t.value)||"";D(),n&&(null==A||A(n,null!=(r=E.current)?r:void 0))},onInput:F,style:{position:"absolute",left:0,top:0,width:32,height:24,opacity:0,pointerEvents:"none",appearance:"none",boxShadow:"none",overflow:"hidden",resize:"none",border:0,padding:0,margin:0,outline:"none",background:"transparent",color:"transparent",caretColor:"transparent",fontSize:16,lineHeight:"20px",transform:"translate(-50%, -50%)"}}):null}):null}var eC=r(94093),eO=r(96418),eR=r(34452),ej=r(72644);let eP=[1e3,2e3,3e3,3e3];function eM(){return"Preparing Android device connection…"}function eT(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function eN(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){eT(i,n,o,a,s,"next",e)}function s(e){eT(i,n,o,a,s,"throw",e)}a(void 0)})}}function eD(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let{Text:ez}=d.A;function eB(e){let{connectingOverlay:t,deviceId:r,onIntrinsicSize:n,onStatusChange:o,renderErrorOverlay:i,serverUrl:l,metadataTimeoutMs:c=55e3,viewportStyle:A,contentRef:u}=e,d=(0,s.useRef)(null),p=(0,s.useRef)(null),h=(0,s.useRef)(null),m=(0,s.useRef)(null),f=(0,s.useRef)(null),g=(0,s.useRef)(null),y=(0,s.useRef)(!1),v=(0,s.useRef)(0),[b,w]=(0,s.useState)("connecting"),[E,x]=(0,s.useState)(null),[k,S]=(0,s.useState)(()=>eM()),[I,C]=(0,s.useState)(!0),[O,R]=(0,s.useState)(0),j=(0,s.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:eM();switch(e){case"connected":return"Live scrcpy preview connected";case"waiting-for-stream":case"recovering":return t;case"error":return"Unable to start scrcpy preview";case"disconnected":return"scrcpy preview disconnected, retrying…";default:return"Connecting to scrcpy preview server…"}})(b,k),[b,k]),P=("error"===b||"disconnected"===b)&&!!i,M=(0,s.useCallback)(()=>{w("connecting"),x(null),S(eM()),R(e=>e+1)},[]);(0,s.useEffect)(()=>{null==o||o(b,j)},[o,b,j]);let T=()=>{let e=d.current;e&&e.replaceChildren()},N=()=>{h.current&&(h.current.dispose(),h.current=null)},D=()=>{m.current&&(clearTimeout(m.current),m.current=null)};return(0,s.useEffect)(()=>{if(!l){w("error"),x("scrcpy preview metadata is missing a server URL.");return}if(!eb.p.isSupported){C(!1),w("error"),x("Current browser does not support WebCodecs, so live scrcpy preview is unavailable.");return}let e=!1,t=null,o=Date.now(),i=1,a=()=>{t&&(clearTimeout(t),t=null),D(),g.current&&(clearTimeout(g.current),g.current=null),f.current&&(clearTimeout(f.current),f.current=null),p.current&&(p.current.disconnect(),p.current=null),N(),T(),null==n||n(null)},s=function(t){var r,s;let l,c=!(arguments.length>1)||void 0===arguments[1]||arguments[1],u=i+1,d=Date.now()-o;if(e||f.current)return;if(!c||!(u<=5)||!(d<15e3)){w("error"),x(t),S(eM()),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(s=p.current)||s.disconnect(),p.current=null,N(),T(),null==n||n(null);return}let h=(l=Math.max(0,Math.min(i-1,eP.length-1)),eP[l]);w("recovering"),x(null),S(`Preview interrupted. Recovering (${u}/5)…`),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(r=p.current)||r.disconnect(),p.current=null,N(),T(),null==n||n(null),f.current=setTimeout(()=>{f.current=null,a(),i=u,A()},h)},A=()=>{if(e)return;let t=v.current+1;v.current=t;let a=()=>!e&&v.current===t;y.current=!1,w("connecting"),x(null),S(eM());let A=(0,ej.io)(l,{withCredentials:!0,reconnection:!1,timeout:1e4,transports:["websocket"]});p.current=A;let u=function(e){let t,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o="waiting-for-configuration",i=!1,a=[],s=()=>{if(!i){var e;i=!0,null==(e=n.onFirstDataPacket)||e.call(n)}};return new ReadableStream({start(n){let i=()=>null===n.desiredSize||n.desiredSize>0,l=(e,l)=>{try{var c;if("configuration"!==e.type&&"boolean"!=typeof e.keyFrame)throw Error("Scrcpy video data packet is missing keyFrame metadata");let t=(c=e.data)instanceof Uint8Array?c:c instanceof ArrayBuffer?new Uint8Array(c):new Uint8Array(c.buffer,c.byteOffset,c.byteLength),l="configuration"===e.type?{type:"configuration",data:t}:{type:"data",data:t,keyframe:e.keyFrame};if("configuration"===l.type){o="waiting-for-keyframe",r=void 0,n.enqueue(l),a.length>0&&(o="ready",s(),a.forEach(e=>n.enqueue(e))),a=[];return}if("waiting-for-configuration"===o)return void(l.keyframe?a=[l]:a.length>0&&a.length<2?a.push(l):a=[]);if("waiting-for-keyframe"===o){if(!l.keyframe){r=void 0;return}i()?(r=void 0,o="ready",s(),n.enqueue(l)):r=l;return}if(i()){s(),n.enqueue(l);return}o="waiting-for-keyframe",r=l.keyframe?l:void 0}catch(e){null==t||t(),n.error(e)}finally{null==l||l()}},c=()=>{null==t||t(),n.close()},A=e=>{null==t||t(),n.error(e)};t=()=>{e.off("video-data",l),e.off("disconnect",c),e.off("error",A)},e.on("video-data",l),e.on("disconnect",c),e.on("error",A)},pull(e){r&&(null===e.desiredSize||e.desiredSize>0)&&(s(),e.enqueue(r),r=void 0,o="ready")},cancel(){null==t||t(),r=void 0,a=[],o="waiting-for-configuration"}},{highWaterMark:4})}(A,{onFirstDataPacket:()=>{a()&&!g.current&&(D(),S("Verifying video stream stability…"),g.current=setTimeout(()=>{g.current=null,a()&&(o=Date.now(),i=1,x(null),S(eM()),w("connected"))},2e3))}});A.on("connect",()=>{if(a()){var e,t;w("waiting-for-stream"),S(eM()),D(),m.current=setTimeout(()=>{a()&&(y.current=!0,s(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:55e3,t=Math.max(1,Math.round(e/1e3));return`Timed out waiting ${t}s for scrcpy video stream data.`}(c)))},c),A.emit("connect-device",(e=eD({},"string"==typeof r&&r.trim()?{deviceId:r.trim()}:{}),t=t={maxSize:1600,videoBitRate:8e6},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e))}}),A.on("preview-status",e=>{var t;a()&&"object"==typeof(t=e)&&null!==t&&"message"in t&&"string"==typeof t.message&&(w("waiting-for-stream"),S(e.message))}),A.on("video-metadata",e=>eN(function*(){try{if(!a())return;N(),S("Starting video decoder…"),"number"==typeof e.width&&e.width>0&&"number"==typeof e.height&&e.height>0&&(null==n||n({width:e.width,height:e.height}));let t=e.codec?e.codec:eC.n.H264,r=yield eN(function*(){var e;let r=eO.p.isSupported?new eO.p:new eR.x,n=r.canvas;return n.style.width="100%",n.style.height="100%",n.style.objectFit="contain",T(),null==(e=d.current)||e.appendChild(n),new eb.p({codec:t,renderer:r})})();h.current=r,u.pipeTo(r.writable).catch(e=>{a()&&s(e.message)}),w("waiting-for-stream")}catch(e){if(!a())return;s(e instanceof Error?e.message:"Failed to start decoder.")}})()),A.on("disconnect",()=>{if(a()){if(D(),y.current){y.current=!1;return}s("scrcpy preview disconnected.")}}),A.on("connect_error",e=>{a()&&(D(),s(e.message))}),A.on("preview-error",e=>{a()&&"object"==typeof e&&null!==e&&"string"==typeof e.message&&"string"==typeof e.reason&&"boolean"==typeof e.recoverable&&"string"==typeof e.sessionId&&s(e.message,e.recoverable)}),A.on("error",e=>{a()&&(D(),s(e.message))})};return t=setTimeout(()=>{t=null,A()},0),()=>{e=!0,a()}},[r,c,O,l]),(0,a.jsxs)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:[E&&!P?(0,a.jsx)(W.A,{type:"warning",showIcon:!0,style:{marginBottom:12},message:j,description:E}):null,(0,a.jsxs)("div",{className:["scrcpy-panel-viewport","connected"===b&&"scrcpy-panel-viewport-connected"].filter(Boolean).join(" "),ref:u,style:eD({position:"relative",flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",background:"#111827",borderRadius:8,overflow:"hidden"},A),children:[(0,a.jsx)("div",{ref:d,style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center"}}),"connected"!==b?P&&i?(0,a.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:i({errorMessage:E,retry:M,status:b,statusText:j})}):"error"!==b&&"disconnected"!==b&&t?(0,a.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:t}):(0,a.jsxs)("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#fff",background:"rgba(17, 24, 39, 0.78)",textAlign:"center",padding:24,zIndex:1},children:["error"===b?null:(0,a.jsx)(ef.A,{spinning:!0}),(0,a.jsx)(ez,{style:{color:"#fff"},children:j}),"error"===b?(0,a.jsx)(ez,{style:{color:"#d1d5db"},children:"Reconnect the preview to try again."}):null,!I&&(0,a.jsx)(ez,{style:{color:"#d1d5db"},children:"Please use a modern Chromium browser to view the stream."})]}):null]})]})}let eF=["android","ios","web","harmony","computer"],eL=["countdown-before-run"];function eU(e,t){var r;for(let t of[null==e?void 0:e.platformId,null==e||null==(r=e.interface)?void 0:r.type].filter(e=>!!e)){let e=t.toLowerCase();if(eF.includes(e))return e}return t}function eK(e){return((null==e?void 0:e.executionUxHints)||[]).filter(e=>eL.includes(e))}function eZ(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function eJ(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){eZ(i,n,o,a,s,"next",e)}function s(e){eZ(i,n,o,a,s,"throw",e)}a(void 0)})}}function eQ(e){var t,r;let{connectingOverlay:n,onDeviceSizeChange:o,onScrcpyStatusChange:i,renderErrorOverlay:l,scrcpyViewportStyle:c,screenshotViewerMode:A,playgroundSDK:u,runtimeInfo:d,serverUrl:p,serverOnline:h,isUserOperating:m}=e,{message:f}=ew.A.useApp(),g=function(e,t){let r=null==e?void 0:e.preview;if(!r||"none"===r.kind||"custom"===r.kind)return{type:"none"};let n=t||"undefined"!=typeof window&&window.location.origin||"";if("mjpeg"===r.kind){let e=r.mjpegPath||"/mjpeg";return n?{type:"mjpeg",mjpegUrl:new URL(e,`${n}/`).toString()}:{type:"screenshot"}}if("scrcpy"===r.kind){var o,i;let t="string"==typeof(null==e||null==(o=e.metadata)?void 0:o.deviceId)?e.metadata.deviceId.trim():void 0;if("string"==typeof t&&/^\d+\.\d+\.\d+\.\d+:\d+$/.test(t))return{type:"screenshot"};let a=Number(null==(i=r.custom)?void 0:i.scrcpyPort),s=Number.isFinite(a)?a:void 0,l=s&&n?(()=>{let e=new URL(n);if(["localhost","127.0.0.1","[::1]"].includes(e.hostname)){var t;let n="string"==typeof(null==(t=r.custom)?void 0:t.scrcpyHost)?r.custom.scrcpyHost.trim():"";n&&"0.0.0.0"!==n&&"::"!==n?e.hostname=n.includes(":")&&!n.startsWith("[")?`[${n}]`:n:"::"===n?e.hostname="[::1]":("0.0.0.0"===n||"localhost"===e.hostname)&&(e.hostname="127.0.0.1")}return e.port=String(s),e.pathname="/",e.search="",e.hash="",e.toString()})():void 0;return{deviceId:t,type:"scrcpy",scrcpyPort:s,scrcpyUrl:l}}return{type:"screenshot"}}(d,p),[y,v]=(0,s.useState)(null),[b,w]=(0,s.useState)(null),[E,x]=(0,s.useState)(null),[k,S]=(0,s.useState)("connecting"),I=(0,s.useRef)(Promise.resolve()),C=(0,s.useRef)(""),O=(0,s.useRef)(null),R=(0,s.useRef)(null),j=(0,s.useRef)(null),P=(0,s.useRef)(null),M=null!=(t=null==E?void 0:E.includes("Tap"))&&t,T=(null==E?void 0:E.includes("Swipe"))?"Swipe":"DragAndDrop",N=(null==E?void 0:E.includes("KeyboardPress"))||(null==E?void 0:E.includes("Input"))||!1,D=null!=(r=null==E?void 0:E.includes("Scroll"))&&r,z=(0,s.useCallback)(e=>{let t=I.current.then(e,e);return I.current=t.catch(()=>void 0),t},[f]);(0,s.useEffect)(()=>{if(!h){v(null),x(null);return}let e=!1,t=()=>eJ(function*(){var t;let r;try{r=yield u.getInterfaceInfo()}catch(e){return}if(e)return;if((null==r||null==(t=r.size)?void 0:t.width)&&r.size.height){let{size:e}=r;v(t=>t&&t.width===e.width&&t.height===e.height?t:{width:e.width,height:e.height})}let n=Array.isArray(null==r?void 0:r.actionTypes)?r.actionTypes:null;x(e=>null===e&&null===n||e&&n&&e.length===n.length&&e.every((e,t)=>e===n[t])?e:n)})();t();let r=setInterval(t,5e3);return()=>{e=!0,clearInterval(r)}},[u,h]),(0,s.useEffect)(()=>{null==o||o(null!=b?b:y)},[y,o,b]);let B="scrcpy"===g.type&&eb.p.isSupported,F="screenshot"===g.type||"scrcpy"===g.type&&!B,L="scrcpy"===g.type&&!eb.p.isSupported&&function(){try{let{protocol:e,hostname:t}=window.location;if("http:"!==e)return!1;return"localhost"!==t&&"127.0.0.1"!==t&&"::1"!==t}catch(e){return!1}}(),U="none"!==g.type&&(!B||"connected"===k),K=(0,s.useCallback)((e,t)=>{f.open({type:"error",content:t||e,key:"manual-control-error"})},[]),Z=(0,s.useCallback)(()=>{R.current&&(clearTimeout(R.current),R.current=null)},[]),J=(0,s.useCallback)(()=>{var e,t;Z();let r=C.current,n=O.current;if(!r)return null!=(e=j.current)?e:Promise.resolve();C.current="",O.current=null;let o=(null!=(t=j.current)?t:Promise.resolve()).catch(()=>void 0).then(()=>eJ(function*(){let e=yield z(()=>u.interact(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({actionType:"Input",value:r,mode:"typeOnly"},n?{x:n.x,y:n.y}:{})));e.ok||K("Input failed",e.error)})()).finally(()=>{j.current===o&&(j.current=null)});return j.current=o,j.current},[Z,z,u,K]),Q=(0,s.useCallback)(e=>eJ(function*(){yield J();let t=yield z(()=>u.interact({actionType:"Tap",x:e.x,y:e.y}));t.ok||K("Tap failed",t.error)})(),[z,J,u,K]),q=(0,s.useCallback)((e,t,r)=>eJ(function*(){yield J();let n=yield z(()=>{var n,o,i,a,s,l;let c;return u.interact((n=T,o=e,i=t,a=r,c={actionType:n,x:o.x,y:o.y,endX:i.x,endY:i.y},"DragAndDrop"===n?c:(s=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},c),l=l={duration:a},Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(l)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(l)).forEach(function(e){Object.defineProperty(s,e,Object.getOwnPropertyDescriptor(l,e))}),s)))});n.ok||K(`${T} failed`,n.error)})(),[z,J,T,u,K]),X=(0,s.useCallback)((e,t)=>{e&&(C.current+=e,t&&(O.current=t),Z(),R.current=setTimeout(()=>{J()},120))},[Z,J]);(0,s.useEffect)(()=>{h&&U&&N||(Z(),C.current="",O.current=null)},[Z,N,U,h]),(0,s.useEffect)(()=>()=>{h&&U&&N&&C.current?J():(Z(),O.current=null)},[Z,J,N,g.type,U,d,h,p]);let H=(0,s.useCallback)(e=>eJ(function*(){if(!e)return;yield J();let t=yield z(()=>u.interact({actionType:"KeyboardPress",keyName:e}));t.ok||K("Keyboard press failed",t.error)})(),[z,J,u,K]),Y=(0,s.useCallback)((e,t)=>eJ(function*(){yield J();let r=yield z(()=>{let r,n,o;return u.interact((n=(r=Math.abs(t.deltaY)>=Math.abs(t.deltaX))?Math.abs(t.deltaY):Math.abs(t.deltaX),o=r?t.deltaY>=0?"down":"up":t.deltaX>=0?"right":"left",{actionType:"Scroll",x:e.x,y:e.y,scrollType:"singleAction",direction:o,distance:Math.max(1,Math.round(n))}))});r.ok||K("Scroll failed",r.error)})(),[z,J,u,K]),G=(0,s.useCallback)((e,t)=>{S(e),null==i||i(e,t)},[i]);return(0,a.jsxs)("div",{style:{flex:1,minHeight:0,height:"100%",position:"relative"},children:[L&&(0,a.jsx)(eE.A,{content:(0,a.jsxs)("div",{style:{maxWidth:360},children:[(0,a.jsx)("p",{style:{margin:"0 0 8px"},children:"Live scrcpy streaming is unavailable because WebCodecs API is disabled in non-secure (HTTP) contexts with non-localhost addresses."}),(0,a.jsx)("p",{style:{margin:"0 0 8px"},children:"Currently using screenshot polling as fallback. To enable scrcpy streaming:"}),(0,a.jsxs)("ol",{style:{margin:0,paddingLeft:18},children:[(0,a.jsxs)("li",{children:["Open"," ",(0,a.jsx)("code",{children:"chrome://flags/#unsafely-treat-insecure-origin-as-secure"})]}),(0,a.jsxs)("li",{children:["Add ",(0,a.jsx)("code",{children:window.location.origin})]}),(0,a.jsxs)("li",{children:["Set to ",(0,a.jsx)("b",{children:"Enabled"})," and relaunch Chrome"]})]})]}),title:"Screenshot polling mode",trigger:"click",placement:"bottomRight",children:(0,a.jsx)("button",{type:"button",style:{position:"absolute",top:8,right:8,zIndex:10,background:"#faad14",border:"none",borderRadius:"50%",width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",boxShadow:"0 2px 6px rgba(0,0,0,0.2)"},children:(0,a.jsx)("span",{style:{color:"#fff",fontSize:14,fontWeight:"bold",lineHeight:1},children:"!"})})}),"none"===g.type?(0,a.jsx)(W.A,{type:"warning",showIcon:!0,message:"Preview unavailable",description:"This session did not expose a preview capability in runtime metadata."}):B?(0,a.jsx)(eB,{connectingOverlay:n,deviceId:g.deviceId,onIntrinsicSize:w,onStatusChange:G,renderErrorOverlay:l,serverUrl:g.scrcpyUrl,viewportStyle:c,contentRef:P}):(0,a.jsx)(ev,{getScreenshot:()=>F?u.getScreenshot():Promise.resolve(null),getInterfaceInfo:()=>u.getInterfaceInfo(),serverOnline:h,isUserOperating:m,mjpegUrl:g.mjpegUrl,mode:null!=A?A:"screen-only",contentRef:P}),(0,a.jsx)(eI,{enabled:M&&h&&U,deviceSize:y,contentRef:P,onTap:Q,onSwipe:q,scrollEnabled:D,onWheelScroll:Y,keyboardEnabled:N,onTextInput:X,onKeyboardPress:H})]})}function eq(e){return(0,a.jsx)(eQ,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},e))}var eX=r(22770);function eW(e){let{children:t}=e;return(0,a.jsx)(eX.Ay,{theme:{token:{colorPrimary:"#2B83FF"},components:{Layout:{headerHeight:60,headerPadding:"0 30px",headerBg:"#FFF",bodyBg:"#FFF"}}},children:(0,a.jsx)(ew.A,{component:!1,children:t})})}var eH=r(19152),eY=r(13353);function eG(e){try{let t=e.match(/^\s*(\{[\s\S]*\})\s*$/);if(t)return t[1];let r=e.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);if(r)return r[1];let n=e.match(/\{[\s\S]*\}/);if(n)return n[0]}catch{}return e}function eV(e){if(!e||"object"!=typeof e||Array.isArray(e)){let t=Array.isArray(e)?"array":null===e?"null":typeof e;throw Error(`LLM response is valid JSON but does not match the expected schema. Expected to be a JSON object, got ${t}: ${JSON.stringify(e)}.`)}}function e$(e){try{return JSON.parse(e)}catch{return JSON.parse((0,eY.m)(e))}}function e_(e,t){let r,n=eG(e);try{r=e$(n)}catch(o){let t=n;if(t===n)throw Error(`failed to parse LLM response into JSON. Error - ${String(o)}. Response -
3
+ ${e}`);try{r=e$(t)}catch(t){throw Error(`failed to parse LLM response into JSON. First error - ${String(o)}. Second error - ${String(t)}. Response -
4
+ ${e}`)}}return function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==t)return t;if(Array.isArray(t))return t.map(t=>e(t,r));if("object"==typeof t){let o={};for(let[i,a]of Object.entries(t)){var n;let t=i.trim(),s=(null==(n=r.preserveStringValueKeys)?void 0:n.includes(t))??!1,l="string"==typeof a?s?a:a.trim():e(a,r);o[t]=l}return o}return"string"==typeof t?t.trim():t}(r,t)}var e0=r(64565),e1=r(85409),e2=r(8963).Buffer;function e3(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let e5=(0,e0.aZ)("ai:call:codex"),e4=(0,e0.aZ)("ai:call:codex",{console:!0});class e7{async run(e){let t,r=this.tail;this.tail=new Promise(e=>{t=e}),await r;try{return await e()}finally{t()}}constructor(){e3(this,"tail",Promise.resolve())}}let e8=e=>{if(!e)return!1;if(e instanceof Error&&"AbortError"===e.name)return!0;let t=e instanceof Error?e.message:String(e??"unknown error");return/aborted|abort/i.test(t)},e6=e=>{if("string"==typeof e)return e.trim()||void 0},e9=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e1.platform;if(!e.startsWith("file://"))return e;try{let r=new URL(e),n=decodeURIComponent(r.pathname),o=r.hostname.toLowerCase();if("win32"===t){let e=n.replace(/\//g,"\\").replace(/^\\([A-Za-z]:)/,"$1");if(o&&"localhost"!==o)return`\\\\${r.hostname}${e}`;return e}if(o&&"localhost"!==o)return`//${r.hostname}${n}`;return n}catch{return decodeURIComponent(e.slice(7))}},te=e=>{let{content:t}=e;return"string"==typeof t?t:t.map(e=>"text"===e.type?e.text:"").filter(Boolean).join("\n")},tt=(e,t)=>{let{content:r}=e;if(!Array.isArray(r))return[];let n=[];for(let e of r){if("image"!==e.type)continue;let r=e6(e.url),o=t({imageDetail:e.detail});if(r){if(r.startsWith("/")||r.startsWith("./")||r.startsWith("../")||r.startsWith("file://")){let e=r.startsWith("file://")?e9(r):r;n.push({type:"localImage",path:e,detail:o});continue}n.push({type:"image",url:r,detail:o})}}return n};class tr{static async create(){if(eH.ht)throw Error("codex app-server provider is not supported in browser runtime");let{spawn:e}=await r(39545)("node:child_process"),t=await r(57125)("node:readline"),n=e("codex",["app-server"],{stdio:["pipe","pipe","pipe"]});if(!n.stdin||!n.stdout||!n.stderr)throw Error("failed to start codex app-server: stdio unavailable");let o=t.createInterface({input:n.stdout,crlfDelay:1/0}),i=new tr(n,o);return i.detachFromEventLoop(),i.attachProcessListeners(),await i.initializeHandshake(),i}isClosed(){return this.closed}async runTurn(e){let t,r,n,o,{messages:i,resolveImageDetail:a,modelConfig:s,stream:l,onChunk:c,params:A,abortSignal:u,onRecordEvent:d}=e,p=!!(l&&c),{developerInstructions:h,input:m}=((e,t)=>{let r=[],n=[],o=[];for(let i of e){let e=(()=>{if("role"in i)return i;if("input-message"===i.type)return i.message;if("chat-completion"!==i.output.type)throw Error("Cannot replay Responses output in a Codex conversation");return{role:"assistant",content:i.output.rawValue.content??""}})(),{role:a}=e,s=te(e);if("system"===a){s.trim()&&r.push(s.trim());continue}let l=a.toUpperCase();s.trim()?n.push(`[${l}]
5
+ ${s.trim()}`):n.push(`[${l}]
6
+ (no text content)`),"user"===a&&o.push(...tt(e,t))}let i=n.join("\n\n"),a=[{type:"text",text:(i.length>262144?i.slice(-262144):i)||"Please answer the latest user request.",text_elements:[]},...o];return{developerInstructions:r.length?r.join("\n\n"):void 0,input:a}})(i,a),f="",g="",y=e=>{let{content:t,reasoning:r,isComplete:n,usage:o}=e;p&&c&&c({content:t,reasoning_content:r,accumulated:f,isComplete:n,usage:o})};try{var v,b,w,E,x,k,S,I,C;let e,i={model:s.modelName,cwd:e1.cwd(),approvalPolicy:"never",sandbox:"read-only",ephemeral:!0,experimentalRawEvents:!1,persistExtendedHistory:!1,developerInstructions:h||null};null==d||d({type:"request",protocol:{direction:"client",method:"thread/start",params:i}});let a=await this.request({method:"thread/start",params:i,abortSignal:u});if(null==d||d({type:"chunk",protocol:{direction:"server",method:"thread/start",result:a}}),!(t=null==a||null==(v=a.thread)?void 0:v.id))throw Error("thread/start did not return a thread id");let l={...A,threadId:t,input:m};null==d||d({type:"request",protocol:{direction:"client",method:"turn/start",params:l}});let c=await this.request({method:"turn/start",params:l,abortSignal:u});if(null==d||d({type:"chunk",protocol:{direction:"server",method:"turn/start",result:c}}),!(r=null==c||null==(b=c.turn)?void 0:b.id))throw Error("turn/start did not return a turn id");for(;!e;){let i=await this.nextMessage({abortSignal:u});if(this.isResponseMessage(i))continue;if(this.isRequestMessage(i)){await this.respondToServerRequest(i);continue}let a=i.method,s=i.params||{};if(s.threadId===t&&(s.turnId===r||(null==(w=s.turn)?void 0:w.id)===r)&&(null==d||d({type:"chunk",protocol:{direction:"server",method:a,params:s}})),"error"===a){let e=(null==(S=s.error)?void 0:S.message)||s.message||"codex app-server reported turn error";n=String(e);continue}if("item/agentMessage/delta"===a&&s.threadId===t&&s.turnId===r){let e=String(s.delta||"");e&&(f+=e,y({content:e,reasoning:"",isComplete:!1}));continue}if(("item/reasoning/summaryTextDelta"===a||"item/reasoning/textDelta"===a)&&s.threadId===t&&s.turnId===r){let e=String(s.delta||"");e&&(g+=e,y({content:"",reasoning:e,isComplete:!1}));continue}if("item/completed"===a&&s.threadId===t&&s.turnId===r&&(null==(E=s.item)?void 0:E.type)==="agentMessage"&&"string"==typeof(null==(x=s.item)?void 0:x.text)&&!f){f=s.item.text;continue}if("thread/tokenUsage/updated"===a&&s.threadId===t&&s.turnId===r){o=this.mapUsage(s);continue}if("turn/completed"===a&&s.threadId===t&&(null==(k=s.turn)?void 0:k.id)===r){e=String(s.turn.status||""),n=(null==(C=s.turn)||null==(I=C.error)?void 0:I.message)||n||void 0;break}}if("completed"!==e)throw Error(n||`codex turn finished with status "${e||"unknown"}"`);return p&&y({content:"",reasoning:"",isComplete:!0,usage:o}),{content:f,reasoning_content:g||void 0,usage:o,isStreamed:p,protocolMetadata:{transport:"json-rpc",threadId:t,turnId:r,turnStatus:e}}}catch(e){throw e8(e)&&t&&r&&await this.request({method:"turn/interrupt",params:{threadId:t,turnId:r},deadlineAt:Date.now()+5e3}).catch(()=>{}),e}finally{t&&await this.request({method:"thread/unsubscribe",params:{threadId:t},deadlineAt:Date.now()+8e3}).catch(e=>{e4(`failed to unsubscribe codex thread ${t}: ${String(e)}`)})}}async dispose(){var e,t,r,n,o,i,a;if(!this.closed){this.closed=!0;try{null==(t=this.lineReader)||null==(e=t.close)||e.call(t)}catch{}try{null==(o=this.child)||null==(n=o.stdin)||null==(r=n.end)||r.call(n)}catch{}try{null==(a=this.child)||null==(i=a.kill)||i.call(a)}catch{}}}attachProcessListeners(){this.lineReader.on("line",e=>{this.lineBuffer.push(e)}),this.child.stderr.on("data",e=>{let t=e2.isBuffer(e)?e.toString("utf8"):String(e);this.stderrBuffer+=t,this.stderrBuffer.length>8192&&(this.stderrBuffer=this.stderrBuffer.slice(-8192))}),this.child.on("exit",e=>{this.closed=!0,this.lastExitCode=e}),this.child.on("error",e=>{this.closed=!0,this.processErrorMessage=e.message})}detachFromEventLoop(){var e,t,r,n,o,i,a,s;null==(e=(t=this.child).unref)||e.call(t),null==(n=this.child.stdin)||null==(r=n.unref)||r.call(n),null==(i=this.child.stdout)||null==(o=i.unref)||o.call(i),null==(s=this.child.stderr)||null==(a=s.unref)||a.call(s)}async initializeHandshake(){let e=Date.now()+15e3;await this.request({method:"initialize",params:{clientInfo:{name:"midscene_codex_provider",title:"Midscene Codex Provider",version:"1.0.0"},capabilities:{experimentalApi:!1}},deadlineAt:e}),await this.sendMessage({method:"initialized"})}mapUsage(e){let t=e.tokenUsage,r=(null==t?void 0:t.last)||(null==t?void 0:t.total);if(r)return{prompt_tokens:r.inputTokens??0,completion_tokens:r.outputTokens??0,total_tokens:r.totalTokens??0,prompt_tokens_details:{cached_tokens:r.cachedInputTokens??0},completion_tokens_details:{reasoning_tokens:r.reasoningOutputTokens??0}}}isRequestMessage(e){return"string"==typeof(null==e?void 0:e.method)&&(null==e?void 0:e.id)!==void 0}isResponseMessage(e){return(null==e?void 0:e.id)!==void 0&&((null==e?void 0:e.result)!==void 0||(null==e?void 0:e.error)!==void 0)&&"string"!=typeof(null==e?void 0:e.method)}async request(e){let{method:t,params:r,deadlineAt:n,abortSignal:o}=e;null==o||o.throwIfAborted();let i=this.nextRequestId++;for(await this.sendMessage({id:i,method:t,params:r});;){let e=await this.nextMessage({deadlineAt:n,abortSignal:o,includePending:!1});if(this.isResponseMessage(e)&&e.id===i){if(e.error)throw Error(`codex app-server ${t} failed: ${e.error.message||"unknown error"}`);return e.result||{}}if(this.isRequestMessage(e)){await this.respondToServerRequest(e);continue}this.pendingMessages.push(e)}}async respondToServerRequest(e){let t=e.id,r=e.method,n={};if("item/commandExecution/requestApproval"===r)n={decision:"decline"};else if("item/fileChange/requestApproval"===r)n={decision:"decline"};else if("mcpServer/elicitation/request"===r)n={action:"cancel",content:null};else{if("item/tool/requestUserInput"!==r)return void await this.sendMessage({id:t,error:{code:-32601,message:`unsupported server request: ${r}`}});n={answers:[]}}await this.sendMessage({id:t,result:n})}async nextMessage(e){let{deadlineAt:t,abortSignal:r,includePending:n=!0}=e;if(n&&this.pendingMessages.length)return this.pendingMessages.shift();for(;;){if(null==r?void 0:r.aborted)throw Error("codex app-server request aborted");if(t&&Date.now()>t)throw Error("codex app-server request timed out");if(this.lineBuffer.length){let e,t=this.lineBuffer.shift().trim();if(!t)continue;try{e=JSON.parse(t)}catch(e){e4(`ignored non-JSON message from codex app-server: ${t}`);continue}return e}if(this.closed)throw this.createClosedConnectionError();await new Promise(e=>setTimeout(e,20))}}async sendMessage(e){if(this.closed)throw this.createClosedConnectionError();let t=JSON.stringify(e);await new Promise((e,r)=>{this.child.stdin.write(`${t}
7
+ `,t=>{t?r(Error(`failed writing to codex app-server stdin: ${t.message}`)):e()})})}createClosedConnectionError(){let e=this.stderrBuffer.trim();return this.processErrorMessage?Error(e?`codex app-server process error: ${this.processErrorMessage}. stderr=${e}`:`codex app-server process error: ${this.processErrorMessage}`):Error(e?`codex app-server connection closed (exitCode=${this.lastExitCode}). stderr=${e}`:`codex app-server connection closed (exitCode=${this.lastExitCode})`)}constructor(e,t){e3(this,"child",void 0),e3(this,"lineReader",void 0),e3(this,"pendingMessages",[]),e3(this,"lineBuffer",[]),e3(this,"nextRequestId",1),e3(this,"closed",!1),e3(this,"lastExitCode",null),e3(this,"processErrorMessage",null),e3(this,"stderrBuffer",""),this.child=e,this.lineReader=t}}let tn=new class{async runTurn(e){let{messages:t,resolveImageDetail:r,modelConfig:n,stream:o,onChunk:i,params:a,abortSignal:s,onRecordEvent:l}=e;return this.runner.run(async()=>{null==s||s.throwIfAborted();let e=await this.getConnection();null==s||s.throwIfAborted();try{return await e.runTurn({messages:t,resolveImageDetail:r,modelConfig:n,stream:o,onChunk:i,params:a,abortSignal:s,onRecordEvent:l})}catch(t){throw(e.isClosed()||!e8(t))&&await this.resetConnection(),t}})}async shutdownForTests(){await this.resetConnection()}async getConnection(){return(!this.connection||this.connection.isClosed())&&(this.connection=await tr.create(),e5("started long-lived codex app-server connection")),this.connection}async resetConnection(){if(!this.connection)return;let e=this.connection;this.connection=null,await e.dispose(),e5("reset codex app-server connection")}constructor(){e3(this,"connection",null),e3(this,"runner",new e7)}};async function to(e,t,r){if(eH.ht)throw Error("codex app-server provider is not supported in browser runtime");return tn.runTurn({messages:e,modelConfig:t,resolveImageDetail:r.resolveImageDetail,stream:null==r?void 0:r.stream,onChunk:null==r?void 0:r.onChunk,params:null==r?void 0:r.params,abortSignal:null==r?void 0:r.abortSignal,onRecordEvent:null==r?void 0:r.onRecordEvent})}let ti=async(e,t)=>{let{modelRuntime:r,options:n,recordEvent:o,requestSignal:i}=e,{messages:a,resolveImageDetail:s,requestParams:l}=t,{config:c}=r,A=0,u=Date.now(),d=o?e=>{if("chunk"===e.type){A+=1,o({...e,attempt:1,sequence:A,provider:"codex-app-server"});return}o({...e,attempt:1,provider:"codex-app-server"})}:void 0;try{let e=await to(a,c,{stream:null==n?void 0:n.stream,onChunk:null==n?void 0:n.onChunk,params:l,resolveImageDetail:s,abortSignal:i,onRecordEvent:d});i.throwIfAborted();let{protocolMetadata:t,usage:r,...A}=e,p=Date.now()-u;return null==o||o({type:"response",attempt:1,provider:"codex-app-server",final:{content:A.content,reasoningContent:A.reasoning_content,usage:r,timeCost:p,protocol:t}}),{...A,rawUsage:r,timeCost:p,requestId:t.turnId}}catch(e){throw null==o||o({type:"error",attempt:1,provider:"codex-app-server",error:e instanceof Error?{name:e.name,message:e.message,stack:e.stack}:String(e)}),e}};var ta=r(94504),ts=r(13078),tl=r.n(ts),tc=r(83198),tA=r(50217),tu=r(29368),td=r(85409);function tp(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let th=(0,e0.aZ)("ai:model-record",{console:!0});function tm(){if(eH.ht||eH.rS)return!1;let e=(0,tA.j)(tu._E);return"true"===e||"1"===e}let tf=new class{async initializeFilePath(){try{let e=tl().join((0,tc.y9)(),"model-requests");await (0,ta.mkdir)(e,{recursive:!0}),this.filePath=tl().join(e,`${this.processStartTime}-${td.pid}.jsonl`)}catch(e){th("Failed to initialize model call recorder",e)}return this.filePath}getFilePath(){return this.filePath||!tm()?Promise.resolve(this.filePath):(this.filePathPromise||(this.filePathPromise=this.initializeFilePath().finally(()=>{this.filePathPromise=void 0})),this.filePathPromise)}async writeEvent(e){let t=await this.getFilePath();t&&await (0,ta.appendFile)(t,`${JSON.stringify({timestamp:new Date().toISOString(),...e})}
8
+ `)}record(e){let t=this.writeQueue.then(()=>this.writeEvent(e));return this.writeQueue=t.catch(e=>{th("Failed to write model call record",e)}),this.writeQueue}constructor(){tp(this,"processStartTime",new Date().toISOString().replace(/[:.]/g,"-")),tp(this,"filePath",void 0),tp(this,"filePathPromise",void 0),tp(this,"writeQueue",Promise.resolve())}};function tg(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ty extends Error{constructor(e,t,r,n,o){super(e),tg(this,"usage",void 0),tg(this,"rawResponse",void 0),tg(this,"rawAssistantOutput",void 0),tg(this,"reasoningContent",void 0),this.name="AIResponseParseError",this.rawResponse=t,this.usage=r,this.rawAssistantOutput=n,this.reasoningContent=o}}let tv="_midscene_call_id",tb=0;function tw(e){try{return JSON.stringify(e)}catch(t){return String(e)}}function tE(e){return e instanceof Error?e:Error(String(e))}let tx=e=>"string"==typeof e&&e.trim().length>0,tk=e=>{try{let t=new URL(e);if(t.username)return t.password="****",t.href;return e}catch{return e}},tS=async e=>{let{socksProxy:t,httpProxy:n}=e,o=(0,e0.aZ)("ai:call:proxy",{console:!0}),i=(0,e0.aZ)("ai:call:proxy");if(n)if(i("using http proxy",tk(n)),eH.ht)o("HTTP proxy is configured but not supported in browser environment");else{let{loadUndici:e}=await r.e("749").then(r.bind(r,17964)),{ProxyAgent:t}=await e();return new t({uri:n})}else if(t)if(i("using socks proxy",tk(t)),eH.ht)o("SOCKS proxy is configured but not supported in browser environment");else try{let{loadFetchSocks:e}=await r.e("749").then(r.bind(r,17964)),{socksDispatcher:n}=await e(),o=new URL(t);if(!o.hostname)throw Error("SOCKS proxy URL must include a valid hostname");let a=Number.parseInt(o.port,10);if(!o.port||Number.isNaN(a))throw Error("SOCKS proxy URL must include a valid port");let s=o.protocol.replace(":",""),l="socks4"===s?4:5,c=n({type:l,host:o.hostname,port:a,...o.username?{userId:decodeURIComponent(o.username),password:decodeURIComponent(o.password||"")}:{}});return i("socks proxy configured successfully",{type:l,host:o.hostname,port:a}),c}catch(e){throw o("Failed to configure SOCKS proxy:",e),Error(`Invalid SOCKS proxy URL: ${t}. Expected format: socks4://host:port, socks5://host:port, or with authentication: socks5://user:pass@host:port`)}},tI=e=>{let{content:t,reasoningContent:r,useReasoningAsContentFallback:n}=e;return!tx(t)&&n&&tx(r)?((0,e0.aZ)("ai:call",{console:!0})("empty content from AI model, using reasoning content"),r):t},tC=async e=>{var t;let{completion:r,openAIRequestContext:n,extractContentAndReasoning:o,useReasoningAsContentFallback:i,requestBodyParams:a,requestSignal:s}=e;s.throwIfAborted();let l=await r.create({...a,stream:!1},{signal:s});s.throwIfAborted();let c=l._request_id??(null==(t=n.responseRequestId)?void 0:t.requestId);if(!l.choices)throw Error(`invalid response from LLM service: ${JSON.stringify(l)}`);let A={type:"chat-completion",rawValue:l.choices[0].message},u=o(l.choices[0].message),d=u.reasoning_content,p=tI({content:u.content,reasoningContent:d,useReasoningAsContentFallback:i});if(!tx(p))throw new ty("empty content from AI model",p||"",void 0,A);return{content:p,reasoningContent:d,rawAssistantOutput:A,rawUsage:l.usage,requestId:c,responseModelName:l.model}},tO=async e=>{var t,r,n;let o,i,{completion:a,openAIRequestContext:s,extractContentAndReasoning:l,useReasoningAsContentFallback:c,requestBodyParams:A,requestSignal:u,onChunk:d,recordEvent:p}=e;(0,eH.vA)("function"==typeof d,"onChunk is required when stream is true");let h="",m="";u.throwIfAborted();let f=a.stream({...A,stream_options:{...A.stream_options,include_usage:!0}},{signal:u}),g=0;for await(let e of f){u.throwIfAborted(),g+=1,null==p||p({type:"chunk",sequence:g,chunk:e});let t=l(null==(n=e.choices)||null==(r=n[0])?void 0:r.delta),a=t.content||"",s=t.reasoning_content||"";e.usage&&(o=e.usage),e.model&&(i=e.model),(a||s)&&(h+=a,m+=s,d({content:a,reasoning_content:s,accumulated:h,isComplete:!1,usage:void 0}))}let y=(await f.finalChatCompletion()).choices[0].message,v=null==(t=s.responseRequestId)?void 0:t.requestId;return d({content:"",accumulated:h=tI({content:h,reasoningContent:m,useReasoningAsContentFallback:c})||"",reasoning_content:"",isComplete:!0,usage:o}),{content:h,reasoningContent:m,rawAssistantOutput:{type:"chat-completion",rawValue:y},rawUsage:o,requestId:v,responseModelName:i}},tR=async e=>{var t;let{messages:r,modelRuntime:n,options:o}=e,i=(0,e0.aZ)("ai:call"),{config:a,adapter:s}=n,l={intent:a.intent,userConfig:{temperature:a.temperature,reasoningEnabled:a.reasoningEnabled,reasoningEffort:a.reasoningEffort,reasoningBudget:a.reasoningBudget,responseFormat:a.responseFormat},semanticRetryAttempt:null==o?void 0:o.semanticRetryAttempt,requiresOriginalImageDetail:null==o?void 0:o.requiresOriginalImageDetail,expectedJsonObjectResponse:null==o?void 0:o.expectedJsonObjectResponse},{config:c}=s.chatCompletion.buildChatCompletionParams(l);i(`adapter chat completion params: ${tw({config:c})}`);let A={model:a.modelName,messages:(t=e=>{let{imageDetail:t}=e;return s.resolveImageDetail({imageDetail:t,intent:a.intent,requiresOriginalImageDetail:null==o?void 0:o.requiresOriginalImageDetail})},r.map(e=>{if("type"in e&&"model-output"===e.type){if("chat-completion"!==e.output.type)throw Error("Cannot replay Responses output in a Chat Completions conversation");return e.output.rawValue}let r="role"in e?e:e.message;return{role:r.role,content:"string"==typeof r.content?r.content:r.content.map(e=>"text"===e.type?{type:"text",text:e.text}:{type:"image_url",image_url:{url:e.url,detail:t({imageDetail:e.detail})}})}})),...c,...a.extraBody??{}},u=await tS({socksProxy:a.socksProxy,httpProxy:a.httpProxy});return{requestParams:A,extractContentAndReasoning:s.chatCompletion.extractContentAndReasoning,useReasoningAsContentFallback:s.chatCompletion.useReasoningAsContentFallback,proxyAgent:u}},tj=()=>{let e=(0,tA.j)(tu.v4),t="";e&&(console.warn("MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),t="ai:profile"),(0,tA.j)(tu.$l)&&(console.warn("MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),t=t?"ai:*":"ai:call"),t&&(0,e0.Nw)(t)};var tP=r(85409);function tM(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let tT={modelName:tu._q,socksProxy:tu.T4,httpProxy:tu.Yf,openaiBaseURL:tu.kX,openaiApiKey:tu.Lh,openaiExtraConfig:tu.Z7,extraBody:tu.Pm,protocol:tu.ju,streamMode:tu.R9,modelFamily:tu.v,timeout:tu.Yg,temperature:tu.V7,retryCount:tu.vC,retryInterval:tu.xg,reasoningEffort:tu.y2,reasoningEnabled:tu.nc,reasoningBudget:tu.fS,responseFormat:tu.k8},tN={modelName:tu.SP,socksProxy:tu.l8,httpProxy:tu.S7,openaiBaseURL:tu.AW,openaiApiKey:tu.lp,openaiExtraConfig:tu.hC,extraBody:tu.Tf,protocol:tu.Js,streamMode:tu.pG,modelFamily:tu.Jm,timeout:tu.a0,temperature:tu.fF,retryCount:tu.mk,retryInterval:tu.T8,reasoningEffort:tu.Qu,reasoningEnabled:tu.VY,reasoningBudget:tu.Xx,responseFormat:tu.EH},tD={modelName:tu.xP,socksProxy:tu.mZ,httpProxy:tu.zQ,openaiBaseURL:tu.zG,openaiApiKey:tu.OK,openaiExtraConfig:tu.ag,extraBody:tu.WH,protocol:tu.kb,streamMode:tu.Gl,modelFamily:tu.OY,timeout:tu.Z$,temperature:tu.Cn,retryCount:tu.sg,retryInterval:tu.wu,reasoningEffort:tu.Vb,reasoningEnabled:tu.u1,reasoningBudget:tu.aO,responseFormat:tu.lV},tz={modelName:tu.HR,socksProxy:tu.iw,httpProxy:tu.FU,openaiBaseURL:tu.$H,openaiApiKey:tu.IQ,openaiExtraConfig:tu.I2,extraBody:tu.G0,protocol:tu.CR,streamMode:tu.cD,modelFamily:tu.yR,timeout:tu.zD,temperature:tu.W4,retryCount:tu.Km,retryInterval:tu.aK,reasoningEffort:tu.VM,reasoningEnabled:tu.M1,reasoningBudget:tu.AU,responseFormat:tu.fh},tB=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"*";if("string"!=typeof e||0===e.length)return e;if(e.length<=6)return e;let r=e.substring(0,3),n=e.substring(e.length-3),o=e.length-6,i=t.repeat(o);return`${r}${i}${n}`},tF=e=>Object.fromEntries(Object.entries(e).map(e=>{let[t,r]=e;if(!r)return[t,r];if("string"==typeof r&&/key/i.test(t))return[t,tB(r)];if("object"==typeof r){let e=JSON.stringify(r);if(/key/i.test(e))return[t,tB(e)]}return[t,r]})),tL=(e,t)=>{if(t)try{return JSON.parse(t)}catch(t){throw Error(`Failed to parse ${e} as a JSON. ${t.message}`,{cause:t})}},tU={locate:tN,insight:tT,planning:tD,default:tz},tK=(e,t)=>{let r=(0,e0.aZ)("ai:config");r("will decideModelConfig base on agent.modelConfig()",e,tF(t));let n=tU[e];if(!t[n.modelName])return void r("no modelName found for intent",e);let o=(e=>{var t,r,n;let o,{keys:i,provider:a,useLegacyLogic:s=!1}=e;tj(),(0,e0.aZ)("ai:config")("enter parseOpenaiSdkConfig with keys:",i);let l=s?a[tu.Jq]:void 0,c=s?a[tu.jG]:void 0,A=s?a[tu.$]:void 0,u=s?a[tu.CA]:void 0,d=s?a[tu.b6]:void 0,p=s?(e=>{let t=e[tu.pp],r=e[tu.yb],n=e[tu.NF],o=e[tu.JM],i=e[tu.j_],a=[t&&tu.pp,r&&tu.yb,n&&tu.NF,o&&tu.JM,i&&tu.j_].filter(Boolean);if(a.length>1)throw Error(`Only one vision mode can be enabled at a time. Currently enabled modes: ${a.join(", ")}. Please disable all but one mode.`);if(n)return"qwen3-vl";if(r)return"qwen2.5-vl";if(t)return"doubao-vision";if(i)return"gemini";if(o)if("1"===o)return"vlm-ui-tars";else if("DOUBAO"===o||"DOUBAO-1.5"===o)return"vlm-ui-tars-doubao-1.5";else return"vlm-ui-tars-doubao"})(a):void 0,h=a[i.modelFamily]||p,m=a[i.openaiApiKey]||l,f=a[i.openaiBaseURL]||c,g=a[i.socksProxy]||A,y=a[i.httpProxy]||u,v=a[i.modelName],b=a[i.openaiExtraConfig],w=tL(i.openaiExtraConfig,b||d),E=a[i.extraBody],x=tL(i.extraBody,E),k=(e=>{if(void 0===e||""===e)return;let t=Number(e);return Number.isFinite(t)?t:void 0})(a[i.temperature]);if(h&&!tu._j.includes(h))throw Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${h}. Current version v1.16.1 accepts the following model families: ${tu._j.join(", ")}. You can also visit https://midscenejs.com/model-common-config.html for the latest configuration information.`);let S="vlm-ui-tars"===h?tu.UH.V1_0:"vlm-ui-tars-doubao"===h||"vlm-ui-tars-doubao-1.5"===h?tu.UH.DOUBAO_1_5_20B:void 0,I=S?`UI-TARS=${S}`:h?`${h} mode`:"";return{socksProxy:g,httpProxy:y,openaiBaseURL:f,openaiApiKey:m,openaiExtraConfig:(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return;let{defaultHeaders:t,extra_headers:r,extraHeaders:n,...o}=e,i=t??r??n;return void 0!==i?{...o,defaultHeaders:i}:o})(w),extraBody:x,protocol:(()=>{let e=a[i.protocol];if(void 0!==e){if("openai-chat"===e||"openai-responses"===e)return e;throw Error(`${i.protocol} must be one of: openai-chat, openai-responses. Got: ${e}`)}})(),modelFamily:h,uiTarsModelVersion:S,modelName:v,modelDescription:I,intent:"-",slot:"-",timeout:(()=>{let e=a[i.timeout];if(void 0===e)return;let t=Number(e);if(""===e.trim()||!Number.isFinite(t)||t<0)throw Error(`${i.timeout} must be a finite number greater than or equal to 0, got ${JSON.stringify(e)}`);return t})(),temperature:k,streamMode:(()=>{var e;let t=(null==(e=a[i.streamMode])?void 0:e.trim())??"non-stream";if("stream"===t||"non-stream"===t)return t;throw Error(`Invalid ${i.streamMode}: "${t}". Expected "stream" or "non-stream".`)})(),retryCount:(()=>{if(!a[i.retryCount])return 1;let e=Number(a[i.retryCount]);if(!Number.isFinite(e))return 1;if(e<0)throw Error(`${i.retryCount} must be non-negative, got ${e}`);return e})(),retryInterval:(()=>{if(!a[i.retryInterval])return 2e3;let e=Number(a[i.retryInterval]);if(!Number.isFinite(e))return 2e3;if(e<0)throw Error(`${i.retryInterval} must be non-negative, got ${e}`);return e})(),reasoningEffort:(null==(t=a[i.reasoningEffort])?void 0:t.trim())||void 0,reasoningEnabled:"true"===(o=null==(n=a[i.reasoningEnabled])||null==(r=n.trim())?void 0:r.toLowerCase())||"1"===o||"false"!==o&&"0"!==o&&("default"===o?"default":void 0),reasoningBudget:(()=>{var e;let t=null==(e=a[i.reasoningBudget])?void 0:e.trim();if(!t)return;let r=Number(t);return Number.isFinite(r)?r:void 0})(),responseFormat:(()=>{var e,t;let r=null==(t=a[i.responseFormat])||null==(e=t.trim())?void 0:e.toLowerCase();if(!r||"auto"===r)return"auto";if("none"===r)return"none";throw Error(`${i.responseFormat} must be one of: none, auto. Got: ${r}`)})()}})({keys:n,provider:t,useLegacyLogic:"default"===e});return o.intent=e,o.slot=e,r("decideModelConfig result by agent.modelConfig() with intent",e,tF({...o})),(0,eH.vA)(o.openaiBaseURL,`failed to get base URL of model (intent=${e}). See https://midscenejs.com/model-strategy`),o.modelName||console.warn(`modelName is not set for intent ${e}, this may cause unexpected behavior. See https://midscenejs.com/model-strategy`),o};function tZ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class tJ{initialize(){var e;let t;if(this.isInitialized)return;this.modelConfig?(this.isolatedMode=!0,t=this.normalizeModelConfig(this.modelConfig)):t=(null==(e=this.globalConfigManager)?void 0:e.getAllEnvConfig())||{};let r=tK("default",t);if(!r)throw Error("Model configuration is incomplete: model name (MIDSCENE_MODEL_NAME) is required. See https://midscenejs.com/model-strategy.html");if("jev"===r.modelFamily)throw Error("Jev cannot be the default model. Configure a general-purpose MIDSCENE_MODEL_FAMILY and use Jev in Locate, Planning, or Insight.");let n=tK("insight",t),o=tK("planning",t),i=tK("locate",t);this.modelConfigMap={default:{...r,intent:"default",slot:"default",createOpenAIClient:this.createOpenAIClientFn},locate:{...i||r,intent:"locate",slot:i?"locate":"default",createOpenAIClient:this.createOpenAIClientFn},insight:{...n||r,intent:"insight",slot:n?"insight":"default",createOpenAIClient:this.createOpenAIClientFn},planning:{...o||r,intent:"planning",slot:o?"planning":"default",createOpenAIClient:this.createOpenAIClientFn}},this.isInitialized=!0}normalizeModelConfig(e){return Object.entries(e).reduce((e,t)=>{let[r,n]=t;return null==n||(e[r]=String(n)),e},Object.create(null))}clearModelConfigMap(){if(this.isolatedMode)throw Error("ModelConfigManager work in isolated mode, so clearModelConfigMap should not be called");this.isInitialized=!1}getModelConfig(e){if(this.isInitialized||this.initialize(),!this.modelConfigMap)throw Error("modelConfigMap is not initialized, which should not happen");return this.modelConfigMap[e]}getUploadTestServerUrl(){let{openaiExtraConfig:e}=this.getModelConfig("default");return null==e?void 0:e.REPORT_SERVER_URL}registerGlobalConfigManager(e){this.globalConfigManager=e}throwErrorIfNonVLModel(){let e=this.getModelConfig("locate");if(!e.modelFamily)throw Error(`${"locate"===e.slot?"MIDSCENE_LOCATE_MODEL_FAMILY":"MIDSCENE_MODEL_FAMILY"} is not set to a multimodal model with UI localization, so element localization cannot be achieved. Check your model configuration. See https://midscenejs.com/model-strategy.html`)}constructor(e,t){tZ(this,"modelConfigMap",void 0),tZ(this,"isInitialized",!1),tZ(this,"isolatedMode",!1),tZ(this,"globalConfigManager",void 0),tZ(this,"modelConfig",void 0),tZ(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let tQ=new tJ,tq=new class{getAllEnvConfig(){let e=tu.tk.reduce((e,t)=>(e[t]=tP.env[t],e),Object.create(null));if(!this.override)return e;{let{newConfig:t,extendMode:r}=this.override;return r?{...e,...t}:{...t}}}getEnvConfigValue(e){let t=this.getAllEnvConfig();if(e===tu.Sk)throw Error("MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead");if(!tu.rd.includes(e))throw Error(`getEnvConfigValue with key ${e} is not supported.`);let r=t[e];return(this.keysHaveBeenRead[e]=!0,"string"==typeof r)?r.trim():r}getEnvConfigInBoolean(e){let t=this.getAllEnvConfig();if(!tu.c$.includes(e))throw Error(`getEnvConfigInBoolean with key ${e} is not supported`);let r=t[e];return this.keysHaveBeenRead[e]=!0,!!r&&(!!/^(true|1)$/i.test(r)||!/^(false|0)$/i.test(r)&&!!r.trim())}getEnvConfigValueAsNumber(e){if(!tu.rd.includes(e)&&!tu.DL.includes(e))throw Error(`getEnvConfigValueAsNumber with key ${e} is not supported.`);let t=this.getAllEnvConfig()[e];if(this.keysHaveBeenRead[e]=!0,"string"!=typeof t)return;let r=t.trim();if(!r)return;let n=Number(r);return Number.isNaN(n)?void 0:n}registerModelConfigManager(e){this.globalModelConfigManager=e}overrideAIConfig(e){var t;let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];for(let t in e){if(![...tu.Lg,...tu.XE].includes(t))throw Error(`Failed to override AI config, invalid key: ${t}`);let r=e[t];if("string"!=typeof r)throw Error(`Failed to override AI config, value for key ${t} must be a string, but got with type ${typeof r}`);this.keysHaveBeenRead[t]&&console.warn(`Warning: try to override AI config with key ${t} ,but it has been read.`)}let n=r?{...null==(t=this.override)?void 0:t.newConfig,...e}:e;if(this.override={newConfig:{...n},extendMode:r},!this.globalModelConfigManager)throw Error("globalModelConfigManager is not registered, which should not happen");this.globalModelConfigManager.clearModelConfigMap()}constructor(){tM(this,"override",void 0),tM(this,"keysHaveBeenRead",{}),tM(this,"globalModelConfigManager",void 0),tj()}};tq.registerModelConfigManager(tQ),tQ.registerGlobalConfigManager(tq);let tX=()=>{let e=tq.getEnvConfigValue(tu.El);return e?e:"Asia/Shanghai"===Intl.DateTimeFormat().resolvedOptions().timeZone?"Chinese":"English"},tW=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];tq.overrideAIConfig(e,t)};var tH=r(35966),tY=r(13009),tG=r(76970);r(35207);var tV=r(1344);let t$="undefined"!=typeof __MIDSCENE_REPORT_BUILD__&&__MIDSCENE_REPORT_BUILD__;var t_=r(8963).Buffer,t0=r(85409);let t1=new Map,t2=new Map;function t3(){if(t$)return"";let e="REPLACE_ME_WITH_REPORT_HTML";if(e.includes("REPLACE_ME_WITH_REPORT_HTML"))throw Error('Report template contains an unresolved placeholder. Build Report with "pnpm exec nx build @midscene/report", or run "pnpm --filter @midscene/core sync-report-template" if apps/report/dist/index.html already exists.');return e}function t5(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
9
+ ${e.slice(r)}`}function t4(e,t,r){let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3];if(t$)return"";let o="";if(n&&!(o=t3()))return console.warn("reportTpl is not set, will not write report"),"";let i=t&&!eH.ht,a="",s="<\/script>";if("string"==typeof e)a='<script type="midscene_web_dump" type="application/json" data-group-id="'+encodeURIComponent((()=>{if(!t||!r)return(0,eH.uR)();let e=t2.get(t);if(e)return e;let n=(0,eH.uR)();return t2.set(t,n),n})())+'">\n'+(0,eH.NB)(e)+"\n"+s;else{let{dumpString:t,attributes:r}=e;a='<script type="midscene_web_dump" type="application/json" '+Object.entries(r||{}).filter(e=>void 0!==e[1]&&null!==e[1]).map(e=>{let[t,r]=e;return`${t}="${encodeURIComponent(r)}"`}).join(" ")+">\n"+(0,eH.NB)(t)+"\n"+s}return i?(r?(t1.get(t)||((0,tG.writeFileSync)(t,o,{flag:"w"}),t1.set(t,!0)),!function(e,t){let r="</html>",n=(0,tG.statSync)(e),o=Math.min(n.size,4096),i=Math.max(0,n.size-o),a=t_.alloc(n.size-i),s=(0,tG.openSync)(e,"r");(0,tG.readSync)(s,a,0,a.length,i),(0,tG.closeSync)(s);let l=a.toString("utf8"),c=l.lastIndexOf(r);if(-1===c)throw Error(`No </html> found in file:${e}`);let A=l.slice(0,c),u=i+t_.byteLength(A,"utf8");(0,tG.truncateSync)(e,u),(0,tG.appendFileSync)(e,`${t}
10
+ ${r}
11
+ `)}(t,a)):(0,tG.writeFileSync)(t,t5(o,a),{flag:"w"}),t):t5(o,a)}function t7(){return"1.16.1"}function t8(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];t0.env[tu.n0]&&console.log("[Midscene]",...t)}let t6=null,t9="";async function re(e){let{testUrl:t,serverUrl:r}=e;if(!r)return;let{repoUrl:n,userEmail:o}=await function(){if(t6)return t6;let e=(0,tV.promisify)(tY.execFile);return t6=Promise.all([e("git",["config","--get","remote.origin.url"]).then(e=>{let{stdout:t}=e;return t.trim()},()=>""),e("git",["config","--get","user.email"]).then(e=>{let{stdout:t}=e;return t.trim()},()=>"")]).then(e=>{let[t,r]=e;return{repoUrl:t,userEmail:r}})}();(n?n!==t9:t)&&(t8("Uploading test info to server",{serverUrl:r,repoUrl:n,testUrl:t,userEmail:o}),fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo_url:n,test_url:t,user_email:o})}).then(e=>e.json()).then(e=>{t8("Successfully uploaded test info to server:",e)}).catch(e=>t8("Failed to upload test info to server:",e)),t9=n)}let rt=(0,e0.aZ)("ai:call");function rr(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated, ${e.length} chars total]`}function rn(e){if(e instanceof Error){let t=function(e){if(!e||"object"!=typeof e)return;let t=e.code;return"string"==typeof t?t:void 0}(e),r=t?` [${t}]`:"";return`${e.name}${r}: ${e.message}`}return String(e)}let ro=async e=>{let t,{openaiBaseURL:n,openaiApiKey:o,openaiExtraConfig:i,createOpenAIClient:a,effectiveTimeoutMs:s,proxyAgent:l,executionId:c,openAIRequestContext:A}=e,u=(0,e0.aZ)("ai:call",{console:!0}),d={baseURL:n,apiKey:o,...l?{fetchOptions:{dispatcher:l}}:{},...i,defaultHeaders:{...null==i?void 0:i.defaultHeaders,"x-midscene-version":t7(),"x-midscene-execution-id":c},fetch:(t=function(){if("function"==typeof globalThis.fetch)return globalThis.fetch;throw Error("`fetch` is not defined as a global; check that the runtime provides globalThis.fetch or polyfill it before creating the OpenAI client")}(),async(e,r)=>{var n,o,i;let a;if(A.recordEvent){let t=new Request(e,r);A.recordEvent({type:"request",request:{url:t.url,method:t.method,body:await t.clone().text().catch(()=>void 0)}})}try{a=await t(e,r)}catch(o){let e,t,r=(e=[rn(o)],void 0!==(t=o&&"object"==typeof o?o.cause:void 0)&&e.push(`Cause: ${rn(t)}`),rr(e.join("\n"),4e3));throw rt("OpenAI-compatible fetch failed",r),A.fetchError=r,null==(n=A.recordEvent)||n.call(A,{type:"error",error:r}),o}let s=a.headers.get("x-request-id")??a.headers.get("x-model-request-id");if(s&&(A.responseRequestId={requestId:s,status:a.status,ok:a.ok}),a.ok||(A.rawResponseBody=await a.clone().text().catch(()=>void 0)),A.recordEvent){let e,t=(null==(o=a.headers.get("content-type"))?void 0:o.includes("text/event-stream"))?void 0:await a.clone().text().catch(()=>void 0),r={status:a.status,ok:a.ok,headers:(i=a.headers,e=[],new Headers(i).forEach((t,r)=>e.push([r,t])),e),...void 0===t?{}:{body:t}};A.httpResponse=r,a.ok||A.recordEvent({type:"error",...r})}return a}),maxRetries:0,...null!==s?{timeout:s}:{},dangerouslyAllowBrowser:!0},p=new tH.Ay(d),h=p;if(h&&tq.getEnvConfigInBoolean(tu.ZX)){if(eH.ht)throw Error("langsmith is not supported in browser");u("DEBUGGING MODE: langsmith wrapper enabled");let{wrapOpenAI:e}=await r(8297)("langsmith/wrappers");h=e(h)}if(h&&tq.getEnvConfigInBoolean(tu.$L)){if(eH.ht)throw Error("langfuse is not supported in browser");u("DEBUGGING MODE: langfuse wrapper enabled");let{observeOpenAI:e}=await r(54593)("@langfuse/openai");h=e(h)}if(a){let e=await a(p,d);e&&(h=e)}return h};async function ri(e){let{modelConfig:t,proxyAgent:r,effectiveTimeoutMs:n,executionId:o,recordEvent:i}=e,{openaiBaseURL:a,openaiApiKey:s,openaiExtraConfig:l,createOpenAIClient:c}=t,A={recordEvent:i};return{openai:await ro({openaiBaseURL:a,openaiApiKey:s,openaiExtraConfig:l,createOpenAIClient:c,effectiveTimeoutMs:n,proxyAgent:r,executionId:o,openAIRequestContext:A}),openAIRequestContext:A}}function ra(e){var t,r;if("completed"!==e.status)throw Error(`Responses request ${e.status}: ${(null==(t=e.error)?void 0:t.message)??(null==(r=e.incomplete_details)?void 0:r.reason)??"response did not complete"}`);return{content:e.output.flatMap(e=>"message"===e.type?e.content.flatMap(e=>"output_text"===e.type?[e.text]:[]):[]).join(""),reasoningContent:e.output.flatMap(e=>{var t;return"reasoning"!==e.type?[]:((null==(t=e.content)?void 0:t.length)?e.content:e.summary).map(e=>e.text)}).join(""),rawAssistantOutput:{type:"responses",rawValue:e.output},rawUsage:function(e){if(e)return{prompt_tokens:e.input_tokens,completion_tokens:e.output_tokens,total_tokens:e.total_tokens,prompt_tokens_details:e.input_tokens_details,completion_tokens_details:e.output_tokens_details}}(e.usage),responseModelName:e.model}}async function rs(e){var t;let{responses:r,requestBodyParams:n,requestSignal:o,openAIRequestContext:i}=e;o.throwIfAborted();let a=await r.create({...n,stream:!1},{signal:o});o.throwIfAborted();let s=ra(a);if(!tx(s.content))throw new ty("empty content from AI model",s.content,void 0,s.rawAssistantOutput);return{...s,requestId:a._request_id??(null==(t=i.responseRequestId)?void 0:t.requestId)}}async function rl(e){var t,r;let n,{responses:o,requestBodyParams:i,requestSignal:a,openAIRequestContext:s,onChunk:l,recordEvent:c}=e;(0,eH.vA)("function"==typeof l,"onChunk is required when stream is true"),a.throwIfAborted();let{data:A,request_id:u}=await o.create({...i,stream:!0},{signal:a}).withResponse(),d="",p=new Map,h=0;for await(let e of A){if(a.throwIfAborted(),null==c||c({type:"chunk",sequence:++h,chunk:e}),"error"===e.type)throw Error(e.message);("response.failed"===e.type||"response.incomplete"===e.type)&&ra(e.response),"response.output_item.done"===e.type&&p.set(e.output_index,e.item),"response.completed"===e.type&&(n=e.response);let t="response.output_text.delta"===e.type?e.delta:"",r="response.reasoning_summary_text.delta"===e.type||"response.reasoning_text.delta"===e.type?e.delta:"";(t||r)&&(d+=t,l({content:t,reasoning_content:r,accumulated:d,isComplete:!1}))}a.throwIfAborted(),(0,eH.vA)(n,"Responses stream ended without a completed response");let m=ra((null==(t=n.output)?void 0:t.length)?n:{...n,output:[...p.entries()].sort((e,t)=>{let[r]=e,[n]=t;return r-n}).map(e=>{let[,t]=e;return t})});if(!tx(m.content))throw new ty("empty content from AI model",m.content,void 0,m.rawAssistantOutput);return l({content:"",reasoning_content:"",accumulated:m.content,isComplete:!0,usage:m.rawUsage}),{...m,requestId:u??(null==(r=s.responseRequestId)?void 0:r.requestId)}}async function rc(e){var t;let{messages:r,modelRuntime:n,options:o}=e,i=(0,e0.aZ)("ai:call"),{config:a,adapter:s}=n,l={intent:a.intent,userConfig:{temperature:a.temperature,reasoningEnabled:a.reasoningEnabled,reasoningEffort:a.reasoningEffort,reasoningBudget:a.reasoningBudget,responseFormat:a.responseFormat},semanticRetryAttempt:null==o?void 0:o.semanticRetryAttempt,requiresOriginalImageDetail:null==o?void 0:o.requiresOriginalImageDetail,expectedJsonObjectResponse:null==o?void 0:o.expectedJsonObjectResponse},{config:c}=s.responses.buildResponsesParams(l);i(`adapter responses params: ${tw({config:c})}`);let A={...c,...a.extraBody};if(!0===A.background)throw Error("Responses background mode is not supported");return{requestParams:{store:!1,...A,model:a.modelName,input:(t=e=>{let{imageDetail:t}=e;return s.resolveImageDetail({imageDetail:t,intent:a.intent,requiresOriginalImageDetail:null==o?void 0:o.requiresOriginalImageDetail})},r.flatMap(e=>{if("type"in e&&"model-output"===e.type){if("responses"!==e.output.type)throw Error("Cannot replay Chat Completions output in a Responses conversation");return e.output.rawValue}let r="role"in e?e:e.message;return"string"==typeof r.content?[{role:r.role,content:r.content}]:"assistant"===r.role?[{role:r.role,content:r.content.map(e=>e.text).join("")}]:[{role:r.role,content:r.content.map(e=>"text"===e.type?{type:"input_text",text:e.text}:{type:"input_image",image_url:e.url,detail:t({imageDetail:e.detail})})}]}))},proxyAgent:await tS({socksProxy:a.socksProxy,httpProxy:a.httpProxy})}}async function rA(e,t){var r,n,o;let{modelRuntime:i,options:a,executionId:s,recordEvent:l,requestSignal:c,effectiveTimeoutMs:A}=e,{config:u}=i,{modelName:d}=u,p=(null==a?void 0:a.stream)??"stream"===u.streamMode,{openai:h,openAIRequestContext:m}=await ri({modelConfig:u,proxyAgent:t.input.proxyAgent,effectiveTimeoutMs:A,executionId:s,recordEvent:l}),f=(0,e0.aZ)("ai:call");f(`sending ${p?"streaming ":""}request to ${d}`);let g={requestSignal:c,openAIRequestContext:m,onChunk:(null==a?void 0:a.onChunk)??(()=>void 0),recordEvent:l};try{let e=Date.now(),{reasoningContent:o,...i}="responses"===t.protocol?await (r={...g,responses:h.responses,requestBodyParams:t.input.requestParams},p?rl(r):rs(r)):await (n={...g,completion:h.chat.completions,requestBodyParams:t.input.requestParams,extractContentAndReasoning:t.input.extractContentAndReasoning,useReasoningAsContentFallback:t.input.useReasoningAsContentFallback},p?tO(n):tC(n));c.throwIfAborted();let a=Date.now()-e;return f(`response reasoning content: ${o}`),f(`response content: ${i.content}`),null==l||l({type:"response",http:m.httpResponse,final:{content:i.content,reasoningContent:o,usage:i.rawUsage,requestId:i.requestId,timeCost:a,responseModelName:i.responseModelName}}),{...i,reasoning_content:o,isStreamed:p,timeCost:a}}catch(e){if((null==(o=m.httpResponse)?void 0:o.ok)&&(null==l||l({type:"error",...m.httpResponse,error:e instanceof Error?e.message:String(e)})),(0,e0.aZ)("ai:call",{console:!0})("call AI error",e),e instanceof ty)throw e;throw Error(`failed to call ${p?"streaming ":""}AI model service (${d}): ${e.message}${function(e,t){let r=[];if(void 0!==t.rawResponseBody&&r.push(`OpenAI raw error response body: ${rr(t.rawResponseBody,4e3)}`),t.responseRequestId&&!t.responseRequestId.ok){let{requestId:e,status:n}=t.responseRequestId;r.push(`OpenAI error response request ID (status ${n}): ${e}`)}return(void 0!==t.fetchError&&r.push(`OpenAI fetch error: ${t.fetchError}`),r.length)?`
12
+ ${r.join("\n")}`:""}(0,m)}
13
+ Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:e})}}function ru(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class rd extends Error{constructor(e){super(`AI call hard timeout after ${e}ms (full request time exceeded)`),ru(this,"timeoutMs",void 0),ru(this,"code",void 0),this.timeoutMs=e,this.code="AI_CALL_HARD_TIMEOUT",this.name="AIRequestTimeoutError"}}async function rp(e,t){let r;e.throwIfAborted();let n=new Promise((t,n)=>{r=()=>n(e.reason),e.addEventListener("abort",r,{once:!0})});try{return await Promise.race([t(),n])}finally{r&&e.removeEventListener("abort",r)}}function rh(e,t){return null==t||t.throwIfAborted(),new Promise((r,n)=>{let o=()=>{clearTimeout(a),null==t||t.removeEventListener("abort",i)},i=()=>{o(),n(null==t?void 0:t.reason)},a=setTimeout(()=>{o(),r()},e);null==t||t.addEventListener("abort",i,{once:!0})})}var rm=r(88403);let rf=rm.ai().min(0).max(1),rg=rm.gM("type",[rm.Ik({type:rm.eu("noul"),noul:rf}),rm.Ik({type:rm.eu("choice"),choice:rm.Yj()}),rm.Ik({type:rm.eu("box"),box:rm.Ik({left:rf,right:rf,top:rf,bottom:rf}).refine(e=>e.left<e.right&&e.top<e.bottom,"Invalid box edges")})]),ry=rm.Ik({model:rm.Yj().optional(),answers:rm.g1(rg),usage:rm.Ik({input_tokens:rm.ai().nonnegative().nullable().optional(),output_tokens:rm.ai().nonnegative().nullable().optional()}).optional()});async function rv(e,t){var r;(0,eH.vA)(e.openaiBaseURL,"Jev requires MIDSCENE_*_MODEL_BASE_URL"),(0,eH.vA)(e.openaiApiKey,"Jev requires MIDSCENE_*_MODEL_API_KEY"),(0,eH.vA)(!e.protocol||"openai-chat"===e.protocol,"Jev uses System One, not the Responses API");let n=e.openaiBaseURL.replace(/\/+$/,""),o=`${n}${n.endsWith("/v1")?"":"/v1"}/systemone`,i="openrouter.ai"===new URL(n).hostname,a={},s=Object.fromEntries(Object.entries(t.images??{}).map(e=>{let[t,r]=e;if(i)return[t,{type:"image_url",image_url:{url:r}}];let n=(0,eH.uR)(),o=/^data:image\/(png|jpeg);base64,(.+)$/.exec(r);return(0,eH.vA)(o,"System One images must be prepared PNG or JPEG data URLs"),a[n]={type:"image",format:"png"===o[1]?"png":"jpg",data_base64:o[2]},[t,n]})),l=JSON.stringify({...e.extraBody,model:e.modelName,state:{...t.state,...s},questions:t.questions,...!i&&Object.keys(a).length?{assets:a}:{}});return(0,eH.vA)(new TextEncoder().encode(l).length<=0x2000000,"Jev request exceeds the 32 MiB body limit"),{url:o,body:l,questions:t.questions,headers:{...null==(r=e.openaiExtraConfig)?void 0:r.defaultHeaders,Authorization:`Bearer ${e.openaiApiKey}`,"Content-Type":"application/json","TypeSafe-Danger-Zone-Images":"true"},dispatcher:await tS({socksProxy:e.socksProxy,httpProxy:e.httpProxy})}}async function rb(e,t){var r,n,o,i,a,s,l,c;(0,eH.vA)(!(null==(r=e.options)?void 0:r.stream),"Jev does not support streaming output");let A=Date.now();null==(n=e.recordEvent)||n.call(e,{type:"request",request:{url:t.url,method:"POST",body:t.body}});try{let r=await fetch(t.url,{method:"POST",headers:t.headers,body:t.body,signal:e.requestSignal,...t.dispatcher?{dispatcher:t.dispatcher}:{}}),n=await r.text(),c={status:r.status,ok:r.ok,body:n};if(!r.ok)throw null==(l=e.recordEvent)||l.call(e,{type:"error",http:c}),Error(`Jev request failed (${r.status}): ${n.slice(0,4e3)}`);let u=ry.parse(JSON.parse(n));for(let[e,r]of Object.entries(t.questions))(0,eH.vA)((null==(o=u.answers[e])?void 0:o.type)===r.type,`Missing or invalid Jev answer: ${e}`);for(let[e,r]of Object.entries(t.questions)){let t=u.answers[e];"choice"===r.type&&"choice"===t.type&&(0,eH.vA)(Object.hasOwn(r.criteria,t.choice),`Invalid Jev choice: ${e}`)}let d=null==(i=u.usage)?void 0:i.input_tokens,p=null==(a=u.usage)?void 0:a.output_tokens,h={content:n,isStreamed:!1,rawUsage:null!=d&&null!=p?{prompt_tokens:d,completion_tokens:p,total_tokens:d+p}:void 0,timeCost:Date.now()-A,requestId:r.headers.get("x-request-id"),responseModelName:u.model};return null==(s=e.recordEvent)||s.call(e,{type:"response",http:c,final:h}),h}catch(t){throw null==(c=e.recordEvent)||c.call(e,{type:"error",error:t instanceof Error?t.message:String(t)}),t}}async function rw(e,t,r){var n;null==r||null==(n=r.abortSignal)||n.throwIfAborted(),(null==r?void 0:r.stream)===!0&&(0,eH.vA)("function"==typeof(null==r?void 0:r.onChunk),"onChunk is required when stream: true is explicitly specified");let o=t.executionId??`unscoped-${(0,eH.uR)()}`,i=(tb+=1,`call_${tb}`),{config:a}=t,s=async()=>{var n;if(null==r?void 0:r.systemOneRequest)return(0,eH.vA)("jev"===a.modelFamily,"System One requests require the Jev model family"),{protocol:"system-one",input:await rv(a,r.systemOneRequest)};let o={messages:e,modelRuntime:t,options:r};if((n=a.openaiBaseURL)&&n.trim().toLowerCase().startsWith("codex://"))return{protocol:"codex",input:(e=>{let{messages:t,modelRuntime:r,options:n}=e,{config:o,adapter:i}=r,{config:a}=i.buildCodexAppServerParams({intent:o.intent,userConfig:{reasoningEnabled:o.reasoningEnabled,reasoningEffort:o.reasoningEffort,reasoningBudget:o.reasoningBudget},requiresOriginalImageDetail:null==n?void 0:n.requiresOriginalImageDetail});return{messages:t,resolveImageDetail:e=>{let{imageDetail:t}=e;return i.resolveImageDetail({imageDetail:t,intent:o.intent,requiresOriginalImageDetail:null==n?void 0:n.requiresOriginalImageDetail})},requestParams:a}})(o)};let i=a.protocol??"openai-chat";return((0,eH.vA)(t.adapter.supportedProtocols.includes(i),`Model adapter "${a.modelFamily??"default"}" does not support protocol "${i}"`),"openai-responses"===i)?{protocol:"responses",input:await rc(o)}:{protocol:"chat-completion",input:await tR(o)}},l=(null==r?void 0:r.abortSignal)?await rp(r.abortSignal,s):await s(),{rawUsage:c,timeCost:A,totalTimeCost:u,retryCount:d,requestId:p,responseModelName:h,...m}=await rx({messages:e,modelRuntime:t,options:r,executionId:o,internalCallId:i,prepared:l}),f=(e=>{var t;let{apiProtocol:r,stream:n,usageData:o,requestId:i,timeCost:a,totalTimeCost:s,retryCount:l,modelName:c,modelDescription:A,responseModelName:u,slot:d,internalCallId:p}=e;if(!o)return;let h=null==o||null==(t=o.prompt_tokens_details)?void 0:t.cached_tokens;return{...o,api_protocol:r,stream:n,prompt_tokens:o.prompt_tokens??0,completion_tokens:o.completion_tokens??0,total_tokens:o.total_tokens??0,cached_input:h??0,time_cost:a??0,total_time_cost:s,retry_count:l,model_name:c,model_description:A,response_model_name:u,slot:d,intent:void 0,request_id:i??void 0,[tv]:p}})({apiProtocol:l.protocol,stream:m.isStreamed,usageData:c,timeCost:A,totalTimeCost:u,retryCount:d,requestId:p,responseModelName:h,modelName:a.modelName,modelDescription:a.modelDescription,slot:a.slot,internalCallId:i}),g=f?{...f,modelRouting:t.modelRouting}:void 0,y=(0,e0.aZ)("ai:profile:stats"),v=(0,e0.aZ)("ai:profile:detail");return y(`model, ${a.modelName}, mode, ${a.modelFamily||"default"}, streaming, ${m.isStreamed}, prompt-tokens, ${(null==g?void 0:g.prompt_tokens)??""}, completion-tokens, ${(null==g?void 0:g.completion_tokens)??""}, total-tokens, ${(null==g?void 0:g.total_tokens)??""}, cached-input, ${(null==g?void 0:g.cached_input)??""}, cost-ms, ${A??""}, requestId, ${p??""}, slot, ${a.slot}, configured-temperature, ${a.temperature??""}`),v(`model usage detail: ${JSON.stringify(g)}`),g&&t.onUsage&&t.onUsage(g),{...m,usage:g}}class rE extends Error{constructor(e){super(e.message,{cause:e}),function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}(this,"cause",void 0),this.cause=e}}async function rx(e){var t,r,n;let o=Date.now(),{modelRuntime:{config:i},options:a}=e,s=("number"==typeof(t=i.retryCount)&&Number.isFinite(t)?Math.max(0,Math.floor(t)):1)+1,l=i.retryInterval??2e3,c=[];for(let t=1;;t++){null==a||null==(r=a.abortSignal)||r.throwIfAborted();try{return{...await rk(e,t),totalTimeCost:Date.now()-o,retryCount:t-1}}catch(r){if(null==a||null==(n=a.abortSignal)||n.throwIfAborted(),r instanceof rE)throw r.cause;let e=tE(r);if(c.push({attempt:t,error:e}),t===s)throw function(e,t,r){let n=t.length,o=Math.max(0,n-1),i=e.message,a=t.slice(0,-1);if(e.message=`AI model request failed after ${o} ${1===o?"retry":"retries"} (${n}/${r} attempts). Last error: ${i}`,0===a.length)return e;let s=a.map(e=>{let{attempt:t,error:r}=e;return`Attempt ${t}: ${r instanceof Error?r.message:String(r)}`}).join("\n");return e.message=`${e.message}
14
+ Previous AI call attempt errors:
15
+ ${s}`,e}(e,c,s);(0,e0.aZ)("ai:call",{console:!0})(`AI call failed (attempt ${t}/${s}), retrying in ${l}ms... Error: ${e.message}`)}await rh(l,null==a?void 0:a.abortSignal)}}async function rk(e,t){var r,n;let{messages:o,modelRuntime:i,options:a,executionId:s,internalCallId:l,prepared:c}=e,{config:A}=i,u=tm(),d=u||i.onRequest?e=>{var r,n;if("request"===e.type){let t=e.request;null==(r=i.onRequest)||r.call(i,null==t?void 0:t.url)}u&&(n={executionId:s,callId:l,semanticRetryAttempt:null==a?void 0:a.semanticRetryAttempt,slot:A.slot,intent:A.intent,modelFamily:A.modelFamily,modelRouting:i.modelRouting,...e,attempt:t},tf.record(n))}:void 0,p=void 0===(r=A.timeout)?18e4:0===r?null:r,{signal:h,cleanup:m}=function(e,t){let r,n=new AbortController;if(null==t?void 0:t.aborted)return n.abort(t.reason),{signal:n.signal,cleanup:()=>{}};null!==e&&"function"==typeof(r=setTimeout(()=>{n.abort(new rd(e))},e)).unref&&r.unref();let o=t?()=>n.abort(t.reason):void 0;return t&&o&&t.addEventListener("abort",o,{once:!0}),{signal:n.signal,cleanup:()=>{r&&clearTimeout(r),t&&o&&t.removeEventListener("abort",o)}}}(p,null==a?void 0:a.abortSignal),f=!1,g=null==a?void 0:a.onChunk,y={messages:o,modelRuntime:i,executionId:s,recordEvent:d,requestSignal:h,effectiveTimeoutMs:p,options:g?{...a,onChunk:e=>{h.throwIfAborted(),f=!0,g(e)}}:a};try{return await rp(h,()=>"system-one"===c.protocol?rb(y,c.input):"codex"===c.protocol?ti(y,c.input):rA(y,c))}catch(t){null==a||null==(n=a.abortSignal)||n.throwIfAborted();let e=tE(t);if(f)throw new rE(e);throw e}finally{m()}}function rS(e,t){if(!t)return e;let r=t instanceof Error?t.message:String(t);return[...e,{role:"user",content:`The previous response was invalid:
16
+ ${r}
17
+
18
+ Please avoid the validation error above in this response.`}]}async function rI(e){let{callAi:t,parseResponse:r,toParseError:n,parseRetryTimes:o=0,parseRetryInterval:i=0,abortSignal:a,onParseRetry:s}=e,l=Number.isFinite(o)?Math.max(0,Math.floor(o)):0,c=Number.isFinite(i)?Math.max(0,i):0,A=async(e,o,i)=>{null==a||a.throwIfAborted();let l=await t(o,i);try{let e=await r(l);return null==a||a.throwIfAborted(),e}catch(t){if(null==a||a.throwIfAborted(),e>0)return null==s||s(t,l),c>0&&await rh(c,a),null==a||a.throwIfAborted(),A(e-1,o+1,t);throw n(t,l)}};return A(l,0)}async function rC(e,t,r){let{config:n}=t;return rI({callAi:(n,o)=>rw(rS(e,o),t,{abortSignal:null==r?void 0:r.abortSignal,expectedJsonObjectResponse:!0,semanticRetryAttempt:n}),parseResponse:e=>(function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"generic-object",{adapter:n}=t;(0,eH.vA)(e,"empty response");let o=n.jsonParser(e.content,{source:r});return eV(o),{content:o,contentString:e.content,usage:e.usage,reasoning_content:e.reasoning_content,rawAssistantOutput:e.rawAssistantOutput}})(e,t,null==r?void 0:r.jsonParserSource),toParseError:(e,t)=>new ty(e instanceof Error?e.message:String(e),t.content,t.usage,t.rawAssistantOutput,t.reasoning_content),parseRetryTimes:(null==r?void 0:r.retryTimes)??n.retryCount,parseRetryInterval:(null==r?void 0:r.retryInterval)??n.retryInterval,abortSignal:null==r?void 0:r.abortSignal})}async function rO(e,t,r){let{content:n,usage:o,rawAssistantOutput:i}=await rw(e,t,r);return{content:n,usage:o,rawAssistantOutput:i}}function rR(e){let{temperature:t,userTemperature:r,semanticRetryAttempt:n=0}=e;return n>0&&void 0===r&&0===t?.2:t}let rj=e=>{let{midsceneDefaults:t,userConfig:r}=e;return{config:{temperature:r.temperature??t.temperature}}},rP={temperature:0},rM=e=>{var t;let{userConfig:r={}}=e;if(!0!==r.reasoningEnabled)return{config:{effort:"none"}};let n=null==(t=r.reasoningEffort)?void 0:t.trim().toLowerCase();return{config:{effort:n&&["none","minimal","low","medium","high","xhigh"].includes(n)?n:"medium"}}};function rT(e,t){let r=e.toLowerCase(),n=t.toLowerCase(),o=`</${n}>`,i=`<${n}>`,a=r.lastIndexOf(o);if(-1===a){let t=r.lastIndexOf(i);if(-1===t)return;let n=t+i.length,o=e.substring(n),a=o.indexOf("<");return(-1===a?o:o.substring(0,a)).trim()}let s=r.substring(0,a).lastIndexOf(i);if(-1===s)return;let l=s+i.length;return e.substring(l,a).trim()}function rN(e,t){let r=t[0],n=t.at(-1),o=RegExp(`<${r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}>`,"i").exec(e);if((null==o?void 0:o.index)===void 0)return"";let i=e.slice(o.index),a=RegExp(`</${n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}>`,"gi"),s=[...i.matchAll(a)].at(-1),l=(null==s?void 0:s.index)!==void 0?s.index+s[0].length:i.length;return i.slice(0,l)}let rD="data-json",rz=e=>{let{jsonParser:t}=e;return{dataOutput:{tagNames:[rD],rules:"",placeholder:`<${rD}>the extracted data as JSON. Make sure both the value and scheme meet the DATA_DEMAND. If you want to write some description in this field, use the same language as the DATA_DEMAND.</${rD}>`,buildExample:e=>`<${rD}>
19
+ ${e}
20
+ </${rD}>`,parse:e=>{let r=rT(e,rD);if(!r)throw Error("Missing required field: data-json");try{return t(r,{source:"generic-object"})}catch(e){throw Error(`Failed to parse data-json: ${e}`)}}}}};function rB(e){return Array.isArray(e)&&Array.isArray(e[0])?e[0]:e}function rF(e,t){let r=rB(e),n="string"==typeof r?r.trim().split(/[\s,]+/).filter(Boolean):r;if(!Array.isArray(n))throw Error(`invalid ${t} data: ${JSON.stringify(e)} `);let o=n.map(e=>"number"==typeof e?e:Number(e));if(!o.every(e=>Number.isFinite(e)))throw Error(`invalid ${t} data: ${JSON.stringify(e)} `);return o}function rL(e,t){return"point"===e.shape?{coordinates:[t[0],t[1]],coordinatesMeta:e}:{coordinates:[t[0],t[1],t[2],t[3]],coordinatesMeta:e}}function rU(e){return"bbox"===e.coordinatesMeta.shape}function rK(e,t,r){return Math.min(Math.max(e,t),r)}function rZ(e){return Math.max(e-1,0)}function rJ(e,t,r,n){let o=e*r/t;switch(n){case"round":return Math.round(o);case"trunc":return Math.trunc(o);case"none":return o;default:throw Error(`Invalid coordinate rounding: ${n}`)}}function rQ(e,t){let[r,n]=e,{width:o,height:i}=t;return[rK(r,0,rZ(o)),rK(n,0,rZ(i))]}function rq(e){return Array.isArray(e)?`[${e.join(", ")}]`:JSON.stringify(e)}let rX=[[100,100,200,200],[345,442,458,483],[120,180,380,210],[120,240,380,270],[50,100,200,200],[300,400,500,500],[600,100,800,250],[50,600,250,750]];function rW(e){let{shape:t}=e,{plural:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"bbox"===t?r?"bounding boxes":"bounding box":r?"points":"point"}function rH(e){if(void 0!==e.normalizedBy&&e.normalizedBy<=0)throw Error(`locate result coordinates normalizedBy must be positive: ${e.normalizedBy}`);return{shape:e.shape,order:e.order??"xy",normalizedBy:e.normalizedBy,rounding:e.rounding??"round"}}function rY(e){let t=rH(e.coordinates),r=e.parseRawLocateValue??(e=>(function(e,t){if("point"===e.shape){let r=rF(t,"point");if(r.length<2)throw Error(`invalid point data: ${JSON.stringify(t)} `);return rL(e,r)}let r=rF(t,"bbox");if(4!==r.length)throw Error(`invalid bbox data: ${JSON.stringify(t)} `);return rL(e,r)})(t,e));return{promptSpec:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{resultKey:t.resultKey??function(e){let{shape:t}=e;return"point"===t?"point":"bbox"}(e),resultKeyAliases:t.resultKeyAliases??[],resultValueSchema:function(e){let{shape:t}=e;return"point"===t?"[number, number]":"[number, number, number, number]"}(e),resultValueDescription:function(e){let{shape:t,order:r,normalizedBy:n}=e,o="point"===t?"point":"2d bounding box",i=void 0!==n?`normalized to 0-${n} relative to the screenshot. Do NOT use pixel coordinates or screenshot width/height`:"in actual pixel coordinates relative to the screenshot";return"point"===t?`${o}, should be ${"yx"===r?"[y, x]":"[x, y]"} ${i}.`:`${o}, should be ${"yx"===r?"[ymin, xmin, ymax, xmax]":"[xmin, ymin, xmax, ymax]"} ${i}.`}(e),resultNoun:rW(e),resultNounPlural:rW(e,{plural:!0}),exampleValues:rX.map(t=>(function(e,t){let[r,n,o,i]=t;if("point"===e.shape){let t=Math.round((r+o)/2),a=Math.round((n+i)/2);return"yx"===e.order?[a,t]:[t,a]}return"yx"===e.order?[n,r,i,o]:t})(e,t))}}(t,{resultKey:e.resultKey,resultKeyAliases:e.resultKeyAliases}),toPixelResult:(e,t)=>{let n=r(e),{preparedSize:o,contentSize:i=o}=t;return!function(e){if(!e||"object"!=typeof e)throw Error(`invalid parsed locate result: expected object, got ${JSON.stringify(e)}`);let t=e.coordinatesMeta,r=(null==t?void 0:t.shape)==="bbox"?4:2*((null==t?void 0:t.shape)==="point");if(!r)throw Error(`invalid parsed locate result: unsupported coordinatesMeta.shape ${JSON.stringify(null==t?void 0:t.shape)}`);let n=e.coordinates;if(!Array.isArray(n)||n.length!==r||!n.every(e=>"number"==typeof e&&Number.isFinite(e)))throw Error(`invalid parsed locate result: ${t.shape} coordinates must be ${r} finite numbers, got ${JSON.stringify(n)}`);let{order:o,normalizedBy:i,rounding:a}=t;if(!["round","trunc","none"].includes(a))throw Error(`invalid locate coordinate rounding: ${a}`);if("xy"!==o&&"yx"!==o)throw Error(`invalid locate coordinate order: ${JSON.stringify(o)}`);if(void 0!==i&&(!Number.isFinite(i)||i<=0))throw Error(`locate result normalizedBy must be positive and finite: ${i}`)}(n),function(e,t,r){let n,o,i=e.coordinatesMeta,{normalizedBy:a}=i,s=void 0!==(o=(n=e.coordinatesMeta).normalizedBy)?e.coordinates.map(()=>o):"bbox"===n.shape?"yx"===n.order?[r,t,r,t]:[t,r,t,r]:"yx"===n.order?[r,t]:[t,r];if(e.coordinates.some((e,t)=>e<0||e>s[t])){let n=void 0!==a?`normalized range [0, ${a}]`:`image size [0, ${t}]x[0, ${r}]`,o=void 0!==a?` normalizedBy=${a}`:"";throw Error(`locate result coordinates ${JSON.stringify(e.coordinates)} exceed ${n}. shape=${i.shape} order=${i.order}${o} limits=${JSON.stringify(s)}`)}if(rU(e)&&(e.coordinates[2]<e.coordinates[0]||e.coordinates[3]<e.coordinates[1]))throw Error(`invalid locate bbox coordinate order: ${JSON.stringify(e.coordinates)}`)}(n,o.width-1,o.height-1),{center:rQ(function(e,t){let{width:r,height:n}=t,{order:o,normalizedBy:i,rounding:a}=e.coordinatesMeta,[s,l]=rU(e)?[(e.coordinates[0]+e.coordinates[2])/2,(e.coordinates[1]+e.coordinates[3])/2]:e.coordinates,[c,A]="yx"===o?[l,s]:[s,l];return void 0===i?[c,A]:[rJ(c,i,r,a),rJ(A,i,n,a)]}(n,o),i),rect:rU(n)?function(e){let[t,r,n,o]=e;return{left:t,top:r,width:n-t+1,height:o-r+1}}(function(e,t){let[r,n,o,i]=e;return[...rQ([r,n],t),...rQ([o,i],t)]}(function(e,t){let{width:r,height:n}=t,{normalizedBy:o,order:i,rounding:a}=e.coordinatesMeta,[s,l,c,A]=e.coordinates,u="yx"===i?[l,s,A,c]:e.coordinates;return void 0===o?u:[rJ(u[0],o,r,a),rJ(u[1],o,n,a),rJ(u[2],o,r,a),rJ(u[3],o,n,a)]}(n,o),i)):void 0}}}}function rG(e,t){let r=t.find(t=>t.name===e);if(!r){let r=t.map(e=>e.name).join(", ");throw Error(`Action type '${e}' is not in the current action space. Available actions: ${r||"(none)"}`)}return r}function rV(e,t){let r=[];for(let n of e){let e=n.type,o=rG(e,t),i=o.interfaceAlias||e,a=o.paramSchema?r6(n.param||{},o.paramSchema):{},s="Launch"===o.name||"launch"===o.interfaceAlias||"Terminate"===o.name||"terminate"===o.interfaceAlias?"uri":"RunAdbShell"===o.name||"runAdbShell"===o.interfaceAlias||"RunHdcShell"===o.name||"runHdcShell"===o.interfaceAlias?"command":void 0,l=s?Object.keys(a):[],c=s&&1===l.length&&l[0]===s&&"string"==typeof a[s]?{[i]:a[s]}:{[i]:"",...a};r.push(c)}return r}let r$=rm.Ik({left:rm.ai(),top:rm.ai()}),r_=rm.Ik({width:rm.ai(),height:rm.ai()});r$.and(r_).and(rm.Ik({zoom:rm.ai().optional()}));let r0=rm.Ik({images:rm.YO(rm.Ik({name:rm.Yj(),url:rm.Yj()})).optional(),convertHttpImage2Base64:rm.zM().optional()}),r1=rm.KC([rm.Yj(),rm.Ik({prompt:rm.Yj()}).and(r0.partial())]),r2=e=>"string"==typeof e?e:e.prompt,r3=e=>{if("string"!=typeof e&&e.images)return{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}},r5=rm.Ik({prompt:r1,deepLocate:rm.zM().optional(),deepThink:rm.zM().optional().describe("@deprecated Use `deepLocate` instead."),cacheable:rm.zM().optional(),xpath:rm.KC([rm.Yj(),rm.zM()]).optional()}).passthrough(),r4=e=>{let t=e.prompt;if(Array.isArray(e.images)&&e.images.length>0){let r=e.images.length;t+=` (with ${r} image${r>1?"s":""})`}return t},r7=(e,t)=>{var r;return e&&(null==(r=e._def)?void 0:r.typeName)==="ZodObject"&&e.shape?Object.keys(e.shape).filter(r=>{var n;let o=e.shape[r];return!!(e=>{var t,r;let n=e;if((null==(t=n._def)?void 0:t.typeName)==="ZodOptional"&&(n=n._def.innerType),(null==(r=n._def)?void 0:r.typeName)==="ZodObject"){let e=n._def.shape();if("prompt"in e&&e.prompt)return!0}return!1})(o)&&(!t||(null==(n=o._def)?void 0:n.typeName)!=="ZodOptional")}):[]};function r8(e,t){for(let r of r7(t,!0))if(!(null==e?void 0:e[r]))throw Error(`${r}: Required locate field is not provided`)}let r6=(e,t)=>{if(!(0,eH.Qd)(e))return{};let r=r7(t),n={...e};for(let e of r){let t=n[e];t&&("string"==typeof t?n[e]=t:"object"==typeof t&&t.prompt&&("string"==typeof t.prompt?n[e]=t.prompt:"object"==typeof t.prompt&&t.prompt.prompt&&(n[e]=r4(t.prompt))))}return n},r9=(e,t,r)=>{if(!t)return;let n=e??{},o=r7(t);if(0===o.length)return t.parse(n);let i={};for(let e of o)e in n&&(i[e]=n[e]);let a={};for(let e in n)o.includes(e)?a[e]={prompt:"_dummy_"}:a[e]=n[e];let s=t.parse(a),l=null==r?void 0:r.shrunkShotToLogicalRatio;for(let e in i){let t=i[e];void 0!==l&&t&&"object"==typeof t&&t.center&&(t={...t,center:[Math.round(t.center[0]/l),Math.round(t.center[1]/l)]}),s[e]=t}return s},ne=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"YYYY-MM-DD HH:mm:ss",t=arguments.length>1?arguments[1]:void 0,r=void 0!==t?new Date(t):new Date,n=r.getFullYear(),o=String(r.getMonth()+1).padStart(2,"0"),i=String(r.getDate()).padStart(2,"0"),a=String(r.getHours()).padStart(2,"0"),s=String(r.getMinutes()).padStart(2,"0"),l=String(r.getSeconds()).padStart(2,"0"),c=e.replace("YYYY",String(n)).replace("MM",o).replace("DD",i).replace("HH",a).replace("mm",s).replace("ss",l);return`${c} (${e})`};var nt=r(52801),nr=r(16390),nn=r(86704);let no="midscene_test_run_dump";var ni=r(8963).Buffer,na={"node:fs"(e){e.exports=nt}},ns={};function nl(e){var t=ns[e];if(void 0!==t)return t.exports;var r=ns[e]={exports:{}};return na[e](r,r.exports,nl),r.exports}var nc=nl("node:fs");function nA(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let nu=eH.NB,nd=eH.x3;function np(e){return String(e??"N/A").replace(/\0/g,"").replace(/--/g,"- -")}function nh(e){let t=e.intent||"default",r=e.name||"unknown",n=e.modelDescription?` (${e.modelDescription})`:"";return`${t}: ${r}${n}`}function nm(e){var t;let r=Array.isArray(e.executions)?e.executions:[],n=r.reduce((e,t)=>e+(Array.isArray(t.tasks)?t.tasks.length:0),0),o=(null==(t=e.modelBriefs)?void 0:t.length)?e.modelBriefs.map(nh).join("; "):function(e){let t=new Map;for(let r of Array.isArray(e.executions)?e.executions:[])for(let e of Array.isArray(r.tasks)?r.tasks:[])for(let[r,n]of[["main",e.usage],["searchArea",e.searchAreaUsage]]){if(!(n&&(n.model_name||n.response_model_name||n.model_description||n.intent)))continue;let e=function(e,t){let r=t.intent||e,n=t.model_name||t.response_model_name||"unknown",o=t.model_description?` (${t.model_description})`:"";return`${r}: ${n}${o}`}(r,n);t.set(e,e)}return Array.from(t.values()).join("; ")}(e)||"No model metadata recorded",i=["For Agent Analysis:",`Report: ${np(e.groupName)}`,`SDK: ${np(e.sdkVersion)}`,`Device: ${np(e.deviceType)}`,`Executions: ${r.length}; Tasks: ${n}`,`Models: ${np(o)}`,'Structured report JSON is stored in script[type="midscene_web_dump"] tags near this comment.','Screenshots are stored as script[type="midscene-image"] tags or files referenced by screenshot refs.',"For AI analysis, inspect each execution task for type, status, timing, param, output, usage, searchAreaUsage, recorder, and screenshot refs.","Use the Markdown export when available; it contains the same report context plus image links for agent review."];return`
21
+ <!--
22
+ ${i.join("\n")}
23
+ -->
24
+ `}function nf(){return"<\/script>"}function ng(e){return'<script type="'+no+'">\n'+(0,eH.NB)(JSON.stringify(e))+"\n"+nf()+"\n"}class ny{push(e){let t=this.leftover+e;this.leftover="";let r=0;for(;r<t.length;){if(!this.capturing){let e=t.indexOf(this.openTag,r);if(-1===e){let e=Math.max(0,this.openTag.length-1);return this.leftover=e?t.slice(-e):"",!1}this.capturing=!0,r=e+this.openTag.length}let e=t.indexOf(this.closeTag,r);if(-1!==e){if(this.currentContent+=t.slice(r,e),this.onMatch(this.currentContent))return!0;this.capturing=!1,this.currentContent="",r=e+this.closeTag.length;continue}let n=Math.max(0,this.closeTag.length-1),o=Math.max(r,t.length-n);this.currentContent+=t.slice(r,o),this.leftover=t.slice(o);break}return!1}constructor(e,t,r){nA(this,"openTag",void 0),nA(this,"closeTag",void 0),nA(this,"onMatch",void 0),nA(this,"leftover",void 0),nA(this,"capturing",void 0),nA(this,"currentContent",void 0),this.openTag=e,this.closeTag=t,this.onMatch=r,this.leftover="",this.capturing=!1,this.currentContent=""}}function nv(e,t,r,n){let o=(0,nc.openSync)(e,"r"),i=(0,nc.statSync)(e).size,a=ni.alloc(65536),s=new nn.StringDecoder("utf8"),l=new ny(t,r,n),c=0;try{for(;c<i;){let e=(0,nc.readSync)(o,a,0,65536,c);if(c+=e,l.push(s.write(a.subarray(0,e))))return}l.push(s.end())}finally{(0,nc.closeSync)(o)}}async function nb(e,t,r,n){let o=await (0,nr.open)(e,"r"),i=ni.alloc(65536),a=new nn.StringDecoder("utf8"),s=0,l=new ny(t,r,n);try{for(;;){let{bytesRead:e}=await o.read(i,0,65536,s);if(0===e)return void l.push(a.end());if(s+=e,l.push(a.write(i.subarray(0,e))))return}}finally{await o.close()}}function nw(e,t){let r=`<script type="midscene-image" data-id="${t}">`,n=nf(),o=null;return nv(e,r,n,e=>(o=nd(e),!0)),o}function nE(e){let t=/^ data-id="([a-z0-9_-]{1,128})">/i.exec(e);return(null==t?void 0:t[1])??null}async function nx(e){let t=new Set,r=nf();return await nb(e,'<script type="midscene-image"',r,e=>{let r=nE(e);return r&&t.add(r),!1}),t}function nk(e,t){let r=nf();return'<script type="midscene-image" data-id="'+e+'">'+nu(t)+r}function nS(){return n||(n='\n<script>(function(){var p=window.location.pathname;if(p.endsWith("/")||/\\.\\w+$/.test(p))return;var b=document.createElement("base");b.href=p+"/";document.head.insertBefore(b,document.head.firstChild)})()'+nf()+"\n"),n}let nI="data-screenshot-mode";function nC(e,t){let r=nf(),n="";return t&&Object.keys(t).length>0&&(n=" "+Object.entries(t).map(e=>{let[t,r]=e;return t+'="'+encodeURIComponent(r)+'"'}).join(" ")),'<script type="midscene_web_dump"'+n+">"+nu(e)+r}let nO={"image/jpeg":"jpeg","image/jpg":"jpeg","image/png":"png","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg","image/avif":"avif","image/bmp":"bmp"};function nR(e){return("inline"===e.storage||"file"===e.storage)&&("file"!==e.storage||"string"==typeof e.path)}function nj(e){return"string"==typeof e.id&&/^[a-z0-9_-]{1,128}$/i.test(e.id)}function nP(e){return"object"!=typeof e||null===e?null:"midscene_screenshot_ref"===e.type&&nj(e)&&"number"==typeof e.capturedAt&&("image/png"===e.mimeType||"image/jpeg"===e.mimeType)&&nR(e)?e:null}function nM(e){return"object"!=typeof e||null===e?null:"midscene_image_url_ref"===e.type&&nj(e)&&"string"==typeof e.mimeType&&e.mimeType.startsWith("image/")&&nR(e)?e:null}function nT(e){return nP(e)??nM(e)}function nN(e){let t=nO[e.toLowerCase()];if(t)return t;let r=e.slice(6).split("+",1)[0].toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32);if(!r)throw Error(`Cannot derive a report image file extension for MIME type "${e}"`);return r}function nD(e){return nN(e.mimeType)}function nz(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let nB=Symbol.for("@midscene/core/screenshot-item");class nF{static isScreenshotItem(e){return"object"==typeof e&&null!==e&&!0===Reflect.get(e,nB)}static create(e,t){return new nF((0,eH.uR)(),e,t,e.startsWith("data:image/jpeg")||e.startsWith("data:image/jpg")?"jpeg":"png")}static fromFile(e,t,r){let n=new nF((0,eH.uR)(),null,r,"image/jpeg"===t?"jpeg":"png");return n._persistedPath=e,n}get id(){return this._id}get format(){return this._format}get extension(){return"jpeg"===this._format?"jpeg":"png"}get capturedAt(){return this._capturedAt}get base64(){var e,t;if(null!==this._base64)return this._base64;let r=()=>{if(null===this._persistedPath)throw Error(`Screenshot ${this._id}: file recovery path missing`);let e=(0,tG.readFileSync)(this._persistedPath);return`data:image/${this._format};base64,${e.toString("base64")}`},n=()=>{if(null===this._persistedHtmlPath)throw Error(`Screenshot ${this._id}: HTML recovery path missing`);let e=nw(this._persistedHtmlPath,this._id);if(e)return e;throw Error(`Screenshot ${this._id}: cannot recover from HTML (id not found in ${this._persistedHtmlPath})`)};if((null==(e=this._serializedRef)?void 0:e.storage)==="file")return r();if((null==(t=this._serializedRef)?void 0:t.storage)==="inline")return n();if(null!==this._persistedPath)return r();if(null!==this._persistedHtmlPath)return n();throw Error(`Screenshot ${this._id}: base64 data released without recovery path`)}hasBase64(){return null!==this._base64}markPersistedInline(e){let t=this.createRef("inline");return this._serializedRef=t,this._persistedHtmlPath=e,this._base64=null,t}registerPersistedFileCopy(e,t){let r=this.createRef("file",e);return this._persistedPath=t,this._base64=null,r}markPersistedToPath(e,t){let r=this.registerPersistedFileCopy(e,t);return this._serializedRef=r,r}toSerializable(){return this._serializedRef??{type:"midscene_screenshot_ref",id:this._id,capturedAt:this._capturedAt,mimeType:"jpeg"===this._format?"image/jpeg":"image/png",storage:"inline"}}static isSerialized(e){return null!==nP(e)}createRef(e,t){let r={type:"midscene_screenshot_ref",id:this._id,capturedAt:this._capturedAt,mimeType:"jpeg"===this._format?"image/jpeg":"image/png",storage:e};return"file"===e?{...r,storage:e,path:t}:r}get rawBase64(){return this.base64.replace(/^data:image\/(png|jpeg|jpg);base64,/,"")}constructor(e,t,r,n){nz(this,nB,!0),nz(this,"_id",void 0),nz(this,"_base64",void 0),nz(this,"_format",void 0),nz(this,"_capturedAt",void 0),nz(this,"_serializedRef",null),nz(this,"_persistedPath",null),nz(this,"_persistedHtmlPath",null),this._id=e,this._base64=t,this._format=n,this._capturedAt=r}}var nL=r(46732),nU=r.n(nL),nK=r(8963),nZ=r(25592);async function nJ(){return r.e("195").then(r.bind(r,33238))}let nQ=(0,e0.aZ)("img"),nq=null,nX=!1;async function nW(){if(nq&&nX)return nq;let e=eH.ht?"browser":eH.rS?"worker":"unknown";nQ(`Loading photon module in ${e} environment`);try{if(eH.ht||eH.rS){let e=await nJ();"function"==typeof e.default&&await e.default(),nQ("Photon loaded: @silvia-odwyer/photon (browser/worker)"),nq=e}else throw Error("Photon is only available in browser or worker environments");if(!(null==nq?void 0:nq.PhotonImage))throw Error("PhotonImage is not available");if(!nq.PhotonImage.new_from_byteslice&&!nq.PhotonImage.new_from_base64)throw Error("PhotonImage.new_from_byteslice or new_from_base64 is not available");return nX=!0,nq}catch(e){throw nQ(`Photon load failed: ${e instanceof Error?e.message:String(e)}`),Error(`Failed to load photon module: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async function nH(){if(!eH.$9)throw Error("Sharp is only available in Node.js environment");try{return(await Promise.resolve().then(r.t.bind(r,82297,23))).default}catch(e){throw Error(`Failed to load sharp module: ${e instanceof Error?e.message:String(e)}`)}}let nY=e=>e>=192&&e<=207&&196!==e&&200!==e&&204!==e;function nG(e){if(n$(e)){let t=e.readUInt32BE(16),r=e.readUInt32BE(20);return nU()(t&&r,"Invalid image: cannot get width or height"),{width:t,height:r}}if(n_(e))return function(e){let t=2;for(;t<e.length;){if(255!==e[t]){t+=1;continue}for(;t<e.length&&255===e[t];)t+=1;if(t>=e.length)break;let r=e[t];if(t+=1,217===r||218===r)break;if(1===r||216===r||r>=208&&r<=215)continue;if(t+2>e.length)break;let n=e.readUInt16BE(t);if(n<2||t+n>e.length)break;if(nY(r)){if(n<7)break;let r=e.readUInt16BE(t+3),o=e.readUInt16BE(t+5);return nU()(o&&r,"Invalid image: cannot get width or height"),{width:o,height:r}}t+=n}throw Error("Invalid image: cannot get JPEG width or height")}(e);throw Error("Invalid image: unsupported format")}async function nV(e){var t;let r,n=e.replace(/^data:image\/\w+;base64,/,"").replace(/\s/g,"");nU()(n,"Invalid image: empty base64 data"),nU()(/^[A-Za-z0-9+/]+={0,2}$/.test(n)&&n.length%4!=1,"Invalid image: malformed base64 data");let o=nK.Buffer.from(n,"base64");if(nU()(n$(t=o)||n_(t),"Invalid image: unsupported format"),eH.$9){let e;try{let t=await nH();e=await t(o).metadata()}catch(e){throw Error(`Invalid image: failed to decode base64 data (${e instanceof Error?e.message:String(e)})`,{cause:e})}return nU()(e.width&&e.height,"Invalid image: cannot get width or height"),{width:e.width,height:e.height}}let{PhotonImage:i}=await nW();try{r=i.new_from_base64(n)}catch(e){throw Error(`Invalid image: failed to decode base64 data (${e instanceof Error?e.message:String(e)})`,{cause:e})}let a=r.get_width(),s=r.get_height();return r.free(),nU()(a&&s,"Invalid image: cannot get width or height"),{width:a,height:s}}function n$(e){if(!e||e.length<20||137!==e[0]||80!==e[1]||78!==e[2]||71!==e[3]||13!==e[4]||10!==e[5]||26!==e[6]||10!==e[7])return!1;let t=nK.Buffer.from([0,0,0,0,73,69,78,68,174,66,96,130]);return e.subarray(e.length-t.length).equals(t)}function n_(e){return!!e&&!(e.length<3)&&255===e[0]&&216===e[1]&&255===e[2]}let n0=(0,e0.aZ)("img");async function n1(e,t,r,n){var o,i,a,s;let l,c;if("string"==typeof t)throw Error("inputData is base64, use resizeImgBase64 instead");nU()(r&&r.width>0&&r.height>0,"newSize must be positive");let A=Date.now();if(n0(`resizeImg start, target size: ${r.width}x${r.height}`),eH.$9){let o=await nH(),i=null==(a=n.sourceSize)?void 0:a.width,l=null==(s=n.sourceSize)?void 0:s.height;if(!i||!l){let e=await o(t).metadata();i=e.width,l=e.height}if(!i||!l)throw Error("Undefined width or height from the input image.");let c=r.width===i&&r.height===l;if(n.preserveOriginalWhenUnchanged&&c)return{buffer:t,format:e};let u=o(t),d=await (c?u:u.resize(r.width,r.height)).jpeg({quality:n.jpegQuality}).toBuffer(),p=Date.now();return n0(`resizeImg done (Sharp), target size: ${r.width}x${r.height}, cost: ${p-A}ms`),{buffer:d,format:"jpeg"}}let{PhotonImage:u,SamplingFilter:d,resize:p}=await nW(),h=new Uint8Array(t),m=u.new_from_byteslice(h),f=(null==(o=n.sourceSize)?void 0:o.width)??m.get_width(),g=(null==(i=n.sourceSize)?void 0:i.height)??m.get_height();if(!f||!g)throw m.free(),Error("Undefined width or height from the input image.");let y=r.width===f&&r.height===g;if(n.preserveOriginalWhenUnchanged&&y)return m.free(),{buffer:t,format:e};try{l=y?void 0:p(m,r.width,r.height,d.CatmullRom),c=nK.Buffer.from((l??m).get_bytes_jpeg(n.jpegQuality))}finally{m.free(),null==l||l.free()}let v=Date.now();return n0(`resizeImg done (Photon), target size: ${r.width}x${r.height}, cost: ${v-A}ms`),{buffer:c,format:"jpeg"}}async function n2(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90;if(eH.$9)try{let r=await nH();return await r(e).jpeg({quality:t}).toBuffer()}catch(e){if(!eH.ht&&!eH.rS)throw Error(`Failed to convert image to JPEG with Sharp: ${e instanceof Error?e.message:String(e)}`,{cause:e});n0("Sharp failed, falling back to Photon:",e)}let r=n4(e)??"image/png",n=await ot(`data:${r};base64,${e.toString("base64")}`);try{return nK.Buffer.from(n.get_bytes_jpeg(t))}finally{n.free()}}let n3=/^data:image\/(png|jpe?g);base64,([\s\S]*)$/i,n5=/^[A-Za-z0-9+/=\s]+$/;function n4(e){return e.length>=8&&137===e[0]&&80===e[1]&&78===e[2]&&71===e[3]&&13===e[4]&&10===e[5]&&26===e[6]&&10===e[7]?"image/png":e.length>=3&&255===e[0]&&216===e[1]&&255===e[2]?"image/jpeg":e.length>=6&&"GIF"===e.subarray(0,3).toString("ascii")?"image/gif":e.length>=12&&"RIFF"===e.subarray(0,4).toString("ascii")&&"WEBP"===e.subarray(8,12).toString("ascii")?"image/webp":e.length>=2&&66===e[0]&&77===e[1]?"image/bmp":void 0}let n7=(e,t)=>`data:image/${e};base64,${t.replace(/\s/g,"")}`;function n8(e){if(!Number.isInteger(e)||e<1||e>100)throw Error(`jpegQuality must be an integer between 1 and 100. Received: ${e}`)}function n6(e,t){if(!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<=0||e.height<=0)throw Error(`${t} width and height must be positive integers. Received width: ${e.width}, height: ${e.height}`)}async function n9(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90;n8(t);let{body:r}=oc(e),n=nK.Buffer.from(r,"base64"),o=n4(n);if("image/jpeg"===o)return n7("jpeg",r);if("image/png"!==o)throw Error(`inputBase64 must contain a PNG or JPEG image. Detected: ${o??"unsupported format"}`);return n7("jpeg",(await n2(n,t)).toString("base64"))}async function oe(e,t){let r=t.jpegQuality??90;n8(r),n6(t.targetSize,"targetSize");let{body:n,mimeType:o}=oc(e),i=nK.Buffer.from(n,"base64"),a=nG(i);if(t.sourceSize&&(n6(t.sourceSize,"sourceSize"),t.sourceSize.width!==a.width||t.sourceSize.height!==a.height))throw Error(`sourceSize ${t.sourceSize.width}x${t.sourceSize.height} does not match encoded image dimensions ${a.width}x${a.height}`);let s=a.width===t.targetSize.width&&a.height===t.targetSize.height,l=n4(i);if(s&&(null==l?void 0:l.toLowerCase())==="image/jpeg")return n7("jpeg",n);let{buffer:c}=await n1((null==l?void 0:l.split("/")[1])??o.split("/")[1],i,t.targetSize,{sourceSize:a,preserveOriginalWhenUnchanged:!1,jpegQuality:r});return n7("jpeg",c.toString("base64"))}async function ot(e){let{PhotonImage:t}=await nW(),{body:r}=oc(e);return t.new_from_base64(r)}async function or(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28,r=e.get_width(),n=e.get_height(),o=Math.ceil(r/t)*t,i=Math.ceil(n/t)*t;if(o===r&&i===n)return{width:r,height:n,image:e};let{padding_right:a,padding_bottom:s,Rgba:l}=await nW(),c=o-r,A=i-n,u=e;if(c>0&&(u=a(u,c,new l(255,255,255,255))),A>0){let t=new l(255,255,255,255),r=u;u=s(r,A,t),r!==e&&r.free()}return{width:o,height:i,image:u}}async function on(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28;if(eH.$9){let{body:r}=oc(e),n=nK.Buffer.from(r,"base64"),o=await nH(),i=await o(n).metadata(),a=i.width,s=i.height;if(!a||!s)throw Error("Failed to get image dimensions");let l=Math.ceil(a/t)*t,c=Math.ceil(s/t)*t;if(l===a&&c===s)return{width:a,height:s,imageBase64:e};let A=await o(n).extend({right:l-a,bottom:c-s,background:{r:255,g:255,b:255,alpha:1}}).jpeg({quality:90}).toBuffer();return{width:l,height:c,imageBase64:n7("jpeg",A.toString("base64"))}}let r=await ot(e);try{let e=await or(r,t),n={width:e.width,height:e.height,imageBase64:await oi(e.image)};return e.image!==r&&e.image.free(),n}finally{r.free()}}async function oo(e,t){if(eH.$9){let{body:r}=oc(e),n=await nH(),o=Math.trunc(t.left),i=Math.trunc(t.top),a=Math.trunc(t.left+t.width)-o,s=Math.trunc(t.top+t.height)-i,l=await n(nK.Buffer.from(r,"base64")).extract({left:o,top:i,width:a,height:s}).jpeg({quality:90}).toBuffer();return{width:a,height:s,imageBase64:n7("jpeg",l.toString("base64"))}}let{crop:r}=await nW(),n=await ot(e),{left:o,top:i,width:a,height:s}=t,l=r(n,o,i,o+a,i+s);n.free();try{return{width:l.get_width(),height:l.get_height(),imageBase64:await oi(l)}}finally{l.free()}}async function oi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90,r=e.get_bytes_jpeg(t),n=nK.Buffer.from(r).toString("base64");return`data:image/jpeg;base64,${n}`}let oa=async e=>{let t=await fetch(e);if(!t.ok)throw Error(`Failed to fetch image: ${e}`);let r=t.headers.get("content-type");if(!r)throw Error(`Failed to fetch image: ${e}`);nU()(r.startsWith("image/"),`The url ${e} is not a image, because of content-type in header is ${r}.`);let n=nK.Buffer.from(await t.arrayBuffer());return`data:${r};base64,${n.toString("base64")}`},os=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,nZ.readFileSync)(e).toString("base64");if(t)return r;let n=tl().extname(e).slice(1);return`data:image/${"svg"===n?"svg+xml":n||"jpg"};base64,${r}`},ol=async(e,t)=>{if("string"!=typeof e)throw Error(`url must be a string, but got ${e} with type ${typeof e}`);if(e.startsWith("data:")){let{mimeType:t,body:r}=oc(e);return`data:${t};base64,${r}`}return e.startsWith("http://")||e.startsWith("https://")?t?await oa(e):e:await os(e)},oc=e=>{try{let t=";base64,",r=e.indexOf(t);if(-1===r){let t=e.replace(/\s/g,""),r=n4(nK.Buffer.from(t,"base64"));if(!r)throw Error("Invalid base64 string");return{mimeType:r,body:t}}return{mimeType:e.slice(5,r),body:e.slice(r+t.length).replace(/\s/g,"")}}catch(t){throw Error(`parseBase64 fail because intput is not a valid base64 string: ${e}`,{cause:t})}};async function oA(e,t){if(t<=0)throw Error("Scale factor must be positive");let{body:r}=oc(e),n=nK.Buffer.from(r,"base64"),o=Date.now();if(n0(`scaleImage start, scale factor: ${t}`),eH.$9){let e=await nH(),r=await e(n).metadata(),i=r.width||0,a=r.height||0;if(0===i||0===a)throw Error("Failed to get image dimensions");let s=Math.round(i*t),l=Math.round(a*t),c=await e(n).resize(s,l,{kernel:"lanczos3",fit:"fill"}).jpeg({quality:90}).toBuffer(),A=Date.now();return n0(`scaleImage done (Sharp): ${i}x${a} -> ${s}x${l} (scale=${t}), cost: ${A-o}ms`),{width:s,height:l,imageBase64:`data:image/jpeg;base64,${c.toString("base64")}`}}let{PhotonImage:i,SamplingFilter:a,resize:s}=await nW(),l=new Uint8Array(n),c=i.new_from_byteslice(l),A=c.get_width(),u=c.get_height();if(!A||!u)throw c.free(),Error("Failed to get image dimensions");let d=Math.round(A*t),p=Math.round(u*t),h=s(c,d,p,a.CatmullRom),m=h.get_bytes_jpeg(90),f=nK.Buffer.from(m);c.free(),h.free();let g=Date.now();return n0(`scaleImage done (Photon): ${A}x${u} -> ${d}x${p} (scale=${t}), cost: ${g-o}ms`),{width:d,height:p,imageBase64:`data:image/jpeg;base64,${f.toString("base64")}`}}async function ou(e,t){nU()(Number.isInteger(t)&&t>0,"minimum must be a positive integer");let{body:r}=oc(e),n=nK.Buffer.from(r,"base64"),o=nG(n),i=Math.max(t,o.width),a=Math.max(t,o.height);if(i===o.width&&a===o.height)return{imageBase64:e,width:i,height:a};if(eH.$9){let e=await nH();return{imageBase64:n7("jpeg",(await e(n).extend({right:i-o.width,bottom:a-o.height,background:{r:255,g:255,b:255,alpha:1}}).jpeg({quality:90}).toBuffer()).toString("base64")),width:i,height:a}}let{padding_right:s,padding_bottom:l,Rgba:c}=await nW(),A=await ot(e),u=i>o.width?s(A,i-o.width,new c(255,255,255,255)):A;try{let e=a>o.height?l(u,a-o.height,new c(255,255,255,255)):u;try{return{imageBase64:await oi(e),width:i,height:a}}finally{e!==u&&e.free()}}finally{u!==A&&u.free(),A.free()}}let od=async e=>{let t=[];for(let r of(null==e?void 0:e.images)??[])t.push({name:r.name,url:await ol(r.url,!!(null==e?void 0:e.convertHttpImage2Base64))});return t},op=async e=>({text:r2(e),referenceImages:await od(r3(e))}),oh=e=>0===e.length?[]:[{role:"user",content:[{type:"text",text:"Next, I will provide all the reference images. These reference images are supporting context only, not the current screenshot being evaluated, unless the task explicitly asks for comparison or matching."}]},...e.flatMap(e=>[{role:"user",content:[{type:"text",text:`this is the reference image named '${e.name}'. It is a reference image, not the current screenshot:`}]},{role:"user",content:[{type:"image",url:e.url}]}])],om=async e=>oh(await od(e)),of=e=>{if(0===e.length)return"";let t=e.map(e=>`${e.index}. ${e.description} (${e.status})`),r=e.find(e=>"running"===e.status)||e.find(e=>"pending"===e.status),n="";if(r){var o;if(n=`
25
+ Current sub-goal is: ${r.description}`,null==(o=r.logs)?void 0:o.length){let e=r.logs.map(e=>`- ${e}`).join("\n");n+=`
26
+ Actions performed for current sub-goal:
27
+ ${e}`}}return`Sub-goals:
28
+ ${t.join("\n")}${n}`};function og(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}i=Symbol.iterator;class oy{resetPendingFeedbackMessageIfExists(){this.pendingFeedbackMessage&&(this.pendingFeedbackMessage="")}appendMessage(e){this.messages.push({type:"input-message",message:e})}appendModelOutput(e){this.messages.push({type:"model-output",output:e})}seed(e){this.reset(),this.messages.push(...e)}reset(){this.messages.length=0,this.memories.length=0,this.subGoals.length=0,this.historicalLogs.length=0,this.pendingFeedbackMessage=""}snapshot(e){if(void 0===e)return[...this.messages];let t=structuredClone(this.messages),r=0;for(let n=t.length-1;n>=0;n--){let o=t[n];if("input-message"!==o.type)continue;let i=o.message.content;if(Array.isArray(i))for(let t=0;t<i.length;t++)"image"===i[t].type&&++r>e&&(i[t]={type:"text",text:"(image ignored due to size optimization)"})}return t}get length(){return this.messages.length}[i](){return this.messages[Symbol.iterator]()}toJSON(){return this.snapshot()}setSubGoals(e){this.subGoals=e.map(e=>({...e})),this.markFirstPendingAsRunning()}mergeSubGoals(e){if(0===this.subGoals.length)return void this.setSubGoals(e);let t=new Map(this.subGoals.map(e=>[e.index,e])),r=e.map(e=>{let r=t.get(e.index),n=e.description.trim().length>0;return r||n?{...e,description:n||!r?e.description:r.description}:null}).filter(e=>null!==e);0!==r.length&&this.setSubGoals(r)}updateSubGoal(e,t){let r=this.subGoals.find(t=>t.index===e);if(!r)return!1;let n=!1;return void 0!==t.status&&t.status!==r.status&&(r.status=t.status,n=!0),void 0!==t.description&&t.description!==r.description&&(r.description=t.description,n=!0),n&&(r.logs=[]),!0}markFirstPendingAsRunning(){let e=this.subGoals.find(e=>"pending"===e.status);e&&(e.status="running",e.logs=[])}markSubGoalFinished(e){let t=this.updateSubGoal(e,{status:"finished"});return t&&this.markFirstPendingAsRunning(),t}markAllSubGoalsFinished(){for(let e of this.subGoals)"finished"!==e.status&&(e.logs=[]),e.status="finished"}appendSubGoalLog(e){if(!e)return;let t=this.subGoals.find(e=>"running"===e.status);t&&(t.logs||(t.logs=[]),t.logs.push(e))}subGoalsToText(){return of(this.subGoals)}appendHistoricalLog(e){e&&this.historicalLogs.push(e)}historicalLogsToText(){if(0===this.historicalLogs.length)return"";let e=this.historicalLogs.map(e=>`- ${e}`).join("\n");return`Here are the steps that have been executed:
29
+ ${e}`}appendMemory(e){e&&this.memories.push(e)}getMemories(){return[...this.memories]}memoriesToText(){return 0===this.memories.length?"":`Memories from previous steps:
30
+ ---
31
+ ${this.memories.join("\n---\n")}
32
+ `}clearMemories(){this.memories.length=0}compressHistory(e,t){if(this.messages.length<=e)return!1;let r=this.messages.length-t,n={role:"user",content:`(${r} previous conversation messages have been omitted)`},o=this.messages.slice(-t);for(let e of(this.messages.length=0,this.appendMessage(n),o))this.messages.push(e);return!0}constructor(e){var t;og(this,"messages",[]),og(this,"subGoals",[]),og(this,"memories",[]),og(this,"historicalLogs",[]),og(this,"pendingFeedbackMessage",void 0),(null==e||null==(t=e.initialMessages)?void 0:t.length)&&this.seed(e.initialMessages),this.pendingFeedbackMessage=""}}async function ov(e){let{imageBase64:t,width:r,height:n,policy:o}=e,i=t,a=r,s=n;if(void 0!==o.padBlockSize){let e=await on(t,o.padBlockSize);i=e.imageBase64,a=e.width,s=e.height}return{imageBase64:i,preparedSize:{width:a,height:s},contentSize:{width:r,height:n}}}function ob(e){let{resultKey:t,resultKeyAliases:r=[]}=e;return[t,...r]}function ow(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=ob(t).map(e=>`${r}${e}`).find(t=>void 0!==e[t]);return void 0===n?void 0:e[n]}let oE=(0,e0.aZ)("planning");function ox(e,t){let{includeLocateInPlanning:r,locateResultCodec:n,locateResultContext:o}=t;if(!r)return{prompt:e.prompt};(0,eH.vA)(n,"planning locate normalization requires a locate result codec");let{promptSpec:i}=n,a=ow(e,i),s=new Set(ob(i)),l=Object.fromEntries(Object.entries(e).filter(e=>{let[t]=e;return!s.has(t)})),c=n.toPixelResult(a,o);return{...l,locatedPixelResult:c}}async function ok(e,t,r){var n,o;let i,a,s,{context:l}=t,c=await ov({imageBase64:l.screenshot.base64,width:l.shotSize.width,height:l.shotSize.height,policy:t.modelRuntime.adapter.imagePreprocess}),A={...t,context:{...l,screenshot:nF.create(c.imageBase64,l.screenshot.capturedAt),shotSize:c.preparedSize}},u={userInstruction:e,options:A,coordinateSystem:r.coordinateSystem},d=function(e,t){let{options:r}=e,{conversationHistory:n,context:o,actionContext:i}=r,a=t.buildSystemPrompt()+(i?`${i}
33
+ `:""),s=e.userInstruction.text,l=t.buildUserInstruction?t.buildUserInstruction(s):s,c=oh(e.userInstruction.referenceImages);return(n.pendingFeedbackMessage&&(n.appendMessage({role:"user",content:[{type:"text",text:`${n.pendingFeedbackMessage}. The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.`}]}),n.resetPendingFeedbackMessageIfExists()),n.appendMessage({role:"user",content:[{type:"image",url:o.screenshot.base64}]}),"system-message"===t.systemPromptPlacement)?[{role:"system",content:a},{role:"user",content:[{type:"text",text:l}]},...c,...n.snapshot(t.historyImageLimit)]:[{role:"user",content:`${a}${l}`},...c,...n.snapshot(t.historyImageLimit)]}(u,r.messages),{content:p,usage:h,rawAssistantOutput:m}=await rO(d,A.modelRuntime,{abortSignal:A.abortSignal,requiresOriginalImageDetail:A.includeLocateInPlanning});try{i=r.parseResponse(p,u),a=r.transformActions(i,u),function(e,t){let{actionSpace:r,...n}=t;e.forEach(e=>{let t=r.find(t=>t.name===e.type);if(!t)return void oE("skip locate normalization for action outside actionSpace",e);oE("actionInActionSpace matched",t);let o=r7(t.paramSchema);oE("locateFields",o),o.forEach(t=>{var r;let o=null==(r=e.param)?void 0:r[t];o&&(e.param[t]=ox(o,n))})})}(a,{actionSpace:A.actionSpace,includeLocateInPlanning:A.includeLocateInPlanning,locateResultCodec:r.coordinateNormalizer,locateResultContext:{preparedSize:c.preparedSize,contentSize:c.contentSize}}),s=r.shouldContinuePlanning(i,a)}catch(e){throw new ty(`Parse error: ${e instanceof Error?e.message:String(e)}`,JSON.stringify(p,void 0,2),h,m)}let f=null==(n=(o=r.messages).buildAssistantContent)?void 0:n.call(o,i,p,u);return(null==m?void 0:m.type)==="responses"&&t.modelRuntime.adapter.responses.replayRawAssistantOutput?t.conversationHistory.appendModelOutput(m):f&&t.conversationHistory.appendMessage({role:"assistant",content:f}),{actions:a,log:r.buildResponseLog(i,p),usage:h,shouldContinuePlanning:s,rawResponse:JSON.stringify(p,void 0,2),rawAssistantOutput:m}}let oS=(0,e0.aZ)("ai:grounding"),oI=[{name:"Tap",description:"Tap the element",paramSchema:rm.Ik({locate:r5}),call:async()=>void 0}];async function oC(e){let{options:t,locateImage:r}=e,{context:n}=t;return{...t,context:{...n,screenshot:nF.create(r.imageBase64,n.screenshot.capturedAt),shotSize:{width:r.width,height:r.height}},actionSpace:oI,conversationHistory:new oy,includeLocateInPlanning:!0,effort:"balance"}}let oO=`## Role:
34
+ You are an AI assistant that helps identify UI elements.
35
+
36
+ ## Objective:
37
+ - Identify elements in screenshots that match the user's description.
38
+ - Provide the coordinates of the element that matches the user's description.`,oR=`## Role:
39
+ You are an AI assistant that helps identify UI elements.
40
+
41
+ ## Objective:
42
+ - Find a section containing the target element
43
+ - If the description mentions reference elements, also locate sections containing those references`,oj=e=>{let t=tX(),r=e.resultKey,n=rq(e.exampleValues[0]),o=`the ${e.resultNoun} of the element that matches the user's description`;return`## Output Format:
44
+ \`\`\`json
45
+ {
46
+ "${r}": ${e.resultValueSchema}, // ${e.resultValueDescription}
47
+ "error": string // optional
48
+ }
49
+ \`\`\`
50
+
51
+ Fields:
52
+ * \`${r}\` is ${o}
53
+ * \`error\` is an optional error message (if any)
54
+
55
+ For example, when an element is found:
56
+ \`\`\`json
57
+ {
58
+ "${r}": ${n}
59
+ }
60
+ \`\`\`
61
+
62
+ When no element is found:
63
+ \`\`\`json
64
+ {
65
+ "${r}": [],
66
+ "error": "I can see ..., but {some element} is not found. Use ${t}."
67
+ }
68
+ \`\`\`
69
+ `},oP=e=>`Find: ${e}`,oM=e=>{let t=tX(),r=e.resultKey,n=rq(e.exampleValues[0]),o=`"${r}": ${e.resultValueSchema}, // ${e.resultValueDescription}`,i=`${e.resultNoun} of the section containing the target element`,a=`Optional array of ${e.resultNounPlural} of reference elements`;return`## Output Format:
70
+ \`\`\`json
71
+ {
72
+ ${o}
73
+ "references_${r}"?: [
74
+ ${e.resultValueSchema},
75
+ ...
76
+ ],
77
+ "error"?: string
78
+ }
79
+ \`\`\`
80
+
81
+ Fields:
82
+ * \`${r}\` - ${i}
83
+ * \`references_${r}\` - ${a}
84
+ * \`error\` - Optional error message if the section cannot be found. Use ${t}.
85
+
86
+ Example:
87
+ If the description is "delete button on the second row with title 'Peter'", return:
88
+ \`\`\`json
89
+ {
90
+ "${r}": ${n},
91
+ "references_${r}": [${n}]
92
+ }
93
+ \`\`\`
94
+ `},oT=e=>`Find section containing: ${e}`,oN=(e,t,r)=>(n,o)=>{let i=e(n,{source:t});eV(i);let a=ow(i,o),s="string"==typeof i.error?i.error:void 0;if(void 0===a)throw Error(`Missing required coordinate field "${o.resultKey}". Expected "${o.resultKey}": ${o.resultValueSchema}; use an empty array when no element is found.${s?` Model error: ${s}`:""}`);if(Array.isArray(a)&&0===a.length)return{kind:"not-found",...s?{error:s}:{}};if(!r.includeReferences)return{kind:"located",target:a,...s?{error:s}:{}};let l=ow(i,o,"references_"),c=null==l?void 0:Array.isArray(l)?l:[l];return{kind:"located",target:a,...(null==c?void 0:c.length)?{references:c}:{},...s?{error:s}:{}}},oD=e=>{let{jsonParser:t}=e;return{systemPromptIntroduction:oO,buildResponseInstructions:oj,buildUserPrompt:oP,expectedJsonObjectResponse:!0,parseRawResponse:oN(t,"locate",{includeReferences:!1})}},oz=e=>{let{jsonParser:t}=e;return{systemPromptIntroduction:oR,buildResponseInstructions:oM,buildUserPrompt:oT,expectedJsonObjectResponse:!0,parseRawResponse:oN(t,"section-locator",{includeReferences:!0})}},oB={coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}},oF=(e,t)=>"function"==typeof e?e(t):e;function oL(e){if(!e._def)return e;let t=e._def.typeName;return"ZodOptional"===t||"ZodNullable"===t||"ZodDefault"===t?oL(e._def.innerType):"ZodEffects"===t&&e._def.schema?oL(e._def.schema):e}function oU(e){var t,r,n;let o=oL(e);if((null==(t=o._def)?void 0:t.typeName)==="ZodObject"){let e=null==(r=(n=o._def).shape)?void 0:r.call(n);if(e&&"prompt"in e&&e.prompt)return!0}return!1}function oK(e){var t,r,n,o;let i=oL(e),a=null==(t=i._def)?void 0:t.typeName;if("ZodString"===a)return"string";if("ZodNumber"===a)return"number";if("ZodBoolean"===a)return"boolean";if("ZodArray"===a)return"array";if("ZodObject"===a)return"object";if("ZodEnum"===a){let e=(null==(n=i._def)||null==(r=n.values)?void 0:r.map(e=>String(`'${e}'`)).join(", "))??"enum";return`enum(${e})`}if("ZodUnion"===a){let e=null==(o=i._def)?void 0:o.options;return e&&e.length>0?e.map(e=>oK(e)).join(" | "):"union"}return"unknown"}function oZ(e){if("description"in e)return e.description||null;let t=oL(e);return"description"in t?t.description||null:oU(t)?"Location information for the target element":null}let oJ=e=>{let t=e,r=new Set;for(;t&&!r.has(t);){var n,o,i;r.add(t);let e=t;if(!(null==(n=e._def)?void 0:n.typeName))break;if("ZodDefault"===e._def.typeName)return null==(o=(i=e._def).defaultValue)?void 0:o.call(i);if("ZodOptional"===e._def.typeName||"ZodNullable"===e._def.typeName)t=e._def.innerType;else break}},oQ=e=>{let{action:t,locateFieldDescription:r,actionOutputExample:n}=e,o={type:t.name,description:t.description||"No description provided"};if(t.paramSchema){var i;let e=t.paramSchema;if((null==(i=e._def)?void 0:i.typeName)==="ZodObject"&&e.shape){let t={};for(let[n,o]of Object.entries(e.shape))if(o&&"object"==typeof o){let e="function"==typeof o.isOptional&&o.isOptional(),i=oU(o)?r:oK(o),a=oZ(o),s=oJ(o),l=void 0!==s,c={type:i};e&&(c.optional=!0),a&&(c.description=a),l&&(c.default=s),t[n]=c}Object.keys(t).length>0&&(o.param=t)}else{let t=oK(e),r=oZ(e),n={type:t,instruction:"Pass the value directly, not as an object."};r&&(n.description=r),o.param=n}}return n&&(o.sample=n),o},oq=e=>e?`{ prompt: string, ${e.resultKey}: ${e.resultValueSchema} /* ${e.resultValueDescription} */ }`:"{ prompt: string /* description of the target element */ }",oX=e=>{let{actionName:t,param:r,locateFields:n,locateResultKey:o}=e;return`<action-type>${t}</action-type>
95
+ <action-param-json>
96
+ ${n&&o?((e,t,r)=>{let n=new WeakSet;for(let r of t){let t=e[r];t&&"object"==typeof t&&n.add(t)}let o=JSON.stringify(e),i="__MIDSCENE_LOCATE_RESULT_EXAMPLE_";for(;o.includes(i);)i=`_${i}`;let a=new Map,s=JSON.stringify(e,function(e,t){if(n.has(this)&&e===r){let e=`${i}${a.size}__`;return a.set(e,rq(t)),e}return t},2);return[...a].reduce((e,t)=>{let[r,n]=t;return e.replace(JSON.stringify(r),n)},s)})(r,n,o):JSON.stringify(r,null,2)}
97
+ </action-param-json>`},oW=e=>{let{jsonParser:t}=e;return{actionSpaceProtocol:{title:"Supporting actions list",format:"yaml",includeActionOutputExample:!0,buildLocateFieldDescription:oq,buildActionDescription:oQ},actionOutputProtocol:{actionOutputTagNames:["action-type","action-param-json"],actionOutputRules:"- Use the <action-type> and <action-param-json> tags to output the action to be executed.\n- The value inside <action-type> MUST exactly match the 'type' field of one action in the Supporting actions list. 'complete' is NOT a valid action-type.\n- Parameter names are strict. Use EXACTLY the field names listed for the selected action. Do NOT invent alias fields. If the selected action provides a \"sample\" field, use the XML structure shown in that sample as the exact format for the action output.",actionOutputPlaceholder:"<action-type>...</action-type>\n<action-param-json>...</action-param-json>",buildActionOutput:oX,parseActionOutput:e=>{let r,n=rT(e,"action-type"),o=rT(e,"action-param-json");if(!n||"null"===n.toLowerCase())return null;let i=n.split("<")[0].trim();if(o)try{r=t(o,{source:"planning-action-param",preserveStringValueKeys:"input"===i.toLowerCase()?["value"]:void 0}),eV(r)}catch(e){throw Error(`Failed to parse action-param-json: ${e}`)}return{type:i,...void 0!==r?{param:r}:{}}},parseRawLocateParameter:e=>e}}},oH={temperature:0},oY=e=>{let{midsceneDefaults:t,userConfig:r}=e;return{config:{temperature:r.temperature??t.temperature}}};function oG(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let oV=e=>{let{imageDetail:t}=e;return t??"high"};class o${constructor(e,t){var r;oG(this,"supportedTasks",void 0),oG(this,"supportedProtocols",void 0),oG(this,"jsonParser",void 0),oG(this,"chatCompletion",void 0),oG(this,"resolveImageDetail",void 0),oG(this,"responses",void 0),oG(this,"buildCodexAppServerParams",void 0),oG(this,"imagePreprocess",void 0),oG(this,"insight",void 0),oG(this,"planning",void 0),oG(this,"locate",void 0),this.supportedTasks=e.supportedTasks,this.supportedProtocols=e.supportedProtocols??["openai-chat"],this.jsonParser=function(e){if(!e||"lenient-json"===e)return e_;if("function"==typeof e)return e;throw Error(`Unknown json parser preset: ${e}`)}(e.jsonParser),this.chatCompletion=function(e){var t,r;let n,o=(null==e?void 0:e.buildChatCompletionParams)??rj,i=(null==e?void 0:e.unsupportedUserConfig)??[],a=(null==(n=null==(t=e)?void 0:t.messageExtraction)?void 0:n.kind)==="custom"?n.extractContentAndReasoning:(r=(null==n?void 0:n.reasoningContentKeys)??["reasoning_content"],e=>{if(!e)return{content:"",reasoning_content:""};let t=r.map(t=>e[t]).find(e=>"string"==typeof e);return{content:"string"==typeof e.content?e.content:"",reasoning_content:"string"==typeof t?t:""}});return{unsupportedUserConfig:i,buildChatCompletionParams:e=>{var t;let r=o({...e,userConfig:e.userConfig??{},midsceneDefaults:rP});return{...r,config:{...r.config,temperature:rR({temperature:r.config.temperature,userTemperature:null==(t=e.userConfig)?void 0:t.temperature,semanticRetryAttempt:e.semanticRetryAttempt})}}},extractContentAndReasoning:a,useReasoningAsContentFallback:(null==e?void 0:e.useReasoningAsContentFallback)??!1,replayRawAssistantMessage:(null==e?void 0:e.replayRawAssistantMessage)??!1}}(e.chatCompletion),this.resolveImageDetail=e.resolveImageDetail??oV,this.responses=function(e){let t=(null==e?void 0:e.buildResponsesParams)??oY;return{replayRawAssistantOutput:(null==e?void 0:e.replayRawAssistantOutput)??!1,unsupportedUserConfig:(null==e?void 0:e.unsupportedUserConfig)??[],buildResponsesParams:e=>{var r;let n=t({...e,userConfig:e.userConfig??{},midsceneDefaults:oH});return{...n,config:{...n.config,temperature:rR({temperature:n.config.temperature,userTemperature:null==(r=e.userConfig)?void 0:r.temperature,semanticRetryAttempt:e.semanticRetryAttempt})}}}}}(e.responses),this.buildCodexAppServerParams=e.buildCodexAppServerParams??rM,this.imagePreprocess=function(e){return{padBlockSize:null==e?void 0:e.padBlockSize}}(e.imagePreprocess),this.insight=function(e,t){var r;let n;return{booleanFn:null==e?void 0:e.booleanFn,protocol:(r=null==e?void 0:e.protocol,"function"==typeof(n=r??rz)?n(t):n)}}(e.insight,{jsonParser:this.jsonParser});const n=(null==(r=e.planning)?void 0:r.kind)==="custom"?e.planning.planner:void 0,o=n?function(e){let{coordinates:t,...r}=e,n=rH(t),o=rY({coordinates:t});return{...r,coordinateSystem:n,coordinateNormalizer:o}}(n):void 0;this.locate=function(e,t,r){var n,o,i,a;if((null==e?void 0:e.kind)==="custom"){let r=e.locateFn;if(!r){let n,o=e.planningTapLocator;if(!o)throw Error("Custom locate definition requires either locateFn or planningTapLocator");if(!t)throw Error("Custom planning tap locator requires a custom planning planner definition");n={...t,messages:{...t.messages,buildSystemPrompt:o.buildSystemPrompt,buildUserInstruction:e=>`Tap: ${e}`}},r=async e=>{let t,r,{targetElementDescription:i}=e;(0,eH.vA)(i,"cannot find the target element description");let a=[],s="",l="";try{let a=await oC(e),c=await ok(await op(i),a,n);l=c.rawResponse??"",t=c.rawAssistantOutput,r=c.usage,s=c.log,oS("planning-tap-locator rawResponse:",l);let A=o.getLocatedPixelResult(c.actions??[]);if(!A)throw Error("No locatedPixelResult found in planner response");return{locatedPixelResult:A,rawResponse:l,rawAssistantOutput:t,usage:r,reasoningContent:s}}catch(n){let e=n instanceof Error?n.message:String(n);n instanceof ty&&(l=n.rawResponse,t=n.rawAssistantOutput,r=n.usage),oS("planning-tap-locator parse error:",(a=[e||"Failed to parse planning tap locator response"])[0])}return{rawResponse:l,rawAssistantOutput:t,usage:r,reasoningContent:s,errors:a}}}return{kind:"custom",locateFn:r}}let s=oF((null==e||null==(n=e.element)?void 0:n.protocol)??oD,r),l=(null==e||null==(o=e.element)?void 0:o.resultFormat)??oB,c=rY(l),A=(null==e?void 0:e.searchArea)===!1?void 0:oF((null==e||null==(i=e.searchArea)?void 0:i.protocol)??oz,r),u=(null==e?void 0:e.searchArea)===!1?void 0:(null==e||null==(a=e.searchArea)?void 0:a.resultFormat)??l,d=u?rY(u):void 0;return{kind:"standard",userMessageContentOrder:(null==e?void 0:e.userMessageContentOrder)??"image-first",element:{protocol:s,resultCodec:c},...A&&d?{searchArea:{protocol:A,resultCodec:d}}:{}}}(e.locate,o,{jsonParser:this.jsonParser}),this.planning=function(e,t,r,n){if((null==e?void 0:e.kind)==="custom"){if("function"==typeof e.planFn)return{kind:"custom",cacheEnabled:e.cacheEnabled??!1,defaultReplanningCycleLimit:e.defaultReplanningCycleLimit??20,supportsActionDeepLocate:e.supportsActionDeepLocate??!1,planFn:e.planFn};if(!t)throw Error("Custom planning planner definition is not resolved");return{kind:"custom",cacheEnabled:e.cacheEnabled??!1,defaultReplanningCycleLimit:e.defaultReplanningCycleLimit??20,supportsActionDeepLocate:e.supportsActionDeepLocate??!1,coordinateSystem:t.coordinateSystem,planFn:(e,r)=>ok(e,r,t)}}let o=(null==e?void 0:e.protocol)??oW,i=(null==e?void 0:e.locateResultFormat)===!1?void 0:(null==e?void 0:e.locateResultFormat)?rY(e.locateResultFormat):n;return{kind:"standard",cacheEnabled:(null==e?void 0:e.cacheEnabled)??!0,defaultReplanningCycleLimit:(null==e?void 0:e.defaultReplanningCycleLimit)??20,supportsActionDeepLocate:(null==e?void 0:e.supportsActionDeepLocate)??!0,protocol:"function"==typeof o?o(r):o,locateResultCodec:i}}(e.planning,o,{jsonParser:this.jsonParser},"standard"===this.locate.kind?this.locate.element.resultCodec:void 0)}}function o_(e){for(let t of e)if("Tap"===t.type)return t.param.locate.locatedPixelResult}function o0(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][e.getDay()];return`${t}-${r}-${n}, ${o}`}function o1(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),o=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"][e.getDay()];return`${t}年${r}月${n}日 ${o}`}let o2=(0,e0.aZ)("auto-glm-actions"),o3=["AndroidBackButton","HarmonyBackButton"],o5=["AndroidHomeButton","HarmonyHomeButton"];function o4(e,t,r){if(!e)return r;let n=e.find(e=>t.includes(e.name));return n?n.name:r}let o7=(0,e0.aZ)("auto-glm-parser"),o8=(e,t)=>{let r=e.indexOf(t);if(-1===r)throw Error(`Missing key ${t} in action payload ${e}`);let n=e.slice(r+t.length).trim();return n.endsWith('")')&&(n=n.slice(0,-2)),n};function o6(e){return{chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,n={};return void 0!==r.temperature&&(n.temperature=r.temperature),{config:{...t,...n,top_p:.85,frequency_penalty:.2}}}},planning:{kind:"custom",cacheEnabled:!1,defaultReplanningCycleLimit:100,planner:{messages:{systemPromptPlacement:"system-message",buildSystemPrompt:()=>e?`
98
+ The current date: ${o0()}
99
+
100
+ # Setup
101
+ You are a professional Android operation agent assistant that can fulfill the user's high-level instructions. Given a screenshot of the Android interface at each step, you first analyze the situation, then plan the best course of action using Python-style pseudo-code.
102
+
103
+ # More details about the code
104
+ Your response format must be structured as follows:
105
+
106
+ Think first: Use <think>...</think> to analyze the current screen, identify key elements, and determine the most efficient action.
107
+ Provide the action: Use <answer>...</answer> to return a single line of pseudo-code representing the operation.
108
+
109
+ Your output should STRICTLY follow the format:
110
+ <think>
111
+ [Your thought]
112
+ </think>
113
+ <answer>
114
+ [Your operation code]
115
+ </answer>
116
+
117
+ - **Tap**
118
+ Perform a tap action on a specified screen area. The element is a list of 2 integers, representing the coordinates of the tap point.
119
+ **Example**:
120
+ <answer>
121
+ do(action="Tap", element=[x,y])
122
+ </answer>
123
+ - **Type**
124
+ Enter text into the currently focused input field.
125
+ **Example**:
126
+ <answer>
127
+ do(action="Type", text="Hello World")
128
+ </answer>
129
+ - **Swipe**
130
+ Perform a swipe action with start point and end point.
131
+ **Examples**:
132
+ <answer>
133
+ do(action="Swipe", start=[x1,y1], end=[x2,y2])
134
+ </answer>
135
+ - **Long Press**
136
+ Perform a long press action on a specified screen area.
137
+ You can add the element to the action to specify the long press area. The element is a list of 2 integers, representing the coordinates of the long press point.
138
+ **Example**:
139
+ <answer>
140
+ do(action="Long Press", element=[x,y])
141
+ </answer>
142
+ - **Launch**
143
+ Launch an app. Try to use launch action when you need to launch an app. Check the instruction to choose the right app before you use this action.
144
+ **Example**:
145
+ <answer>
146
+ do(action="Launch", app="Settings")
147
+ </answer>
148
+ - **Back**
149
+ Press the Back button to navigate to the previous screen.
150
+ **Example**:
151
+ <answer>
152
+ do(action="Back")
153
+ </answer>
154
+ - **Finish**
155
+ Terminate the program and optionally print a message.
156
+ **Example**:
157
+ <answer>
158
+ finish(message="Task completed.")
159
+ </answer>
160
+
161
+
162
+ REMEMBER:
163
+ - Think before you act: Always analyze the current UI and the best course of action before executing any step, and output in <think> part.
164
+ - Only ONE LINE of action in <answer> part per response: Each step must contain exactly one line of executable code.
165
+ - Generate execution code strictly according to format requirements.
166
+ `:`
167
+ 今天的日期是: ${o1()}
168
+
169
+ 你是一个智能体分析专家,可以根据操作历史和当前状态图执行一系列操作来完成任务。
170
+ 你必须严格按照要求输出以下格式:
171
+ <think>{think}</think>
172
+ <answer>{action}</answer>
173
+
174
+ 其中:
175
+ - {think} 是对你为什么选择这个操作的简短推理说明。
176
+ - {action} 是本次执行的具体操作指令,必须严格遵循下方定义的指令格式。
177
+
178
+ 操作指令及其作用如下:
179
+ - do(action="Launch", app="xxx")
180
+ Launch是启动目标app的操作,这比通过主屏幕导航更快。此操作完成后,您将自动收到结果状态的截图。
181
+ - do(action="Tap", element=[x,y])
182
+ Tap是点击操作,点击屏幕上的特定点。可用此操作点击按钮、选择项目、从主屏幕打开应用程序,或与任何可点击的用户界面元素进行交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
183
+ - do(action="Tap", element=[x,y], message="重要操作")
184
+ 基本功能同Tap,点击涉及财产、支付、隐私等敏感按钮时触发。
185
+ - do(action="Type", text="xxx")
186
+ Type是输入操作,在当前聚焦的输入框中输入文本。使用此操作前,请确保输入框已被聚焦(先点击它)。输入的文本将像使用键盘输入一样输入。重要提示:手机可能正在使用 ADB 键盘,该键盘不会像普通键盘那样占用屏幕空间。要确认键盘已激活,请查看屏幕底部是否显示 'ADB Keyboard {ON}' 类似的文本,或者检查输入框是否处于激活/高亮状态。不要仅仅依赖视觉上的键盘显示。自动清除文本:当你使用输入操作时,输入框中现有的任何文本(包括占位符文本和实际输入)都会在输入新文本前自动清除。你无需在输入前手动清除文本——直接使用输入操作输入所需文本即可。操作完成后,你将自动收到结果状态的截图。
187
+ - do(action="Type_Name", text="xxx")
188
+ Type_Name是输入人名的操作,基本功能同Type。
189
+ - do(action="Swipe", start=[x1,y1], end=[x2,y2])
190
+ Swipe是滑动操作,通过从起始坐标拖动到结束坐标来执行滑动手势。可用于滚动内容、在屏幕之间导航、下拉通知栏以及项目栏或进行基于手势的导航。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。滑动持续时间会自动调整以实现自然的移动。此操作完成后,您将自动收到结果状态的截图。
191
+ - do(action="Long Press", element=[x,y])
192
+ Long Pres是长按操作,在屏幕上的特定点长按指定时间。可用于触发上下文菜单、选择文本或激活长按交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的屏幕截图。
193
+ - do(action="Double Tap", element=[x,y])
194
+ Double Tap在屏幕上的特定点快速连续点按两次。使用此操作可以激活双击交互,如缩放、选择文本或打开项目。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
195
+ - do(action="Back")
196
+ 导航返回到上一个屏幕或关闭当前对话框。相当于按下 Android 的返回按钮。使用此操作可以从更深的屏幕返回、关闭弹出窗口或退出当前上下文。此操作完成后,您将自动收到结果状态的截图。
197
+ - do(action="Home")
198
+ Home是回到系统桌面的操作,相当于按下 Android 主屏幕按钮。使用此操作可退出当前应用并返回启动器,或从已知状态启动新任务。此操作完成后,您将自动收到结果状态的截图。
199
+ - do(action="Wait", duration="x seconds")
200
+ 等待页面加载,x为需要等待多少秒。
201
+ - finish(message="xxx")
202
+ finish是结束任务的操作,表示准确完整完成任务,message是终止信息。
203
+
204
+ 必须遵循的规则:
205
+ 0. 严禁调用 Interact、Take_over、Note、Call_API 这四个操作,这些操作暂不支持。
206
+ 1. 在执行任何操作前,先检查当前app是否是目标app,如果不是,先执行 Launch。
207
+ 2. 如果进入到了无关页面,先执行 Back。如果执行Back后页面没有变化,请点击页面左上角的返回键进行返回,或者右上角的X号关闭。
208
+ 3. 如果页面未加载出内容,最多连续 Wait 三次,否则执行 Back重新进入。
209
+ 4. 如果页面显示网络问题,需要重新加载,请点击重新加载。
210
+ 5. 如果当前页面找不到目标联系人、商品、店铺等信息,可以尝试 Swipe 滑动查找。
211
+ 6. 遇到价格区间、时间区间等筛选条件,如果没有完全符合的,可以放宽要求。
212
+ 7. 在做小红书总结类任务时一定要筛选图文笔记。
213
+ 8. 购物车全选后再点击全选可以把状态设为全不选,在做购物车任务时,如果购物车里已经有商品被选中时,你需要点击全选后再点击取消全选,再去找需要购买或者删除的商品。
214
+ 9. 在做外卖任务时,如果相应店铺购物车里已经有其他商品你需要先把购物车清空再去购买用户指定的外卖。
215
+ 10. 在做点外卖任务时,如果用户需要点多个外卖,请尽量在同一店铺进行购买,如果无法找到可以下单,并说明某个商品未找到。
216
+ 11. 请严格遵循用户意图执行任务,用户的特殊要求可以执行多次搜索,滑动查找。比如(i)用户要求点一杯咖啡,要咸的,你可以直接搜索咸咖啡,或者搜索咖啡后滑动查找咸的咖啡,比如海盐咖啡。(ii)用户要找到XX群,发一条消息,你可以先搜索XX群,找不到结果后,将"群"字去掉,搜索XX重试。(iii)用户要找到宠物友好的餐厅,你可以搜索餐厅,找到筛选,找到设施,选择可带宠物,或者直接搜索可带宠物,必要时可以使用AI搜索。
217
+ 12. 在选择日期时,如果原滑动方向与预期日期越来越远,请向反方向滑动查找。
218
+ 13. 执行任务过程中如果有多个可选择的项目栏,请逐个查找每个项目栏,直到完成任务,一定不要在同一项目栏多次查找,从而陷入死循环。
219
+ 14. 在执行下一步操作前请一定要检查上一步的操作是否生效,如果点击没生效,可能因为app反应较慢,请先稍微等待一下,如果还是不生效请调整一下点击位置重试,如果仍然不生效请跳过这一步继续任务,并在finish message说明点击不生效。
220
+ 15. 在执行任务中如果遇到滑动不生效的情况,请调整一下起始点位置,增大滑动距离重试,如果还是不生效,有可能是已经滑到底了,请继续向反方向滑动,直到顶部或底部,如果仍然没有符合要求的结果,请跳过这一步继续任务,并在finish message说明但没找到要求的项目。
221
+ 16. 在做游戏任务时如果在战斗页面如果有自动战斗一定要开启自动战斗,如果多轮历史状态相似要检查自动战斗是否开启。
222
+ 17. 如果没有合适的搜索结果,可能是因为搜索页面不对,请返回到搜索页面的上一级尝试重新搜索,如果尝试三次返回上一级搜索后仍然没有符合要求的结果,执行 finish(message="原因")。
223
+ 18. 在结束任务前请一定要仔细检查任务是否完整准确的完成,如果出现错选、漏选、多选的情况,请返回之前的步骤进行纠正。
224
+ `,historyImageLimit:1,buildAssistantContent:e=>`<think>${e.response.think}</think><answer>${e.response.content}</answer>`},coordinates:{shape:"point",order:"xy",normalizedBy:1e3},parseResponse:e=>{let t,r;return r=function(e){o7("Parsing action:",e);let t="";try{if((t=e.content.trim()).startsWith('do(action="Type"')||t.startsWith('do(action="Type_Name"')){let r=o8(t,'text="');return{_metadata:"do",action:"Type",text:r,think:e.think}}if(t.startsWith("finish(message=")){let r=o8(t,'finish(message="');return r.endsWith(")")&&(r=r.slice(0,-1)),{_metadata:"finish",message:r,think:e.think}}if(t.startsWith("do(")){let r=t.match(/do\(action="([^"]+)"/);if(!r)throw Error(`Failed to extract action type from do() call; raw="${t}"`);let n=r[1],o={_metadata:"do",think:e.think};switch(n){case"Tap":{let e=t.match(/element=\[(\d+),(\d+)\]/);if(!e)throw Error(`Failed to extract element coordinates for Tap; raw="${t}"`);return{...o,action:"Tap",element:[Number(e[1]),Number(e[2])]}}case"Double Tap":{let e=t.match(/element=\[(\d+),(\d+)\]/);if(!e)throw Error(`Failed to extract element coordinates for Double Tap; raw="${t}"`);return{...o,action:"Double Tap",element:[Number(e[1]),Number(e[2])]}}case"Swipe":{let e=t.match(/start=\[(\d+),(\d+)\]/),r=t.match(/end=\[(\d+),(\d+)\]/);if(!e||!r)throw Error(`Failed to extract start/end coordinates for Swipe; raw="${t}"`);return{...o,action:"Swipe",start:[Number(e[1]),Number(e[2])],end:[Number(r[1]),Number(r[2])]}}case"Long Press":{let e=t.match(/element=\[(\d+),(\d+)\]/);if(!e)throw Error(`Failed to extract element coordinates for Long Press; raw="${t}"`);return{...o,action:"Long Press",element:[Number(e[1]),Number(e[2])]}}case"Launch":{let e=o8(t,'app="');return{...o,action:"Launch",app:e}}case"Back":return{...o,action:"Back"};case"Home":return{...o,action:"Home"};case"Wait":{let e=t.match(/duration=(?:["\[])?(\d+)/);if(!e)throw Error(`Failed to extract duration for Wait; raw="${t}"`);let r=Number.parseInt(e[1],10);return{...o,action:"Wait",durationMs:1e3*r}}case"Interact":return{...o,action:"Interact"};case"Call_API":{let e=o8(t,'instruction="');return{...o,action:"Call_API",instruction:e}}case"Take_over":{let e=o8(t,'message="');return{...o,action:"Take_over",message:e}}case"Note":{let e=o8(t,'message="');return{...o,action:"Note",message:e}}default:throw Error(`Unknown action type: ${n}; raw="${t}"`)}}throw Error(`Failed to parse action: ${t}`)}catch(r){let e=r instanceof Error?r.message:String(r);throw Error(`Failed to parse action: ${e}; raw="${t}"`)}}(t=function(e){let t;if(e.includes("finish(message=")){let r=e.split("finish(message=");t={think:r[0].trim(),content:`finish(message=${r[1]}`}}else if(e.includes("do(action=")){let r=e.split("do(action=");t={think:r[0].trim(),content:`do(action=${r[1]}`}}else if(e.includes("<answer>")){let r=e.split("<answer>");t={think:r[0].replace(/<think>/g,"").replace(/<\/think>/g,"").trim(),content:r[1].replace(/<\/answer>/g,"").trim()}}else t={think:"",content:e};return o7("autoGLM rawResponse:",e),o7("thinking in response:",t.think),o7("action in response:",t.content),t}(e)),{response:t,action:r}},transformActions:(e,t)=>{var r;let{options:n,coordinateSystem:o}=t;return(0,eH.vA)(o,"Auto-GLM planning requires coordinate system"),function(e,t){let{actionSpace:r,coordinateDistanceToPixels:n}=t;try{switch(e._metadata){case"finish":return o2("Transform finish action:",e),[{type:"Finished",param:{},thought:e.message}];case"do":switch(e.action){case"Tap":return o2("Transform Tap action:",e),[{type:"Tap",param:{locate:{point:e.element,prompt:""}}}];case"Double Tap":return o2("Transform Double Tap action:",e),[{type:"DoubleClick",param:{locate:{point:e.element,prompt:""}}}];case"Type":return o2("Transform Type action:",e),[{type:"Input",param:{value:e.text}}];case"Swipe":{let t,r;o2("Transform Swipe action:",e);let o=e.end[0]-e.start[0],i=e.end[1]-e.start[1],a=Math.abs(o);return Math.abs(i)>a?(r=n(i,"y"),t=i>0?"up":"down"):(r=n(o,"x"),t=o>0?"left":"right"),o2(`Calculate swipe direction: ${t}, distance: ${r}`),[{type:"Scroll",param:{locate:{point:e.start,prompt:""},distance:r,direction:t},thought:e.think||""}]}case"Long Press":return o2("Transform Long Press action:",e),[{type:"LongPress",param:{locate:{point:e.element,prompt:""}},thought:e.think||""}];case"Back":return o2("Transform Back action:",e),[{type:o4(r,o3,"AndroidBackButton"),param:{},thought:e.think||""}];case"Home":return o2("Transform Home action:",e),[{type:o4(r,o5,"AndroidHomeButton"),param:{},thought:e.think||""}];case"Wait":return o2("Transform Wait action:",e),[{type:"Sleep",param:{timeMs:e.durationMs},thought:e.think||""}];case"Launch":return o2("Transform Launch action:",e),[{type:"Launch",param:{uri:e.app},thought:e.think||""}];case"Interact":throw Error('Action "Interact" from auto-glm is not supported in the current implementation.');case"Call_API":throw Error('Action "Call_API" from auto-glm is not supported in the current implementation.');case"Take_over":throw Error('Action "Take_over" from auto-glm is not supported in the current implementation.');case"Note":throw Error('Action "Note" from auto-glm is not supported in the current implementation.');default:throw Error(`Unknown do() action type: ${e.action}`)}default:throw Error(`Unknown action metadata: ${e._metadata}`)}}catch(t){let e=t instanceof Error?t.message:String(t);throw o2("Transform error:",e),Error(`Failed to transform action: ${e}`)}}(e.action,{actionSpace:n.actionSpace,coordinateDistanceToPixels:(r=n.context.shotSize,(e,t)=>{if(void 0===o.normalizedBy)return Math.round(Math.abs(e));let n="x"===t?r.width:r.height;return rJ(Math.abs(e),o.normalizedBy,n,o.rounding)})})},shouldContinuePlanning:e=>"finish"!==e.action._metadata,buildResponseLog:(e,t)=>t}},locate:{kind:"custom",planningTapLocator:{buildSystemPrompt:()=>e?`
225
+ The current date: ${o0()}
226
+
227
+ # Setup
228
+ You are a professional Android operation agent assistant that can fulfill the user's high-level instructions. Given a screenshot of the Android interface at each step, you first analyze the situation, then plan the best course of action using Python-style pseudo-code.
229
+
230
+ # More details about the code
231
+ Your response format must be structured as follows:
232
+
233
+ Think first: Use <think>...</think> to analyze the current screen, identify key elements, and determine the most efficient action.
234
+ Provide the action: Use <answer>...</answer> to return a single line of pseudo-code representing the operation.
235
+
236
+ Your output should STRICTLY follow the format:
237
+ <think>
238
+ [Your thought]
239
+ </think>
240
+ <answer>
241
+ [Your operation code]
242
+ </answer>
243
+
244
+ - **Tap**
245
+ Perform a tap action on a specified screen area. The element is a list of 2 integers, representing the coordinates of the tap point.
246
+ **Example**:
247
+ <answer>
248
+ do(action="Tap", element=[x,y])
249
+ </answer>
250
+
251
+ REMEMBER:
252
+ - Your goal is to locate and tap the UI element specified by the user (e.g., button, icon, link, etc.). Do not attempt any other actions.
253
+ `:`
254
+ 今天的日期是: ${o1()}
255
+
256
+ 你是一个智能体分析专家,可以根据操作历史和当前状态图执行一系列操作来完成任务。
257
+ 你必须严格按照要求输出以下格式:
258
+ <think>{think}</think>
259
+ <answer>{action}</answer>
260
+
261
+ 其中:
262
+ - {think} 是对你为什么选择这个操作的简短推理说明。
263
+ - {action} 是本次执行的具体操作指令,必须严格遵循下方定义的指令格式。
264
+
265
+ 操作指令及其作用如下:
266
+ - do(action="Tap", element=[x,y])
267
+ Tap是点击操作,点击屏幕上的特定点。可用此操作点击按钮、选择项目、从主屏幕打开应用程序,或与任何可点击的用户界面元素进行交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
268
+
269
+ 必须遵循的规则:
270
+ - 你的目标是定位并点击用户指定的UI元素(例如按钮、图标、链接等),请不要尝试任何其他的操作。
271
+ `,getLocatedPixelResult:o_}}}}let o9={"auto-glm":o6(!1),"auto-glm-multilingual":o6(!0)},ie=/<(?:|||\|)ref(?:|||\|)>\s*[\s\S]*?\s*<(?:|||\|)\/ref(?:|||\|)>\s*<(?:|||\|)box(?:|||\|)>\s*([\s\S]*?)\s*<(?:|||\|)\/box(?:|||\|)>/g,it=/^\s*<(?:|||\|)point(?:|||\|)>\s*([\s\S]*?)\s*<(?:|||\|)\/point(?:|||\|)>\s*$/,ir={shape:"point",order:"xy",normalizedBy:1e3,rounding:"round"},io={shape:"bbox",order:"xy",normalizedBy:1e3,rounding:"round"};function ii(e,t,r){let n=String(e).match(/\d+/g);if((null==n?void 0:n.length)!==t)throw Error(`DeepSeek ${r} locate result must contain exactly ${t} positive integers, got ${(null==n?void 0:n.length)??0}`);return n.map(Number)}let ia={deepseek:{chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:o}=r,i={};!0===n||"default"===n?i.temperature=void 0:void 0!==r.temperature&&(i.temperature=r.temperature),"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(i.response_format={type:"json_object"});let a={};return"default"!==n&&(a.thinking={type:n?"enabled":"disabled"},o&&(a.reasoning_effort=o)),{config:{...t,...i,...a}}},useReasoningAsContentFallback:!0,replayRawAssistantMessage:!1},locate:{element:{protocol:{systemPromptIntroduction:`## Role:
272
+ You are a GUI click grounding agent.
273
+
274
+ ## Objective:
275
+ - Identify the UI element in the screenshot that matches the user's description.
276
+ - Return the center point of that element.`,buildResponseInstructions:e=>`## Output Format:
277
+ Return exactly one ${e.resultNoun} using the following format, without any explanation or additional text:
278
+
279
+ <||point||>[${e.resultValueSchema}]<||/point||>
280
+
281
+ For example:
282
+ <||point||>[${rq(e.exampleValues[0])}]<||/point||>
283
+
284
+ Coordinate values must be integers.
285
+ Coordinate requirements: ${e.resultValueDescription}
286
+ The origin is the top-left of the full screenshot.`,buildUserPrompt:e=>`Locate the center point of the following UI element: ${e}`,expectedJsonObjectResponse:!1,parseRawResponse:function(e){let t=e.match(it);if(!t)throw Error("DeepSeek element locate response does not contain a valid <||point||>value<||/point||> result");return{kind:"located",target:t[1]}}},resultFormat:{coordinates:ir,parseRawLocateValue:function(e){return rL(ir,ii(e,2,"point"))}}},searchArea:{protocol:{systemPromptIntroduction:`## Role:
287
+ You are a GUI grounding agent.`,buildResponseInstructions:e=>{let t=rq(e.exampleValues[0]),r=rq(e.exampleValues[1]??e.exampleValues[0]);return`## Objective:
288
+ - Identify the target UI element in the screenshot.
289
+ - Identify the reference elements that the description uses to select the target, such as an owner label, row value, column value, nearby text, or relative-position anchor.
290
+ - Return a tight ${e.resultNoun} for the target first, followed by a tight ${e.resultNoun} for each reference element.
291
+
292
+ ## Reference Rules:
293
+ - If the description explicitly identifies the target through another visible element, you MUST return that visible element as a reference, even if the target appears unique.
294
+ - For descriptions like "B in the row whose A is X", B is the target and the visible X is a reference.
295
+ - For descriptions like "the icon next to label X", the icon is the target and the visible X is a reference.
296
+ - Do not return unrelated landmarks or alternative target candidates.
297
+
298
+ ## Output Format:
299
+ Return one or more ref-box pairs using the following format, without any explanation or additional text:
300
+
301
+ <||ref||>target: concise target description<||/ref||><||box||>[${e.resultValueSchema}]<||/box||>
302
+ <||ref||>reference: concise reference description<||/ref||><||box||>[${e.resultValueSchema}]<||/box||>
303
+
304
+ For example:
305
+ If the request is "the edit icon in the row whose project name is Apollo", return:
306
+ <||ref||>target: edit icon<||/ref||><||box||>[${t}]<||/box||>
307
+ <||ref||>reference: Apollo<||/ref||><||box||>[${r}]<||/box||>
308
+
309
+ The first ref-box pair must represent the target element. Every remaining pair must represent a reference element needed to identify the target. If no reference element is needed, return only the target pair. Each pair must contain exactly one ${e.resultNoun}.
310
+ Coordinate values must be integers.
311
+ Coordinate requirements: ${e.resultValueDescription}
312
+ The origin is the top-left of the full screenshot.`},buildUserPrompt:e=>`Locate the target and the reference elements needed to distinguish it: ${e}`,expectedJsonObjectResponse:!1,parseRawResponse:function(e){let t=Array.from(e.matchAll(ie),e=>e[1]);if(0===t.length)throw Error("DeepSeek search-area response does not contain a valid <||ref||>label<||/ref||><||box||>[[x1,y1,x2,y2]]<||/box||> result");let[r,...n]=t;return{kind:"located",target:r,...n.length>0?{references:n}:{}}}},resultFormat:{coordinates:io,parseRawLocateValue:function(e){return rL(io,ii(e,4,"bbox"))}}}}}},is={chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],useReasoningAsContentFallback:!0}},il={shape:"bbox",order:"xy",normalizedBy:1e3,rounding:"round"},ic={shape:"point",order:"xy",normalizedBy:1e3,rounding:"round"},iA=/(?:^|[^a-zA-Z0-9])(\d+(?:[^a-zA-Z0-9]+\d+)+)(?=$|[^a-zA-Z0-9])/g,iu={jsonParser:e_,chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:o}=r,i={};void 0!==r.temperature&&(i.temperature=r.temperature),"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(i.response_format={type:"json_object"});let a={};return"default"!==n&&(a.thinking={type:n?"enabled":"disabled"},o&&(a.reasoning_effort=o)),{config:{...t,...i,...a}}},useReasoningAsContentFallback:!0},locate:{element:{resultFormat:{coordinates:il,parseRawLocateValue:function(e){let t=rB(e),r=Array.isArray(t)&&4===t.length&&t.every(e=>"number"==typeof e&&Number.isFinite(e))?t:function(e){let t=JSON.stringify(e);if(!t)return[];let r=Array.from(t.matchAll(iA),e=>{var t;return(null==(t=e[1].match(/\d+/g))?void 0:t.map(Number))??[]}),n=Math.max(0,...r.map(e=>e.length)),o=r.filter(e=>e.length===n);return 1!==o.length?[]:o[0]}(t);if(4===r.length||5===r.length)return rL(il,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return rL(ic,[r[0],r[1]]);if(8===r.length)return rL(il,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for doubao-vision mode: ${JSON.stringify(t)} `)}}}}},id=e=>{let{geminiReasoningContent:t,providerReasoningContent:r}=e;return t&&r?`thoughtParts:${t}; reasoning_content:${r}`:t||r||""},ip={gemini:{chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:o}=r,i={};void 0!==r.temperature&&(i.temperature=r.temperature);let a={};return"default"!==n&&(a.extra_body={google:{thinking_config:{include_thoughts:!0,thinking_level:n?o??"medium":"minimal"}}}),{config:{...t,...i,...a}}},messageExtraction:{kind:"custom",extractContentAndReasoning:e=>{var t;let r;if(!e)return{content:"",reasoning_content:""};if(Array.isArray(e.content)){let t=(e=>{let t=[],r=[];for(let n of e){if(!(n&&"object"==typeof n&&!Array.isArray(n)))continue;let e="string"==typeof n.text?n.text:void 0;e&&(!0===n.thought?r.push(e):t.push(e))}return{content:t.join(""),geminiReasoningContent:r.join("")}})(e.content);return{content:t.content,reasoning_content:id({geminiReasoningContent:t.geminiReasoningContent,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}let n="string"==typeof e.content?e.content:"",o=(null==(r=n.match(/<thought>([\s\S]*?)<\/thought>/i))||null==(t=r[1])?void 0:t.trim())||"";return{content:n,reasoning_content:id({geminiReasoningContent:o,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}}},locate:{element:{resultFormat:{coordinates:{shape:"bbox",order:"yx",normalizedBy:1e3}}}}}},ih={"glm-v":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n}=r,o={};void 0!==r.temperature&&(o.temperature=r.temperature),"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(o.response_format={type:"json_object"});let i={};return"default"!==n&&(i.thinking={type:n?"enabled":"disabled"}),{config:{...t,...o,...i}}},useReasoningAsContentFallback:!0},locate:{element:{resultFormat:{coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}}}}}},im=e=>"locate"===e.intent||e.requiresOriginalImageDetail?"original":e.imageDetail??"high",ig=e=>{let{reasoningEnabled:t,reasoningEffort:r}=e;if("default"!==t)return!0===t?r??"medium":"none"},iy=e=>{let{reasoningEnabled:t,reasoningEffort:r}=e;if("default"!==t)return!0===t?r??"medium":"low"},iv={"gpt-5":{supportedProtocols:["openai-chat","openai-responses"],resolveImageDetail:im,responses:{replayRawAssistantOutput:!1,unsupportedUserConfig:["reasoningBudget"],buildResponsesParams:e=>{let{midsceneDefaults:t,userConfig:r,expectedJsonObjectResponse:n}=e,o={};void 0!==r.temperature&&(o.temperature=r.temperature),"none"!==r.responseFormat&&n&&(o.text={format:{type:"json_object"}});let i=ig(r);return{config:{...t,...o,reasoning:{effort:i,context:"current_turn"}}}}},buildCodexAppServerParams:e=>({config:{effort:ig(e.userConfig??{})}}),chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,n={};void 0!==r.temperature&&(n.temperature=r.temperature),"none"!==e.userConfig.responseFormat&&e.expectedJsonObjectResponse&&(n.response_format={type:"json_object"});let o=ig(r);return{config:{...t,...n,reasoning_effort:o}}}},locate:{element:{resultFormat:{coordinates:{shape:"bbox",order:"xy"}}}}},"gpt-6":{supportedProtocols:["openai-chat","openai-responses"],resolveImageDetail:im,responses:{replayRawAssistantOutput:!1,unsupportedUserConfig:["temperature","reasoningBudget"],buildResponsesParams:e=>{let{midsceneDefaults:t,userConfig:r,expectedJsonObjectResponse:n}=e,{responseFormat:o}=r,i={};i.temperature=void 0,"none"!==o&&n&&(i.text={format:{type:"json_object"}});let a=iy(r);return{config:{...t,...i,reasoning:{effort:a,context:"current_turn"}}}}},buildCodexAppServerParams:e=>({config:{effort:iy(e.userConfig??{})}}),chatCompletion:{unsupportedUserConfig:["temperature","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r,expectedJsonObjectResponse:n}=e,{responseFormat:o}=r,i={};i.temperature=void 0,"none"!==o&&n&&(i.response_format={type:"json_object"});let a=iy(r);return{config:{...t,...i,reasoning_effort:a}}}},locate:{element:{resultFormat:{coordinates:{shape:"bbox",order:"xy"}}}}}};async function ib(e){let t=await ol(e,!0),r=await nV(t),n=Math.min(1,1568/r.width,1568/r.height),o={width:Math.max(1,Math.round(r.width*n)),height:Math.max(1,Math.round(r.height*n))},i=await oe(t,{targetSize:o}),a=await ou(i,280);return(0,eH.vA)(nK.Buffer.from(oc(a.imageBase64).body,"base64").length<=0x1000000,"Jev image exceeds 16 MiB"),{...a,contentSize:o,sourceSize:{width:r.width,height:r.height}}}let iw="https://midscenejs.com/model-config";function iE(e){return"planning"===e?`Planning model family is required because aiAct is asking the planning model to return locate coordinates. Configure MIDSCENE_PLANNING_MODEL_FAMILY for the planning model, or remove the separate planning model config and configure MIDSCENE_MODEL_FAMILY on the default model. ${iw}`:`Default model family is required because aiAct is asking the default model to return locate coordinates during planning. Configure MIDSCENE_MODEL_FAMILY so Midscene can parse planning locate coordinates correctly. ${iw}`}function ix(){return`## Important Notes for Locating Elements:
313
+ - First identify the target primitive from the user's description, then locate that primitive only. Treat labels, owners, rows, columns, and surrounding text as context unless the description says they are the target.
314
+ - If the target itself is visible text, link text, status text, table cell text, or header text, return only the tight visible text region, not the entire control, row, sentence, or container.
315
+ - If a text or link target wraps across multiple lines, do not return one large box covering the whole wrapped text. Return a tight box around a distinctive visible segment of the target text; for CJK link labels, the first 2-4 visible characters are enough when unique.
316
+ - If the target is an input/select/filter field body, current value area, or blank field region, return that field/control body or value region. Do not retarget to a trailing search icon, dropdown arrow, clear button, or nearby table header.
317
+ - If the target is an icon, arrow, checkbox, radio, or accessory control, return only that glyph/control region. Do not return adjacent owner text.
318
+ - If the target is a tiny icon/control among adjacent similar icons, use the described local order or relative position within that group and return only that glyph/control.
319
+ - If the same text appears in multiple regions, obey the described owner region first, such as filter bar vs table header.`}let ik=["legacy","sequential","bulk"],iS=rm.Ik({locate:r5.describe("The element to be tapped")}),iI=rm.Ik({files:rm.KC([rm.Yj(),rm.YO(rm.Yj())]).describe("File path(s) within the current aiAct call's fileChooserAllowedDir to use whenever a later action triggers a file chooser. fileChooserAllowedDir must be provided for this action. This setting replaces any previously registered file path(s).")});rm.Ik({locate:r5.describe("The element to be right clicked")}),rm.Ik({locate:r5.describe("The element to be double clicked")}),rm.Ik({locate:r5.describe("The element to be hovered")});let iC=rm.Ik({value:rm.KC([rm.Yj(),rm.ai()]).transform(e=>String(e)).describe("The text to input. Provide the final content for replace mode, only the inserted characters for typeOnly mode, or an empty string when using clear mode to remove existing text."),locate:r5.describe("the position of the placeholder or text content in the target input field. If there is no content, locate the center of the input field.").optional(),mode:rm.k5(["replace","clear","typeOnly"]).default("replace").describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first, and should be set explicitly for incremental edits after moving the cursor; "clear" - clear the field without inputting new text.'),autoDismissKeyboard:rm.zM().optional().describe("If true, the keyboard will be dismissed after the input is completed. Do not set it unless the user asks you to do so."),keyboardTypeDelay:rm.ai().finite().nonnegative().optional().describe("Delay in milliseconds between keystrokes when typing. Passed through from device/user configuration. Do not set it unless the user asks you to do so."),inputStrategy:rm.k5(ik).optional().describe('Text input strategy: "legacy" (default) preserves the current platform behavior; "sequential" enters one Unicode code point at a time; "bulk" sends the complete text through one platform input operation when supported and requires keyboardTypeDelay to be omitted or set to 0. Do not set it unless the user asks you to do so.')});rm.Ik({locate:r5.describe("The optional element to click before pressing the key. Omit this when the key should operate on the currently focused element, especially when copying or cutting an existing text selection.").optional(),keyName:rm.Yj().describe("The key to be pressed. Use '+' for key combinations, e.g., 'Control+A', 'Shift+Enter'")}),rm.Ik({scrollType:rm.k5(["singleAction","scrollToBottom","scrollToTop","scrollToRight","scrollToLeft"]).default("singleAction").describe('The scroll behavior: "singleAction" for a single scroll action, "scrollToBottom" for scrolling all the way to the bottom by rapidly scrolling 5-10 times (skipping intermediate content until reaching the bottom), "scrollToTop" for scrolling all the way to the top by rapidly scrolling 5-10 times (skipping intermediate content until reaching the top), "scrollToRight" for scrolling all the way to the right by rapidly scrolling multiple times, "scrollToLeft" for scrolling all the way to the left by rapidly scrolling multiple times'),direction:rm.k5(["down","up","right","left"]).default("down").describe('The direction toward the off-screen content to reveal. "down" reveals content below the current viewport, "up" reveals content above, "right" reveals content to the right, and "left" reveals content to the left. This does not describe the movement direction of the content currently visible on the screen. Only effective when scrollType is "singleAction".'),distance:rm.ai().positive().nullable().optional().describe('Positive requested scroll amount in screen-coordinate units. On touch platforms, it controls the length of the swipe gesture used to scroll; on web and desktop platforms, it controls or approximates the wheel scroll delta. Only effective when scrollType is "singleAction".'),locate:r5.optional().describe('Describe the target element to be scrolled on, like "the table" or "the list" or "the content area" or "the scrollable area". Do NOT provide a general intent like "scroll to find some element"')}),rm.Ik({from:r5.describe("The position to be dragged"),to:r5.describe("The position to be dropped")}),rm.Ik({locate:r5.describe("The element to be long pressed"),duration:rm.ai().optional().describe("Long press duration in milliseconds")}),o="finger",rm.Ik({start:r5.optional().describe(`Optional starting point of the ${o} movement. Available in both relative and endpoint forms. If omitted, the center of the page is used.`),direction:rm.k5(["up","down","left","right"]).optional().describe("Finger movement direction. Required together with a positive distance for a relative swipe. Omit when using end."),distance:rm.ai().positive().optional().describe(`Positive length of the ${o} movement in pixels. Required together with direction for a relative swipe. Omit when using end.`),end:r5.optional().describe(`Endpoint of the ${o} movement. Use for an endpoint swipe, optionally with start. Do not provide direction or distance when using end.`),duration:rm.ai().default(300).describe("Duration of the swipe gesture in milliseconds"),repeat:rm.ai().optional().describe("The number of times to repeat the swipe gesture. 1 for default, 0 for infinite (e.g. endless swipe until the end of the page)")}),rm.Ik({locate:r5.describe("The input field to be cleared").optional()}),rm.Ik({direction:rm.k5(["left","right"]).describe("The direction to move the cursor"),times:rm.ai().int().min(1).default(1).describe("The number of times to move the cursor in the specified direction")}),rm.Ik({locate:r5.optional().describe("The element to pinch on. If not specified, the center of the screen will be used"),direction:rm.k5(["in","out"]).describe('Pinch direction. "in" = pinch fingers together (zoom out / shrink), "out" = spread fingers apart (zoom in / enlarge).'),distance:rm.ai().positive().optional().describe("How far each finger moves in pixels. Defaults to a quarter of the shorter screen dimension."),duration:rm.ai().default(500).optional().describe("Duration of the pinch gesture in milliseconds")});let iO=rm.Ik({timeMs:rm.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),iR=e=>({name:"Sleep",description:"Wait for a specified duration before continuing. Defaults to 1 second (1000ms) if not specified.",paramSchema:iO,sample:{timeMs:2e3},call:async(t,r)=>{let n=e??(null==r?void 0:r.signal),o=(null==t?void 0:t.timeMs)??1e3;(0,e0.aZ)("device:common-action")(`Sleeping for ${o}ms`),null==n||n.throwIfAborted(),await new Promise((e,t)=>{let r=()=>{clearTimeout(i),t(null==n?void 0:n.reason)},i=setTimeout(()=>{null==n||n.removeEventListener("abort",r),e()},o);null==n||n.addEventListener("abort",r,{once:!0})})}}),ij=(e,t)=>{let{locatePromptSpec:r,locateResultExampleIndex:n=0,buildActionOutput:o}=t;if(!e.sample||"object"!=typeof e.sample)return;let i=r7(e.paramSchema),a=r?((e,t,r,n)=>{let o={...e},i=n;for(let e of t)o[e]&&"object"==typeof o[e]&&o[e].prompt&&(o[e]={...o[e],[r.resultKey]:r.exampleValues[i%r.exampleValues.length]},i++);return o})(e.sample,i,r,n):e.sample;return o({actionName:e.name,param:a,locateFields:i,locateResultKey:null==r?void 0:r.resultKey})},iP=e=>({name:"Tap",paramSchema:iS,sample:{locate:{prompt:e}}}),iM=e=>({name:"Input",paramSchema:iC,sample:{value:e}});var iT=r(79383);let iN=e=>{var t,r;let n=e.prefix?[e.prefix]:[];if(e.planning&&n.push(`<planning>${e.planning}</planning>`),null==(t=e.updateSubGoals)?void 0:t.length){let t=e.updateSubGoals.map(e=>{let{index:t,status:r,description:n}=e;return` <sub-goal index="${t}" status="${r}">${n}</sub-goal>`}).join("\n");n.push(`<update-plan-content>
320
+ ${t}
321
+ </update-plan-content>`)}if(null==(r=e.markSubGoalsDone)?void 0:r.length){let t=e.markSubGoalsDone.map(e=>` <sub-goal index="${e}" status="finished" />`).join("\n");n.push(`<mark-sub-goal-done>
322
+ ${t}
323
+ </mark-sub-goal-done>`)}if(e.memory&&n.push(`<memory>${e.memory}</memory>`),e.complete)n.push(`<complete success="${e.complete.success}">${e.complete.message}</complete>`);else{if(!e.actionOutputExample)throw Error("Cannot build planning response example without an action output example");e.log&&n.push(`<log>${e.log}</log>`),n.push(e.actionOutputExample)}return n.join("\n")},iD={index:1,description:"Fill in the Name field with 'John'"},iz={index:2,description:"Fill in the Email field with 'john@example.com'"},iB={index:3,description:"Return the filled email address"};async function iF(e){let{actionSpace:t,includeLocateInPlanning:r,locatePromptSpec:n,includeSubGoals:o,includeThought:i=!0,includeLog:a=!0,planningProtocol:s}=e,l=s.actionOutputProtocol,c=tX();if(r&&!n)throw Error(iE());let A=(e=>{var t;let{actionSpace:r,locatePromptSpec:n,planningProtocol:o}=e,i=o.actionSpaceProtocol.buildLocateFieldDescription(n);return t=r.map(e=>{let t=o.actionSpaceProtocol.includeActionOutputExample?ij(e,{locatePromptSpec:n,buildActionOutput:o.actionOutputProtocol.buildActionOutput}):void 0;return o.actionSpaceProtocol.buildActionDescription({action:e,locateFieldDescription:i,actionOutputExample:t})}),"jsonl"===o.actionSpaceProtocol.format?t.map(e=>JSON.stringify(e)).join("\n"):iT.Ay.dump(t,{indent:2,lineWidth:-1,noRefs:!0}).trim()})({actionSpace:t,locatePromptSpec:n,planningProtocol:s}),u=t.some(e=>"RunAdbShell"===e.name),d=l.actionOutputTagNames.map(e=>`<${e}>`).join(", "),p=o??!1,h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return p?e:t},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return i?e:t},f=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return a?e:t},g=p?3:2,y=g+1;return`
324
+ Target: You are an expert to manipulate the UI to accomplish the user's instruction. User will give you an instruction, some screenshots, background knowledge and previous logs indicating what have been done. Your task is to accomplish the instruction by thinking through the path to complete the task and give the next action to execute.
325
+
326
+ ## Step 1: ${h("Observe and Plan (related tags: <planning>, <update-plan-content>, <mark-sub-goal-done>)",m("Observe (related tags: <planning>)","Observe"))}
327
+
328
+ First, observe the current screenshot and previous logs${h(", then break down the user's instruction into multiple high-level sub-goals. Update the status of sub-goals based on what you see in the current screenshot."," to understand the current state.")}
329
+
330
+ ${h(`### Observation Guidelines
331
+
332
+ - Treat visible summaries, thumbnails, cropped content, and partially visible lists as potentially incomplete when the task depends on precise details.
333
+ - If the current view does not provide enough information to decide safely, use available UI affordances such as opening details, expanding content, previewing, enlarging, zooming, or scrolling before acting.`)}
334
+
335
+ ${m(`### <planning> tag (REQUIRED)
336
+
337
+ REQUIRED: You MUST always output the <planning> tag. Never skip it.
338
+
339
+ Write the content of the <planning> tag in ${c}.
340
+
341
+ Include your planning details in the <planning> tag. It should answer: ${h("What is the user's requirement? What is the current state based on the screenshot? Are all sub-goals completed? If not, what should be the next action?","What is the current state based on the screenshot? What should be the next action?")} Write it naturally without numbering or section headers.
342
+
343
+ CRITICAL - Following Explicit Instructions: When the user gives you specific operation steps (not high-level goals), you MUST execute ONLY those exact steps - nothing more, nothing less. Do NOT add extra actions even if they seem logical. For example: "fill out the form" means only fill fields, do NOT submit; "click the button" means only click, do NOT wait for page load or verify results; "type 'hello'" means only type, do NOT press Enter.`)}
344
+
345
+ ${h(`### <update-plan-content> tag
346
+
347
+ Use this structure to give or update your plan:
348
+
349
+ <update-plan-content>
350
+ <sub-goal index="1" status="finished|pending">sub goal description</sub-goal>
351
+ <sub-goal index="2" status="finished|pending">sub goal description</sub-goal>
352
+ ...
353
+ </update-plan-content>
354
+
355
+ ### <mark-sub-goal-done> tag
356
+
357
+ Use this structure to mark a sub-goal as done:
358
+
359
+ <mark-sub-goal-done>
360
+ <sub-goal index="1" status="finished" />
361
+ </mark-sub-goal-done>
362
+
363
+ IMPORTANT: You MUST only mark a sub-goal as "finished" AFTER you have confirmed the task is actually completed by observing the result in the screenshot. Do NOT mark a sub-goal as done just because you expect the next action will complete it. Wait until you see visual confirmation in the screenshot that the sub-goal has been achieved.
364
+
365
+ ### Note
366
+
367
+ During execution, you can call <update-plan-content> at any time to update the plan based on the latest screenshot and completed sub-goals.
368
+
369
+ ### Example
370
+
371
+ If the user wants to "log in to a system using username and password, complete all to-do items, and submit a registration form", you can break it down into the following sub-goals:
372
+
373
+ <planning>...</planning>
374
+ <update-plan-content>
375
+ <sub-goal index="1" status="pending">Log in to the system</sub-goal>
376
+ <sub-goal index="2" status="pending">Complete all to-do items</sub-goal>
377
+ <sub-goal index="3" status="pending">Submit the registration form</sub-goal>
378
+ </update-plan-content>
379
+
380
+ After logging in and seeing the to-do items, you can mark the sub-goal as done:
381
+
382
+ <mark-sub-goal-done>
383
+ <sub-goal index="1" status="finished" />
384
+ </mark-sub-goal-done>
385
+
386
+ At this point, the status of all sub-goals is:
387
+
388
+ <update-plan-content>
389
+ <sub-goal index="1" status="finished" />
390
+ <sub-goal index="2" status="pending" />
391
+ <sub-goal index="3" status="pending" />
392
+ </update-plan-content>
393
+
394
+ After some time, when the last sub-goal is also completed, you can mark it as done as well:
395
+
396
+ <mark-sub-goal-done>
397
+ <sub-goal index="3" status="finished" />
398
+ </mark-sub-goal-done>`)}
399
+
400
+ ${h(`## Step 2: Memory Data from Current Screenshot (related tags: <memory>)
401
+
402
+ Use <memory> to record clear, task-relevant information from the current screenshot that may be needed in later steps. The current screenshot will not be available later, so memory should preserve enough detail for future reasoning, verification, or action.
403
+
404
+ - Record information completely and exactly as shown. Do not summarize, translate, normalize, or merge values that may matter later.
405
+ - When recording an item, include the item itself, its exact task-relevant details, and the visible cue or UI context that identifies where it came from when relevant.
406
+ - Keep similar or repeated items as separate memory entries unless their task-relevant details are confirmed to be the same.
407
+ - After navigation, scrolling, editing, deletion, saving, or other screen changes, treat remembered positions, order, indexes, and UI bindings as references only. Re-check the current screen before acting on them.
408
+
409
+ Examples:
410
+ - If you need to find an item and later assert its details, record the item name and the exact details needed for the assertion, such as status, price, date, owner, description, or other visible fields.
411
+ - If you need to compare multiple similar results, record each candidate separately with its exact distinguishing details and visible context.
412
+ - If you need to copy information from one place to another, record the exact source value and the target field or UI cue it should be mapped to.
413
+
414
+ Don't use this tag if no information needs to be preserved.`)}
415
+
416
+ ## Step ${g}: ${h("Check if Goal is Accomplished","Check if the Instruction is Fulfilled")} (related tags: <complete>)
417
+
418
+ Determine if the entire task is completed${h(" based on the current screenshot and the status of all sub-goals")}.
419
+
420
+ ### CRITICAL: The User's Instruction is the Supreme Authority
421
+
422
+ The user's instruction defines the EXACT scope of what you must accomplish. You MUST follow it precisely - nothing more, nothing less. Violating this rule may cause severe consequences such as data loss, unintended operations, or system failures.
423
+
424
+ **Explicit instructions vs. High-level goals:**
425
+ - If the user gives you **explicit operation steps** (e.g., "click X", "type Y", "fill out the form"), treat them as exact commands. Execute ONLY those steps, nothing more.
426
+ - If the user gives you a **high-level goal** (e.g., "log in to the system", "complete the purchase"), you may determine the necessary steps to achieve it.
427
+
428
+ **What "${h("goal accomplished","instruction fulfilled")}" means:**
429
+ - The ${h("goal is accomplished","instruction is fulfilled")} when you have done EXACTLY what the user asked - no extra steps, no assumptions.
430
+ - Do NOT perform any action beyond the explicit instruction, even if it seems logical or helpful.
431
+
432
+ **Examples - Explicit instructions (execute exactly, no extra steps):**
433
+ - "fill out the form" → ${h("Goal accomplished","Instruction fulfilled")} when all fields are filled. Do NOT submit the form.
434
+ - "click the login button" → ${h("Goal accomplished","Instruction fulfilled")} once clicked. Do NOT wait for page load or verify login success.
435
+ - "type 'hello' in the search box" → ${h("Goal accomplished","Instruction fulfilled")} when 'hello' is typed. Do NOT press Enter or trigger search.
436
+ - "select the first item" → ${h("Goal accomplished","Instruction fulfilled")} when selected. Do NOT proceed to checkout.
437
+
438
+ **Change completion:**
439
+ - If the requested outcome is a durable change, such as create, edit, update, delete, save, send, submit, apply, or publish, do not stop at an unsaved draft, open editor, temporary input, transient selection, or staged value. Continue through the app/page's normal completion control such as Save, Done, Confirm, OK, Submit, Apply, Send, or Publish before completing, so the result remains after leaving the screen.
440
+ - If the user only asks for an intermediate UI state, such as typing text, selecting an option, filling fields, or opening a screen without saving/submitting/applying, stop once that exact state is reached.
441
+
442
+ **Special case - Scrollable option lists and dropdowns:**
443
+ - When choosing an item from a scrollable select, dropdown, listbox, menu, or similar option list, first open the control if it is closed. Once the list is open, interact with the list itself, not the page.
444
+ - If the target option is visible in the open list, Tap that exact option immediately.
445
+ - If the list is open but the target option is not visible, try to find it by scrolling the open list/dropdown before giving up or interacting with other elements.
446
+ - For an open dropdown/list, prefer small incremental Scroll actions with an explicit distance (typically 50-120 pixels) and a locate target describing the open list/dropdown. Do NOT omit distance while searching within a list, because the default scroll distance can skip over relevant options and cause oscillation.
447
+ - While searching within an open dropdown/list, use short scrolls so intermediate options are not skipped.
448
+ - After selecting the target, if the trigger text or result text shows the requested option, treat the current selection step as fulfilled and continue evaluating the remaining user instruction.
449
+
450
+ **Special case - Text hidden by a narrow input field:**
451
+ - CRITICAL PRIORITY OVERRIDE - Input verification after an input action:
452
+ - This rule overrides the general requirement to verify the exact target text from the screenshot.
453
+ - If the previous step already executed an input action, and the current input field is not empty, you MUST directly treat that input as successful.
454
+ - In this situation, do NOT use the visible text in the screenshot to decide that the input is incomplete, incorrect, missing characters, out of order, or needs correction.
455
+ - Do NOT perform ClearInput, another Input, KeyboardPress, or any other action intended to "fix the input content" just because the visible text looks different from the target text, has abnormal character order, missing characters, abnormal spacing, suspicious visual recognition results, or appears to have selected/highlighted text.
456
+ - The general rule "do EXACTLY what the user asked" still applies to the intended input value you execute, but it MUST NOT be enforced by re-validating the visible text in the screenshot after the input action.
457
+ - Differences in visible text must be assumed to be caused by clipping, horizontal scrolling, narrow input fields, text selection, caret position, or visual recognition errors rather than input failure.
458
+ - Retry input only when the input field is clearly still empty, or when the page shows an explicit error message.
459
+
460
+ **Special case - Assertion instructions:**
461
+ - If the user's instruction includes an assertion (e.g., "verify that...", "check that...", "assert..."), and you observe from the screenshot that the assertion condition is NOT satisfied and cannot be satisfied, mark ${h("the goal","it")} as failed (success="false").
462
+ - If the page is still loading (e.g., you see a loading spinner, skeleton screen, or progress bar), do NOT assert yet. Wait for the page to finish loading before evaluating the assertion.
463
+
464
+ ### Completion Criteria for Process-required Instructions
465
+
466
+ If the user's instruction includes explicit operation steps, ordering requirements, or action requirements, it is a process-required instruction.
467
+
468
+ For process-required instructions, do NOT treat the task as complete only because the current screenshot already shows the final expected state. Do NOT infer that earlier steps were executed from the final UI state.
469
+
470
+ You may output <complete success="true"> only when the current execution history, previous logs, or the screenshot after the most recent action proves that every explicit step required by the user has been completed, and the final check condition is also satisfied.
471
+
472
+ If any explicit step lacks completion evidence in the current execution history, continue with the next missing step instead of outputting <complete>, even if the current screenshot appears to satisfy the final condition.
473
+
474
+ ${h("",`**Page navigation restriction:**
475
+ - Unless the user's instruction explicitly asks you to click a link, jump to another page, or navigate to a URL, you MUST complete the task on the current page only.
476
+ - Do NOT navigate away from the current page on your own initiative (e.g., do not click links that lead to other pages, do not use browser back/forward, do not open new URLs).
477
+ - If the task cannot be accomplished on the current page and the user has not instructed you to navigate, report it as a failure (success="false") instead of attempting to navigate to other pages.`)}
478
+
479
+ ### Output Rules
480
+
481
+ - If the task is NOT complete, skip this section and continue to Step ${y}.
482
+ - Use the <complete success="true|false">message</complete> tag to output the result if the goal is accomplished or failed.
483
+ - the 'success' attribute is required. ${h("It means whether the expected goal is accomplished based on what you observe in the current screenshot and the current execution history. ")}No matter what errors occurred during execution, set success="true" only when the current execution history shows that all steps required by the user have been completed and the final state satisfies the requirement. If the user asks for explicit operation steps or an ordered workflow, do not treat those steps as completed only because the current screenshot already shows the final expected state. If the ${h("expected goal is not accomplished and cannot be accomplished","instruction is not fulfilled and cannot be fulfilled")}, set success="false".
484
+ - the 'message' is the information that will be provided to the user. If the user asks for a specific format, strictly follow that.
485
+ - If you output <complete>, do NOT output ${d}. The task ends here.
486
+
487
+ ## Step ${y}: Determine Next Action (related tags: ${f("<log>, ")}${d}, <error>)
488
+
489
+ ONLY if the task is not complete: Think what the next action is according to the current screenshot${h(" and the plan")}.
490
+
491
+ - Don't give extra actions or plans beyond the instruction or the plan. For example, don't try to submit the form if the instruction is only to fill something.
492
+ - Consider the current screenshot and give the action that is most likely to accomplish the instruction. For example, if the next step is to click a button but it's not visible in the screenshot, you should try to find it first instead of give a click action.
493
+ - Make sure the previous actions are completed successfully. Otherwise, retry or do something else to recover.
494
+ - Give just the next ONE action you should do (if any)
495
+ - If there are some error messages reported by the previous actions, don't give up, try parse a new action to recover. If the error persists for more than 3 times, you should think this is an error and set the "error" field to the error message.
496
+
497
+ ### Action Guidelines
498
+
499
+ ${u?"- If the user's task can be completed with the RunAdbShell action, prefer using the RunAdbShell action.":""}
500
+ - If Swipe is available in the current Action Space, for touch continuous controls that set a value along a track, such as a slider, prefer Swipe from the current handle or filled position to the requested track endpoint instead of tapping the endpoint.
501
+ - When editing existing text in a UI field, preserve all existing text by moving the cursor and typing/deleting the minimal necessary characters.
502
+ - For insert/prepend/append edits, use CursorMove when the caret must be adjusted precisely, then use Input with mode "typeOnly" for inserted characters and KeyboardPress for newlines or deletion. If the caret lands in the wrong position, recover with CursorMove, KeyboardPress, or undo and retry cursor placement; do not switch to replace as a fallback for cursor placement failures.
503
+
504
+ ### Interpreting Scroll and Swipe Directions
505
+
506
+ Scroll and swipe directions can be ambiguous: they may refer to off-screen content to reveal, visible content movement, or the physical movement of a finger, pointer, or scroll wheel. Infer the intended result from the user's goal, the interaction target, the current UI, and common usage in the user's language, rather than mechanically copying the user's direction word.
507
+
508
+ In the current Action Space, \`direction\` has the following meanings:
509
+
510
+ - Scroll follows the traditional mouse-wheel convention (with natural scrolling disabled). Its direction refers to the off-screen content to reveal; under this convention, it matches the wheel movement direction and is opposite to the content movement direction.
511
+ - Swipe follows the finger-movement convention. Its direction refers to finger movement; for controls where content follows the finger, it matches the content movement direction and is opposite to the direction from which off-screen content is revealed.
512
+
513
+ Use the following priority order:
514
+
515
+ 1. Prioritize the user's goal or expected result, even when it conflicts with a direction word. For example, for "swipe the date picker down to increase the date", if dates increase from top to bottom, use Swipe up to move a larger date from below into the selected position.
516
+ 2. Otherwise, if the user specifies a moving object or movement path, follow that object's physical movement. For example, "swipe the finger to the left" means Swipe left; "move the page content from top to bottom" means moving content downward, corresponding to Swipe down on a page where content follows the finger.
517
+ 3. Otherwise, consider the interaction target and common usage in the user's language. For content browsing, such as pages and lists, scroll directions usually refer to the off-screen content the user wants to see. For directly manipulated controls, such as sliders and wheel pickers, swipe directions usually refer to the intended movement of the control's movable part. For example, the Chinese "往下滑一下页面" and English "scroll down the page" usually mean revealing content below, corresponding to Scroll down; the Chinese "向右滑动滑块" and English "slide the slider to the right" usually mean moving the slider right, corresponding to Swipe right if using Swipe.
518
+ 4. If the intent remains ambiguous, use the Scroll and Swipe direction definitions above.
519
+
520
+ After interpreting the intent, choose an appropriate Action from the current Action Space and use its supported parameters to achieve the intended result. Some actions support start and end points instead of \`direction\`. When using \`direction\`, ensure its value achieves the intended result according to the selected Action's definition.
521
+
522
+ ${r?ix():""}
523
+
524
+ ### ${s.actionSpaceProtocol.title}
525
+
526
+ ${A}
527
+
528
+ ${f(`### Log to give user feedback (preamble message)
529
+
530
+ The <log> tag is a brief preamble message to the user explaining what you're about to do. It should follow these principles and examples:
531
+
532
+ - **Use ${c}**
533
+ - **Keep it concise**: be no more than 1-2 sentences, focused on immediate, tangible next steps. (8–12 words or Chinese characters for quick updates).
534
+ - **Build on prior context**: if this is not the first action to be done, use the preamble message to connect the dots with what's been done so far and create a sense of momentum and clarity for the user to understand your next actions.
535
+ - **Keep your tone light, friendly and curious**: add small touches of personality in preambles feel collaborative and engaging.
536
+
537
+ **Examples:**
538
+ - <log>Click the login button</log>
539
+ - <log>Scroll to find the 'Yes' button in popup</log>
540
+ - <log>Previous actions failed to find the 'Yes' button, i will try again</log>
541
+ - <log>Go back to find the login button</log>`)}
542
+
543
+ ### If there is some action to do ...
544
+
545
+ ${l.actionOutputRules}
546
+
547
+ For example:
548
+ ${ij(iP("Add to cart button for Sauce Labs Backpack"),{locatePromptSpec:n,locateResultExampleIndex:1,buildActionOutput:l.buildActionOutput})}
549
+
550
+ ### If you think there is an error ...
551
+
552
+ - Use the <error> tag to output the error message.
553
+
554
+ For example:
555
+ <error>Unable to find the required element on the page</error>
556
+
557
+ ### If there is no action to do ...
558
+
559
+ - Don't output ${d} if there is no action to do.
560
+
561
+ ## Return Format
562
+
563
+ Return in XML format following this decision flow:
564
+
565
+ ${s.responsePrefix??""}
566
+
567
+ ${m(`**Always include (REQUIRED):**
568
+ <!-- Step 1: Observe and Plan -->
569
+ <planning>Your planning details here. NEVER skip this tag.</planning>`)}
570
+ ${h(`<!-- required when no update-plan-content is provided in the previous response -->
571
+ <update-plan-content>...</update-plan-content>
572
+
573
+ <!-- required when any sub-goal is completed -->
574
+ <mark-sub-goal-done>
575
+ <sub-goal index="1" status="finished" />
576
+ </mark-sub-goal-done>
577
+
578
+ <!-- Step 2: Memory data from current screenshot if needed -->
579
+ <memory>...</memory>`)}
580
+
581
+ **Then choose ONE of the following paths:**
582
+
583
+ **Path A: If the ${h("goal is accomplished","instruction is fulfilled")} or failed (Step ${g})**
584
+ <complete success="true|false">...</complete>
585
+
586
+ **Path B: If the ${h("goal is NOT complete","instruction is NOT fulfilled")} yet (Step ${y})**
587
+ <!-- Determine next action -->
588
+ ${f("<log>...</log>")}
589
+ ${l.actionOutputPlaceholder}
590
+
591
+ <!-- OR if there's an error -->
592
+ <error>...</error>
593
+
594
+ ${(e=>{let{includeSubGoals:t,includeThought:r,includeLog:n,locatePromptSpec:o,actionOutputProtocol:i,prefix:a}=e,s=i.buildActionOutput,l=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t?e:r},c=ij(iP("Name input field in the registration form"),{locatePromptSpec:o,locateResultExampleIndex:2,buildActionOutput:s}),A=ij(iM("John"),{buildActionOutput:s}),u=ij(iP("Email input field in the registration form"),{locatePromptSpec:o,locateResultExampleIndex:3,buildActionOutput:s}),d=ij(iM("john@example.com"),{buildActionOutput:s});return`
595
+ ## Multi-turn Conversation Example
596
+
597
+ Below is an example of a multi-turn conversation for "fill out the registration form with name 'John' and email 'john@example.com', then return the filled email address":
598
+
599
+ ### Turn 1 - Initial instruction
600
+
601
+ **User message:**
602
+ <user_instruction>fill out the registration form with name 'John' and email 'john@example.com', then return the filled email address</user_instruction>
603
+
604
+ **Screenshot:** [Shows a registration form with empty Name and Email fields]
605
+
606
+ **Your response:**
607
+
608
+ ${iN({prefix:a,planning:r?`The user wants me to fill out the registration form with specific values and return the email address. I can see the form has two fields: Name and Email. Both are currently empty. ${l("I'll break this down into sub-goals and start with the Name field.","I should start by clicking on the Name field.")} Note: The instruction is to fill the form only (not submit), and return the email at the end.`:void 0,updateSubGoals:t?[{...iD,status:"pending"},{...iz,status:"pending"},{...iB,status:"pending"}]:void 0,log:n?"Click on the Name field to start filling the form":void 0,actionOutputExample:c})}
609
+
610
+ ### Turn 2 - After clicking Name field
611
+
612
+ **User message:**
613
+ The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
614
+
615
+ ${l(of([{...iD,status:"running",logs:["Click on the Name field to start filling the form"]},{...iz,status:"pending"},{...iB,status:"pending"}]))}
616
+
617
+ **Screenshot:** [Shows the form with Name field now focused/active]
618
+
619
+ **Your response:**
620
+
621
+ ${iN({prefix:a,planning:r?`The Name field is now focused. I need to type 'John' into this field. ${l("Current sub-goal is running, will be completed after input.","After this, I'll need to fill the Email field as well.")}`:void 0,log:n?"Typing 'John' into the Name field":void 0,actionOutputExample:A})}
622
+
623
+ ### Turn 3 - After entering name
624
+
625
+ **User message:**
626
+ The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
627
+
628
+ ${l(of([{...iD,status:"running",logs:["Click on the Name field to start filling the form","Typing 'John' into the Name field"]},{...iz,status:"pending"},{...iB,status:"pending"}]))}
629
+
630
+ **Screenshot:** [Shows the form with Name field containing 'John']
631
+
632
+ **Your response:**
633
+
634
+ ${iN({prefix:a,planning:r?`The Name field now shows 'John'. ${l("Sub-goal 1 is complete. Next, I need to fill the Email field for sub-goal 2.","Next, I need to fill the Email field with 'john@example.com'. I'll click on the Email field first.")}`:void 0,markSubGoalsDone:t?[1]:void 0,memory:t?"Name field has been filled with 'John'":void 0,log:n?"Moving to the Email field":void 0,actionOutputExample:u})}
635
+
636
+ ### Turn 4 - After clicking Email field
637
+
638
+ **User message:**
639
+ The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
640
+
641
+ ${l(of([{...iD,status:"finished"},{...iz,status:"running",logs:["Moving to the Email field"]},{...iB,status:"pending"}]))}
642
+
643
+ **Screenshot:** [Shows the form with Name='John' and Email field focused]
644
+
645
+ **Your response:**
646
+
647
+ ${iN({prefix:a,planning:r?`The Email field is now focused. I'll enter 'john@example.com'. ${l("After this, sub-goal 2 will be complete and my task will be done.","After this, both required fields will be filled and my task will be complete.")}`:void 0,log:n?"Typing email address into the Email field":void 0,actionOutputExample:d})}
648
+
649
+ ### Turn 5 - After entering email (${l("Goal accomplished","Instruction fulfilled")})
650
+
651
+ **User message:**
652
+ The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
653
+
654
+ ${l(of([{...iD,status:"finished"},{...iz,status:"running",logs:["Moving to the Email field","Typing email address into the Email field"]},{...iB,status:"pending"}]))}
655
+
656
+ **Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
657
+
658
+ **Your response:**
659
+
660
+ ${iN({prefix:a,planning:r?`Both fields are now filled: Name shows 'John' and Email shows 'john@example.com'. ${l("Sub-goal 2 is complete. The user asked me to return the filled email address, so I need to include 'john@example.com' in my response. All sub-goals are now finished.","The user asked me to return the filled email address, so I should include 'john@example.com' in my response. The instruction has been fulfilled.")}`:void 0,markSubGoalsDone:t?[2,3]:void 0,complete:{success:!0,message:"john@example.com"}})}
661
+ `})({includeSubGoals:p,includeThought:i,includeLog:a,locatePromptSpec:n,actionOutputProtocol:l,prefix:s.responsePrefix})}`}var iL=r(10749);let iU=e=>"string"==typeof e?e:null==e?String(e):JSON.stringify(e)??String(e),iK=(0,e0.aZ)("planning"),iZ=(0,e0.aZ)("planning",{console:!0});async function iJ(e){let{messages:t,modelRuntime:r,abortSignal:n,includeLocateInPlanning:o,actionSpace:i,locateResultCodec:a,locateResultContext:s,includeThought:l,includeLog:c}=e;(0,eH.vA)("standard"===r.adapter.planning.kind,"callAndParsePlanningResponse requires a standard planning adapter");let A=r.adapter.planning.protocol.actionOutputProtocol;return rI({callAi:(e,i)=>rw(rS(t,i),r,{abortSignal:n,requiresOriginalImageDetail:o,semanticRetryAttempt:e}),parseResponse:e=>{let t=function(e,t){let{parsed:r,rawActionOutput:n}=function(e,t,r){let n,o,i=r.includeThought?rT(e,"planning"):void 0,a=rT(e,"memory"),s=rT(e,"log")||"",l=rT(e,"error"),c=e.match(/<complete\s+success="(true|false)">([\s\S]*?)<\/complete>/i);if(c){var A;o="true"===c[1],n=(null==(A=c[2])?void 0:A.trim())||void 0}let u=rT(e,"update-plan-content"),d=rT(e,"mark-sub-goal-done"),p=u?function(e){let t=[],r=/<sub-goal\s+index="(\d+)"\s+status="(pending|finished)"(?:\s*\/>|>([\s\S]*?)<\/sub-goal>)/gi,n=r.exec(e);for(;null!==n;){var o;let i=Number.parseInt(n[1],10),a=n[2],s=(null==(o=n[3])?void 0:o.trim())||"";t.push({index:i,status:a,description:s}),n=r.exec(e)}return t}(u):void 0,h=d?function(e){let t=[],r=/<sub-goal\s+index="(\d+)"\s+status="finished"\s*\/>/gi,n=r.exec(e);for(;null!==n;)t.push(Number.parseInt(n[1],10)),n=r.exec(e);return t}(d):void 0;return{parsed:{...i?{thought:i}:{},...a?{memory:a}:{},log:s,...l?{error:l}:{},...void 0!==n?{finalizeMessage:n}:{},...void 0!==o?{finalizeSuccess:o}:{},...(null==p?void 0:p.length)?{updateSubGoals:p}:{},...(null==h?void 0:h.length)?{markFinishedIndexes:h}:{}},rawActionOutput:rN(e,t)}}(e,t.actionOutputProtocol.actionOutputTagNames,{includeThought:t.includeThought}),o={...r,action:t.actionOutputProtocol.parseActionOutput(n,t.actionSpace)};return"action"!==t.logSource?o:{...o,log:o.action?function(e,t){let r=t.find(t=>t.name===e.type);if(!(null==r?void 0:r.paramSchema))return JSON.stringify(e);let n=e.param;if(null==n)return e.type;if("object"!=typeof n||Array.isArray(n))return`${e.type} - ${iU(n)}`;let o=Object.entries(r6(n,r.paramSchema)).map(e=>{let[t,r]=e;return`${t}: ${iU(r)}`}).join(", ");return[e.type,o].filter(Boolean).join(" - ")}(o.action,t.actionSpace):o.error?`Error - ${o.error}`:void 0!==o.finalizeSuccess?[`Complete - success: ${o.finalizeSuccess}`,o.finalizeMessage?`message: ${o.finalizeMessage}`:void 0].filter(Boolean).join(", "):"No action"}}(e.content,{includeThought:l,actionOutputProtocol:A,actionSpace:i,logSource:c?"model":"action"});if(!t.action&&void 0===t.finalizeSuccess&&!t.error)throw Error("Incomplete planning response: provide an action, <complete>, or <error>. A <planning> explanation alone is not sufficient.");t.action&&void 0!==t.finalizeSuccess&&(iZ("Planning response included both an action and <complete>; ignoring <complete> output."),t.finalizeMessage=void 0,t.finalizeSuccess=void 0);let r=t.action?[t.action]:[];return!function(e,t){let{actionSpace:r,parseRawLocateParameter:n,...o}=t;for(let t of e){let e=rG(t.type,r);if(!e.paramSchema)continue;let s=r7(e.paramSchema);try{var i,a;for(let e of s){let r=null==(i=t.param)?void 0:i[e];null!=r&&(t.param[e]=n(r))}for(let r of(r8(t.param,e.paramSchema),r9(t.param,e.paramSchema),s)){let e=null==(a=t.param)?void 0:a[r];if(void 0===e)continue;if(!(0,eH.Qd)(e))throw Error(`${r}: Expected an object with a prompt field`);let n=e.prompt;if(void 0===n)throw Error(`${r}.prompt: Required`);let i=r1.safeParse(n);if(!i.success)throw new iL.G(i.error.issues.map(e=>({...e,path:[r,"prompt",...e.path]})));t.param[r]=ox(e,o)}}catch(r){let e=r instanceof iL.G?r.issues.map(e=>`${e.path.join(".")||"param"}: ${e.message}`).join("; "):r instanceof Error?r.message:String(r);throw Error(`Invalid parameters for action ${t.type}: ${e}`,{cause:r})}}}(r,{parseRawLocateParameter:A.parseRawLocateParameter,actionSpace:i,includeLocateInPlanning:o,locateResultCodec:a,locateResultContext:s}),{response:e,planFromAI:t,actions:r}},toParseError:(e,t)=>{let r=e instanceof Error?e.message:String(e);return new ty(`XML parse error: ${r}`,t.content,t.usage,t.rawAssistantOutput,t.reasoning_content)},parseRetryTimes:r.config.retryCount,parseRetryInterval:r.config.retryInterval,abortSignal:n,onParseRetry:e=>{iK("retrying plan after response parsing failed: %s",e instanceof Error?e.message:String(e))}})}async function iQ(e,t){let r,{context:n,conversationHistory:o}=t,i=t.modelRuntime,{adapter:a}=i,{shotSize:s}=n,l=n.screenshot.base64;(0,eH.vA)("standard"===a.planning.kind,"standardPlan requires a standard planning adapter");let c=a.planning.protocol;if(t.includeLocateInPlanning&&!i.config.modelFamily)throw Error(iE(i.config.slot));let A=i.config.modelFamily?a.planning.locateResultCodec:void 0,u="deepThink"===t.effort,d="fast"!==t.effort,p="fast"!==t.effort;if(t.includeLocateInPlanning&&!A)throw Error(iE(i.config.slot));let h=await iF({actionSpace:t.actionSpace,includeThought:d,includeLog:p,includeSubGoals:u,planningProtocol:c,...t.includeLocateInPlanning&&A?{includeLocateInPlanning:!0,locatePromptSpec:A.promptSpec}:{includeLocateInPlanning:!1}}),m=await ov({imageBase64:l,width:s.width,height:s.height,policy:a.imagePreprocess}),f=m.imageBase64,g=t.actionContext?`${t.actionContext}
662
+ `:"",y=oh(e.referenceImages),v=[{role:"user",content:[{type:"text",text:`${g}<user_instruction>${e.text}</user_instruction>`}]},...y],b=u?o.subGoalsToText():o.historicalLogsToText(),w=b?`
663
+
664
+ ${b}`:o.pendingFeedbackMessage?"":`
665
+
666
+ No previous actions have been executed in this aiAct execution yet. If the instruction asks for actions, choose the first action to execute.`,E=o.memoriesToText(),x=E?`
667
+
668
+ ${E}`:"";o.pendingFeedbackMessage?(r={role:"user",content:[{type:"text",text:`${o.pendingFeedbackMessage}. The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.${x}${w}`},{type:"image",url:f}]},o.resetPendingFeedbackMessageIfExists()):r={role:"user",content:[{type:"text",text:`This is the current screenshot.${x}${w}`},{type:"image",url:f}]},o.appendMessage(r),o.compressHistory(50,20);let k=[{role:"system",content:h},...v,...o.snapshot(t.imagesIncludeCount)],{response:{content:S,usage:I,reasoning_content:C,rawAssistantOutput:O},planFromAI:R,actions:j}=await iJ({messages:k,modelRuntime:i,abortSignal:t.abortSignal,includeLocateInPlanning:t.includeLocateInPlanning,actionSpace:t.actionSpace,locateResultCodec:A,locateResultContext:{preparedSize:m.preparedSize,contentSize:m.contentSize},includeThought:d,includeLog:p}),P=rV(j,t.actionSpace),M=!0;void 0!==R.finalizeSuccess&&(iK("task completed via <complete> tag, stop planning"),M=!1,u&&o.markAllSubGoalsFinished());let T={...R,actions:j,rawResponse:S,rawAssistantOutput:O,usage:I,reasoning_content:C,yamlFlow:P,shouldContinuePlanning:M};if((0,eH.vA)(R,"can't get plans from AI"),u){var N,D;if((null==(N=R.updateSubGoals)?void 0:N.length)&&o.mergeSubGoals(R.updateSubGoals),null==(D=R.markFinishedIndexes)?void 0:D.length)for(let e of R.markFinishedIndexes)o.markSubGoalFinished(e);R.log&&o.appendSubGoalLog(R.log)}else R.log&&o.appendHistoricalLog(R.log);R.memory&&o.appendMemory(R.memory);let z=(null==O?void 0:O.type)==="responses"&&i.adapter.responses.replayRawAssistantOutput||(null==O?void 0:O.type)==="chat-completion"&&i.adapter.chatCompletion.replayRawAssistantMessage;return O&&z?o.appendModelOutput(O):(O||iK("Raw assistant output is unavailable; saving only response text in conversation history."),o.appendMessage({role:"assistant",content:[{type:"text",text:S}]})),T}let iq=async(e,t)=>{var r,n;let o=t.conversationHistory,i=async r=>{(0,eH.vA)(t.getDefaultModelRuntime,"Default model runtime is required for Jev planning delegation");let n=t.getDefaultModelRuntime();(0,eH.vA)("jev"!==n.config.modelFamily,"Jev cannot delegate planning to itself");let o={...n,config:{...n.config,intent:"planning"},executionId:t.modelRuntime.executionId,onUsage:n.onUsage?e=>{var t;return null==(t=n.onUsage)?void 0:t.call(n,{...e,intent:"planning"})}:void 0,modelRouting:{requestedModel:t.modelRuntime.config.modelName,requestedSlot:t.modelRuntime.config.slot,task:"planning",reason:r}};return("custom"===o.adapter.planning.kind?o.adapter.planning.planFn:iQ)(e,{...t,modelRuntime:o,includeLocateInPlanning:!1})},a=await ib(t.context.screenshot.base64),s=await Promise.all(e.referenceImages.map(async(e,t)=>({key:`reference_${t}`,name:e.name,image:await ib(e.url)}))),l={goal:e.text,context:t.actionContext,history:o.historicalLogsToText(),memory:o.memoriesToText(),feedback:o.pendingFeedbackMessage,references:s.map(e=>{let{key:t,name:r}=e;return{image:`\`${t}\``,name:r}}),availableActions:t.actionSpace.map(e=>{let{name:t,description:r}=e;return{name:t,description:r}})},c={Complete:"The entire user goal is already satisfied, confirmed by the current screenshot and execution feedback. No text answer is requested.",Delegate:"The next step requires text input, generated output, an action or parameters not covered by the other choices. Also use for impossible tasks needing explanation."};for(let e of t.actionSpace)("Tap"===e.name||"Scroll"===e.name||"Sleep"===e.name)&&(c[e.name]="Sleep"===e.name?"Wait 800 ms for a transient loading state.":e.description??e.name);let A=await rw([],t.modelRuntime,{abortSignal:t.abortSignal,systemOneRequest:{state:l,images:{screenshot:a.imageBase64,...Object.fromEntries(s.map(e=>{let{key:t,image:r}=e;return[t,r.imageBase64]}))},questions:{action:{type:"choice",instructions:"Choose exactly the next step toward `goal` using the current `screenshot`, context, history and feedback. History records proposed actions; feedback and current screenshot establish what actually happened. Do not repeat completed steps. Reference images describe targets, not the current page.",criteria:c},...c.Scroll?{direction:{type:"choice",instructions:"If scrolling is the next step toward `goal`, which direction reveals the desired off-screen content? Evaluate from the screenshot and history independently of the action question.",criteria:{down:"Reveal content below",up:"Reveal content above",left:"Reveal content to the left",right:"Reveal content to the right"}}}:{}}}}),{answers:u}=ry.parse(JSON.parse(A.content));(0,eH.vA)("choice"===u.action.type,"Invalid Jev planning action");let d=u.action.choice;if("Delegate"===d)return i("The next step requires parameters or output that Jev cannot generate");if(("Tap"===d||"Scroll"===d)&&(null==(r=t.locateModelRuntime)?void 0:r.config.modelFamily)!=="jev")return i("The configured Locate model requires a concrete target description from a general-purpose planner");let p={prompt:`Locate the single ${"Scroll"===d?"scrollable region to scroll":"element to tap"} for the NEXT step toward this goal. Use the current screenshot as authoritative. Previous proposals may have failed; use feedback. Task context: ${JSON.stringify(l)}`,images:e.referenceImages},h="Complete"===d?[]:"Sleep"===d?[{type:"Sleep",param:{timeMs:800}}]:"Tap"===d?[{type:"Tap",param:{locate:p}}]:((0,eH.vA)("Scroll"===d&&(null==(n=u.direction)?void 0:n.type)==="choice","Invalid Jev scroll action"),[{type:"Scroll",param:{locate:p,direction:u.direction.choice,scrollType:"singleAction"}}]),m=`Jev selected ${d}`,f=o.pendingFeedbackMessage;return o.resetPendingFeedbackMessageIfExists(),o.appendMessage({role:"user",content:`Goal: ${e.text}
669
+ Execution feedback: ${f}`}),o.appendMessage({role:"assistant",content:JSON.stringify({actions:h,log:m})}),o.appendHistoricalLog(`${m}: ${JSON.stringify(h.map(e=>{let{type:t,param:r}=e;return{type:t,direction:null==r?void 0:r.direction}}))}`),o.compressHistory(50,20),{actions:h,log:m,rawResponse:A.content,usage:A.usage,shouldContinuePlanning:"Complete"!==d,..."Complete"===d?{finalizeSuccess:!0}:{},yamlFlow:rV(h,t.actionSpace)}};async function iX(e){let{referenceImages:t}=await op(e),r=await Promise.all(t.map(async(e,t)=>({key:`reference_${t}`,name:e.name,image:await ib(e.url)})));return{references:r.map(e=>{let{key:t,name:r}=e;return{image:`\`${t}\``,name:r}}),images:Object.fromEntries(r.map(e=>{let{key:t,image:r}=e;return[t,r.imageBase64]}))}}let iW=async e=>{var t;let r,n,o,i,a,{targetElementDescription:s,locateImage:l,options:c}=e,A=await ib(l.imageBase64),u=await iX(s),d=r2(s),p=await rw([],c.modelRuntime,{abortSignal:c.abortSignal,systemOneRequest:{state:{target:d,references:u.references},images:{screenshot:A.imageBase64,...u.images},questions:{present:{type:"noul",instructions:"Is the target described in `target` present in `screenshot`? Reference images, if any, describe the target; they are not the screenshot."},target:{type:"box",instructions:"The single target described in `target`, in `screenshot`."}}}}),{answers:h}=ry.parse(JSON.parse(p.content));return(0,eH.vA)("noul"===h.present.type&&"box"===h.target.type,"Invalid Jev locate answers"),{rawResponse:p.content,usage:p.usage,...h.present.noul>=.5?{locatedPixelResult:(t=h.target.box,r=t.left*A.width*l.width/A.contentSize.width,n=t.top*A.height*l.height/A.contentSize.height,o=t.right*A.width*l.width/A.contentSize.width,a=[(r+o)/2,(n+(i=t.bottom*A.height*l.height/A.contentSize.height))/2],(0,eH.vA)(a[0]>=0&&a[0]<l.width&&a[1]>=0&&a[1]<l.height,"Jev returned a target in image padding, outside the screenshot"),{center:a,rect:{left:r,top:n,width:o-r,height:i-n}})}:{errors:["The target is not present in the screenshot"]}}},iH=async e=>{var t,r,n;let o=await iX({prompt:"",...e.multimodalPrompt}),i=(null==(t=e.extractOption)?void 0:t.screenshotIncluded)===!1?[]:(null==(r=e.context.screenshotSequence)?void 0:r.length)?e.context.screenshotSequence:[e.context.screenshot],a=await Promise.all(i.map(e=>ib(e.base64))),s=await rw([],e.modelRuntime,{abortSignal:e.abortSignal,systemOneRequest:{state:{statement:e.dataQuery,context:null==(n=e.extractOption)?void 0:n.context,pageDescription:e.pageDescription,frames:a.map((e,t)=>`\`frame_${t}\``),references:o.references},images:{...Object.fromEntries(a.map((e,t)=>[`frame_${t}`,e.imageBase64])),...o.images},questions:{result:{type:"noul",instructions:"Is `statement` true? Screenshots in `frames` are ordered earliest to latest. For current state use the latest frame; for events use the relevant frames. Reference images are supporting context, not screenshots, unless the statement requests comparison. Use the provided context and page description when present."}}}}),l=ry.parse(JSON.parse(s.content)).answers.result;return(0,eH.vA)("noul"===l.type,"Invalid Jev boolean answer"),{value:l.noul>=.5,rawResponse:s.content,usage:s.usage}},iY={shape:"point",order:"xy",normalizedBy:1,rounding:"round"},iG={shape:"point",order:"xy",rounding:"round"};function iV(e){let t=rF(e,"point");if(t.length<2)throw Error(`invalid point data: ${JSON.stringify(e)} `);let[r,n]=t;return rL(r<=1&&n<=1?iY:iG,[r,n])}let i$={shape:"bbox",order:"xy",rounding:"round"},i_={shape:"point",order:"xy",rounding:"round"},i0={chatCompletion:{unsupportedUserConfig:["reasoningEffort"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningBudget:o}=r,i={};void 0!==r.temperature&&(i.temperature=r.temperature);let a={};return"default"!==n&&(a.enable_thinking=n??!1,void 0!==o&&(a.thinking_budget=o)),{config:{...t,...i,...a}}},messageExtraction:{kind:"default",reasoningContentKeys:["reasoning_content","reasoning"]},useReasoningAsContentFallback:!0},locate:{element:{resultFormat:{resultKey:"bbox_2d",resultKeyAliases:["bbox"],coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3,rounding:"round"}}}}},i1={"qwen2.5-vl":{chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,n={};return void 0!==r.temperature&&(n.temperature=r.temperature),{config:{...t,...n,vl_high_resolution_images:!0}}}},imagePreprocess:{padBlockSize:28},locate:{element:{resultFormat:{resultKey:"bbox_2d",resultKeyAliases:["bbox"],coordinates:i$,parseRawLocateValue:function(e){let t=rB(e);if(t.length<2)throw Error(`invalid bbox data for qwen-vl mode: ${JSON.stringify(t)} `);return"number"==typeof t[2]&&"number"==typeof t[3]?rL(i$,[t[0],t[1],t[2],t[3]]):rL(i_,[t[0],t[1]])}}}}},"qwen3-vl":i0,qwen3:i0,"qwen3.5":i0,"qwen3.6":i0};var i2=r(85409);let i3={0:{keyCode:48,key:"0",code:"Digit0"},1:{keyCode:49,key:"1",code:"Digit1"},2:{keyCode:50,key:"2",code:"Digit2"},3:{keyCode:51,key:"3",code:"Digit3"},4:{keyCode:52,key:"4",code:"Digit4"},5:{keyCode:53,key:"5",code:"Digit5"},6:{keyCode:54,key:"6",code:"Digit6"},7:{keyCode:55,key:"7",code:"Digit7"},8:{keyCode:56,key:"8",code:"Digit8"},9:{keyCode:57,key:"9",code:"Digit9"},Power:{key:"Power",code:"Power"},Eject:{key:"Eject",code:"Eject"},Abort:{keyCode:3,code:"Abort",key:"Cancel"},Help:{keyCode:6,code:"Help",key:"Help"},Backspace:{keyCode:8,code:"Backspace",key:"Backspace"},Tab:{keyCode:9,code:"Tab",key:"Tab"},Numpad5:{keyCode:12,shiftKeyCode:101,key:"Clear",code:"Numpad5",shiftKey:"5",location:3},NumpadEnter:{keyCode:13,code:"NumpadEnter",key:"Enter",text:"\r",location:3},Enter:{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\r":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\n":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},ShiftLeft:{keyCode:16,code:"ShiftLeft",key:"Shift",location:1},ShiftRight:{keyCode:16,code:"ShiftRight",key:"Shift",location:2},ControlLeft:{keyCode:17,code:"ControlLeft",key:"Control",location:1},ControlRight:{keyCode:17,code:"ControlRight",key:"Control",location:2},AltLeft:{keyCode:18,code:"AltLeft",key:"Alt",location:1},AltRight:{keyCode:18,code:"AltRight",key:"Alt",location:2},Pause:{keyCode:19,code:"Pause",key:"Pause"},CapsLock:{keyCode:20,code:"CapsLock",key:"CapsLock"},Escape:{keyCode:27,code:"Escape",key:"Escape"},Convert:{keyCode:28,code:"Convert",key:"Convert"},NonConvert:{keyCode:29,code:"NonConvert",key:"NonConvert"},Space:{keyCode:32,code:"Space",key:" "},Numpad9:{keyCode:33,shiftKeyCode:105,key:"PageUp",code:"Numpad9",shiftKey:"9",location:3},PageUp:{keyCode:33,code:"PageUp",key:"PageUp"},Numpad3:{keyCode:34,shiftKeyCode:99,key:"PageDown",code:"Numpad3",shiftKey:"3",location:3},PageDown:{keyCode:34,code:"PageDown",key:"PageDown"},End:{keyCode:35,code:"End",key:"End"},Numpad1:{keyCode:35,shiftKeyCode:97,key:"End",code:"Numpad1",shiftKey:"1",location:3},Home:{keyCode:36,code:"Home",key:"Home"},Numpad7:{keyCode:36,shiftKeyCode:103,key:"Home",code:"Numpad7",shiftKey:"7",location:3},ArrowLeft:{keyCode:37,code:"ArrowLeft",key:"ArrowLeft"},Numpad4:{keyCode:37,shiftKeyCode:100,key:"ArrowLeft",code:"Numpad4",shiftKey:"4",location:3},Numpad8:{keyCode:38,shiftKeyCode:104,key:"ArrowUp",code:"Numpad8",shiftKey:"8",location:3},ArrowUp:{keyCode:38,code:"ArrowUp",key:"ArrowUp"},ArrowRight:{keyCode:39,code:"ArrowRight",key:"ArrowRight"},Numpad6:{keyCode:39,shiftKeyCode:102,key:"ArrowRight",code:"Numpad6",shiftKey:"6",location:3},Numpad2:{keyCode:40,shiftKeyCode:98,key:"ArrowDown",code:"Numpad2",shiftKey:"2",location:3},ArrowDown:{keyCode:40,code:"ArrowDown",key:"ArrowDown"},Select:{keyCode:41,code:"Select",key:"Select"},Open:{keyCode:43,code:"Open",key:"Execute"},PrintScreen:{keyCode:44,code:"PrintScreen",key:"PrintScreen"},Insert:{keyCode:45,code:"Insert",key:"Insert"},Numpad0:{keyCode:45,shiftKeyCode:96,key:"Insert",code:"Numpad0",shiftKey:"0",location:3},Delete:{keyCode:46,code:"Delete",key:"Delete"},NumpadDecimal:{keyCode:46,shiftKeyCode:110,code:"NumpadDecimal",key:"\0",shiftKey:".",location:3},Digit0:{keyCode:48,code:"Digit0",shiftKey:")",key:"0"},Digit1:{keyCode:49,code:"Digit1",shiftKey:"!",key:"1"},Digit2:{keyCode:50,code:"Digit2",shiftKey:"@",key:"2"},Digit3:{keyCode:51,code:"Digit3",shiftKey:"#",key:"3"},Digit4:{keyCode:52,code:"Digit4",shiftKey:"$",key:"4"},Digit5:{keyCode:53,code:"Digit5",shiftKey:"%",key:"5"},Digit6:{keyCode:54,code:"Digit6",shiftKey:"^",key:"6"},Digit7:{keyCode:55,code:"Digit7",shiftKey:"&",key:"7"},Digit8:{keyCode:56,code:"Digit8",shiftKey:"*",key:"8"},Digit9:{keyCode:57,code:"Digit9",shiftKey:"(",key:"9"},KeyA:{keyCode:65,code:"KeyA",shiftKey:"A",key:"a"},KeyB:{keyCode:66,code:"KeyB",shiftKey:"B",key:"b"},KeyC:{keyCode:67,code:"KeyC",shiftKey:"C",key:"c"},KeyD:{keyCode:68,code:"KeyD",shiftKey:"D",key:"d"},KeyE:{keyCode:69,code:"KeyE",shiftKey:"E",key:"e"},KeyF:{keyCode:70,code:"KeyF",shiftKey:"F",key:"f"},KeyG:{keyCode:71,code:"KeyG",shiftKey:"G",key:"g"},KeyH:{keyCode:72,code:"KeyH",shiftKey:"H",key:"h"},KeyI:{keyCode:73,code:"KeyI",shiftKey:"I",key:"i"},KeyJ:{keyCode:74,code:"KeyJ",shiftKey:"J",key:"j"},KeyK:{keyCode:75,code:"KeyK",shiftKey:"K",key:"k"},KeyL:{keyCode:76,code:"KeyL",shiftKey:"L",key:"l"},KeyM:{keyCode:77,code:"KeyM",shiftKey:"M",key:"m"},KeyN:{keyCode:78,code:"KeyN",shiftKey:"N",key:"n"},KeyO:{keyCode:79,code:"KeyO",shiftKey:"O",key:"o"},KeyP:{keyCode:80,code:"KeyP",shiftKey:"P",key:"p"},KeyQ:{keyCode:81,code:"KeyQ",shiftKey:"Q",key:"q"},KeyR:{keyCode:82,code:"KeyR",shiftKey:"R",key:"r"},KeyS:{keyCode:83,code:"KeyS",shiftKey:"S",key:"s"},KeyT:{keyCode:84,code:"KeyT",shiftKey:"T",key:"t"},KeyU:{keyCode:85,code:"KeyU",shiftKey:"U",key:"u"},KeyV:{keyCode:86,code:"KeyV",shiftKey:"V",key:"v"},KeyW:{keyCode:87,code:"KeyW",shiftKey:"W",key:"w"},KeyX:{keyCode:88,code:"KeyX",shiftKey:"X",key:"x"},KeyY:{keyCode:89,code:"KeyY",shiftKey:"Y",key:"y"},KeyZ:{keyCode:90,code:"KeyZ",shiftKey:"Z",key:"z"},MetaLeft:{keyCode:91,code:"MetaLeft",key:"Meta",location:1},MetaRight:{keyCode:92,code:"MetaRight",key:"Meta",location:2},ContextMenu:{keyCode:93,code:"ContextMenu",key:"ContextMenu"},NumpadMultiply:{keyCode:106,code:"NumpadMultiply",key:"*",location:3},NumpadAdd:{keyCode:107,code:"NumpadAdd",key:"+",location:3},NumpadSubtract:{keyCode:109,code:"NumpadSubtract",key:"-",location:3},NumpadDivide:{keyCode:111,code:"NumpadDivide",key:"/",location:3},F1:{keyCode:112,code:"F1",key:"F1"},F2:{keyCode:113,code:"F2",key:"F2"},F3:{keyCode:114,code:"F3",key:"F3"},F4:{keyCode:115,code:"F4",key:"F4"},F5:{keyCode:116,code:"F5",key:"F5"},F6:{keyCode:117,code:"F6",key:"F6"},F7:{keyCode:118,code:"F7",key:"F7"},F8:{keyCode:119,code:"F8",key:"F8"},F9:{keyCode:120,code:"F9",key:"F9"},F10:{keyCode:121,code:"F10",key:"F10"},F11:{keyCode:122,code:"F11",key:"F11"},F12:{keyCode:123,code:"F12",key:"F12"},F13:{keyCode:124,code:"F13",key:"F13"},F14:{keyCode:125,code:"F14",key:"F14"},F15:{keyCode:126,code:"F15",key:"F15"},F16:{keyCode:127,code:"F16",key:"F16"},F17:{keyCode:128,code:"F17",key:"F17"},F18:{keyCode:129,code:"F18",key:"F18"},F19:{keyCode:130,code:"F19",key:"F19"},F20:{keyCode:131,code:"F20",key:"F20"},F21:{keyCode:132,code:"F21",key:"F21"},F22:{keyCode:133,code:"F22",key:"F22"},F23:{keyCode:134,code:"F23",key:"F23"},F24:{keyCode:135,code:"F24",key:"F24"},NumLock:{keyCode:144,code:"NumLock",key:"NumLock"},ScrollLock:{keyCode:145,code:"ScrollLock",key:"ScrollLock"},AudioVolumeMute:{keyCode:173,code:"AudioVolumeMute",key:"AudioVolumeMute"},AudioVolumeDown:{keyCode:174,code:"AudioVolumeDown",key:"AudioVolumeDown"},AudioVolumeUp:{keyCode:175,code:"AudioVolumeUp",key:"AudioVolumeUp"},MediaTrackNext:{keyCode:176,code:"MediaTrackNext",key:"MediaTrackNext"},MediaTrackPrevious:{keyCode:177,code:"MediaTrackPrevious",key:"MediaTrackPrevious"},MediaStop:{keyCode:178,code:"MediaStop",key:"MediaStop"},MediaPlayPause:{keyCode:179,code:"MediaPlayPause",key:"MediaPlayPause"},Semicolon:{keyCode:186,code:"Semicolon",shiftKey:":",key:";"},Equal:{keyCode:187,code:"Equal",shiftKey:"+",key:"="},NumpadEqual:{keyCode:187,code:"NumpadEqual",key:"=",location:3},Comma:{keyCode:188,code:"Comma",shiftKey:"<",key:","},Minus:{keyCode:189,code:"Minus",shiftKey:"_",key:"-"},Period:{keyCode:190,code:"Period",shiftKey:">",key:"."},Slash:{keyCode:191,code:"Slash",shiftKey:"?",key:"/"},Backquote:{keyCode:192,code:"Backquote",shiftKey:"~",key:"`"},BracketLeft:{keyCode:219,code:"BracketLeft",shiftKey:"{",key:"["},Backslash:{keyCode:220,code:"Backslash",shiftKey:"|",key:"\\"},BracketRight:{keyCode:221,code:"BracketRight",shiftKey:"}",key:"]"},Quote:{keyCode:222,code:"Quote",shiftKey:'"',key:"'"},AltGraph:{keyCode:225,code:"AltGraph",key:"AltGraph"},Props:{keyCode:247,code:"Props",key:"CrSel"},Cancel:{keyCode:3,key:"Cancel",code:"Abort"},Clear:{keyCode:12,key:"Clear",code:"Numpad5",location:3},Shift:{keyCode:16,key:"Shift",code:"ShiftLeft",location:1},Control:{keyCode:17,key:"Control",code:"ControlLeft",location:1},Alt:{keyCode:18,key:"Alt",code:"AltLeft",location:1},Accept:{keyCode:30,key:"Accept"},ModeChange:{keyCode:31,key:"ModeChange"}," ":{keyCode:32,key:" ",code:"Space"},Print:{keyCode:42,key:"Print"},Execute:{keyCode:43,key:"Execute",code:"Open"},"\0":{keyCode:46,key:"\0",code:"NumpadDecimal",location:3},a:{keyCode:65,key:"a",code:"KeyA"},b:{keyCode:66,key:"b",code:"KeyB"},c:{keyCode:67,key:"c",code:"KeyC"},d:{keyCode:68,key:"d",code:"KeyD"},e:{keyCode:69,key:"e",code:"KeyE"},f:{keyCode:70,key:"f",code:"KeyF"},g:{keyCode:71,key:"g",code:"KeyG"},h:{keyCode:72,key:"h",code:"KeyH"},i:{keyCode:73,key:"i",code:"KeyI"},j:{keyCode:74,key:"j",code:"KeyJ"},k:{keyCode:75,key:"k",code:"KeyK"},l:{keyCode:76,key:"l",code:"KeyL"},m:{keyCode:77,key:"m",code:"KeyM"},n:{keyCode:78,key:"n",code:"KeyN"},o:{keyCode:79,key:"o",code:"KeyO"},p:{keyCode:80,key:"p",code:"KeyP"},q:{keyCode:81,key:"q",code:"KeyQ"},r:{keyCode:82,key:"r",code:"KeyR"},s:{keyCode:83,key:"s",code:"KeyS"},t:{keyCode:84,key:"t",code:"KeyT"},u:{keyCode:85,key:"u",code:"KeyU"},v:{keyCode:86,key:"v",code:"KeyV"},w:{keyCode:87,key:"w",code:"KeyW"},x:{keyCode:88,key:"x",code:"KeyX"},y:{keyCode:89,key:"y",code:"KeyY"},z:{keyCode:90,key:"z",code:"KeyZ"},Meta:{keyCode:91,key:"Meta",code:"MetaLeft",location:1},"*":{keyCode:106,key:"*",code:"NumpadMultiply",location:3},"+":{keyCode:107,key:"+",code:"NumpadAdd",location:3},"-":{keyCode:109,key:"-",code:"NumpadSubtract",location:3},"/":{keyCode:111,key:"/",code:"NumpadDivide",location:3},";":{keyCode:186,key:";",code:"Semicolon"},"=":{keyCode:187,key:"=",code:"Equal"},",":{keyCode:188,key:",",code:"Comma"},".":{keyCode:190,key:".",code:"Period"},"`":{keyCode:192,key:"`",code:"Backquote"},"[":{keyCode:219,key:"[",code:"BracketLeft"},"\\":{keyCode:220,key:"\\",code:"Backslash"},"]":{keyCode:221,key:"]",code:"BracketRight"},"'":{keyCode:222,key:"'",code:"Quote"},Attn:{keyCode:246,key:"Attn"},CrSel:{keyCode:247,key:"CrSel",code:"Props"},ExSel:{keyCode:248,key:"ExSel"},EraseEof:{keyCode:249,key:"EraseEof"},Play:{keyCode:250,key:"Play"},ZoomOut:{keyCode:251,key:"ZoomOut"},")":{keyCode:48,key:")",code:"Digit0"},"!":{keyCode:49,key:"!",code:"Digit1"},"@":{keyCode:50,key:"@",code:"Digit2"},"#":{keyCode:51,key:"#",code:"Digit3"},$:{keyCode:52,key:"$",code:"Digit4"},"%":{keyCode:53,key:"%",code:"Digit5"},"^":{keyCode:54,key:"^",code:"Digit6"},"&":{keyCode:55,key:"&",code:"Digit7"},"(":{keyCode:57,key:"(",code:"Digit9"},A:{keyCode:65,key:"A",code:"KeyA"},B:{keyCode:66,key:"B",code:"KeyB"},C:{keyCode:67,key:"C",code:"KeyC"},D:{keyCode:68,key:"D",code:"KeyD"},E:{keyCode:69,key:"E",code:"KeyE"},F:{keyCode:70,key:"F",code:"KeyF"},G:{keyCode:71,key:"G",code:"KeyG"},H:{keyCode:72,key:"H",code:"KeyH"},I:{keyCode:73,key:"I",code:"KeyI"},J:{keyCode:74,key:"J",code:"KeyJ"},K:{keyCode:75,key:"K",code:"KeyK"},L:{keyCode:76,key:"L",code:"KeyL"},M:{keyCode:77,key:"M",code:"KeyM"},N:{keyCode:78,key:"N",code:"KeyN"},O:{keyCode:79,key:"O",code:"KeyO"},P:{keyCode:80,key:"P",code:"KeyP"},Q:{keyCode:81,key:"Q",code:"KeyQ"},R:{keyCode:82,key:"R",code:"KeyR"},S:{keyCode:83,key:"S",code:"KeyS"},T:{keyCode:84,key:"T",code:"KeyT"},U:{keyCode:85,key:"U",code:"KeyU"},V:{keyCode:86,key:"V",code:"KeyV"},W:{keyCode:87,key:"W",code:"KeyW"},X:{keyCode:88,key:"X",code:"KeyX"},Y:{keyCode:89,key:"Y",code:"KeyY"},Z:{keyCode:90,key:"Z",code:"KeyZ"},":":{keyCode:186,key:":",code:"Semicolon"},"<":{keyCode:188,key:"<",code:"Comma"},_:{keyCode:189,key:"_",code:"Minus"},">":{keyCode:190,key:">",code:"Period"},"?":{keyCode:191,key:"?",code:"Slash"},"~":{keyCode:192,key:"~",code:"Backquote"},"{":{keyCode:219,key:"{",code:"BracketLeft"},"|":{keyCode:220,key:"|",code:"Backslash"},"}":{keyCode:221,key:"}",code:"BracketRight"},'"':{keyCode:222,key:'"',code:"Quote"},SoftLeft:{key:"SoftLeft",code:"SoftLeft",location:4},SoftRight:{key:"SoftRight",code:"SoftRight",location:4},Camera:{keyCode:44,key:"Camera",code:"Camera",location:4},Call:{key:"Call",code:"Call",location:4},EndCall:{keyCode:95,key:"EndCall",code:"EndCall",location:4},VolumeDown:{keyCode:182,key:"VolumeDown",code:"VolumeDown",location:4},VolumeUp:{keyCode:183,key:"VolumeUp",code:"VolumeUp",location:4}},i5=Object.entries(i3).reduce((e,t)=>{let[r,n]=t,o=r.toLowerCase();return o!==r&&(e[o]=n),e},{}),i4=e=>{let t=e.toLowerCase();return i5[t]?i5[t].key:e},i7="undefined"!=typeof window?/Mac|iPod|iPhone|iPad/.test(window.navigator.platform):"darwin"===i2.platform,i8={return:i3.Enter.key,enter:i3.Enter.key,command:i3.Meta.key,cmd:i3.Meta.key,ctrl:i7?i3.Meta.key:i3.Control.key,shift:i3.Shift.key,alt:i3.Alt.key,space:i3.Space.key,"page down":i3.PageDown.key,pagedown:i3.PageDown.key,"page up":i3.PageUp.key,pageup:i3.PageUp.key},i6=(0,e0.aZ)("ui-tars-planning"),i9=(0,e0.aZ)("ui-tars-planning",{console:!0});function ae(e){let[t,r]=JSON.parse(e);return(0,eH.vA)("number"==typeof t&&Number.isFinite(t)&&"number"==typeof r&&Number.isFinite(r),`invalid point data for ui-tars planning: ${e}`),[t,r]}var at=r(22788);let ar=(0,e0.aZ)("ui-tars-planning");function an(){let e=tX();return`
670
+ You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task.
671
+
672
+ ## Output Format
673
+ \`\`\`
674
+ Thought: ...
675
+ Action: ...
676
+ \`\`\`
677
+
678
+ ## Action Space
679
+
680
+ click(start_box='[x1, y1, x2, y2]')
681
+ left_double(start_box='[x1, y1, x2, y2]')
682
+ right_single(start_box='[x1, y1, x2, y2]')
683
+ drag(start_box='[x1, y1, x2, y2]', end_box='[x3, y3, x4, y4]')
684
+ hotkey(key='')
685
+ type(content='xxx') # Use escape characters \\', \\", and \\n in content part to ensure we can parse the content in normal python string format. If you want to submit your input, use \\n at the end of content.
686
+ scroll(start_box='[x1, y1, x2, y2]', direction='down or up or right or left')
687
+ wait() #Sleep for 5s and take a screenshot to check for any changes.
688
+ finished(content='xxx') # Use escape characters \\', \\", and \\n in content part to ensure we can parse the content in normal python string format.
689
+
690
+
691
+ ## Note
692
+ - Use ${e} in \`Thought\` part.
693
+ - Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part.
694
+
695
+ ## User Instruction
696
+ `}let ao=e=>e.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),ai={shape:"bbox",order:"xy",normalizedBy:1e3,rounding:"round"},aa={shape:"point",order:"xy",normalizedBy:1e3,rounding:"round"};function as(e){let t=rB(e);if("string"==typeof t){(0,eH.vA)(/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(t.trim()),`invalid bbox data string for ui-tars mode: ${t}`);let e=t.split(" ");if(4===e.length)return rL(ai,[Number(e[0]),Number(e[1]),Number(e[2]),Number(e[3])]);throw Error(`invalid bbox data string for ui-tars mode: ${t}`)}let r=[];if(Array.isArray(t)&&"string"==typeof t[0]?t.forEach(e=>{if("string"==typeof e&&e.includes(",")){let[t,n]=e.split(",");r.push(Number(t.trim()),Number(n.trim()))}else if("string"==typeof e&&e.includes(" ")){let[t,n]=e.split(" ");r.push(Number(t.trim()),Number(n.trim()))}else r.push(Number(e))}):r=t,4===r.length||5===r.length)return rL(ai,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return rL(aa,[r[0],r[1]]);if(8===t.length)return rL(ai,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for ui-tars mode: ${JSON.stringify(t)} `)}function al(e){return{chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,n={};return void 0!==r.temperature&&(n.temperature=r.temperature),{config:{...t,...n}}}},planning:{kind:"custom",cacheEnabled:!1,defaultReplanningCycleLimit:40,planner:{messages:{systemPromptPlacement:"user-message",buildSystemPrompt:an,buildUserInstruction:e=>`<user_instruction>${e}</user_instruction>`,buildAssistantContent:(e,t)=>ao(t)},coordinates:{shape:"point",order:"xy",normalizedBy:1},parseResponse:(t,r)=>{var n;let o,i,{options:a}=r;return n=a.context.shotSize,o=t.replace(/\[EOS\]/g,"").replace(/```(?:[a-zA-Z0-9_-]+)?/g,"").replace(/<bbox>(\d+)\s+(\d+)\s+(\d+)\s+(\d+)<\/bbox>/g,function(e,t,r,n,o){let i=Number.parseInt(t,10),a=Number.parseInt(r,10),s=Number.parseInt(n,10),l=Number.parseInt(o,10),c=Math.floor((i+s)/2),A=Math.floor((a+l)/2);return`(${c},${A})`}).trim(),i=(0,at.q)({prediction:o,factor:[1e3,1e3],screenContext:{width:n.width,height:n.height},modelVer:e}),ar("ui-tars modelVer",e,", parsed",JSON.stringify(i.parsed)),{rawResponse:t,actions:i.parsed}},transformActions:e=>(function(e){let t=[],r=[];if(e.actions.forEach(e=>{let n=(e.action_type||"").toLowerCase();if("click"===n){(0,eH.vA)(e.action_inputs.start_box,"start_box is required");let r={point:ae(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"Tap",param:{locate:r}})}else if("left_double"===n){(0,eH.vA)(e.action_inputs.start_box,"start_box is required");let r={point:ae(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"DoubleClick",param:{locate:r},thought:e.thought||""})}else if("right_single"===n){(0,eH.vA)(e.action_inputs.start_box,"start_box is required");let r={point:ae(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"RightClick",param:{locate:r},thought:e.thought||""})}else if("drag"===n){(0,eH.vA)(e.action_inputs.start_box,"start_box is required"),(0,eH.vA)(e.action_inputs.end_box,"end_box is required");let r=ae(e.action_inputs.start_box),n=ae(e.action_inputs.end_box);t.push({type:"DragAndDrop",param:{from:{point:r,prompt:e.thought||""},to:{point:n,prompt:e.thought||""}},thought:e.thought||""})}else if("type"===n)t.push({type:"Input",param:{value:e.action_inputs.content},thought:e.thought||""});else if("scroll"===n)t.push({type:"Scroll",param:{direction:e.action_inputs.direction},thought:e.thought||""});else if("finished"===n)t.push({type:"Finished",param:{},thought:e.action_inputs.content||e.thought||""});else if("hotkey"===n)if(e.action_inputs.key){var o;let r=i8[(o=e.action_inputs.key).toLowerCase()]?[i4(i8[o.toLowerCase()])]:o.split(" ").map(e=>i4(i8[e.toLowerCase()]||e));t.push({type:"KeyboardPress",param:{keyName:r.join("+")},thought:e.thought||""})}else i9("No key found in action: hotkey. Will not perform action.");else"wait"===n?t.push({type:"Sleep",param:{timeMs:1e3},thought:e.thought||""}):n&&(r.push({type:n,thought:e.thought||""}),i6("Unhandled action type:",n,"thought:",e.thought))}),0===t.length)throw Error(function(e,t,r){let n=[];if(0===t.length&&(n.push("Action parser returned no actions"),e.includes("Thought:")&&!e.includes("Action:")?n.push('Response contains "Thought:" but missing "Action:" line'):n.push("Response may be malformed or empty")),r.length>0){let e=r.map(e=>e.type).join(", ");n.push(`Unhandled action types: ${e}`)}return["No actions found in UI-TARS response.",...n].join("\n")}(e.rawResponse,e.actions,r));return i6("transformActions",JSON.stringify(t,null,2)),t})(e),shouldContinuePlanning:(e,t)=>t.every(e=>"Finished"!==e.type),buildResponseLog:(e,t)=>ao(t)}},locate:{element:{resultFormat:{coordinates:ai,parseRawLocateValue:as}}}}}let ac=al(tu.UH.DOUBAO_1_5_20B),aA={"vlm-ui-tars":al(tu.UH.V1_0),"vlm-ui-tars-doubao":ac,"vlm-ui-tars-doubao-1.5":ac},au={jev:{supportedTasks:["locate","boolean","planning"],supportedProtocols:[],locate:{kind:"custom",locateFn:iW},insight:{booleanFn:iH},planning:{kind:"custom",planFn:iq,cacheEnabled:!1,supportsActionDeepLocate:!1,defaultReplanningCycleLimit:20}},...i1,...ia,"doubao-vision":iu,"doubao-seed":iu,...ip,...aA,...ih,...o9,...iv,kimi:{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n}=r,o={};return o.temperature=void 0,"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(o.response_format={type:"json_object"}),{config:{...t,...o,thinking:{type:n?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0},locate:{element:{resultFormat:{coordinates:iY,parseRawLocateValue:iV}}}},kimi3:{chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,n={};n.temperature=void 0,"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(n.response_format={type:"json_object"});let o=r.reasoningEffort;return{config:{...t,...n,...o?{reasoning_effort:o}:{}}}},useReasoningAsContentFallback:!0,replayRawAssistantMessage:!0},locate:{element:{resultFormat:{coordinates:iY,parseRawLocateValue:iV}}}},"xiaomi-mimo":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n}=r,o={};return"none"!==r.responseFormat&&e.expectedJsonObjectResponse&&(o.response_format={type:"json_object"}),void 0!==r.temperature&&(o.temperature=r.temperature),{config:{...t,...o,thinking:{type:n?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0}}},ad=new Map,ap=(0,e0.aZ)("ai:model-adapter");function ah(e){return{config:e,adapter:function(e){var t;let r=e??"default",n=ad.get(r);if(n)return n;let o=e?au[e]:is;if(!o)throw Error(`No model adapter registered for modelFamily: ${e}`);return n=new o$(o,r),ad.set(r,n),(t=n).chatCompletion.unsupportedUserConfig.length>0&&ap(`model adapter "${r}" (chat-completion) unsupportedUserConfig: ${JSON.stringify(t.chatCompletion.unsupportedUserConfig)}`),t.responses.unsupportedUserConfig.length>0&&ap(`model adapter "${r}" (responses) unsupportedUserConfig: ${JSON.stringify(t.responses.unsupportedUserConfig)}`),n}(e.modelFamily)}}let am={Chinese:['"登录表单中的"登录"按钮"','"搜索输入框,placeholder 为"请输入关键词""','"顶部导航栏中文字为"首页"的链接"','"联系表单中的提交按钮"','"aria-label 为"打开菜单"的菜单图标"','"左侧导航栏中当前分组标题右侧的折叠图标"'],English:["\"Login button with text 'Sign In'\"","\"Search input with placeholder 'Enter keywords'\"","\"Navigation link with text 'Home' in header\"",'"Submit button in contact form"',"\"Menu icon with aria-label 'Open menu'\"",'"Collapse icon to the right of the current section title in the left sidebar"']};function af(e,t){let[r,n]=e,{scale:o=1,offset:i={x:0,y:0}}=t??{};return[r/o+i.x,n/o+i.y]}async function ag(e){let{locateImage:t,targetDescription:r,systemPrompt:n,userPrompt:o,imagePreprocess:i,userMessageContentOrder:a}=e,s=await ov({imageBase64:t.imageBase64,width:t.width,height:t.height,policy:i}),l=await om(r3(r)),c={type:"image",url:s.imageBase64},A={type:"text",text:o};return{preparedImage:s,messages:[{role:"system",content:n},{role:"user",content:"prompt-first"===a?[A,c]:[c,A]},...l]}}function ay(e){let{modelFamily:t,modelName:r}=e.config;return`modelName=${r??"unset"} modelFamily=${t??"unset"}`}let av=(0,e0.aZ)("ai:grounding");async function ab(e){var t,r,n;let{targetElementDescription:o,...i}=e;(0,eH.vA)(o,"cannot find the target element description");let{context:a}=i,s=(null==(t=i.searchConfig)?void 0:t.image)??{imageBase64:a.screenshot.base64,width:a.shotSize.width,height:a.shotSize.height},l=e.modelRuntime.adapter.locate,c="custom"===l.kind?l.locateFn:aw,{locatedPixelResult:A,rawResponse:u,rawAssistantOutput:d,usage:p,reasoningContent:h,errors:m=[]}=await c({targetElementDescription:o,locateImage:s,options:i}),f={rawResponse:u,rawAssistantOutput:d,usage:p,reasoning_content:h};if(!A)return{parseResult:{element:void 0,errors:m},...f};try{let e=(n=null==(r=i.searchConfig)?void 0:r.mapping,{center:af(A.center,n),...A.rect?{rect:function(e,t){let[r,n]=af([e.left,e.top],t),o=(null==t?void 0:t.scale)??1;return{left:r,top:n,width:(e.width-1)/o+1,height:(e.height-1)/o+1}}(A.rect,n)}:{}});return av("center",e.center),{parseResult:{element:{...e,description:r2(o)},errors:[]},...f}}catch(t){let e=t instanceof Error?`Failed to parse locate result: ${t.message}`:"unknown error in locate";return{parseResult:{element:void 0,errors:m.length>0?[...m,`(${e})`]:[e]},...f}}}async function aw(e){let{options:t,targetElementDescription:r}=e,n=t.modelRuntime,{adapter:o}=n;(0,eH.vA)("standard"===o.locate.kind,"generic locate requires a standard locate adapter");let{protocol:i,resultCodec:a}=o.locate.element,s=function(e){let{systemPromptIntroduction:t,responseInstructions:r}=e;return`
697
+ ${t}
698
+
699
+ ${ix()}
700
+
701
+ ${r}`}({systemPromptIntroduction:i.systemPromptIntroduction,responseInstructions:i.buildResponseInstructions(a.promptSpec)}),l=i.buildUserPrompt(r2(r)),{messages:c,preparedImage:A}=await ag({systemPrompt:s,userPrompt:l,locateImage:e.locateImage,imagePreprocess:o.imagePreprocess,targetDescription:r,userMessageContentOrder:o.locate.userMessageContentOrder});try{return await rI({callAi:(e,r)=>rw(rS(c,r),n,{abortSignal:t.abortSignal,expectedJsonObjectResponse:i.expectedJsonObjectResponse,semanticRetryAttempt:e}),parseResponse:e=>{let t=i.parseRawResponse(e.content,a.promptSpec),r=e.content,o=t.error;if("not-found"===t.kind)return{rawResponse:r,rawAssistantOutput:e.rawAssistantOutput,usage:e.usage,reasoningContent:e.reasoning_content,errors:o?[o]:[]};try{return{locatedPixelResult:a.toPixelResult(t.target,{preparedSize:A.preparedSize,contentSize:A.contentSize}),rawResponse:r,rawAssistantOutput:e.rawAssistantOutput,usage:e.usage,reasoningContent:e.reasoning_content,errors:[]}}catch(r){let e=r instanceof Error?r.message:String(r),t=[o&&`error in locate result: ${o}`,`coordinate parsing error: ${e}`,ay(n)].filter(Boolean).join("\n");throw Error(t,{cause:r})}},toParseError:(e,t)=>{let r=e instanceof Error?`Failed to parse locate result: ${e.message}`:"unknown error in locate result";return new ty(r,t.content,t.usage,t.rawAssistantOutput,t.reasoning_content)},parseRetryTimes:n.config.retryCount,parseRetryInterval:n.config.retryInterval,abortSignal:t.abortSignal,onParseRetry:e=>{av("retrying locate after coordinate parsing failed: %s",e instanceof Error?e.message:String(e))}})}catch(t){if(t instanceof ty)return{rawResponse:t.rawResponse,rawAssistantOutput:t.rawAssistantOutput,usage:t.usage,reasoningContent:t.reasoningContent,errors:[t.message]};let e=t instanceof Error?t.message:String(t);return{rawResponse:e,errors:[`AI call error: ${e}`]}}}function aE(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=[e,...t].map(e=>{let{rect:t,center:r}=e,n=(null==t?void 0:t.left)??Math.round(r[0]),o=(null==t?void 0:t.top)??Math.round(r[1]);return{left:n,top:o,right:n+((null==t?void 0:t.width)??1),bottom:o+((null==t?void 0:t.height)??1)}}),n=Math.min(...r.map(e=>e.left)),o=Math.min(...r.map(e=>e.top));return{left:n,top:o,width:Math.max(...r.map(e=>e.right))-n,height:Math.max(...r.map(e=>e.bottom))-o}}function ax(e,t){let r=Math.max(e.left-100,0),n=Math.max(e.top-100,0),o={left:r,top:n,width:Math.min(e.left-r+e.width+100,t.width-r),height:Math.min(e.top-n+e.height+100,t.height-n)},i=o.width*o.height;if(i>=16e4)return o;let a=o.left+o.width/2,s=o.top+o.height/2,l=Math.sqrt(16e4/i),c=Math.round(o.width*l),A=Math.round(o.height*l),u=Math.max(Math.round(a-c/2),0),d=Math.max(Math.round(s-A/2),0);return{left:u,top:d,width:Math.min(c,t.width-u),height:Math.min(A,t.height-d)}}async function ak(e){let{context:t,baseRect:r}=e,n=ax(r,t.shotSize),o=await oo(t.screenshot.base64,n),i=await oA(o.imageBase64,2);return{sourceRect:n,image:{imageBase64:i.imageBase64,width:i.width,height:i.height},mapping:{offset:{x:n.left,y:n.top},scale:2}}}let aS=(0,e0.aZ)("ai:grounding:section");async function aI(e){let t,{context:r,sectionDescription:n}=e,o=e.modelRuntime,{adapter:i}=o;(0,eH.vA)("standard"===i.locate.kind,"section locate requires a standard locate adapter");let a=i.locate.searchArea;(0,eH.vA)(a,"section locate requires a search area operation");let{protocol:s,resultCodec:l}=a,c=r.screenshot.base64,A=function(e){let{systemPromptIntroduction:t,responseInstructions:r}=e;return`
702
+ ${t}
703
+
704
+ ${r}`}({systemPromptIntroduction:s.systemPromptIntroduction,responseInstructions:s.buildResponseInstructions(l.promptSpec)}),u=s.buildUserPrompt(r2(n)),{messages:d,preparedImage:p}=await ag({systemPrompt:A,userPrompt:u,locateImage:{imageBase64:c,width:r.shotSize.width,height:r.shotSize.height},imagePreprocess:i.imagePreprocess,targetDescription:n,userMessageContentOrder:i.locate.userMessageContentOrder});try{t=await rI({callAi:(t,r)=>rw(rS(d,r),o,{abortSignal:e.abortSignal,expectedJsonObjectResponse:s.expectedJsonObjectResponse,semanticRetryAttempt:t}),parseResponse:e=>{let t=s.parseRawResponse(e.content,l.promptSpec),r=t.error;if("not-found"===t.kind)return{result:e,sectionError:r};try{var n;let o={preparedSize:p.preparedSize,contentSize:p.contentSize},i=l.toPixelResult(t.target,o),a=null==(n=t.references)?void 0:n.map(e=>l.toPixelResult(e,o)),s=aE(i,a);return aS("mergedRect %j",s),{result:e,sectionError:r,mergedRect:s}}catch(n){let e=n instanceof Error?n.message:String(n),t=[r&&`error in section locate result: ${r}`,`coordinate parsing error: ${e}`,ay(o)].filter(Boolean).join("\n");throw Error(t,{cause:n})}},toParseError:(e,t)=>{let r=e instanceof Error?`Failed to parse section locate result: ${e.message}`:"unknown error in section locate";return new ty(r,t.content,t.usage,t.rawAssistantOutput,t.reasoning_content)},parseRetryTimes:o.config.retryCount,parseRetryInterval:o.config.retryInterval,abortSignal:e.abortSignal,onParseRetry:e=>{aS("retrying section locate after coordinate parsing failed: %s",e instanceof Error?e.message:String(e))}})}catch(t){if(t instanceof ty)return{searchAreaConfig:void 0,error:t.message,rawResponse:t.rawResponse,rawAssistantOutput:t.rawAssistantOutput,usage:t.usage};let e=t instanceof Error?t.message:String(t);return{searchAreaConfig:void 0,error:`AI call error: ${e}`,rawResponse:e}}let{result:h,sectionError:m,mergedRect:f}=t;if(!f)return{searchAreaConfig:void 0,error:m,rawResponse:h.content,rawAssistantOutput:h.rawAssistantOutput,usage:h.usage};try{let e=ax(f,r.shotSize),t=e.width,n=e.height;aS("expanded sectionRect %j",e);let o=await ak({context:r,baseRect:f});return aS("scaled section image from %dx%d to %dx%d (scale=%d)",t,n,o.image.width,o.image.height,o.mapping.scale),{searchAreaConfig:o,error:m,rawResponse:h.content,rawAssistantOutput:h.rawAssistantOutput,usage:h.usage}}catch(t){let e=t instanceof Error?`Failed to parse section locate result: ${t.message}`:"unknown error in section locate";return{searchAreaConfig:void 0,error:m?`${m} (${e})`:e,rawResponse:h.content,rawAssistantOutput:h.rawAssistantOutput,usage:h.usage}}}let aC=e=>{let t=null==e?void 0:e.trim();return t?`<CONTEXT>
705
+ ${t}
706
+ </CONTEXT>`:void 0===e?void 0:""};function aO(e,t){let r="based on the current screenshot and its contents if provided, unless the user explicitly asks to compare with reference images";return"Assert"===e?`Boolean, ${r}, whether the following statement is true: ${t}`:"WaitFor"===e?`Boolean, the user wants to do some 'wait for' operation. ${r}, please check whether the following statement is true: ${t}`:`${e}, ${r}, ${t}`}async function aR(e){let{booleanFn:t}=e.modelRuntime.adapter.insight;(0,eH.vA)(t,"A boolean adapter is required");let r="object"==typeof e.dataQuery?Object.keys(e.dataQuery):[];(0,eH.vA)(1===r.length&&("Boolean"===r[0]||"StatementIsTruthy"===r[0]),"This model only supports boolean insight tasks. Use the default model for extraction.");let n=await t(e);return{parseResult:{data:{[r[0]]:n.value}},rawResponse:n.rawResponse,usage:n.usage}}let aj=(0,e0.aZ)("ai:insight");async function aP(e){var t,r;let n,o,i;if(e.modelRuntime.adapter.insight.booleanFn)return aR(e);let{dataQuery:a,context:s,extractOption:l,multimodalPrompt:c,modelRuntime:A}=e,u=A.adapter.insight.protocol,d=function(e){let t=tX(),r=e.screenshotIncluded??!0,n=e.referenceImagesIncluded??!1,{responsePrefix:o,dataOutput:i}=e.insightProtocol,a=function(e){let{screenshotIncluded:t,referenceImagesIncluded:r}=e,n=["The user will give you data requirements in <DATA_DEMAND>. You need to understand the user's requirements and extract the data satisfying the <DATA_DEMAND>."];if(t?n.push("The user will provide a current screenshot to evaluate, and may provide its contents. Base your answer on the current screenshot and its contents when provided. Treat them as the primary source of truth for what is currently visible or true."):n.push("The user will not provide a current screenshot. Use only the supplied page contents and other inputs, and do not infer unsupported visual details."),r){let e="Reference images are supporting context only unless <DATA_DEMAND> explicitly asks for comparison, matching, or reasoning about them.";n.push(t?`${e} Do not conclude that something exists in the current screenshot solely because it appears in a reference image; when they conflict, trust the current screenshot and its contents.`:`${e} Do not treat reference images as direct evidence of the current state unless the demand explicitly asks you to use them that way.`)}return n.join("\n\n")}({screenshotIncluded:r,referenceImagesIncluded:n});return`
707
+ You are a versatile professional in software UI design and testing. Your outstanding contributions will impact the user experience of billions of users.
708
+
709
+ ${a}
710
+
711
+ If a key specifies a JSON data type (such as Number, String, Boolean, Object, Array), ensure the returned value strictly matches that data type.
712
+
713
+ When DATA_DEMAND is a JSON object, the keys in your response must exactly match the keys in DATA_DEMAND. Do not rename, translate, or substitute any key.${i.rules?`
714
+
715
+ ${i.rules}`:""}
716
+
717
+
718
+ Return in the following XML format:
719
+ ${o||""}
720
+ <observation>brief evidence observed for the extraction, less than 300 words. Use ${t} in this field.</observation>
721
+ ${i.placeholder}
722
+ <errors>optional error messages as JSON array, e.g., ["error1", "error2"]</errors>
723
+
724
+ # Example 1
725
+ For example, if the DATA_DEMAND is:
726
+
727
+ <DATA_DEMAND>
728
+ {
729
+ "name": "name shows on the left panel, string",
730
+ "age": "age shows on the right panel, number",
731
+ "isAdmin": "if the user is admin, boolean"
732
+ }
733
+ </DATA_DEMAND>
734
+
735
+ By viewing the screenshot and page contents, you can extract the following data:
736
+
737
+ ${o||""}
738
+ <observation>According to the screenshot, i can see ...</observation>
739
+ ${i.buildExample(`{
740
+ "name": "John",
741
+ "age": 30,
742
+ "isAdmin": true
743
+ }`.trim())}
744
+
745
+ # Example 2
746
+ If the DATA_DEMAND is:
747
+
748
+ <DATA_DEMAND>
749
+ the todo items list, string[]
750
+ </DATA_DEMAND>
751
+
752
+ By viewing the screenshot and page contents, you can extract the following data:
753
+
754
+ ${o||""}
755
+ <observation>According to the screenshot, i can see ...</observation>
756
+ ${i.buildExample('["todo 1", "todo 2", "todo 3"]')}
757
+
758
+ # Example 3
759
+ If the DATA_DEMAND is:
760
+
761
+ <DATA_DEMAND>
762
+ the page title, string
763
+ </DATA_DEMAND>
764
+
765
+ By viewing the screenshot and page contents, you can extract the following data:
766
+
767
+ ${o||""}
768
+ <observation>According to the screenshot, i can see ...</observation>
769
+ ${i.buildExample('"todo list"')}
770
+
771
+ # Example 4
772
+ If the DATA_DEMAND is:
773
+
774
+ <DATA_DEMAND>
775
+ {
776
+ "StatementIsTruthy": "Boolean, is it currently the SMS page?"
777
+ }
778
+ </DATA_DEMAND>
779
+
780
+ By viewing the screenshot and page contents, you can extract the following data:
781
+
782
+ ${o||""}
783
+ <observation>According to the screenshot, i can see ...</observation>
784
+ ${i.buildExample('{ "StatementIsTruthy": true }')}
785
+ `}({screenshotIncluded:(null==l?void 0:l.screenshotIncluded)!==!1,referenceImagesIncluded:!!(null==c||null==(t=c.images)?void 0:t.length),insightProtocol:u}),p=s.screenshot.base64,h=aC(null==l?void 0:l.context),m=(r=e.pageDescription||"",n="string"==typeof a?a:JSON.stringify(a,null,2),i=(o=null==h?void 0:h.trim())?`
786
+ ${o}
787
+ `:"",`
788
+ <PageDescription>
789
+ ${r}
790
+ </PageDescription>
791
+ ${i}
792
+ <DATA_DEMAND>
793
+ ${n}
794
+ </DATA_DEMAND>
795
+ `),f=[];if((null==l?void 0:l.screenshotIncluded)!==!1){let e=s.screenshotSequence;e&&e.length>1?(f.push({type:"text",text:`The following ${e.length} images are consecutive screenshots captured over a time window, ordered from earliest to latest (Frame 1 is first, Frame ${e.length} is last). They record what appeared on screen during that window. Some UI elements such as toasts, banners, or transitions may appear only in certain frames and be gone by later ones. Interpret the temporal scope from the statement or question itself: if it asks whether something appeared at any point, inspect the whole sequence; if it asks about the final or current state, use the relevant later frame; if it asks about a change or sequence, compare frames in order. Unless <DATA_DEMAND> explicitly asks for comparison or matching against reference images, base your answer on these screenshots and their contents.`}),e.forEach((t,r)=>{f.push({type:"text",text:`Frame ${r+1}/${e.length}`}),f.push({type:"image",url:t.base64})})):(f.push({type:"text",text:"This is the current screenshot to evaluate. Unless <DATA_DEMAND> explicitly asks for comparison or matching against reference images, base your answer on this screenshot and its contents when provided."}),f.push({type:"image",url:p}))}f.push({type:"text",text:m});let g=[{role:"system",content:d},{role:"user",content:f}];if(c){let e=await om(c);g.push(...e)}return rI({callAi:(t,r)=>rw(rS(g,r),A,{abortSignal:e.abortSignal,semanticRetryAttempt:t}),parseResponse:e=>{let{content:t,usage:r,reasoning_content:n,rawAssistantOutput:o}=e;return{parseResult:function(e,t,r){let n,o=rT(e,"observation"),i=rT(e,"errors"),a=rN(e,t.tagNames),s=t.parse(a);if(i)try{let e=r(i,{source:"generic-object"});Array.isArray(e)&&(n=e)}catch{}return{...o?{thought:o}:{},data:s,...(null==n?void 0:n.length)?{errors:n}:{}}}(t,u.dataOutput,A.adapter.jsonParser),rawResponse:t,rawAssistantOutput:o,usage:r,reasoning_content:n}},toParseError:(e,t)=>{let r=e instanceof Error?e.message:String(e);return new ty(`XML parse error: ${r}`,t.content,t.usage,t.rawAssistantOutput)},parseRetryTimes:A.config.retryCount,parseRetryInterval:A.config.retryInterval,abortSignal:e.abortSignal,onParseRetry:e=>{aj("retrying insight after XML parsing failed: %s",e instanceof Error?e.message:String(e))}})}(0,e0.aZ)("ai:insight");class aM extends Error{constructor(e,t){super(e),function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}(this,"dump",void 0),this.name="ServiceError",this.dump=t}}function aT(e,t){if("string"==typeof e)return e;if(Array.isArray(e))return e.map(e=>aT(e,t));if("object"==typeof e&&null!==e){let r=nM(e);if(r)return t(r);let n=nP(e);if(n){let e=null;return Object.defineProperties({},{base64:{get:()=>(null===e&&(e=t(n)),e),enumerable:!0},capturedAt:{value:n.capturedAt,enumerable:!0},sourceRef:{value:{...n},enumerable:!0}})}let o={};for(let[r,n]of Object.entries(e))o[r]=aT(n,t);return o}return e}var aN=r(24215),aD=r(8963).Buffer;function az(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let aB=/^data:(image\/[a-z0-9.+-]+)(?:;[^,]*)?;base64,([a-z0-9+/=\s]+)$/i;function aF(e){return aB.test(e)}function aL(e,t){let r=nT(e),n=(null==r?void 0:r.id)??t.fallbackId,o=(null==r?void 0:r.mimeType)??t.fallbackMimeType;if(!n||!o)throw Error("ReportImageStore: image id and mimeType are required to resolve an image");if((null==r?void 0:r.storage)==="file"){let e;if(!r.path)throw Error(`ReportImageStore: image ref "${r.id}" missing file path`);let i=(e=r.path,(0,ts.isAbsolute)(e)?e:(0,ts.join)((0,ts.dirname)(t.reportPath),e));if((0,nt.existsSync)(i))return{type:"file",id:n,mimeType:o,filePath:i}}let i=nw(t.reportPath,n);if(i)return{type:"data-uri",id:n,mimeType:o,dataUri:i};let a=r?nD(r):nN(t.fallbackMimeType);if(t.imageDirectory){let e=(0,ts.join)(t.imageDirectory,`${n}.${a}`);if((0,nt.existsSync)(e))return{type:"file",id:n,mimeType:o,filePath:e}}let s=(0,ts.join)((0,ts.dirname)(t.reportPath),"screenshots",`${n}.${a}`);if((0,nt.existsSync)(s))return{type:"file",id:n,mimeType:o,filePath:s};throw Error(`ReportImageStore: cannot resolve image "${n}" from ${t.reportPath}`)}class aU{enableFileCopies(){this.alsoWriteFileCopy=!0}async persist(e){await this.ensureExistingInlineImageIdsLoaded();let t="directory"===this.mode||this.alsoWriteFileCopy?await this.persistToSharedFileIfNeeded(e,{markAsPersisted:"directory"===this.mode}):null;if("inline"===this.mode){if(!this.writeInlineImage)throw Error("ReportImageStore: writeInlineImage is required in inline mode");return this.writtenInlineIds.has(e.id)||(await this.writeInlineImage(e.id,e.base64),this.writtenInlineIds.add(e.id)),e.markPersistedInline(this.reportPath)}if(!t)throw Error("ReportImageStore: file persistence is required in directory mode");return t}async persistReferenceImage(e){let t;await this.ensureExistingInlineImageIdsLoaded();let{mimeType:r,extension:n,rawBase64:o}=function(e){let t=e.match(aB);if(!t)throw Error("ReportImageStore: reference image must be a valid base64 image data URL");let r=t[1].toLowerCase();return{mimeType:r,extension:nN(r),rawBase64:t[2].replace(/\s/g,"")}}(e),i=`reference-${(0,aN.createHash)("sha256").update(r).update("\0").update(aD.from(o,"base64")).digest("hex")}`,a="directory"===this.mode||this.alsoWriteFileCopy?await this.writeImageFileIfNeeded({id:i,extension:n,rawBase64:o}):null;if("inline"===this.mode){if(!this.writeInlineImage)throw Error("ReportImageStore: writeInlineImage is required in inline mode");this.writtenInlineIds.has(i)||(await this.writeInlineImage(i,e),this.writtenInlineIds.add(i)),t={type:"midscene_image_url_ref",id:i,mimeType:r,storage:"inline"}}else{if(!a)throw Error("ReportImageStore: file persistence is required in directory mode");t={type:"midscene_image_url_ref",id:i,mimeType:r,storage:"file",path:a.relativePath}}return t}async ensureExistingInlineImageIdsLoaded(){this.shouldReuseExistingInlineReport&&(this.existingInlineImageIdsPromise||(this.existingInlineImageIdsPromise=(async()=>{try{for(let e of(await nx(this.reportPath)))this.writtenInlineIds.add(e)}catch(e){if("object"==typeof e&&null!==e&&"code"in e&&"ENOENT"===e.code)return;throw Error(`ReportImageStore: failed to index existing inline images from ${this.reportPath}`,{cause:e})}})()),await this.existingInlineImageIdsPromise)}async persistToSharedFileIfNeeded(e,t){let r=`${e.id}.${e.extension}`,{relativePath:n,absolutePath:o}=this.writtenFileIds.has(e.id)?{relativePath:`./screenshots/${r}`,absolutePath:(0,ts.join)(this.screenshotsDir,r)}:await this.writeImageFileIfNeeded({id:e.id,extension:e.extension,rawBase64:e.rawBase64});return t.markAsPersisted?e.markPersistedToPath(n,o):e.registerPersistedFileCopy(n,o)}async writeImageFileIfNeeded(e){let t=this.screenshotsDir;if(!t)throw Error("ReportImageStore: screenshotsDir is required when file persistence is enabled");(0,nt.existsSync)(t)||(0,nt.mkdirSync)(t,{recursive:!0});let r=`${e.id}.${e.extension}`,n=`./screenshots/${r}`,o=(0,ts.join)(t,r);return this.writtenFileIds.has(e.id)||(await (0,nr.writeFile)(o,aD.from(e.rawBase64,"base64")),this.writtenFileIds.add(e.id)),{relativePath:n,absolutePath:o}}loadDataUri(e){let t=nT(e);if(!t)throw Error("ReportImageStore: invalid image reference");let r=aL(t,{reportPath:this.reportPath,imageDirectory:this.screenshotsDir});if("data-uri"===r.type)return r.dataUri;let n=(0,nt.readFileSync)(r.filePath);return`data:${r.mimeType};base64,${n.toString("base64")}`}loadBase64(e){let t=nP(e);if(!t)throw Error("ReportImageStore: invalid screenshot reference");return this.loadDataUri(t)}cleanup(){"directory"===this.mode&&this.screenshotsDir&&(0,nt.existsSync)(this.screenshotsDir)&&(0,nt.rmSync)(this.screenshotsDir,{recursive:!0,force:!0}),this.writtenInlineIds.clear(),this.writtenFileIds.clear(),this.existingInlineImageIdsPromise=void 0}constructor(e){az(this,"mode",void 0),az(this,"reportPath",void 0),az(this,"screenshotsDir",void 0),az(this,"writeInlineImage",void 0),az(this,"alsoWriteFileCopy",void 0),az(this,"writtenInlineIds",new Set),az(this,"writtenFileIds",new Set),az(this,"shouldReuseExistingInlineReport",void 0),az(this,"existingInlineImageIdsPromise",void 0),this.mode=e.mode,this.reportPath=e.reportPath,this.screenshotsDir=e.screenshotsDir,this.writeInlineImage=e.writeInlineImage,this.alsoWriteFileCopy=e.alsoWriteFileCopy??e.ensureFileCopy??!1,this.shouldReuseExistingInlineReport=!!(e.reuseExistingReport&&"inline"===this.mode)}}var aK=r(8963).Buffer;function aZ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function aJ(e){var t;if("object"!=typeof e||null===e)return null;let r=null==(t=e.constructor)?void 0:t.name;return"Page"===r||"Browser"===r?r:null}function aQ(e){return"object"==typeof e&&null!==e&&"function"==typeof e.toSerializable}function aq(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function aX(e,t){if("screenshotSequence"===e)return;let r=aJ(t);return r?`[${r} object]`:aQ(t)?t.toSerializable():t}function aW(e,t){return JSON.stringify(e,aX,t)}function aH(e,t){return"screenshot"!==e||"object"!=typeof t||null===t||nF.isSerialized(t),t}class aY{serialize(e){return aW(this.toJSON(),e)}toJSON(){return{id:this.id,logTime:this.logTime,name:this.name,description:this.description,tasks:this.tasks.map(e=>({...e,recorder:e.recorder||[]})),aiActContext:this.aiActContext}}static fromSerializedString(e){return new aY(JSON.parse(e,aH))}static fromJSON(e){return new aY(e)}collectScreenshots(){let e=[];for(let r of this.tasks){var t;if(nF.isScreenshotItem(null==(t=r.uiContext)?void 0:t.screenshot)&&e.push(r.uiContext.screenshot),r.recorder)for(let t of r.recorder)nF.isScreenshotItem(t.screenshot)&&e.push(t.screenshot)}return e}getReferenceImageUrls(){return[...this.referenceImageUrls]}constructor(e,t){aZ(this,"id",void 0),aZ(this,"logTime",void 0),aZ(this,"name",void 0),aZ(this,"description",void 0),aZ(this,"tasks",void 0),aZ(this,"aiActContext",void 0),aZ(this,"referenceImageUrls",void 0),this.id=e.id,this.logTime=e.logTime,this.name=e.name,this.description=e.description,this.tasks=e.tasks,this.aiActContext=e.aiActContext,this.referenceImageUrls=Array.from(new Set(((null==t?void 0:t.referenceImageUrls)??[]).filter(aF)))}}class aG{serialize(e){return aW(this.toJSON(),e)}serializeWithReferenceImages(e,t){return aW(function e(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new WeakSet;if("object"!=typeof t||null===t||aJ(t)||aQ(t)||!Array.isArray(t)&&!aq(t)||n.has(t))return t;n.add(t);try{if(Array.isArray(t))return t.map(t=>e(t,r,n));let o={};for(let[i,a]of Object.entries(t)){if("images"===i&&Array.isArray(a)){o[i]=a.map(t=>{let o=e(t,r,n);if("object"!=typeof t||null===t||"string"!=typeof t.name||"string"!=typeof t.url)return o;let i=r.get(t.url);return i&&"object"==typeof o&&null!==o&&aq(o)?{...o,url:i}:o});continue}o[i]=e(a,r,n)}return o}finally{n.delete(t)}}(this.toJSON(),e),t)}serializeWithInlineScreenshots(e){let t=e=>nF.isScreenshotItem(e)?{base64:e.base64,capturedAt:e.capturedAt}:Array.isArray(e)?e.map(t):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).filter(e=>{let[t]=e;return"screenshotSequence"!==t}).map(e=>{let[r,n]=e;return[r,t(n)]})):e;return JSON.stringify(t(this.toJSON()),null,e)}toJSON(){return{sdkVersion:this.sdkVersion,groupName:this.groupName,groupDescription:this.groupDescription,modelBriefs:this.modelBriefs,executions:this.executions.map(e=>e.toJSON()),deviceType:this.deviceType}}static fromSerializedString(e){return new aG(JSON.parse(e,aH))}static fromJSON(e){return new aG(e)}collectAllScreenshots(){let e=[];for(let t of this.executions)e.push(...t.collectScreenshots());return e}serializeToFiles(e){let t=`${e}.screenshots`;for(let e of((0,nt.existsSync)(t)||(0,nt.mkdirSync)(t,{recursive:!0}),this.collectAllScreenshots())){let r=(0,ts.join)(t,`${e.id}.${e.extension}`);if((0,nt.existsSync)(r))continue;let n=e.rawBase64;(0,nt.writeFileSync)(r,aK.from(n,"base64"))}(0,nt.writeFileSync)(e,this.serialize(),"utf-8")}static fromFilesAsInlineJson(e){let t=(0,nt.readFileSync)(e,"utf-8"),r=`${e}.screenshots`,n=JSON.parse(t),o=new aU({mode:"directory",reportPath:e,screenshotsDir:r});return JSON.stringify(aT(n,e=>o.loadDataUri(e)))}static cleanupFiles(e){for(let t of[e,`${e}.screenshots`])try{(0,nt.rmSync)(t,{force:!0,recursive:!0})}catch{}}static getFilePaths(e){return[e,`${e}.screenshots`]}constructor(e){aZ(this,"sdkVersion",void 0),aZ(this,"groupName",void 0),aZ(this,"groupDescription",void 0),aZ(this,"modelBriefs",void 0),aZ(this,"executions",void 0),aZ(this,"deviceType",void 0),this.sdkVersion=e.sdkVersion,this.groupName=e.groupName,this.groupDescription=e.groupDescription,this.modelBriefs=e.modelBriefs,this.executions=e.executions.map(e=>e instanceof aY?e:aY.fromJSON(e)),this.deviceType=e.deviceType}}var aV=r(8963).Buffer;let a$={0:[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],1:[[0,0,1,0,0],[0,1,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,1,1,1,0]],2:[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,1,0,0,0],[1,0,0,0,0],[1,1,1,1,1]],3:[[0,1,1,1,0],[1,0,0,0,1],[0,0,0,0,1],[0,0,1,1,0],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],4:[[0,0,0,1,0],[0,0,1,1,0],[0,1,0,1,0],[1,0,0,1,0],[1,1,1,1,1],[0,0,0,1,0],[0,0,0,1,0]],5:[[1,1,1,1,1],[1,0,0,0,0],[1,1,1,1,0],[0,0,0,0,1],[0,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],6:[[0,1,1,1,0],[1,0,0,0,0],[1,0,0,0,0],[1,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],7:[[1,1,1,1,1],[0,0,0,0,1],[0,0,0,1,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0],[0,0,1,0,0]],8:[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,0]],9:[[0,1,1,1,0],[1,0,0,0,1],[1,0,0,0,1],[0,1,1,1,1],[0,0,0,0,1],[0,0,0,0,1],[0,1,1,1,0]]};function a_(e,t,r,n,o,i,a){let s=n.toString(),l=o;for(let n of s)!function(e,t,r,n,o,i,a){let s=a$[n];if(s){for(let n=0;n<7;n++)for(let l=0;l<5;l++)if(1===s[n][l])for(let s=0;s<2;s++)for(let c=0;c<2;c++){let A=o+2*l+c,u=i+2*n+s;if(A>=0&&A<t&&u>=0&&u<r){let r=(u*t+A)*4;e[r+0]=a.r,e[r+1]=a.g,e[r+2]=a.b,e[r+3]=a.a}}}}(e,t,r,n,l,i,a),l+=11}function a0(e){return 11*e.toString().length-1}function a1(e,t,r,n,o){let i=Math.floor(n.x),a=Math.floor(n.y),s=Math.floor(n.w),l=Math.floor(n.h);for(let n=a;n<a+l&&n<r;n++)for(let r=i;r<i+s&&r<t;r++){if(r<0||n<0)continue;let i=(n*t+r)*4;e[i+0]=o.r,e[i+1]=o.g,e[i+2]=o.b,e[i+3]=o.a}}function a2(e,t,r,n,o,i){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},s=Math.round(n.x),l=Math.round(n.y),c=Math.max(Math.round(o),1),A=Math.max(c-Math.max(Math.round(a.thickness??2),1),0),u=c*c,d=A*A;for(let n=l-c;n<=l+c;n++)for(let o=s-c;o<=s+c;o++){if(o<0||n<0||o>=t||n>=r)continue;let c=(o-s)**2+(n-l)**2;if(!(a.fill?c<=u:c<=u&&c>=d))continue;let A=(n*t+o)*4;e[A+0]=i.r,e[A+1]=i.g,e[A+2]=i.b,e[A+3]=i.a}}function a3(e,t,r,n,o){var i;let a,s,l,c,A,u,d,p,h=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1,m=[{r:198,g:35,b:0,a:238},{r:0,g:0,b:255,a:238}],f=Math.max(Math.round(o),10);i={callout:m[(h-1)%m.length],calloutBorder:{r:255,g:255,b:255,a:255},calloutText:{r:255,g:255,b:255,a:255},indexId:h},a=Math.round(n.x),s=Math.round(n.y),c=[{x:a+(l=Math.max(f+18,30)),y:s-l},{x:a+l,y:s+l},{x:a-l,y:s-l},{x:a-l,y:s+l},{x:a,y:s-l},{x:a,y:s+l},{x:a+l,y:s},{x:a-l,y:s}].find(e=>e.x-f>=0&&e.x+f<t&&e.y-f>=0&&e.y+f<r)||{x:Math.min(Math.max(a+l,f),t-f-1),y:Math.min(Math.max(s-l,f),r-f-1)},A=Math.atan2(s-c.y,a-c.x),u={x:c.x+Math.cos(A)*(f+1),y:c.y+Math.sin(A)*(f+1)},d=1/Math.sqrt(Math.cos(A)**2/900+Math.sin(A)**2/225),function(e,t,r,n,o,i){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:2,s=Math.round(n.x),l=Math.round(n.y),c=Math.round(o.x),A=Math.round(o.y),u=Math.max(Math.abs(c-s),Math.abs(A-l),1),d=Math.max(Math.floor(a/2),0);for(let n=0;n<=u;n++){let o=Math.round(s+(c-s)*n/u),a=Math.round(l+(A-l)*n/u);for(let n=-d;n<=d;n++)for(let s=-d;s<=d;s++){let l=o+s,c=a+n;if(l<0||c<0||l>=t||c>=r)continue;let A=(c*t+l)*4;e[A+0]=i.r,e[A+1]=i.g,e[A+2]=i.b,e[A+3]=i.a}}}(e,t,r,u,{x:a-Math.cos(A)*d,y:s-Math.sin(A)*d},i.callout,2),a2(e,t,r,c,f+2,i.calloutBorder,{thickness:3}),a2(e,t,r,c,f,i.callout,{fill:!0}),function(e,t,r,n,o,i,a){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:2,l=Math.round(n.x),c=Math.round(n.y),A=Math.max(Math.round(o),1),u=Math.max(Math.round(i),1),d=Math.max(A-Math.round(s),0),p=Math.max(u-Math.round(s),0);for(let n=c-u;n<=c+u;n++)for(let o=l-A;o<=l+A;o++){if(o<0||n<0||o>=t||n>=r)continue;let i=o-l,s=n-c,h=i*i/(A*A)+s*s/(u*u),m=0===d||0===p?0:i*i/(d*d)+s*s/(p*p);if(h>1||m<1)continue;let f=(n*t+o)*4;e[f+0]=a.r,e[f+1]=a.g,e[f+2]=a.b,e[f+3]=a.a}}(e,t,r,n,30,15,i.callout,2),p=a0(i.indexId),a_(e,t,r,i.indexId,Math.round(c.x-p/2),Math.round(c.y-7),i.calloutText)}function a5(e,t,r,n){let o=new Uint8Array(e.length);for(let r=0;r<e.length;r+=4){let n=t[r+3]/255,i=e[r+3]/255;if(0===n)o[r+0]=e[r+0],o[r+1]=e[r+1],o[r+2]=e[r+2],o[r+3]=e[r+3];else{let a=n+i*(1-n);0===a?(o[r+0]=t[r+0],o[r+1]=t[r+1],o[r+2]=t[r+2],o[r+3]=t[r+3]):(o[r+0]=Math.round((t[r+0]*n+e[r+0]*i*(1-n))/a),o[r+1]=Math.round((t[r+1]*n+e[r+1]*i*(1-n))/a),o[r+2]=Math.round((t[r+2]*n+e[r+2]*i*(1-n))/a),o[r+3]=Math.round(255*a))}}return o}let a4=async function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,i=arguments.length>5?arguments[5]:void 0,a=arguments.length>6&&void 0!==arguments[6]&&arguments[6],s=new Uint8Array(t*r*4),l=[{rect:{r:198,g:35,b:0,a:255},text:{r:255,g:255,b:255,a:255}},{rect:{r:0,g:0,b:255,a:255},text:{r:255,g:255,b:255,a:255}},{rect:{r:139,g:69,b:19,a:255},text:{r:255,g:255,b:255,a:255}},{rect:{r:62,g:123,b:39,a:255},text:{r:255,g:255,b:255,a:255}},{rect:{r:80,g:0,b:115,a:255},text:{r:255,g:255,b:255,a:255}}];if(i){let e=r-30-20;a1(s,t,r,{x:0,y:e,w:t,h:30},{r:0,g:0,b:0,a:204})}for(let i=0;i<e.length;i++){let c=e[i],A=l[i%l.length],u=Math.max(0,c.rect.left-n),d=Math.max(0,c.rect.top-n),p=Math.min(t-u,c.rect.width+2*n),h=Math.min(r-d,c.rect.height+2*n);!function(e,t,r,n,o,i){let a=Math.floor(n.x),s=Math.floor(n.y),l=Math.floor(n.w),c=Math.floor(n.h);for(let n=s;n<s+c&&n<r;n++)for(let r=a;r<a+l&&r<t;r++){if(r<0||n<0)continue;let A=r>=a&&r<a+i,u=r<=a+l-1&&r>a+l-i-1,d=n>=s&&n<s+i,p=n<=s+c-1&&n>s+c-i-1;if(A||u||d||p){let i=(n*t+r)*4;e[i+0]=o.r,e[i+1]=o.g,e[i+2]=o.b,e[i+3]=o.a}}}(s,t,r,{x:u,y:d,w:p,h:h},A.rect,o),a&&a2(s,t,r,{x:c.rect.left+c.rect.width/2,y:c.rect.top+c.rect.height/2},4,A.rect,{fill:!0});let m=c.indexId;if("number"!=typeof m)continue;let f=a0(m),g=f+5,y=u-g,v=d+Math.floor(h/2)-Math.floor(7)-2,b=(t,r)=>e.slice(0,i).some(e=>t<e.rect.left+e.rect.width&&t+g>e.rect.left&&r<e.rect.top+e.rect.height&&r+18>e.rect.top),w=(e,n)=>e>=0&&e+g<=t&&n>=0&&n+18<=r;(b(y,v)||!w(y,v))&&(!b(u,d-18-2)&&w(u,d-18-2)?(y=u,v=d-18-2):!b(u,d+h+2)&&w(u,d+h+2)?(y=u,v=d+h+2):!b(u+p+2,d)&&w(u+p+2,d)?(y=u+p+2,v=d):(y=u,v=d+2)),a1(s,t,r,{x:y,y:v,w:g,h:18},A.rect),a_(s,t,r,m,y+Math.floor((g-f)/2),v+Math.floor(2),A.text)}return s};async function a7(e,t){let{body:r}=oc(e),n=(await nH())(aV.from(r,"base64"));t&&(n=n.resize(t.width,t.height,{fit:"fill",kernel:"nearest"}));let{data:o,info:i}=await n.ensureAlpha().raw().toBuffer({resolveWithObject:!0});if(!i.width||!i.height||4!==i.channels)throw Error("Image processing failed to produce RGBA pixels");return{pixels:new Uint8Array(o),width:i.width,height:i.height}}async function a8(e,t,r){let n=await nH();return n7("jpeg",(await n(aV.from(e),{raw:{width:t,height:r,channels:4}}).jpeg({quality:90,chromaSubsampling:"4:4:4"}).toBuffer()).toString("base64"))}let a6=async e=>{if(nU()(e.inputImgBase64,"inputImgBase64 is required"),eH.$9){let{pixels:t,width:r,height:n}=await a7(e.inputImgBase64,e.size);return a8(a5(t,await a4(e.elementsPositionInfo,r,n,e.annotationPadding,e.borderThickness,e.prompt,e.centerPoint),r,n),r,n)}let{PhotonImage:t,SamplingFilter:r,resize:n}=await nW(),o=0,i=0;e.size&&(o=e.size.width,i=e.size.height);let a=await ot(e.inputImgBase64);if(o&&i){let e=a.get_width(),t=a.get_height();if(e!==o||t!==i){let e=n(a,o,i,r.Nearest);a.free(),a=e}}else o=a.get_width(),i=a.get_height();if(!o||!i)throw a.free(),Error("Image processing failed because width or height is undefined");let{elementsPositionInfo:s,prompt:l}=e;try{let r=a.get_raw_pixels(),n=await a4(s,o,i,e.annotationPadding,e.borderThickness,l,e.centerPoint),c=a5(r,n,o,i),A=new t(c,o,i),u=await oi(A,90);return A.free(),u}finally{a.free()}},a9=async e=>{if(nU()(e.inputImgBase64,"inputImgBase64 is required"),eH.$9){let{pixels:t,width:r,height:n}=await a7(e.inputImgBase64,e.size),o=new Uint8Array(r*n*4);return a3(o,r,n,e.point,e.radius??14,e.indexId??1),a8(a5(t,o,r,n),r,n)}let{PhotonImage:t,SamplingFilter:r,resize:n}=await nW(),o=0,i=0;e.size&&(o=e.size.width,i=e.size.height);let a=await ot(e.inputImgBase64);if(o&&i){let e=a.get_width(),t=a.get_height();if(e!==o||t!==i){let e=n(a,o,i,r.Nearest);a.free(),a=e}}else o=a.get_width(),i=a.get_height();if(!o||!i)throw a.free(),Error("Image processing failed because width or height is undefined");try{let r=a.get_raw_pixels(),n=new Uint8Array(o*i*4);a3(n,o,i,e.point,e.radius??14,e.indexId??1);let s=a5(r,n,o,i),l=new t(s,o,i),c=await oi(l,90);return l.free(),c}finally{a.free()}},se={resize:{cropMaxLongEdge:1e3,cropUpscaleMaxRatio:2}};function st(e){if(e.width<100)return e;let t=Math.round(.15*e.width),r=Math.round(.1*e.height);return{left:e.left+t,top:e.top+r,width:Math.max(e.width-2*t,1),height:Math.max(e.height-2*r,1)}}function sr(e){return e.width<=40&&e.height<=40?1:2}function sn(e){let t={logTime:Date.now()};return{logId:(0,eH.uR)(),...t,...e}}function so(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let si=(0,e0.aZ)("ai:service");class sa{async locate(e,t,r,n){var o,i;let a,{config:s}=r,l=e.prompt;if((0,eH.vA)(l,"query is required for locate"),!s.modelFamily)throw Error((i=s.slot,`${"locate"===i?"Locate":"Default"} model family is required for locate. Configure ${"locate"===i?"MIDSCENE_LOCATE_MODEL_FAMILY":"MIDSCENE_MODEL_FAMILY"} so Midscene can parse locate coordinates correctly. ${iw}`));let c=(null==t?void 0:t.context)||await this.contextRetrieverFn(),A=Date.now(),u=await this.resolveLocateSearchArea({query:e,queryPrompt:l,opt:t,context:c,modelRuntime:r,abortSignal:n});if(!u.config&&u.error){let e=`cannot find search area for "${l}": ${u.error}`,t=sn({type:"locate",userQuery:{element:l},matchedElement:[],data:null,taskInfo:{...this.taskInfo?this.taskInfo:{},durationMs:Date.now()-A,searchAreaRawResponse:u.trace.rawResponse,searchAreaRawChoiceMessage:u.trace.rawAssistantOutput,searchAreaUsage:u.trace.usage},deepLocate:!0,error:e});throw new aM(e,t)}let d=Date.now(),{parseResult:p,rawResponse:h,rawAssistantOutput:m,usage:f,reasoning_content:g}=await ab({context:c,targetElementDescription:l,searchConfig:u.config,modelRuntime:r,abortSignal:n}),y=Date.now()-d,v={...this.taskInfo?this.taskInfo:{},durationMs:y,rawResponse:h,rawAssistantOutput:m,formatResponse:p,usage:f,searchArea:u.trace.sourceRect,searchAreaRawResponse:u.trace.rawResponse,searchAreaRawChoiceMessage:u.trace.rawAssistantOutput,searchAreaUsage:u.trace.usage,reasoning_content:g};(null==(o=p.errors)?void 0:o.length)&&(a=`failed to locate element:
796
+ ${p.errors.join("\n")}`);let b={type:"locate",userQuery:{element:l},data:null,taskInfo:v,deepLocate:!!u.trace.sourceRect,error:a},w=p.element,E=sn({...b,matchedElement:w?[w]:[]});if(a)throw new aM(a,E);return w?{element:{center:w.center,description:w.description,...w.rect?{rect:w.rect}:{}},dump:E}:{element:null,dump:E}}async resolveLocateSearchArea(e){var t,r,n,o,i;let{query:a,queryPrompt:s,opt:l,context:c,modelRuntime:A,abortSignal:u}=e,{adapter:d}=A,p=!!(null==l||null==(t=l.planLocatedElement)?void 0:t.center);if(!a.deepLocate)return{trace:{}};if(p){let e=await ak({context:c,baseRect:aE(l.planLocatedElement)});return{config:e,trace:{sourceRect:e.sourceRect,rawResponse:JSON.stringify({source:"plan-located-element",center:l.planLocatedElement.center,rect:l.planLocatedElement.rect})}}}if("standard"===d.locate.kind&&d.locate.searchArea){let e=await aI({context:c,sectionDescription:s,modelRuntime:A,abortSignal:u}),{searchAreaConfig:t}=e;return t?{config:t,trace:{sourceRect:t.sourceRect,rawResponse:e.rawResponse,rawAssistantOutput:e.rawAssistantOutput,usage:e.usage}}:{error:e.error||"unknown search area error",trace:{rawResponse:e.rawResponse,rawAssistantOutput:e.rawAssistantOutput,usage:e.usage}}}let h=await ab({context:c,targetElementDescription:s,modelRuntime:A,abortSignal:u});(0,eH.vA)(null==(r=h.parseResult.element)?void 0:r.center,`cannot find search area for "${s}"${(null==(n=h.parseResult.errors)?void 0:n.length)?`: ${h.parseResult.errors.join("\n")}`:""}`);let m=await ak({context:c,baseRect:aE(h.parseResult.element)});return{config:m,trace:{sourceRect:m.sourceRect,rawResponse:JSON.stringify({source:"deep-locate-first-pass",center:null==(o=h.parseResult.element)?void 0:o.center,rect:null==(i=h.parseResult.element)?void 0:i.rect,rawResponse:h.rawResponse}),rawAssistantOutput:h.rawAssistantOutput,usage:h.usage}}}async extract(e,t,r,n,o,i,a){var s;let l,c,A,u,d,p;(0,eH.vA)(i,"context is required for extract"),(0,eH.vA)("object"==typeof e||"string"==typeof e,`dataDemand should be object or string, but get ${typeof e}`);let h=Date.now();try{let s=await aP({context:i,dataQuery:e,multimodalPrompt:o,extractOption:r,modelRuntime:t,pageDescription:n,abortSignal:null==a?void 0:a.abortSignal});l=s.parseResult,c=s.rawResponse,A=s.rawAssistantOutput,u=s.usage,d=s.reasoning_content}catch(t){if(t instanceof ty){let r=Date.now()-h,n=sn({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:{...this.taskInfo?this.taskInfo:{},durationMs:r,rawResponse:t.rawResponse,rawAssistantOutput:t.rawAssistantOutput,usage:t.usage},error:t.message});throw new aM(t.message,n)}throw t}let m=Date.now()-h,f={...this.taskInfo?this.taskInfo:{},durationMs:m,rawResponse:c,rawAssistantOutput:A,formatResponse:l,usage:u,reasoning_content:d};(null==(s=l.errors)?void 0:s.length)&&(p=`AI response error:
797
+ ${l.errors.join("\n")}`);let{data:g,thought:y}=l||{},v=sn({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:f,error:p,data:g});if(p&&!g)throw new aM(p,v);return{data:g,thought:y,usage:u,reasoning_content:d,dump:v}}async describe(e,t,r){let n,o,i;(0,eH.vA)(e,"target is required for service.describe");let a=(null==r?void 0:r.context)||await this.contextRetrieverFn(),{shotSize:s}=a,l=a.screenshot.base64;(0,eH.vA)(l,"screenshot is required for service.describe");let c=(i=tX(),`
798
+ Describe the real page element indicated by the temporary callout.
799
+ The callout is an annotation overlay. It is not part of the page or target.
800
+ The description will be used later to locate the same element on the original screenshot without annotations, so write a locator-style description instead of a visual caption.
801
+
802
+ IMPORTANT: You MUST write the description in ${i}.
803
+
804
+ OBSERVE IN THIS ORDER:
805
+ 1. Target first: identify the smallest real UI part at the callout endpoint/center: text, glyph, icon, arrow, input, dropdown/select, option, button, link, status, checkbox, radio, switch, tab, menu item, slider, image, control, or empty region.
806
+ 2. Primitive: name what that smallest part is before adding surrounding context.
807
+ 3. Owner/context: add the nearest stable owner only when it helps disambiguate, such as a label, row/card title, column header, field name, or adjacent visible text.
808
+ 4. Similar candidates: if multiple candidates look similar, add stable local anchors from the same row, card, field, header, or group. Prefer visible text and values over inferred row counting or temporary visual state.
809
+
810
+ RULES:
811
+ - Keep description under 35 words.
812
+ - Describe the smallest indicated UI part itself, not the larger container, row, card, sentence, or group that merely contains it.
813
+ - Ignore every annotation overlay, including callout number, line, color, marker, border, dot, ring, crosshair, or selection box. Never describe the annotation as the target.
814
+ - Do not borrow the text, glyph, direction, purpose, or state from a nearby element outside the callout endpoint/center.
815
+ - For tiny or icon-only controls, name the visible glyph/control and add its owner/context; adjacent text is context, not the target. If similar tiny controls are adjacent in the same group, add local order or relative position inside that group.
816
+ - If the endpoint/center is on a field value, label, or input body, describe that value/field/control. Do not retarget to a trailing icon, dropdown arrow, clear button, or search affordance unless the endpoint/center is on that icon itself.
817
+ - If the endpoint/center is inside the bordered body, current value, trigger, or blank area of a select/dropdown/combobox/filter field, use primitive "dropdown" and describe that dropdown/select control. Do not call it an input unless it is clearly a free-text field.
818
+ - If the endpoint/center is inside the bordered body or blank area of an input or filter field, describe the field body/current value/control even when the visible text is not exactly under the endpoint. Use the field label or visible value as context; do not snap to trailing icons or nearby table headers.
819
+ - If the endpoint/center is on an expanded dropdown/select/menu list item, use primitive "option" for selectable list options or "menuitem" for command menu entries.
820
+ - Only use primitive "icon" or "arrow" when the endpoint/center directly overlaps the real glyph strokes. A nearby search icon, dropdown arrow, clear button, or wrong locator result must not become the target primitive.
821
+ - For compound controls or stacked glyphs, describe only the sub-part containing the callout endpoint/center, using upper/lower or left/right only when visible.
822
+ - For inline text, links, or substrings, describe only the exact substring/link at the endpoint/center, not the whole line.
823
+ - For repeated rows, cards, or options, use same-local anchors that are visible in the screenshot, such as neighboring cell text, field value, title, date, time, ID, or column/header label.
824
+ - For tables or grids, describe the target as the intersection of the target column/header and same-row anchors. Do not use row ordinals or column ordinals unless the index/header is clearly visible.
825
+ - Use selected, highlighted, hovered, focused, or active state only if the callout endpoint/center is inside that state.
826
+ - If the endpoint/center is on blank space, describe the empty region/gap between stable surrounding anchors. Do not invent a nearby control.
827
+ - Use actual visible text from the current screenshot when available; do not copy labels from the examples.
828
+ - **Write the description in ${i}**
829
+
830
+ EXAMPLES:
831
+ ${(am[i]||am.English).map(e=>`- ${e}`).join("\n")}
832
+
833
+ Return JSON:
834
+ {
835
+ "description": "unique element identifier",
836
+ "error"?: "error message if any"
837
+ }`),A=Array.isArray(e),u=A?{left:Math.floor(e[0]-15),top:Math.floor(e[1]-15),width:30,height:30}:e,d=A?{x:e[0],y:e[1]}:void 0,p=A?await a9({inputImgBase64:l,size:s,point:d}):await a6({inputImgBase64:l,size:s,elementsPositionInfo:[{rect:st(u)}],borderThickness:sr(u),centerPoint:!0});if(null==r?void 0:r.deepDescribe){let e=[{kind:"focused",rect:ax(u,s)}];n=[{type:"text",text:"Use these images together to describe the real UI target marked by the temporary callout. Do not describe the marker itself."},{type:"text",text:"Image 1: full screenshot overview with the target marker, for page position and ownership context."},{type:"image",url:p},...(await Promise.all(e.map(async e=>{var t,r;let n,o;si("describe: cropping deep context area",e);let i=await oo(l,e.rect),a={width:i.width,height:i.height},s=(t=e.rect,r={left:u.left-t.left,top:u.top-t.top,width:u.width,height:u.height},n=Math.min(r.width,a.width),o=Math.min(r.height,a.height),{left:Math.max(0,Math.min(r.left,a.width-n)),top:Math.max(0,Math.min(r.top,a.height-o)),width:n,height:o}),c=A?await a9({inputImgBase64:i.imageBase64,size:a,point:{x:d.x-e.rect.left,y:d.y-e.rect.top}}):await a6({inputImgBase64:i.imageBase64,size:a,elementsPositionInfo:[{rect:st(s)}],borderThickness:sr(s),centerPoint:!0}),p=function(e){let t=Math.max(e.width,e.height);if(!t)return;let{resize:r}=se,n=Math.min(r.cropUpscaleMaxRatio,r.cropMaxLongEdge/t);if(!(n<=1.05))return{width:Math.round(e.width*n),height:Math.round(e.height*n)}}(i);return{kind:e.kind,imageBase64:p?await oe(c,{sourceSize:a,targetSize:p}):c}}))).flatMap((e,t)=>[{type:"text",text:`Image ${t+2}: focused detail crop around the target, for reading text, icon shape, and exact local boundaries.`},{type:"image",url:e.imageBase64}])]}else n=[{type:"text",text:"Full screenshot with a temporary callout marking the target:"},{type:"image",url:p}];let h=[{role:"system",content:c},{role:"user",content:n}];try{o=await rC(h,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),o=e instanceof ty?e.rawResponse:null==(t=n.match(/Response -\s*\n\s*([\s\S]*)$/))?void 0:t[1];if(!o||!n.includes("failed to parse LLM response into JSON")&&!(e instanceof ty))return;let i=null==(r=function(e,t){let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=RegExp(`"${r}"\\s*:\\s*"`).exec(e);if(!n)return;let o=n.index+n[0].length,i=!1,a="";for(;o<e.length;o+=1){let t=e[o];if(i){a+=t,i=!1;continue}if("\\"===t){a+=t,i=!0;continue}if('"'!==t){a+=t;continue}let r=function(e,t){let r=t;for(;r<e.length&&/\s/.test(e[r]);)r+=1;return e[r]}(e,o+1);if(","===r||"}"===r||"]"===r||void 0===r)try{return JSON.parse(`"${a}"`)}catch{return a}a+='\\"'}}(eG(o),"description"))?void 0:r.trim();if(i)return{description:i}}(t);if(!e)throw t;return si("describe: recovered malformed description JSON response"),e}let{content:m}=o;return(0,eH.vA)(!m.error,`describe failed: ${m.error}`),(0,eH.vA)(m.description,"failed to describe the element"),m}constructor(e,t){so(this,"contextRetrieverFn",void 0),so(this,"taskInfo",void 0),(0,eH.vA)(e,"context is required for Service"),"function"==typeof e?this.contextRetrieverFn=e:this.contextRetrieverFn=()=>Promise.resolve(e),void 0!==(null==t?void 0:t.taskInfo)&&(this.taskInfo=t.taskInfo)}}let ss="data:image/png;base64,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",sl={width:1788,height:500},sc="CONNECTIVITY_OK";function sA(e){return"number"==typeof e&&Number.isFinite(e)}function su(){return{screenshot:nF.create(ss,Date.now()),shotSize:sl,shrunkShotToLogicalRatio:1}}function sd(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,requestCount:0,endpoints:[],...r}}async function sp(e){let t=Date.now();try{let r="jev"===e.config.modelFamily,n=(await rw([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${sc}`}],e,r?{systemOneRequest:{state:{token:sc},questions:{result:{type:"noul",instructions:`Does token equal ${sc}?`}}}}:void 0)).content.trim(),o=r?ry.parse(JSON.parse(n)).answers.result:void 0,i=r?(null==o?void 0:o.type)==="noul"&&o.noul>=.5:n.includes(sc);return sd("text",e,{passed:i,durationMs:Date.now()-t,message:i?"":`Unexpected response: ${n}`})}catch(r){return sd("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function sh(e){let t=Date.now();try{return e.adapter.insight.booleanFn?await new sa(su()).extract({Boolean:"Does this screenshot show a form?"},e,{screenshotIncluded:!0},void 0,void 0,su()):await rw([{role:"user",content:[{type:"text",text:"What is the main content of this image ? It is a photo or a form ?"},{type:"image",url:ss}]}],e),sd("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return sd("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function sm(e){let t=Date.now();try{var r;let n=su(),o=new sa(n),i=null==(r=(await o.locate({prompt:"the main todo input box"},{},e)).element)?void 0:r.center,a=Array.isArray(i)&&2===i.length&&sA(i[0])&&sA(i[1]);return sd("aiLocate",e,{passed:a,durationMs:Date.now()-t,message:a?"":`Invalid locate result: ${JSON.stringify({center:i})}`})}catch(r){return sd("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function sf(e){let t,r=async(e,t)=>{let r=ah({...e,retryCount:0}),n=0,o=new Set;return r.onRequest=e=>{n+=1,e&&o.add(e)},{...await t(r),requestCount:n,endpoints:[...o]}},n=await Promise.all([r(e.planningModelConfig,sp),r(e.insightModelConfig,sh),r(e.locateModelConfig??e.defaultModelConfig,sm),r(e.defaultModelConfig,sp)]),o=n.every(e=>e.passed);return{checks:n,requestCount:n.reduce((e,t)=>e+t.requestCount,0),passed:o,message:o?void 0:0===(t=n.filter(e=>!e.passed)).length?"Connectivity test failed, but no failed check details were generated.":t.map(e=>{var t;let r,n,o=e.message||"Failed without details.";return`[${r="aiLocate"===e.name?"AI locate check":`${null==(t=e.name[0])?void 0:t.toUpperCase()}${e.name.slice(1)} check`,n=e.modelName||e.intent,`${r} - ${n} (${e.intent})`}]: ${o}`}).join("\n")}}(0,e0.aZ)("ai:recorder-markdown",{console:!0});var sg=r(85409);let sy=(0,e0.aZ)("yaml:utils"),sv=/^tasks\s*:/,sb=/^[^\s#][^:]*:/,sw=["page","browser","web","target"];function sE(e){let t=sw.map(t=>[t,e[t]]).filter(e=>void 0!==e[1]);if(0===t.length)return;if(t.length>1){let e=t.map(e=>{let[t]=e;return t});throw Error(`[midscene] Only one web target can be specified, but found multiple: ${e.join(", ")}. Please specify only one of: page, browser, web, or target.`)}let[r,n]=t[0],o=n.mode;if(void 0!==o&&"page"!==o&&"browser"!==o)throw Error(`[midscene] web target mode must be either "page" or "browser", but got "${o}".`);if("page"===r&&"browser"===o)throw Error("[midscene] page target cannot use mode: browser. Use browser: instead.");if("browser"===r&&"page"===o)throw Error("[midscene] browser target cannot use mode: page. Use page: instead.");let i="page"===r?"page":"browser"===r?"browser":o??"page";if("page"===i&&n.autoFollowNewPage)throw Error("[midscene] autoFollowNewPage requires browser mode. Use browser: or web.mode: browser.");if("browser"===i&&void 0!==n.forceSameTabNavigation)throw Error("[midscene] forceSameTabNavigation cannot be used in browser mode. Use page: or web.mode: page when same-tab navigation is required.");return{source:r,mode:i,target:{...n,mode:i}}}let sx=["images","convertHttpImage2Base64"];function sk(e){if("object"!=typeof e||null===e)return;let t=sx.map(t=>[t,e[t]]).filter(e=>{let[,t]=e;return void 0!==t});return t.length?Object.fromEntries(t):void 0}function sS(e,t){var r;let n;sy("will call buildDetailedLocateParam",e,t);let o=e;if("object"==typeof e&&null!==e&&"prompt"in e){let{prompt:t,...r}=e;o=Object.keys(r).length>0?e:t}let i=o||(null==t?void 0:t.prompt)||(null==t?void 0:t.locate),a=!1,s=!0;if("object"==typeof t&&null!==t&&(a=t.deepLocate??t.deepThink??!1,s=t.cacheable??!0,n=t.xpath,e&&t.prompt&&e!==t.prompt&&console.warn("conflict prompt for item",e,t,"maybe you put the prompt in the wrong place"),i=i||t.prompt),!i)return void sy("no prompt, will return undefined in buildDetailedLocateParam",t);let l="string"==typeof i?i:i.prompt,c=(null==t||null==(r=t.context)?void 0:r.trim())||void 0;i=((e,t)=>{let r=aC(t);if(!r)return e;let n="string"==typeof e?e:e.prompt,o=`${r}
838
+
839
+ <LOCATE_TARGET>
840
+ ${n}
841
+ </LOCATE_TARGET>`;return"string"==typeof e?o:{...e,prompt:o}})(i,null==t?void 0:t.context);let A=sk(t);return A&&(i="string"==typeof i?{prompt:i,...A}:{...i,...A}),{prompt:i,...c?{promptDisplay:l,context:c}:{},deepLocate:a,cacheable:s,xpath:n}}function sI(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=sk(t),o=sS(e,t),i={};if("object"==typeof t&&null!==t){let e=Object.keys(t),a=Object.keys(o||{}),s="object"==typeof(null==o?void 0:o.prompt)&&(null==o?void 0:o.prompt)!==null?Object.keys(n||{}):[];for(let n of e)a.includes(n)||"context"===n||"deepThink"===n||s.includes(n)||r.includes(n)||"locate"===n||(i[n]=t[n])}return{locateParam:o,restParams:i}}var sC=r(80757);let sO="… [truncated]";function sR(e){return"object"==typeof e&&null!==e||"function"==typeof e}function sj(e,t){try{return Reflect.get(e,t)}catch{return}}function sP(e,t){for(let r of t){let t=sj(e,r);if("number"==typeof t)return t;if("string"==typeof t)return sM(t)}}function sM(e){return e.length<=4096?e:`${e.slice(0,4096-sO.length)}${sO}`}function sT(e){let t=sj(e,"message");return"string"==typeof t&&t?t:void 0}function sN(e){if(!sR(e)){let t=sM(String(e));return{error:{name:"NonError",message:t.trim()?t:"Empty string thrown"},hasMessage:!!t.trim()}}let t=sj(e,"name"),r=sM("string"==typeof t&&t?t:"Error"),n=function(e){let t=sT(e);if(t)return t;for(let t of["error","cause"]){let r=sj(e,t);if(!sR(r))continue;let n=sT(r);if(n)return n}}(e),o={name:r,message:sM(n??`${r} without a message`)},i=function(e){if(!sR(e))return;let t=sj(e,"stack");return"string"==typeof t?t:void 0}(e);i&&(o.stack=sM(i));let a=sP(e,["code"]),s=sP(e,["status","statusCode"]),l=sP(e,["requestId","requestID"]);return void 0!==a&&(o.code=a),void 0!==s&&(o.status=s),void 0!==l&&(o.requestId=l),{error:o,hasMessage:void 0!==n}}function sD(e){return sN(e).error}var sz=r(27533);function sB(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let sF=(0,e0.aZ)("agent:action-readiness",{console:!0}),sL="ACTION_READINESS_FAILED";class sU extends Error{constructor(e,t,r){super(`waitForActionReady ${e} failed for ${t}: ${function(e){let t=sN(e),r=t.error;if(!sR(e)||t.hasMessage)return r.message;let n={name:r.name,message:r.message};for(let e of["code","status","requestId"]){let t=r[e];void 0!==t&&(n[e]=t)}return sM(JSON.stringify(n))}(r)}`,{cause:r}),sB(this,"code",sL),this.name="ActionReadinessError"}}function sK(e){let t=new Set;for(;e&&"object"==typeof e&&!t.has(e);){t.add(e);let r=e;if(r.code===sL)return!0;e=r.cause}return!1}class sZ{async wait(e,t,r){let n;null==t||t.throwIfAborted();let o=setTimeout(()=>{sF(`waitForActionReady for ${e.name} (${e.id}) is still pending after 5000ms; continuing to wait.`)},5e3);try{await new Promise((o,i)=>{t&&(n=()=>i(t.reason),t.addEventListener("abort",n,{once:!0}));let a=Promise.resolve(this.callback({action:e,signal:t}));(t&&r?(0,sz.DL)(r,a,t,"readiness"):a).then(o,i)}),null==t||t.throwIfAborted()}catch(r){throw null==t||t.throwIfAborted(),new sU("wait",e.name,r)}finally{clearTimeout(o),t&&n&&t.removeEventListener("abort",n)}}constructor(e){if(sB(this,"callback",void 0),this.callback=e,"function"!=typeof e)throw Error("waitForActionReady must be a function")}}var sJ=r(43545);async function sQ(e){let t=[];for(let r of e)try{await r.fn()}catch(e){t.push(e)}if(1===t.length)throw t[0];if(t.length>1)throw AggregateError(t,"Multiple resource cleanup operations failed")}var sq=r(584);let sX=Symbol.for("@midscene/core/yaml-execution-session/v2"),sW=globalThis;sW[sX]??(sW[sX]={sessions:new WeakMap,signals:new WeakMap,context:{getStore:()=>void 0,run:(e,t)=>t()}});let{sessions:sH,signals:sY,context:sG}=sW[sX],sV=e=>{var t;return!!(null==(t=sH.get(e))?void 0:t.length)};function s$(e){let t={parent:sG.getStore(),signals:new WeakMap};return sG.run(t,async()=>{try{return await e()}finally{var r;null==(r=t.session)||r.finish()}})}let s_=e=>{var t,r;return null==(r=sY.get(e))||null==(t=r.at(-1))?void 0:t.signal};function s0(e,t){if(!sY)throw Error("YAML action requires an execution context.");let r=sY.get(e)??[];sY.set(e,r);let n={signal:t};return r.push(n),()=>{let t=r.indexOf(n);t>=0&&r.splice(t,1),r.length||sY.delete(e)}}class s1 extends sq.s8{}function s2(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1];let t=sH.get(e)??[],r=sG.getStore(),n=t.at(-1),o={agent:e,children:[],finished:!1,finish(r){if(o.finished)return;o.finished=!0;let i=t.indexOf(o);i>=0&&t.splice(i,1),t.length||sH.delete(e),r?null==n||n.children.push(r):null==n||n.children.push(...o.children)}};return t.push(o),sH.set(e,t),r&&(r.session=o),{isRoot:!n,children:o.children,finish:o.finish}}var s3=r(83147),s5=r(8963).Buffer,s4=r(85409);let s7=s5.from("<script"),s8=s5.from("<\/script>"),s6=/data-group-id="([^"]+)"/;function s9(e){var t;if(!e.includes('type="midscene_web_dump"'))return;let r=null==(t=e.match(s6))?void 0:t[1];return r?decodeURIComponent(r):void 0}async function le(e,t){let r=s5.alloc(0);for await(let n of(0,nt.createReadStream)(e,{highWaterMark:0x2000000}))for(r=0===r.length?n:s5.concat([r,n]);r.length>0;){let e=r.indexOf(s7);if(-1===e){r=r.subarray(Math.max(0,r.length-s7.length+1));break}e>0&&(r=r.subarray(e));let n=r.indexOf(62,s7.length);if(-1===n)break;let o=r.indexOf(s8,n+1);if(-1===o)break;let i=o+s8.length;await t({openTag:r.subarray(0,n+1).toString("utf-8"),content:r.subarray(n+1,o)}),r=r.subarray(i)}if(-1!==r.indexOf(s7))throw Error(`Report contains an unterminated script tag: ${e}`)}async function lt(e){let t=new Map,r=0;return await le(e,e=>{let{openTag:n,content:o}=e,i=s9(n);if(!i)return;let a=aG.fromSerializedString((0,eH.x3)(o.toString("utf-8").trim())),s=t.get(i);for(let e of(s||(s={baseDump:a,executionsByKey:new Map,firstOpenTag:n,noIdExecutionIndex:0,tagCount:0},t.set(i,s)),s.tagCount+=1,r+=1,a.executions)){let t=e.id?`id:${e.id}`:`no-id:${s.noIdExecutionIndex++}`;s.executionsByKey.set(t,e)}}),{groups:t,tagCount:r}}async function lr(e,t){let r=0;for(;r<t.length;){let{bytesWritten:n}=await e.write(t,r,t.length-r,null);if(0===n)throw Error("Failed to make progress while writing compacted report");r+=n}}async function ln(e,t,r){let n=new Map(Array.from(r.groups,e=>{let t,[r,n]=e;return[r,(n.baseDump.executions=Array.from(n.executionsByKey.values()),t=(0,eH.NB)(n.baseDump.serialize()),s5.from(`${n.firstOpenTag}${t}${s8.toString("utf-8")}`))]})),o=new Map,i=new Set,a=await (0,nr.open)(t,"wx"),s=s5.alloc(0);try{for await(let t of(0,nt.createReadStream)(e,{highWaterMark:0x2000000}))for(s=0===s.length?t:s5.concat([s,t]);s.length>0;){let e=s.indexOf(s7);if(-1===e){let e=Math.max(0,s.length-s7.length+1);await lr(a,s.subarray(0,e)),s=s.subarray(e);break}await lr(a,s.subarray(0,e));let t=(s=s.subarray(e)).indexOf(62,s7.length);if(-1===t)break;let l=s.indexOf(s8,t+1);if(-1===l)break;let c=l+s8.length,A=s.subarray(0,t+1).toString("utf-8"),u=s9(A);if(u&&r.groups.has(u)){let e=(o.get(u)??0)+1;o.set(u,e),e===r.groups.get(u).tagCount&&(await lr(a,n.get(u)),i.add(u))}else await lr(a,s.subarray(0,c));s=s.subarray(c)}if(-1!==s.indexOf(s7))throw Error(`Report contains an unterminated script tag: ${e}`);for(let[e,t]of(await lr(a,s),r.groups))if(o.get(e)!==t.tagCount||!i.has(e))throw Error(`Report compaction did not rewrite every dump in group: ${e}`);await a.sync()}finally{await a.close()}}async function lo(e,t){try{await (0,nr.rename)(e,t);return}catch(e){if(!function(e){if("win32"!==s4.platform)return!1;let t=e.code;return"EACCES"===t||"EEXIST"===t||"EPERM"===t}(e))throw e}let r=(0,ts.join)((0,ts.dirname)(t),`.${(0,ts.basename)(t)}.${(0,eH.uR)()}.backup`);await (0,nr.rename)(t,r);try{await (0,nr.rename)(e,t)}catch(e){try{await (0,nr.rename)(r,t)}catch(t){throw Error(`Failed to replace compacted report and restore the original report: ${String(e)}; restore error: ${String(t)}`)}throw e}await (0,nr.unlink)(r)}async function li(e){let t=await (0,nr.stat)(e),r=await lt(e),n=r.groups.size;if(r.tagCount<=n)return{beforeBytes:t.size,afterBytes:t.size,beforeDumpCount:r.tagCount,afterDumpCount:n};let o=(0,ts.join)((0,ts.dirname)(e),`.${(0,ts.basename)(e)}.${(0,eH.uR)()}.tmp`);try{await ln(e,o,r);let i=await (0,nr.stat)(o);return await lo(o,e),{beforeBytes:t.size,afterBytes:i.size,beforeDumpCount:r.tagCount,afterDumpCount:n}}catch(e){try{await (0,nr.unlink)(o)}catch(t){if("ENOENT"!==t.code)throw Error(`Report compaction failed and the temporary file could not be removed: ${String(e)}; cleanup error: ${String(t)}`)}throw e}}var la=r(56339),ls=r(38015);function ll(e,t,r){return(0,ls.O)(e,{sources:t.executions.length?[{...r,executionIds:t.executions.flatMap(e=>e.id?[e.id]:[])}]:[],metrics:(0,la.p)(t)})}function lc(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let lA=(0,e0.aZ)("report-generator",{console:!0}),lu={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0,writeRunnerReport:async()=>void 0};function ld(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class lp{static create(e,t){if(ld(t),function(e,t){if(!(null==e?void 0:e.trim()))throw Error("reportFileName must be a non-empty string");if(/[\\/]/.test(e))throw Error("reportFileName must not contain path separators (`/` or `\\\\`)");if(/[:*?"<>|]/.test(e))throw Error('reportFileName contains illegal filename characters: : * ? " < > |');let r="html-and-external-assets"===t?e:lh(e),n=new TextEncoder().encode(r).byteLength;if(n>255)throw Error(`reportFileName produces a filename component of ${n} UTF-8 bytes; maximum is 255`)}(e,t.outputFormat),!1===t.generateReport||eH.ht)return lu;let r=(0,tc.ZH)("report"),n=(0,ts.join)(r,e);return new lp({reportPath:"html-and-external-assets"===t.outputFormat?(0,ts.join)(n,"index.html"):(0,ts.join)(r,lh(e)),screenshotMode:"html-and-external-assets"===t.outputFormat?"directory":"inline",persistExecutionDump:t.persistExecutionDump,autoPrint:t.autoPrintReportMsg,reuseExistingReport:t.reuseExistingReport})}onExecutionUpdate(e,t,r){this.assertOpen(),this.lastExecution=e,this.lastReportMeta=t,this.executionsByKey.set(this.getExecutionCommentKey(e),e),this.mergeReportAttributes(r),this.writeQueue=this.writeQueue.then(async()=>{await this.doWriteExecution(e,t)})}async flush(){await this.writeQueue}async finalize(){return this.finalization||(this.lastExecution&&this.lastReportMeta&&this.onExecutionUpdate(this.lastExecution,this.lastReportMeta),this.finalization=this.finishPublication()),this.finalization}async finishPublication(){if(await Promise.all([this.flush(),...this.sourcePublications]),this.initialized){await this.appendAgentReportComment();try{await li(this.reportPath)}catch(e){lA(`Failed to compact report ${this.reportPath}; keeping the uncompressed report: ${String(e)}`)}}return this.executionsByKey.clear(),this.lastExecution=void 0,this.lastReportMeta=void 0,this.executionCommentKeyByObject=new WeakMap,this.executionLogFileIndexByExecutionKey.clear(),this.initialized?this.reportPath:void 0}assertOpen(){if(this.finalization)throw Error("The report has been finalized.")}getReportPath(){return this.reportPath}async writeRunnerReport(e,t,r){return this.assertOpen(),this.writeQueue=this.writeQueue.then(async()=>{let n=this.lastReportMeta??r,o=[...this.executionsByKey.values()],i=new aG({...n,executions:o}),a=ll(e,i,{reportId:this.reportAttributes["data-report-id"]??this.reportAttributes["data-group-id"]??this.reportStreamId,scopeId:t,sourcePath:this.reportPath});for(let e of a.diagnostics??[])lA(e.message);let s=await this.serializeSourceDump(),l=[];if("inline"===this.screenshotMode)for(let e of s.images.values()){let t=await (0,s3.readFile)((0,ts.join)((0,ts.dirname)(this.reportPath),e.path));l.push(nk(e.id,`data:${e.mimeType};base64,${t.toString("base64")}`))}let c="inline"===this.screenshotMode?JSON.stringify(JSON.parse(s.serialized),(e,t)=>{let r=nT(t);return r?{...r,storage:"inline",path:void 0}:t}):s.serialized,A=`${t3()}${"directory"===this.screenshotMode?nS():""}
842
+ ${nC(c,this.getDumpScriptAttributes())}
843
+ ${l.join("\n")}
844
+ ${ng(a)}
845
+ ${nm(i)}`;(0,tG.mkdirSync)((0,ts.dirname)(this.reportPath),{recursive:!0});let u=`${this.reportPath}.runner-${(0,eH.uR)()}.tmp`;try{await (0,s3.writeFile)(u,A),await (0,s3.rename)(u,this.reportPath)}finally{await (0,s3.unlink)(u).catch(e=>{if("ENOENT"!==e.code)throw e})}this.initialized=!0,this.firstWriteDone||(this.firstWriteDone=!0,this.printReportPath())}),await this.flush(),this.reportPath}enableSourceSnapshots(){this.screenshotStore.enableFileCopies()}async serializeSourceDump(e,t){this.enableSourceSnapshots();let r=(null==e?void 0:e.executions)??[...this.executionsByKey.values()],n=new Map;for(let e of t??r.flatMap(e=>e.collectScreenshots()))await this.screenshotStore.persist(e);for(let e of r)for(let[t,r]of(await this.persistReferenceImages(e)))n.set(t,r);let o=e??new aG({...this.lastReportMeta??{sdkVersion:"",groupName:"YAML execution",modelBriefs:[]},executions:r}),i=new Map;return{serialized:JSON.stringify(JSON.parse(o.serializeWithReferenceImages(n)),(e,t)=>{let r=nT(t);if(!r)return t;let n={...r,storage:"file",path:`./screenshots/${r.id}.${nD(r)}`};return i.set(r.id,n),n}),images:i}}async createSourceSnapshot(e,t){if(this.assertOpen(),!e||(0,ts.basename)(e)!==e)throw Error("Invalid report scope ID");let r=new Date().toISOString(),n=t?new Set(t):void 0,o=[...this.executionsByKey.values()].filter(e=>!n||e.id&&n.has(e.id)),i=o.flatMap(e=>e.collectScreenshots()),a=aG.fromSerializedString(new aG({...this.lastReportMeta??{sdkVersion:"",groupName:"YAML execution",modelBriefs:[]},executions:o}).serialize()),s=(async()=>{let{serialized:t}=await this.serializeSourceDump(a,i),n=`${this.reportPath}.${e}.${(0,eH.uR)()}.json`;return(0,tG.mkdirSync)((0,ts.dirname)(n),{recursive:!0}),await (0,s3.writeFile)(n,t,{flag:"wx"}),{sourcePath:this.reportPath,dumpPath:n,collection:{status:"complete",capturedAt:r}}})();this.sourcePublications.add(s);try{return await s}finally{this.sourcePublications.delete(s)}}printReportPath(){this.autoPrint&&this.reportPath&&(tq.getEnvConfigInBoolean(tu.d8)||("directory"===this.screenshotMode?(0,eH.gQ)(`Midscene - report file updated: npx serve ${(0,ts.dirname)(this.reportPath)}`):(0,eH.gQ)(`Midscene - report file updated: ${this.reportPath}`)))}async doWriteExecution(e,t){let r=this.wrapAsReportDump(e,t),n=await this.writeExecution(e,r);this.shouldPersistExecutionDump&&await this.persistExecutionDumpToFile(e,r,n),this.firstWriteDone||(this.firstWriteDone=!0,this.printReportPath())}mergeReportAttributes(e){if(e)for(let[t,r]of Object.entries(e))null!=r&&(this.reportAttributes[t]=String(r))}hydrateStateFromExistingReport(){if(!(0,tG.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump||!(0,tG.existsSync)(this.executionDumpDir)))return;let e=(0,tG.readdirSync)(this.executionDumpDir).map(e=>{var t;return null==(t=/^(\d+)\.execution\.json$/.exec(e))?void 0:t[1]}).filter(e=>!!e).map(e=>Number.parseInt(e,10)).filter(e=>Number.isFinite(e));e.length>0&&(this.executionLogIndex=Math.max(...e))}getDumpScriptAttributes(){return{"data-group-id":this.reportStreamId,[nI]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new aG({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeExecution(e,t){let r=(0,ts.dirname)(this.reportPath);if((0,tG.existsSync)(r)||(0,tG.mkdirSync)(r,{recursive:!0}),!this.initialized){let e="directory"===this.screenshotMode?nS():"";await (0,s3.writeFile)(this.reportPath,`${t3()}${e}`),this.initialized=!0}for(let t of e.collectScreenshots())await this.screenshotStore.persist(t);let n=await this.persistReferenceImages(e),o=t.serializeWithReferenceImages(n);return await (0,s3.appendFile)(this.reportPath,`
846
+ ${nC(o,this.getDumpScriptAttributes())}`),n}async persistReferenceImages(e){let t=new Map;for(let r of e.getReferenceImageUrls()){let e=await this.screenshotStore.persistReferenceImage(r);t.set(r,e)}return t}async appendAgentReportComment(){if(this.agentCommentWritten||!this.lastReportMeta||0===this.executionsByKey.size)return;let e=new aG({sdkVersion:this.lastReportMeta.sdkVersion,groupName:this.lastReportMeta.groupName,groupDescription:this.lastReportMeta.groupDescription,modelBriefs:this.lastReportMeta.modelBriefs,deviceType:this.lastReportMeta.deviceType,executions:Array.from(this.executionsByKey.values())});await (0,s3.appendFile)(this.reportPath,`
847
+ ${nm(e)}`),this.agentCommentWritten=!0}getExecutionLogKey(e){if(!e.id)throw Error("ReportGenerator: execution.id is required for persisting execution dumps");return`id:${e.id}`}getExecutionCommentKey(e){if(e.id)return`id:${e.id}`;let t=this.executionCommentKeyByObject.get(e);if(t)return t;let r=`no-id:${this.executionCommentKeyIndex++}`;return this.executionCommentKeyByObject.set(e,r),r}get executionDumpDir(){return"inline"===this.screenshotMode?(0,ts.join)((0,ts.dirname)(this.reportPath),".execution-dumps",(0,ts.basename)(this.reportPath)):(0,ts.dirname)(this.reportPath)}async persistExecutionDumpToFile(e,t,r){let n=this.executionDumpDir;(0,tG.existsSync)(n)||(0,tG.mkdirSync)(n,{recursive:!0});let o=this.getExecutionLogKey(e),i=this.executionLogFileIndexByExecutionKey.get(o);i||(this.executionLogIndex+=1,i=this.executionLogIndex,this.executionLogFileIndexByExecutionKey.set(o,i));let a=`${i}.execution.json`,s=(0,ts.join)(n,a),l=t.serializeWithReferenceImages(r,2);"inline"===this.screenshotMode&&(l=JSON.stringify(JSON.parse(l),(e,t)=>{let r=nT(t);return r?{...r,storage:"file",path:`../../screenshots/${r.id}.${nD(r)}`}:t},2)),await (0,s3.writeFile)(s,l,"utf-8")}constructor(e){lc(this,"reportPath",void 0),lc(this,"screenshotMode",void 0),lc(this,"shouldPersistExecutionDump",void 0),lc(this,"autoPrint",void 0),lc(this,"firstWriteDone",!1),lc(this,"executionLogIndex",0),lc(this,"executionLogFileIndexByExecutionKey",new Map),lc(this,"reportStreamId",void 0),lc(this,"screenshotStore",void 0),lc(this,"initialized",!1),lc(this,"lastExecution",void 0),lc(this,"lastReportMeta",void 0),lc(this,"executionsByKey",new Map),lc(this,"executionCommentKeyByObject",new WeakMap),lc(this,"executionCommentKeyIndex",0),lc(this,"reportAttributes",{}),lc(this,"agentCommentWritten",!1),lc(this,"writeQueue",Promise.resolve()),lc(this,"finalization",void 0),lc(this,"sourcePublications",new Set),this.reportPath=e.reportPath,this.screenshotMode=e.screenshotMode,this.shouldPersistExecutionDump=e.persistExecutionDump??!1,this.autoPrint=e.autoPrint??!0,this.reportStreamId=(0,eH.uR)(),this.screenshotStore=new aU({mode:"inline"===this.screenshotMode?"inline":"directory",reportPath:this.reportPath,screenshotsDir:(0,ts.join)((0,ts.dirname)(this.reportPath),"screenshots"),writeInlineImage:async(e,t)=>{await (0,s3.appendFile)(this.reportPath,`
848
+ ${nk(e,t)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump,reuseExistingReport:e.reuseExistingReport}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}function lh(e){return e.endsWith(".html")?e:`${e}.html`}var lm=r(73840);function lf(e){var t,r,n,o,i;let a=null==(t=e.execution)?void 0:t.document,s=[...(null==a?void 0:a.hostErrors)??[]],l=(e,t)=>{void 0!==t&&s.push({phase:e,error:t})};for(let t of(l("setup",e.setupError),l("execution",e.executionError),e.cleanupErrors))l("cleanup",t);for(let t of(l("report",e.reportError),e.publicationErrors??[]))l("publication",t);for(let t of e.observerErrors??[])l("observer",t);let c=e.projectName??(null==a?void 0:a.projectName)??e.platform;return{document:{plan:(null==a?void 0:a.plan)??(0,lm.V)(e.document),documentId:e.document.documentId,documentRunId:e.runId,attemptIndex:e.attemptIndex,projectId:e.document.projectId,projectName:c,sourcePath:e.sourcePath,status:s.length||(null==a?void 0:a.status)==="failed"?"failed":"success",startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,beforeAll:(null==a?void 0:a.beforeAll)??[],afterAll:(null==a?void 0:a.afterAll)??[],...s.length?{hostErrors:s}:{},...(null==a||null==(r=a.executionErrors)?void 0:r.length)?{executionErrors:a.executionErrors}:{},...(null==a||null==(n=a.teardownErrors)?void 0:n.length)?{teardownErrors:a.teardownErrors}:{},reportScopeId:(null==a?void 0:a.reportScopeId)??e.runId,reportPaths:[...e.reportPaths],...(null==(o=e.reportSources)?void 0:o.length)?{reportSources:[...e.reportSources]}:{}},cases:(null==(i=e.execution)?void 0:i.cases)??e.document.cases.map(e=>({caseId:e.caseId,projectName:c,name:e.definition.name,sourcePath:e.sourcePath,caseIndex:e.caseIndex,status:"not-run",notRunReason:"document-start-failed"}))}}function lg(e,t){if(0===e.length)throw Error("A report requires at least one execution record.");let r=new Map;for(let t of e){let e=t.document.projectId,n=r.get(e)??[];n.push(t),r.set(e,n)}let n={total:0,passed:0,failed:0,notRun:0,filtered:0,collectionErrors:0,documentFailures:0,projectFailures:0},o=[];for(let[e,t]of r){let r=t[0].platform,c=t[0].projectName??r,A=new Map,u=new Map;for(let e of t){let t=e.document.documentId;0!==e.attemptIndex&&u.has(t)||u.set(t,e.runId),A.set(u.get(t),e)}for(let e of A.values()){var i,a,s,l;let t=null==(i=e.execution)?void 0:i.cases;n.total+=e.document.cases.length,n.passed+=(null==t?void 0:t.filter(e=>"success"===e.status).length)??0,n.failed+=(null==t?void 0:t.filter(e=>"failed"===e.status).length)??0,n.notRun+=(null==t?void 0:t.filter(e=>"not-run"===e.status).length)??e.document.cases.length,(void 0!==e.setupError||void 0!==e.executionError||void 0!==e.reportError||((null==(a=e.publicationErrors)?void 0:a.length)??0)>0||((null==(s=e.observerErrors)?void 0:s.length)??0)>0||e.cleanupErrors.length||(null==(l=e.execution)?void 0:l.document.status)==="failed")&&(n.documentFailures+=1)}let d=t.map(lf),p=d.map(e=>e.document);o.push({projectId:e,name:c,platform:r,status:[...A.values()].some(e=>"failed"===e.status)?"failed":"success",retry:Math.max(...t.map(e=>e.attemptIndex)),documents:p,collectionErrors:[],cases:d.flatMap(e=>e.cases.map(t=>({...t,documentId:e.document.documentId,documentRunId:e.document.documentRunId})))})}let c=t.startedAt??e.map(e=>e.startedAt).sort()[0],A=t.endedAt??e.map(e=>e.endedAt).sort().at(-1);return{runId:t.runId,startedAt:c,endedAt:A,durationMs:Math.max(0,Date.parse(A)-Date.parse(c)),status:o.some(e=>"failed"===e.status)?"failed":"success",summary:n,projects:o}}async function ly(e){var t,r,n,o,i,a,s,l;let c,{agent:A,runId:u}=e,d=e.record;if(A){let e=await (null==(i=A._writeYamlExecutionReport)?void 0:i.call(A,d))??A.reportFile,t=await (null==(a=A._createReportSource)?void 0:a.call(A,u));return t&&(d=Object.freeze({...d,reportSources:[t]})),{record:d,reportFile:e}}if(eH.ht||eH.rS||(c=(s=e.script).page??s.browser??s.web??s.target,((null==(l=s.agent)?void 0:l.generateReport)??(null==c?void 0:c.generateReport))===!1))return{record:d};let p=lp.create(e.fallbackReportFileName??(null==(t=e.script.agent)?void 0:t.reportFileName)??(null==(r=e.script.agent)?void 0:r.testId)??(e.scriptPath?(0,ts.basename)(e.scriptPath).replace(/\.ya?ml$/i,""):`script-${u}`),e.script.agent??{}),h=await (null==(n=p.writeRunnerReport)?void 0:n.call(p,lg([d],{runId:u}),u,{groupName:"YAML execution",sdkVersion:t7(),modelBriefs:[]})),m=await (null==(o=p.createSourceSnapshot)?void 0:o.call(p,u));return await p.finalize(),m&&(d=Object.freeze({...d,reportSources:[m]})),{record:d,reportFile:h}}var lv=r(70875);let lb=e=>{if(!e)return!1;let t=null==e?void 0:e._def;if(!(null==t?void 0:t.typeName))return!1;switch(t.typeName){case rm.kY.ZodString:case rm.kY.ZodEnum:case rm.kY.ZodNativeEnum:return!0;case rm.kY.ZodLiteral:return"string"==typeof t.value;case rm.kY.ZodOptional:case rm.kY.ZodNullable:case rm.kY.ZodDefault:return lb(t.innerType);case rm.kY.ZodEffects:return lb(t.schema);case rm.kY.ZodPipeline:return lb(t.out);case rm.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>lb(e))}default:return!1}};function lw(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if("object"!=typeof e||null===e||Array.isArray(e))return{node:"legacyValidationError",input:{message:"flow item must be an object"},meta:{continueOnError:!1}};let{name:r,...n}=e,o=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return{node:e,input:t,meta:{continueOnError:!1,...n?{captureResult:!0,..."string"==typeof r&&r.length>0?{resultName:r}:{}}:{}}}},i=e=>o("legacyValidationError",{message:e});if("Finalize"in n)return o("Finalize",{});if("aiAct"in n||"aiAction"in n||"ai"in n){let{aiAct:t,aiAction:r,ai:n,instruction:a,...s}=e,l=t??r??n,c=e=>"string"==typeof e&&e||e&&"object"==typeof e&&"string"==typeof e.prompt&&e.prompt,A=c(a)?a:c(l)?l:void 0;return A?o("aiAct",{prompt:A,options:s}):i("missing prompt for ai (aiAct)")}if("runGherkinScenario"in n)return n.runGherkinScenario?o("runGherkinScenario",{scenario:n.runGherkinScenario,options:{cacheable:!1}}):i("missing scenario for runGherkinScenario");if("aiAssert"in n){let{aiAssert:t,errorMessage:r,...a}=n;return t?Object.hasOwn(e,"observe")?i("`observe` is not supported in YAML aiAssert. Use agent.startObserving() from code instead."):o("aiAssert",{prompt:t,options:{...a,keepRawResponse:!0},message:r},!0):i("missing prompt for aiAssert")}for(let t of["aiQuery","aiNumber","aiString","aiBoolean","aiAsk","aiLocate"])if(t in n){let{[t]:r,...a}=n;if(!r)return i(`missing prompt for ${t}`);if(Object.hasOwn(e,"observe"))return i("`observe` is not supported in YAML flow items. Use agent.startObserving() from code instead.");return o(t,{prompt:r,options:a},!0)}if("aiWaitFor"in n){let{aiWaitFor:t,timeout:r,...n}=e;return t?o("aiWaitFor",{prompt:t,options:{...n,...void 0===r?{}:{timeout:r,timeoutMs:r}}}):i("missing prompt for aiWaitFor")}if("sleep"in n){let e="string"==typeof n.sleep?Number.parseInt(n.sleep,10):n.sleep;return!Number.isFinite(e)||e<=0?i(`ms for sleep must be greater than 0, but got ${n.sleep}`):o("sleep",{ms:e})}if("javascript"in n)return o("javascript",{script:n.javascript},!0);if("recordToReport"in n||"logScreenshot"in n)return o("recordToReport",{title:n.recordToReport??n.logScreenshot??"untitled",options:{content:n.content||""}});if("aiInput"in n){let{aiInput:t,value:r,...n}=e,i=n.locate||t||"",a=n.locate&&t||r;return o("action",{name:"Input",params:{...n,...void 0===a?{}:{value:String(a)},...i?{locate:sS(i,n)}:{}}})}if("aiKeyboardPress"in n){let{aiKeyboardPress:t,...r}=e,n=r.locate?r.locate:r.keyName?t:void 0,i=r.locate?t:r.keyName||t;return o("action",{name:"KeyboardPress",params:{...r,...i?{keyName:i}:{},...n?{locate:sS(n,r)}:{}}})}if("aiScroll"in n){let{aiScroll:t,locate:r,...n}=e;return o("aiScroll",{prompt:r??t??void 0,options:n})}if("aiTap"in n){let t,{aiTap:r,prompt:n,locate:a,...s}=e,l=a??("object"==typeof r&&null!==r?r.locate:void 0),c=s;if("string"==typeof r&&r)t=r;else if(l&&"object"==typeof l&&l.prompt){let{prompt:e,...r}=l;t=e,c={...r,...s}}else t=r&&"object"==typeof r&&"string"==typeof r.prompt&&r.prompt?Object.hasOwn(r,"images")||Object.hasOwn(r,"convertHttpImage2Base64")?r:r.prompt:n||l;return t?o("aiTap",{prompt:t,options:c}):i("missing prompt for aiTap")}if("string"==typeof n.runAdbShell&&"number"==typeof n.timeout)return o("runAdbShell",{command:n.runAdbShell,timeout:n.timeout},!0);let a=t.find(e=>e.interfaceAlias&&Object.hasOwn(n,e.interfaceAlias)||Object.hasOwn(n,e.name));if(!a)return o("legacyAction",{flow:n},!0);let s=(null==a?void 0:a.interfaceAlias)&&Object.hasOwn(n,a.interfaceAlias)?a.interfaceAlias:a.name,l=n[s];if("string"==typeof l){var c,A;let e=(c=a.name,A=a.interfaceAlias,"Launch"===c||"launch"===A||"Terminate"===c||"terminate"===A?{uri:l}:"RunAdbShell"===c||"runAdbShell"===A||"RunHdcShell"===c||"runHdcShell"===A?{command:l}:void 0);if(e)return o("action",{name:a.name,params:e},!0);if(lb(a.paramSchema))return o("action",{name:a.name,params:l},!0)}let u="string"==typeof l?l:"",d=u?{...n,prompt:u}:l&&"object"==typeof l?l:n,{locateParam:p,restParams:h}=sI(u,d,[a.name,a.interfaceAlias??""]);return o("action",{name:a.name,params:{...h,locate:p}},!0)}let lE=e=>`legacy-yaml:${e}`,lx=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"<inline-yaml>",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=lE(r);return{caseId:`${o}:task:${t}`,projectId:"legacy-yaml",sourcePath:r,caseIndex:t,definition:{name:e.name,onFailure:e.continueOnError?"continue":"stop-document",steps:Array.isArray(e.flow)?e.flow.map(e=>lw(e,n)):[{node:"legacyValidationError",input:{message:"missing flow in task"},meta:{continueOnError:!1}}]}}},lk=(e,t)=>({documentId:lE(e),projectId:"legacy-yaml",sourcePath:e,lifecycle:{beforeAll:[],beforeEach:[],afterEach:[],afterAll:[]},cases:t}),lS=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"<inline-yaml>",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return lk(r,[lx(e,t,r,n)])},lI=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"<inline-yaml>",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=arguments.length>3?arguments[3]:void 0,o=lk(t,(e.tasks??[]).map((e,n)=>lx(e,n,t,r)));return n?{...o,documentId:n.documentId,projectId:n.projectId,cases:o.cases.map(e=>({...e,projectId:n.projectId,caseId:n.cases.find(t=>t.caseIndex===e.caseIndex).caseId}))}:o};var lC=r(64564);let lO=["default","aiAct","aiTap","aiRightClick","aiDoubleClick","aiHover","aiInput","aiKeyboardPress","aiScroll","aiPinch","aiLongPress","aiClearInput","aiLocate","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert","aiWaitFor"],lR=e=>"string"==typeof e&&lO.includes(e),lj=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"an Agent";return t=>({name:t.name??t.method,...void 0===t.title?{}:{title:t.title},...void 0===t.description?{}:{description:t.description},...void 0===t.stringInputKey?{}:{stringInputKey:t.stringInputKey},inputSchema:t.inputSchema,async execute(r,n,o){var i;if("object"!=typeof r||null===r||"function"!=typeof r[t.method])throw TypeError(`getAgent() must return ${e} with ${t.method}().`);let a=r[t.method],s=await a.apply(r,t.toArgs(n,o));return null==(i=t.toResult)?void 0:i.call(t,s,n)}})},lP=e=>lC.Yj().regex(/\S/,"value must contain a non-whitespace character").describe(e),lM=lC.re({name:lP("The name used to identify this reference image."),url:lP("The URL, data URL, or file path of this reference image.")}),lT=lC.re({prompt:lP("The natural-language prompt."),images:lC.YO(lM).min(1).optional(),convertHttpImage2Base64:lC.zM().optional().describe("Whether HTTP reference images are converted to base64 first.")}),lN=lC.KC([lP("The natural-language prompt."),lT]),lD=lC.re({effort:lC.k5(["fast","balance","deepThink"]).optional().describe("Action planning effort: fast, balanced, or deeper reasoning."),cacheable:lC.zM().optional().describe("Whether this action may use the Midscene cache."),fileChooserAccept:lC.KC([lC.Yj(),lC.YO(lC.Yj())]).optional().describe("Accepted file types for a file chooser."),fileChooserAllowedDir:lC.Yj().optional().describe("Directory allowed for prompt-driven file uploads."),deepThink:lC.KC([lC.eu("unset"),lC.zM()]).optional().describe("Whether to enable deep thinking for this action."),deepLocate:lC.zM().optional().describe("Whether to use deep element location."),context:lC.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),lz=lC.re({target:lC.k5(lO).describe("The AI API to configure, e.g. aiAct or aiAssert. Use default as the shared fallback for all AI APIs when neither the call nor the API has its own context."),context:lC.Yj().optional().describe("Agent-level guidance. Omit to remove the selected context; an empty string disables inherited context.")}),lB=lC.re({prompt:lN,options:lD.optional()}),lF=lC.re({domIncluded:lC.KC([lC.zM(),lC.eu("visible-only")]).optional().describe("How DOM information is included."),screenshotIncluded:lC.zM().optional().describe("Whether the request includes a screenshot."),context:lC.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),lL=lF.extend({keepRawResponse:lC.zM().optional().describe("Whether the Agent returns the structured assertion result.")}),lU=lC.re({prompt:lN,message:lC.Yj().optional().describe("The assertion failure message."),options:lL.optional()}),lK=lC.re({context:lC.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context."),deepLocate:lC.zM().optional().describe("Whether to use deep element location."),deepThink:lC.zM().optional().describe("Deprecated alias for deepLocate."),cacheable:lC.zM().optional().describe("Whether this location may use the Midscene cache."),xpath:lC.Yj().optional().describe("A web XPath location hint."),fileChooserAccept:lC.KC([lC.Yj(),lC.YO(lC.Yj())]).optional().describe("Files accepted when tapping opens a file chooser.")}),lZ=lC.re({prompt:lN,options:lK.optional()}),lJ=lC.re({prompt:lN,value:lC.KC([lC.Yj(),lC.ai()]),options:lK.extend({mode:lC.k5(["replace","clear","typeOnly","append"]).optional(),autoDismissKeyboard:lC.zM().optional(),keyboardTypeDelay:lC.ai().nonnegative().optional(),inputStrategy:lC.k5(ik).optional()}).optional()}),lQ=lC.re({prompt:lN.optional(),keyName:lP("The key or key combination to press."),options:lK.optional()}),lq=lC.re({prompt:lN.optional(),options:lK.extend({direction:lC.k5(["down","up","right","left"]).optional(),scrollType:lC.k5(["singleAction","scrollToBottom","scrollToTop","scrollToRight","scrollToLeft","once","untilBottom","untilTop","untilRight","untilLeft"]).optional(),distance:lC.ai().nullable().optional()}).optional()}),lX=lC.re({prompt:lN.optional(),direction:lC.k5(["in","out"]),options:lK.extend({distance:lC.ai().optional(),duration:lC.ai().nonnegative().optional()}).optional()}),lW=lC.re({prompt:lN,options:lK.extend({duration:lC.ai().nonnegative().optional()}).optional()}),lH=lC.re({from:lN,to:lN,options:lK.optional()}),lY=lC.re({prompt:lC.KC([lP("The extraction request."),lC.g1(lC.Yj(),lC.Yj())]),options:lF.optional()}),lG=lF.extend({timeoutMs:lC.ai().positive().optional(),checkIntervalMs:lC.ai().positive().optional()}).superRefine((e,t)=>{(e.checkIntervalMs??3e3)>(e.timeoutMs??15e3)&&t.addIssue({code:"custom",path:["checkIntervalMs"],message:"checkIntervalMs must not exceed timeoutMs"})}),lV=lC.re({prompt:lN,options:lG.optional()}),l$=lC.re({script:lP("JavaScript to evaluate through the current interface.")}),l_=lC.re({scenario:lP("The Gherkin scenario to execute."),options:lD.optional()}),l0=lC.re({name:lP("The ActionSpace action name, for example DragAndDrop."),params:lC.L5().optional()}),l1=lC.re({prompt:lN,options:lF.optional()}),l2=lC.re({base64:lC.Yj().min(1).describe("A base64-encoded screenshot."),description:lC.Yj().optional().describe("What the screenshot shows.")}),l3=lC.re({content:lC.Yj().optional().describe("The report text content."),screenshotBase64:lC.Yj().optional().describe("One base64-encoded screenshot."),screenshots:lC.YO(l2).min(1).optional().describe("Screenshots attached to the report section.")}).superRefine((e,t)=>{void 0!==e.screenshotBase64&&void 0!==e.screenshots&&t.addIssue({code:"custom",message:"screenshotBase64 and screenshots are mutually exclusive"})}),l5=lC.re({title:lC.Yj().optional().describe("The report section title."),options:l3.optional()}),l4=lj("an Agent"),l7=lj("an Agent"),l8=e=>"string"==typeof e?e:e.prompt,l6=e=>({data:e}),l9=l4({method:"aiAct",description:"Perform a natural-language task with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:lB,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:e=>void 0===e?void 0:{summary:e}}),ce=l4({method:"aiTap",description:"Locate and tap an element with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:lZ,toArgs:e=>[e.prompt,e.options],toResult:(e,t)=>({summary:`Tapped: ${l8(t.prompt)}`})}),ct=l4({method:"aiAssert",description:"Assert a natural-language condition with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:lU,toArgs:(e,t)=>[e.prompt,e.message,{keepRawResponse:!0,...e.options,abortSignal:t.signal}],toResult(e,t){let r={summary:`Assertion ${(null==e?void 0:e.pass)===!1?"failed":"passed"}: ${l8(t.prompt)}`,...void 0===e?{}:{data:{pass:e.pass,...void 0===e.thought?{}:{thought:e.thought},...void 0===e.message?{}:{message:e.message}}}};if((null==e?void 0:e.pass)===!1)throw new sq.h2("aiAssert",Error(e.message||t.message||e.thought||`Assertion failed: ${l8(t.prompt)}`),r);return r}}),cr=e=>l7({method:e,description:{aiHover:"Locate and hover over an element with a Midscene UI Agent.",aiDoubleClick:"Locate and double-click an element with a Midscene UI Agent.",aiRightClick:"Locate and right-click an element with a Midscene UI Agent.",aiClearInput:"Locate an input element and clear its value with a Midscene UI Agent."}[e],stringInputKey:"prompt",inputSchema:lZ,toArgs:e=>[e.prompt,e.options],toResult:(t,r)=>({summary:`${e}: ${l8(r.prompt)}`})}),cn=[l7({method:"setAIContext",description:"Set or remove Agent-level AI guidance for subsequent calls on the same Agent.",inputSchema:lz,toArgs:e=>[e.target,e.context]}),cr("aiHover"),cr("aiDoubleClick"),cr("aiRightClick"),cr("aiClearInput"),l7({method:"aiInput",description:"Locate an input element and enter a value with a Midscene UI Agent.",inputSchema:lJ,toArgs:e=>[e.prompt,{...e.options,value:e.value}]}),l7({method:"aiKeyboardPress",description:"Press a key or key combination, optionally targeting a located element.",stringInputKey:"keyName",inputSchema:lQ,toArgs:e=>[e.prompt,{...e.options,keyName:e.keyName}]}),l7({method:"aiScroll",description:"Scroll the page or a located region with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:lq,toArgs:e=>[e.prompt,{...e.options}]}),l7({method:"aiPinch",description:"Perform a pinch-in or pinch-out gesture with a Midscene UI Agent.",inputSchema:lX,toArgs:e=>[e.prompt,{...e.options,direction:e.direction}]}),l7({method:"aiLongPress",description:"Locate and long-press an element with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:lW,toArgs:e=>[e.prompt,e.options]}),l7({method:"callActionInActionSpace",name:"aiDragAndDrop",description:"Locate source and destination elements, then drag the source to the destination.",inputSchema:lH,toArgs:e=>["DragAndDrop",{from:sS(e.from,e.options),to:sS(e.to,e.options)}]}),l7({method:"aiLocate",description:"Locate an element from a natural-language description and store the result.",stringInputKey:"prompt",inputSchema:lZ,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:l6}),l7({method:"aiQuery",description:"Extract structured data from the current interface and store the result.",stringInputKey:"prompt",inputSchema:lY,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:l6}),l7({method:"aiWaitFor",description:"Wait until a natural-language condition is satisfied.",stringInputKey:"prompt",inputSchema:lV,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}]}),l7({method:"evaluateJavaScript",name:"javascript",description:"Evaluate JavaScript in the current interface and store the result.",stringInputKey:"script",inputSchema:l$,toArgs:e=>[e.script],toResult:l6}),l7({method:"runGherkinScenario",description:"Execute a Gherkin scenario with the current Midscene UI Agent.",stringInputKey:"scenario",inputSchema:l_,toArgs:(e,t)=>[e.scenario,{...e.options,abortSignal:t.signal}]}),l7({method:"callActionInActionSpace",name:"action",description:"Call a platform or custom action. Its ActionSpace schema validates params when the action executes.",inputSchema:l0,toArgs:e=>[e.name,e.params],toResult:e=>void 0===e?void 0:l6(e)})],co=e=>l4({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:l1,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:t=>({summary:`${e} returned ${"aiString"===e||"aiAsk"===e?JSON.stringify(t):t}`,data:{value:t}})}),ci=l4({method:"recordToReport",description:"Add text or screenshots to the current Midscene report.",stringInputKey:"title",inputSchema:l5,toArgs:e=>[e.title,e.options],toResult:(e,t)=>({summary:`Recorded to report: ${t.title??"untitled"}`})}),ca=[l7({method:"sleep",description:"Wait for a fixed number of milliseconds, recording standard UI snapshots and honoring cancellation.",inputSchema:lC.re({ms:lC.ai().positive()}),toArgs(e,t){let{signal:r}=t;return r.throwIfAborted(),[e.ms,{abortSignal:r}]}}),l9,ce,ct,co("aiBoolean"),co("aiNumber"),co("aiString"),co("aiAsk"),ci,...cn],cs={name:"Finalize",inputSchema:lC.re({}),execute:()=>void 0},cl={name:"runAdbShell",inputSchema:lC.re({command:lC.Yj(),timeout:lC.ai()}),async execute(e,t){let r=t.command,n=t.timeout,o=e.runAdbShell?await e.runAdbShell(r,{timeout:n}):await e.callActionInActionSpace("RunAdbShell",{command:r,timeout:n});return void 0===o?void 0:{data:o}}},cc={name:"legacyAction",inputSchema:lC.re({flow:lC.g1(lC.Yj(),lC.L5())}),async execute(e,t,r){r.signal.throwIfAborted();let n=await e.getActionSpace();r.signal.throwIfAborted();let o=lw(t.flow,n);(0,eH.vA)("legacyAction"!==o.node,`unknown flowItem in yaml: ${JSON.stringify(t.flow)}`);let i=ch.find(e=>e.name===o.node);(0,eH.vA)(i,`Unknown Agent Node: ${o.node}`);let a=await i.inputSchema.parseAsync(o.input);return r.signal.throwIfAborted(),i.execute(e,a,r)}},cA={name:"legacyValidationError",inputSchema:lC.re({message:lC.Yj()}),execute(e,t){throw Error(t.message)}},cu=lC.re({prompt:lC.L5(),options:lC.g1(lC.Yj(),lC.L5()).optional()}),cd=new Map([...["aiAct","aiTap","aiLocate","aiQuery","aiNumber","aiString","aiBoolean","aiAsk","aiWaitFor","aiScroll"].map(e=>[e,cu]),["aiAssert",cu.extend({message:lC.L5()})],["javascript",lC.re({script:lC.L5()})],["runGherkinScenario",lC.re({scenario:lC.L5(),options:lC.g1(lC.Yj(),lC.L5()).optional()})],["sleep",lC.re({ms:lC.ai().positive()})],["action",lC.re({name:lC.Yj(),params:lC.L5()})],["recordToReport",lC.re({title:lC.L5(),options:lC.g1(lC.Yj(),lC.L5()).optional()})]]),cp=new Map(ca.map(e=>[e.name,e])),ch=[...Array.from(cd,e=>{let[t,r]=e,n=cp.get(t);return(0,eH.vA)(n,`Missing shared Agent Node for legacy YAML: ${t}`),{...n,inputSchema:r}}),cs,cl,cc,cA],cm=new Set(["aiBoolean","aiNumber","aiString","aiAsk"]),cf=(0,e0.aZ)("yaml-player"),cg=async(e,t,r,n)=>{let o=e.recordErrorToReport;if("function"==typeof o)try{await o.call(e,`YAML task failed - ${t.name}`,{error:n,content:`Step ${r} failed while running YAML task "${t.name}".`})}catch(e){cf("failed to record yaml error to report",e)}},cy=(e,t,r,n,o,i)=>{let a,s;return(0,lv.runWorkflowDocument)(e,{...i??{},isFatalError:e=>{var t;return[...e.beforeEach,...e.steps,...e.afterEach].some(e=>{var t;return sK(null==(t=e.error)?void 0:t.cause)})||((null==i||null==(t=i.isFatalError)?void 0:t.call(i,e))??!1)},onStepResult:async(e,r)=>{var n,o,a;r.meta.captureResult&&r.output&&Object.hasOwn(r.output,"data")&&await t.setResult(r.meta.resultName,(o=r.node,a=r.output,cm.has(o)?a.data.value:a.data)),await (null==i||null==(n=i.onStepResult)?void 0:n.call(i,e,r))},resolveNode:(a=new Map(ch.map(e=>[e.name,e])),s=new Map,e=>{let i=s.get(e);if(i)return i;let l=a.get(e);(0,eH.vA)(l,`Unknown Agent Node: ${e}`);let c=(0,lv.defineNode)({name:e,inputSchema:l.inputSchema,execute:e=>s$(async()=>{var i,a,s,c;e.signal.throwIfAborted(),(0,lv.admitResourceOperation)(t.agent,e.signal,!1),(0,eH.vA)("case"===e.scope,"YAML task requires a Case scope");let A=e.case.caseIndex,u=e.case.stepIndex,d=r(A);(0,eH.vA)(d,`missing YAML task at index ${A}`),(0,eH.vA)(d.flow,"missing flow in task");let p=(null==(a=t.agent.dump)||null==(i=a.executions)?void 0:i.length)??0,h=o?t.agent.addDumpUpdateListener:void 0,m="function"==typeof h?h.call(t.agent,(t,r)=>{!e.signal.aborted&&(null==r?void 0:r.id)&&e.report.addTrace({type:"midscene-execution",executionId:r.id})}):void 0,f=!0,g=()=>{f&&(f=!1,null==m||m())},y=(0,lv.trackResourceOperation)(t.agent,Promise.resolve().then(()=>(e.signal.throwIfAborted(),l.execute(t.agent,e.input,{signal:e.signal}))),e.signal),v=s0(t.agent,e.signal),b=()=>{g()};e.signal.addEventListener("abort",b,{once:!0});try{return await y}catch(o){let r=(s=t.agent,"failed"===function(e){for(let t of e)for(let e of t.tasks??[])if("failed"===function(e){let t="finished"===e.status;return"failed"===e.status||t&&(e.error||e.errorMessage)?"failed":t&&"WaitFor"===e.subType&&!1===e.output?"warning":"Assert"===e.subType&&t&&!1===e.output?"failed":"pending"===e.status?"pending":"running"===e.status?"running":"cancelled"===e.status?"cancelled":"passed"}(e))return"failed";return"passed"}(((null==(c=s.dump)?void 0:c.executions)??[]).slice(p)));throw e.signal.aborted||!n||r||await cg(t.agent,d,u,o),o}finally{e.signal.removeEventListener("abort",b),g(),v()}})});return s.set(e,c),c}),projectContext:t.agent,retry:0,resolveCaseReportScopeId:(e,t,r)=>r})},cv=e=>{var t,r,n;let o=[...(null==(t=e.run)?void 0:t.beforeEach)??[],...(null==(r=e.run)?void 0:r.steps)??[],...(null==(n=e.run)?void 0:n.afterEach)??[]].find(e=>"success"!==e.status),i=null==o?void 0:o.error;return(null==i?void 0:i.code)==="NODE_EXECUTION_ERROR"&&i.cause instanceof Error?i.cause:i??Error(`Task "${e.name}" failed`)},cb=Symbol.for("@midscene/core/yaml-player-state/v1"),cw=globalThis;cw[cb]??(cw[cb]=new WeakMap);let cE=cw[cb];function cx(e){let t=cE.get(e);if(!t)throw Error("Expected an initialized YAML ScriptPlayer.");return t}var ck=r(85409);function cS(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cI=(0,e0.aZ)("yaml-player");class cC{setResult(e,t){let r=e||this.unnamedResultIndex++;return this.result[r]&&(0,e0.aZ)("yaml-player",{console:!0})(`result key ${r} already exists, will overwrite`),this.result[r]=t,this.flushResult()}setPlayerStatus(e,t){this.status=e,this.errorInSetup=t}notifyCurrentTaskStatusChange(e){var t;let r="number"==typeof e?e:this.currentTaskIndex;if("number"!=typeof r)return;let n=this.taskStatusList[r];null==(t=this.onTaskStatusChange)||t.call(this,n)}async setTaskStatus(e,t,r){this.taskStatusList[e].status=t,r&&(this.taskStatusList[e].error=r),this.notifyCurrentTaskStatusChange(e)}setTaskIndex(e){this.currentTaskIndex=e}async flushResult(){if(this.output){let e=(0,ts.resolve)(ck.cwd(),this.output);await this.publish(e,async()=>{let t=(0,ts.dirname)(e);await (0,sC.mkdir)(t,{recursive:!0}),await (0,sC.writeFile)(e,JSON.stringify(this.result||{},void 0,2))})}}async flushUnstableLogContent(){if(this.unstableLogContent){var e;let t=null==(e=this.interfaceAgent)?void 0:e._unstableLogContent(),r=(0,ts.resolve)(ck.cwd(),this.unstableLogContent);await this.publish(r,async()=>{let e=(0,ts.dirname)(r);await (0,sC.mkdir)(e,{recursive:!0}),await (0,sC.writeFile)(r,JSON.stringify(t,null,2))})}}async publish(e,t){try{await t()}catch(r){let t=new sJ.gX("write-result",e,r);throw this.publicationErrors.push(t),t}}createRuntime(e){var t;let r;return r=(t={agent:e,actionSpace:this.actionSpace,sourcePath:this.scriptPath,setResult:(e,t)=>this.setResult(e,t)}).sourcePath??"<inline-yaml>",{waitForIdle:()=>(0,lv.waitForResourceIdle)(t.agent),runScript:(e,n)=>cy((null==n?void 0:n.document)??lI(e,r,t.actionSpace),t,t=>{var r;return null==(r=e.tasks)?void 0:r[t]},!0,!0,n),runTask:(e,n,o)=>cy(lS(e,n,r,t.actionSpace),t,()=>e,!1,!1,o)}}async playTask(e,t){let{flow:r}=e;(0,eH.vA)(r,"missing flow in task");let n=this.taskStatusList.indexOf(e),o=e.index,i=n>=0?n:"number"==typeof o&&Number.isInteger(o)?o:0,a=cx(this);a.executionResult=await this.createRuntime(t).runTask(e,i,{signal:this.abortSignal??s_(t),onStepStart:t=>{"case"===t.scope&&"steps"===t.case.phase&&(e.currentStep=t.case.stepIndex)}});let s=a.executionResult.cases[0];if(!s||"not-run"===s.status)throw Error(`Task "${e.name}" did not run.`);if("failed"===s.status)throw cv(s);this.reportFile=t.reportFile,await this.flushUnstableLogContent()}async run(){return s$(()=>this.runInContext())}async runInContext(){var e,t,r,n,o,i;let a,s,l,c,A,u,d,p,h=new Date,m=(0,eH.uR)(),f=cx(this);f.executionResult=void 0,f.executionRecord=void 0,this.publicationErrors=[];let{android:g,ios:y,harmony:v,computer:b}=this.script,w=null==(e=sE(this.script))?void 0:e.target;this.setPlayerStatus("running");let E=null,x=[];try{let{agent:e,freeFn:r}=await this.setupAgent(w||g||y||v||b);E=e,A=s2(E),x=[...r||[]],null==(t=E._prepareForTestRunner)||t.call(E),null==(c=this.abortSignal??s_(E))||c.throwIfAborted(),this.actionSpace=await E.getActionSpace();let n=E.onTaskStartTip;E.onTaskStartTip=e=>{"running"===this.status&&(this.agentStatusTip=e),null==n||n(e)},x.push({name:"restore-agent-onTaskStartTip",fn:()=>{E&&(E.onTaskStartTip=n)}})}catch(e){if(e instanceof s1)throw e;a=e,this.setPlayerStatus("error",e)}this.interfaceAgent=E;let k=lI(this.script,this.scriptPath??"<inline-yaml>",this.actionSpace),S=E&&!a?this.createRuntime(E):void 0;try{if(S&&E){f.executionResult=await S.runScript(this.script,{document:k,signal:c,createDocumentRunId:()=>m,onCaseStart:e=>{let t=e.caseIndex;return this.setTaskIndex(t),this.setTaskStatus(t,"running")},onStepStart:e=>{if("case"!==e.scope||"steps"!==e.case.phase)return;let t=this.taskStatusList[e.case.caseIndex];t&&(t.currentStep=e.case.stepIndex)},onCaseOutcome:async e=>{if("not-run"===e.status)return;let t=e.caseIndex,r=this.taskStatusList[t];if((0,eH.vA)(r,`missing YAML task at index ${t}`),this.reportFile=null==E?void 0:E.reportFile,"success"===e.status){await this.setTaskStatus(t,"done"),await this.flushUnstableLogContent();return}let n=cv(e);await this.setTaskStatus(t,"error",n)}});let e=f.executionResult.cases.some(e=>{var t;return"failed"===e.status&&(!(null==(t=this.taskStatusList[e.caseIndex])?void 0:t.continueOnError)||sK(cv(e)))});this.setPlayerStatus(e||(null==c?void 0:c.aborted)?"error":"done")}}catch(e){s=e,e instanceof sJ.CW&&(f.executionResult=e.result),this.setPlayerStatus("error",e)}this.reportFile=null==E?void 0:E.reportFile,this.agentStatusTip="";try{(null==A?void 0:A.isRoot)&&E?await (0,sz.oL)([E],()=>sQ(x),{owner:this,signal:c,onDeferredError:e=>(0,e0.aZ)("yaml-player",{console:!0})(`Deferred YAML cleanup failed: ${String(e)}`)}):await sQ(x)}catch(e){l=e,this.setPlayerStatus("error",a??s??e)}let I=new Date,C=l instanceof AggregateError?l.errors:void 0===l?[]:[l];if(d=void 0!==(r={runId:m,attemptIndex:0,script:this.script,document:k,startedAt:h,endedAt:I,execution:f.executionResult,setupError:a,executionError:s,cleanupErrors:C,aborted:(null==c?void 0:c.aborted)??!1,publicationErrors:this.publicationErrors,outputs:this.result,reportFile:null==E?void 0:E.reportFile,children:null==A?void 0:A.children}).setupError||void 0!==r.executionError||r.cleanupErrors.length>0||r.aborted||(null==(n=r.execution)?void 0:n.document.status)==="failed"||(null==(o=r.execution)?void 0:o.cases.some(e=>"success"!==e.status)),f.executionRecord=Object.freeze({runId:r.runId,attemptIndex:r.attemptIndex,sourcePath:r.document.sourcePath,projectName:r.projectName,platform:(p=r.script).android?"android":p.ios?"ios":p.harmony?"harmony":p.computer?"computer":p.interface?"interface":"web",document:r.document,status:d?"failed":"success",startedAt:r.startedAt.toISOString(),endedAt:r.endedAt.toISOString(),durationMs:Math.max(0,r.endedAt.getTime()-r.startedAt.getTime()),...r.execution?{execution:r.execution}:{},...void 0===r.setupError?{}:{setupError:r.setupError},...void 0===r.executionError?{}:{executionError:r.executionError},cleanupErrors:Object.freeze([...r.cleanupErrors]),...r.publicationErrors.length?{publicationErrors:Object.freeze([...r.publicationErrors])}:{},outputs:Object.freeze({...r.outputs}),reportPaths:Object.freeze(r.reportFile?[r.reportFile]:[]),...(null==(i=r.children)?void 0:i.length)?{children:Object.freeze([...r.children])}:{}}),!A||A.isRoot)try{let e=await ly({agent:E,record:f.executionRecord,runId:m,script:this.script,scriptPath:this.scriptPath,fallbackReportFileName:f.fallbackReportFileName});this.reportFile=e.reportFile,f.executionRecord=e.record}catch(e){u=e,this.setPlayerStatus("error",a??s??l??e),f.executionRecord=Object.freeze({...f.executionRecord,status:"failed",reportError:e})}if(null==A||A.finish(f.executionRecord),(null==E?void 0:E.destroyed)&&!sV(E))try{await E.finalizeReport()}catch(e){u=u?AggregateError([u,e],"YAML report publication failed"):e,this.setPlayerStatus("error",u),f.executionRecord=Object.freeze({...f.executionRecord,status:"failed",reportError:u})}if(u){let e=[a,s,...C,u].filter(e=>void 0!==e);throw 1===e.length?u:AggregateError(e,"YAML execution/report finalization failed")}if(s&&l)throw AggregateError([s,...C],"YAML execution and cleanup failed");if(s)throw s;if(l)throw l}constructor(e,t,r,n,o){var i;cS(this,"script",void 0),cS(this,"setupAgent",void 0),cS(this,"onTaskStatusChange",void 0),cS(this,"abortSignal",void 0),cS(this,"currentTaskIndex",void 0),cS(this,"taskStatusList",void 0),cS(this,"status",void 0),cS(this,"reportFile",void 0),cS(this,"result",void 0),cS(this,"unnamedResultIndex",void 0),cS(this,"publicationErrors",void 0),cS(this,"output",void 0),cS(this,"unstableLogContent",void 0),cS(this,"errorInSetup",void 0),cS(this,"interfaceAgent",void 0),cS(this,"agentStatusTip",void 0),cS(this,"target",void 0),cS(this,"actionSpace",void 0),cS(this,"scriptPath",void 0),this.script=e,this.setupAgent=t,this.onTaskStatusChange=r,this.abortSignal=o,this.taskStatusList=[],this.status="init",this.unnamedResultIndex=0,this.publicationErrors=[],this.interfaceAgent=null,this.actionSpace=[],this.scriptPath=n,lI(e,n),cE.set(this,{}),this.result={},this.target=(null==(i=sE(e))?void 0:i.target)||e.android||e.ios||e.harmony||e.computer||e.config;const a=function(e){var t,r,n;let o=(null==(t=sE(e))?void 0:t.target)??e.android??e.ios??e.harmony??e.computer;return{output:(null==o?void 0:o.output)??(null==(r=e.config)?void 0:r.output),unstableLogContent:(null==o?void 0:o.unstableLogContent)??(null==(n=e.config)?void 0:n.unstableLogContent)}}(e);if(eH.ht||eH.rS)this.output=void 0,cI("output is undefined in browser or worker");else if(a.output)this.output=(0,ts.resolve)(ck.cwd(),a.output),cI("setting output by config.output",this.output);else{const e=this.scriptPath?(0,ts.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,ts.join)((0,tc.ZH)("output"),`${e}-${(0,eH.uR)()}.json`),cI("setting output by script path",this.output)}eH.ht||eH.rS?this.unstableLogContent=void 0:"string"==typeof a.unstableLogContent?this.unstableLogContent=(0,ts.resolve)(ck.cwd(),a.unstableLogContent):!0===a.unstableLogContent&&(this.unstableLogContent=(0,ts.join)((0,tc.ZH)("output"),"unstableLogContent.json")),this.taskStatusList=(e.tasks||[]).map((e,t)=>{var r;return{...e,index:t,status:"init",totalSteps:(null==(r=e.flow)?void 0:r.length)||0}})}}let cO=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk"],cR=["aiAssert","aiWaitFor"];[...cO,...cR];let cj=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function cP(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!(null==e?void 0:e.paramSchema)||!("shape"in e.paramSchema))return[t.prompt||"",r];let n=e.paramSchema,o=n&&"shape"in n?Object.keys(n.shape):[],{deviceOptions:i,abortSignal:a,...s}=r,l={...s,...r.deviceOptions||{}};return o.forEach(e=>{void 0!==t[e]&&null!==t[e]&&""!==t[e]&&(l[e]=t[e])}),n&&r7(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=sS(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(l[e]=t)}}),[l]}async function cM(e,t,r,n,o){"aiAct"!==t&&"runMarkdown"!==t&&void 0!==o.deepThink&&console.warn("[Playground] Received deepThink in non-aiAct action options. deepThink is expected to be used with aiAct/runMarkdown during migration.",{actionType:t,requestId:o.requestId,options:o});let i=null==r?void 0:r.find(e=>e.interfaceAlias===t||e.name===t),a=o.abortSignal?[o.abortSignal]:[];if(i&&"function"==typeof e.callActionInActionSpace)if(n.params){let t=await cP(i,n.params,o);return await e.callActionInActionSpace(i.name,t[0],...a)}else{let t=n.prompt?sS(n.prompt,{deepLocate:o.deepLocate,cacheable:!0}):void 0,{deviceOptions:r,reportDisplay:s,abortSignal:l,...c}=o,A={locate:t,...c,...o.deviceOptions||{}};return await e.callActionInActionSpace(i.name,A,...a)}{let r=n.prompt;if("aiAssert"===t){var s;let{reportDisplay:t,...n}=o,{pass:i,thought:a}=await (null==e||null==(s=e.aiAssert)?void 0:s.call(e,r||"",void 0,{keepRawResponse:!0,...n}))||{};return{pass:i||!1,thought:a||""}}let i=function(e,t){if(!cj.has(t))return;let r=e[t];if("function"==typeof r)return async(t,n)=>r.call(e,t||"",n)}(e,t);if(i){let{reportDisplay:e,...t}=o,n=e?{...t,_internalReportDisplay:e}:t;return await i(r,n)}throw Error(`Unknown action type: ${t}`)}}let cT=(0,e0.aZ)("task-timing");function cN(e,t){if(!e)return void cT(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?cT(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}function cD(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cz=(0,e0.aZ)("task-runner");class cB{async emitSnapshotChange(e){this.onSnapshotChange&&await this.onSnapshotChange(this,e)}async emitTaskEvent(e,t){if(this.onTaskEvent)try{await this.onTaskEvent({kind:e,task:t,runner:this})}catch(e){console.error("Error in onTaskEvent listener",e)}}async getUiContext(e){var t,r,n,o;null==(t=this.abortSignal)||t.throwIfAborted();let i=Date.now();if(!(null==e?void 0:e.forceRefresh)&&this.lastUiContext&&i-this.lastUiContext.capturedAt<=300&&(null==(r=this.lastUiContext)?void 0:r.context))return cz(`reuse cached uiContext captured ${i-this.lastUiContext.capturedAt}ms ago`),null==(n=this.lastUiContext)?void 0:n.context;try{let e=await this.uiContextBuilder(this.abortSignal);return null==(o=this.abortSignal)||o.throwIfAborted(),e?this.lastUiContext={context:e,capturedAt:Date.now()}:this.lastUiContext=void 0,e}catch(e){throw this.lastUiContext=void 0,e}}async captureScreenshot(){try{let e=await this.getUiContext({forceRefresh:!0});return null==e?void 0:e.screenshot}catch(e){console.error("error while capturing screenshot",e)}}attachRecorderItem(e,t,r){if(!r||!t)return;let n={type:"screenshot",ts:Date.now(),screenshot:t,timing:r};if(!e.recorder){e.recorder=[n];return}e.recorder.push(n)}markTaskAsPending(e){return{taskId:(0,eH.uR)(),status:"pending",...e}}normalizeStatusFromError(e,t){var r,n;"error"===this.status&&((0,eH.vA)(null==e?void 0:e.allowWhenError,t||`task runner is in error state, cannot proceed
849
+ error=${null==(r=this.latestErrorTask())?void 0:r.errorMessage}
850
+ ${null==(n=this.latestErrorTask())?void 0:n.errorStack}`),this.status=this.tasks.length>0?"pending":"init")}async append(e,t){var r,n,o;null==(r=this.abortSignal)||r.throwIfAborted(),this.normalizeStatusFromError(t,`task runner is in error state, cannot append task
851
+ error=${null==(n=this.latestErrorTask())?void 0:n.errorMessage}
852
+ ${null==(o=this.latestErrorTask())?void 0:o.errorStack}`);let i=[];for(let t of(Array.isArray(e)?i.push(...e.map(e=>this.markTaskAsPending(e))):i.push(this.markTaskAsPending(e)),this.tasks.push(...i),"running"!==this.status&&(this.status="pending"),await this.emitSnapshotChange(),i))await this.emitTaskEvent("append",t)}async appendAndFlush(e,t){return await this.append(e,t),this.flush(t)}async flush(e){var t,r,n,o,i,a,s,l;let c,A;"init"===this.status&&this.tasks.length>0&&console.warn("illegal state for task runner, status is init but tasks are not empty"),this.normalizeStatusFromError(e,"task runner is in error state"),(0,eH.vA)("running"!==this.status,"task runner is already running"),(0,eH.vA)("completed"!==this.status,"task runner is already completed");let u=this.tasks.findIndex(e=>"pending"===e.status);if(u<0)return;this.status="running",await this.emitSnapshotChange();let d=u,p=!0;for(;d<this.tasks.length;){let e=this.tasks[d];(0,eH.vA)("pending"===e.status,`task status should be pending, but got: ${e.status}`);let l=!1;try{let A;null==(t=this.abortSignal)||t.throwIfAborted(),l=!0,e.timing={start:Date.now()},e.status="running",await this.emitSnapshotChange(),await this.emitTaskEvent("start",e),null==(r=this.abortSignal)||r.throwIfAborted();try{this.onTaskStart&&await this.onTaskStart(e,this.abortSignal)}catch(e){console.error("error in onTaskStart",e)}null==(n=this.abortSignal)||n.throwIfAborted(),(0,eH.vA)(["Insight","Action Space","Planning"].indexOf(e.type)>=0,`unsupported task type: ${e.type}`);let{executor:u}=e;(0,eH.vA)(u,`executor is required for task type: ${e.type}`);let p="Insight"===e.type;cN(e.timing,"getUiContextStart");let h=await this.getUiContext({forceRefresh:p});cN(e.timing,"getUiContextEnd"),null==(o=this.abortSignal)||o.throwIfAborted(),e.uiContext=h;let m={task:e,element:null==c?void 0:c.element,uiContext:h,signal:this.abortSignal};if("Insight"===e.type)(0,eH.vA)("Query"===e.subType||"Assert"===e.subType||"WaitFor"===e.subType||"Boolean"===e.subType||"Number"===e.subType||"String"===e.subType,`unsupported service subType: ${e.subType}`),A=await e.executor(m);else if("Planning"===e.type)A=await e.executor(m),"Locate"===e.subType&&(c=null==A?void 0:A.output);else if("Action Space"===e.type)try{A=await e.executor(m)}finally{this.lastUiContext=void 0}else console.warn(`unsupported task type: ${e.type}, will try to execute it directly`),A=await e.executor(m);if(null==(i=this.abortSignal)||i.throwIfAborted(),d===this.tasks.length-1){cN(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();null==(s=this.abortSignal)||s.throwIfAborted(),this.attachRecorderItem(e,t,"after-calling"),cN(e.timing,"captureAfterCallingSnapshotEnd")}null==(a=this.abortSignal)||a.throwIfAborted(),Object.assign(e,A),e.status="finished",e.timing.end=Date.now(),e.timing.cost=e.timing.end-e.timing.start,await this.emitSnapshotChange(),await this.emitTaskEvent("finish",e),d++}catch(r){p=!1;let t=sD(r);e.error=t,e.errorMessage=t.message,e.errorStack=t.stack,e.status=l?"failed":"cancelled",l&&e.timing&&(e.timing.end=Date.now(),e.timing.cost=e.timing.end-e.timing.start),await this.emitSnapshotChange(),await this.emitTaskEvent(l?"error":"cancel",e);break}}let h=[];for(let e=d+1;e<this.tasks.length;e++)this.tasks[e].status="cancelled",h.push(this.tasks[e]);if(h.length>0)for(let e of(await this.emitSnapshotChange(),h))await this.emitTaskEvent("cancel",e);if(p)this.status="completed",await this.emitSnapshotChange();else{this.status="error";let e=this.latestErrorTask();A=new cF((null==e?void 0:e.error)??((null==(l=this.abortSignal)?void 0:l.aborted)?sD(this.abortSignal.reason):{name:"Error",message:"Task execution failed"}),function(e){if(e)return{taskId:sM(e.taskId),type:e.type,...void 0===e.subType?{}:{subType:sM(e.subType)},status:e.status,...void 0===e.thought?{}:{thought:sM(e.thought)},...void 0===e.errorMessage?{}:{errorMessage:sM(e.errorMessage)}}}(e)),await this.emitSnapshotChange(A)}if(A)throw A;if(this.tasks.length){let e=Math.min(d,this.tasks.length-1),{thought:t,output:r}=this.tasks[e];return{thought:t,output:r}}}isInErrorState(){return"error"===this.status}latestErrorTask(){if("error"!==this.status)return null;for(let e=this.tasks.length-1;e>=0;e--)if("failed"===this.tasks[e].status)return this.tasks[e];return null}dump(){return new aY({id:this.id,logTime:this.executionLogTime,name:this.name,tasks:this.tasks},{referenceImageUrls:[...this.referenceImageUrls]})}async appendErrorPlan(e){return await this.appendAndFlush({type:"Action Space",subType:"Error",param:{thought:e},thought:e,executor:async()=>{throw Error(e||"error without thought")}}),{output:void 0,runner:this}}constructor(e,t,r){for(const n of(cD(this,"id",void 0),cD(this,"name",void 0),cD(this,"tasks",void 0),cD(this,"status",void 0),cD(this,"onTaskStart",void 0),cD(this,"uiContextBuilder",void 0),cD(this,"abortSignal",void 0),cD(this,"onSnapshotChange",void 0),cD(this,"onTaskEvent",void 0),cD(this,"executionLogTime",void 0),cD(this,"referenceImageUrls",new Set),cD(this,"lastUiContext",void 0),this.id=(0,eH.uR)(),this.status=(null==r?void 0:r.tasks)&&r.tasks.length>0?"pending":"init",this.name=e,this.tasks=((null==r?void 0:r.tasks)||[]).map(e=>this.markTaskAsPending(e)),this.onTaskStart=null==r?void 0:r.onTaskStart,this.uiContextBuilder=t,this.abortSignal=null==r?void 0:r.abortSignal,this.onSnapshotChange=null==r?void 0:r.onSnapshotChange,this.onTaskEvent=null==r?void 0:r.onTaskEvent,this.executionLogTime=Date.now(),(null==r?void 0:r.referenceImages)??[]))this.referenceImageUrls.add(n.url)}}class cF extends Error{toJSON(){return{name:this.name,code:this.code,message:this.message,...void 0===this.stack?{}:{stack:this.stack},cause:this.cause,...void 0===this.task?{}:{task:this.task}}}constructor(e,t){super(e.message,{cause:e}),cD(this,"code","TASK_EXECUTION_FAILED"),cD(this,"cause",void 0),cD(this,"task",void 0),this.name="TaskExecutionError",this.cause=e,this.task=t,this.stack&&(this.stack=sM(this.stack))}}var cL=r(58973);let cU=Symbol("midscene.observationArtifactAdapter");var cK=r(9140);function cZ(e,t){if(!Number.isFinite(e.width)||!Number.isFinite(e.height))throw Error(`Invalid ${t}: width and height must be finite numbers. Received width: ${e.width}, height: ${e.height}`);if(e.width<=0||e.height<=0)throw Error(`Invalid ${t}: width and height must be positive numbers. Received width: ${e.width}, height: ${e.height}`)}async function cJ(e,t){let r=(null==t?void 0:t.shrinkFactor)??1;if(!Number.isFinite(r)||r<1)throw Error(`Invalid screenshotShrinkFactor: must be a finite number >= 1. Received: ${r}`);let n=await nV(e);cZ(n,"screenshot dimensions");let o=r>1?{width:Math.round(n.width/r),height:Math.round(n.height/r)}:{...n};return cZ(o,"prepared screenshot dimensions"),{base64:await oe(e,{sourceSize:n,targetSize:o,jpegQuality:90}),originalSize:n,shotSize:o}}async function cQ(e,t){return 1===((null==t?void 0:t.shrinkFactor)??1)?n9(e,90):(await cJ(e,t)).base64}var cq=r(88586),cX=r.n(cq),cW=r(8963).Buffer;function cH(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cY=(0,e0.aZ)("cache"),cG=(0,e0.aZ)("cache",{console:!0}),cV=".cache.yaml";class c${matchCache(e,t){if(!this.isCacheResultUsed)return;let r=this.promptKey(e);for(let n=0;n<this.cacheOriginalLength;n++){let o=this.cache.caches[n],i=`${t}:${r}:${n}`;if(o.type===t&&(0,tV.isDeepStrictEqual)(o.prompt,e)&&!this.matchedCacheIndices.has(i)){"locate"===o.type&&(!o.cache&&Array.isArray(o.xpaths)&&(o.cache={xpaths:o.xpaths}),"xpaths"in o&&(o.xpaths=void 0)),this.matchedCacheIndices.add(i);let a=`${t}:${r}`,s=this.consumedCacheIndices.get(a)??[];return s.push(n),this.consumedCacheIndices.set(a,s),cY("cache found and marked as used, type: %s, prompt: %s, index: %d",t,e,n),{cacheContent:o,cacheUsable:!0,updateFn:r=>{(cY("will call updateFn to update cache, type: %s, prompt: %s, index: %d",t,e,n),r(o),this.readOnlyMode)?cY("read-only mode, cache updated in memory but not flushed to file"):(cY("cache updated, will flush to file, type: %s, prompt: %s, index: %d",t,e,n),this.flushCacheToFile())}}}}cY("no unused cache found, type: %s, prompt: %s",t,e)}matchPlanCache(e){let t=this.matchCache(e,"plan");if(!t)return;let r=t.cacheContent.yamlWorkflow;if(!(null==r?void 0:r.trim()))return cY("plan cache matched but yamlWorkflow is empty, treat as cache miss"),{...t,cacheUsable:!1};try{var n;let e=iT.Ay.load(r);if(!(null==e||null==(n=e.tasks)?void 0:n.some(e=>Array.isArray(e.flow)&&e.flow.length>0)))return cY("plan cache matched but flow is empty, treat as cache miss"),{...t,cacheUsable:!1}}catch{return cY("plan cache matched but yamlWorkflow is invalid, treat as cache miss"),{...t,cacheUsable:!1}}return t}matchLocateCache(e){return this.matchCache(e,"locate")}appendCache(e){(cY("will append cache",e),this.cache.caches.push(e),this.readOnlyMode)?cY("read-only mode, cache appended to memory but not flushed to file"):this.flushCacheToFile()}loadCacheFromFile(){let e=this.cacheFilePath;if(nU()(e,"cache file path is required"),!(0,cK.existsSync)(e))return void cY("no cache file found, path: %s",e);let t=e.replace(cV,".json");if((0,cK.existsSync)(t)&&this.isCacheResultUsed)return void console.warn(`An outdated cache file from an earlier version of Midscene has been detected. Since version 0.17, we have implemented an improved caching strategy. Please delete the old file located at: ${t}.`);try{let t=(0,cK.readFileSync)(e,"utf8"),r=iT.Ay.load(t);if(!c6())return void cY("no midscene version info, will not read cache from file");if(cX().lt(r.midsceneVersion,"0.16.10")&&!r.midsceneVersion.includes("beta"))return void console.warn(`You are using an old version of Midscene cache file, and we cannot match any info from it. Starting from Midscene v0.17, we changed our strategy to use xpath for cache info, providing better performance.
853
+ Please delete the existing cache and rebuild it. Sorry for the inconvenience.
854
+ cache file: ${e}`);return cY("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion=c6(),r}catch(t){cY("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!c6())return void cY("no midscene version info, will not write cache to file");if(!this.cacheFilePath)return void cY("no cache file path, will not write cache to file");if(null==e?void 0:e.cleanUnused)if(this.isCacheResultUsed){let e=this.cache.caches.length,t=new Set;for(let e of this.matchedCacheIndices){let r=e.split(":"),n=Number.parseInt(r[r.length-1],10);Number.isNaN(n)||t.add(n)}this.cache.caches=this.cache.caches.filter((e,r)=>{let n=t.has(r),o=r>=this.cacheOriginalLength;return n||o});let r=e-this.cache.caches.length;r>0?cY("cleaned %d unused cache record(s)",r):cY("no unused cache to clean")}else cY("skip cleaning: cache is not used for reading");try{let e=(0,ts.dirname)(this.cacheFilePath);(0,cK.existsSync)(e)||((0,cK.mkdirSync)(e,{recursive:!0}),cY("created cache directory: %s",e));let t=[...this.cache.caches].sort((e,t)=>"plan"===e.type&&"locate"===t.type?-1:+("locate"===e.type&&"plan"===t.type)),r={...this.cache,caches:t},n=iT.Ay.dump(r,{lineWidth:-1});(0,cK.writeFileSync)(this.cacheFilePath,n),cY("cache flushed to file: %s",this.cacheFilePath)}catch(e){cG(`write cache to file failed, path: ${this.cacheFilePath}, error: ${e}`)}}promptKey(e){return"string"==typeof e?e:JSON.stringify(e)}applyRecordInto(e,t){"plan"===t.type?e.yamlWorkflow=t.yamlWorkflow:(e.cache=t.cache,"xpaths"in e&&(e.xpaths=void 0))}updateOrAppendCacheRecord(e,t){if(t)t.updateFn(t=>{this.applyRecordInto(t,e)});else{var r;let t=`${e.type}:${this.promptKey(e.prompt)}`,n=null==(r=this.staleCacheIndices.get(t))?void 0:r.pop();void 0!==n&&this.cache.caches[n]?(cY("replacing stale cache entry in place, type: %s, prompt: %s, index: %d",e.type,e.prompt,n),this.replaceCacheRecord(n,e)):this.appendCache(e)}}markLocateCacheStale(e){var t;let r=`locate:${this.promptKey(e)}`,n=null==(t=this.consumedCacheIndices.get(r))?void 0:t.pop();if(void 0===n)return;let o=this.staleCacheIndices.get(r)??[];o.push(n),this.staleCacheIndices.set(r,o),cY("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(nU()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?cY("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var o;let i;if(cH(this,"cacheId",void 0),cH(this,"cacheFilePath",void 0),cH(this,"cache",void 0),cH(this,"isCacheResultUsed",void 0),cH(this,"cacheOriginalLength",void 0),cH(this,"readOnlyMode",void 0),cH(this,"writeOnlyMode",void 0),cH(this,"matchedCacheIndices",new Set),cH(this,"consumedCacheIndices",new Map),cH(this,"staleCacheIndices",new Map),nU()(e,"cacheId is required"),void 0!==n.cacheDir&&("string"!=typeof n.cacheDir||!n.cacheDir.trim()))throw Error("cacheDir must be a non-empty string when provided");const a=null==(o=n.cacheDir)?void 0:o.trim();let s=(0,eH.gV)(e);const l=tq.getEnvConfigValueAsNumber(tu.YK)??200;if(cW.byteLength(s,"utf8")>l){const e=s.slice(0,32),t=(0,eH.tD)(void 0,s);s=`${e}-${t}`}this.cacheId=s,this.cacheFilePath=eH.ht||eH.rS?void 0:r||(0,ts.join)(a||(0,tc.ZH)("cache"),`${this.cacheId}${cV}`);const c=!!(null==n?void 0:n.readOnly),A=!!(null==n?void 0:n.writeOnly);if(c&&A)throw Error("TaskCache cannot be both read-only and write-only");this.isCacheResultUsed=!A&&t,this.readOnlyMode=c,this.writeOnlyMode=A,this.cacheFilePath&&!this.writeOnlyMode&&(i=this.loadCacheFromFile()),i||(i={midsceneVersion:c6(),cacheId:this.cacheId,caches:[]}),this.cache=i,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}var c_=r(59300),c0=r.n(c_);function c1(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=tq.getEnvConfigValue(tu.ho),r=c0()().format("YYYY-MM-DD_HH-mm-ss"),n=(0,eH.uR)().substring(0,8);return`${t||e}-${r}-${n}`}var c2=r(85409);(0,e0.aZ)("agent");let c3={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function c5(e,t){var r;let n=(0,e0.aZ)("commonContextParser");(0,eH.vA)(e,"interfaceInstance is required"),n("Getting interface description");let o=(null==(r=e.describe)?void 0:r.call(e))||"";n("Interface description end"),n("Uploading test info to server"),re({testUrl:o,serverUrl:t.uploadServerUrl}),n("UploadTestInfoToServer end"),n("will get size");let i=await e.size(),{width:a,height:s}=i;if(i.dpr&&console.warn("Warning: return value of interface.size() include a dpr property, which is not expected and ignored. "),!Number.isFinite(a)||!Number.isFinite(s))throw Error(`Invalid interface size: width and height must be finite numbers. Received width: ${a}, height: ${s}`);if(a<=0||s<=0)throw Error(`Invalid interface size: width and height must be positive numbers. Received width: ${a}, height: ${s}`);n(`size: ${a}x${s}`);let l=await e.screenshotBase64(),c=Date.now();(0,eH.vA)(l,"screenshotBase64 is required");let A=t.screenshotShrinkFactor??1;n("will get screenshot dimensions");let u=await cJ(l,{shrinkFactor:A}),{width:d,height:p}=u.originalSize;n("screenshot dimensions",d,"x",p);let h=a<s,m=d<p,f=a;h!==m&&(n(`Orientation mismatch detected: logical size ${a}x${s} (${h?"portrait":"landscape"}) vs screenshot ${d}x${p} (${m?"portrait":"landscape"}). Swapping logical dimensions.`),f=s);let g=d/f;n("calculated dpr:",g);let y=g/A;return n("shrunkShotToLogicalRatio",y),A>1&&n(`Applied screenshot shrink factor: ${A} (physical: ${d}x${p} -> target: ${u.shotSize.width}x${u.shotSize.height})`),{shotSize:u.shotSize,deprecatedDpr:g,screenshot:nF.create(u.base64,c),shrunkShotToLogicalRatio:y}}function c4(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fileExists:r=cK.existsSync,isInBrowser:n=eH.ht,resolvePath:o=ts.resolve,wslDistroName:i=c2.env.WSL_DISTRO_NAME,cwd:a=c2.cwd()}=t;if(n)throw Error("File chooser is not supported in browser environment");return e.map(e=>{let t=o(e);if(!r(t))throw Error(`File not found: ${e}. Resolved to: ${t}. Current working directory: ${a}`);if(!i)return t;let n=t.match(/^\/mnt\/([a-z])\//);return n?`${n[1].toUpperCase()}:\\${t.slice(7).replace(/\//g,"\\")}`:`\\\\wsl$\\${i}${t.replace(/\//g,"\\")}`})}function c7(e){let t=e.locatedPixelResult;if(!t||"object"!=typeof t||!("center"in t))return!1;let r=t.center;return Array.isArray(r)&&2===r.length&&r.every(e=>"number"==typeof e&&Number.isFinite(e))}async function c8(e,t,r,n){var o;if(t){if(!1===n)return void cY("cache disabled for prompt: %s",r);if(null==(o=e.taskCache)?void 0:o.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void cY("interface does not implement rectMatchesCacheFeature, skip cache");try{let n=await e.interfaceInstance.rectMatchesCacheFeature(t),o={center:[n.left+n.width/2,n.top+n.height/2],rect:n,description:"string"==typeof r?r:r.prompt||""};return cY("cache hit, prompt: %s",r),o}catch(e){cY("rectMatchesCacheFeature error: %s",e);return}}}}let c6=()=>"1.16.1",c9=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0},Ae=(e,t)=>1===t?e:{...e,center:[e.center[0]*t,e.center[1]*t],...e.rect?{rect:At(e.rect,t)}:{}},At=(e,t)=>1===t?e:{...e,left:Math.round(e.left*t),top:Math.round(e.top*t),width:Math.round(e.width*t),height:Math.round(e.height*t)};function Ar(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let An=(0,e0.aZ)("agent",{console:!0});class Ao{get opts(){return this.context.getOptions()}get dump(){return this.reportState.dump}set dump(e){this.reportState.dump=e}get reportFile(){return this.reportState.file}set reportFile(e){this.reportState.file=e}get reportFileName(){return this.reportState.fileName}set reportFileName(e){this.reportState.fileName=e}_prepareForTestRunner(){var e,t;null==(e=(t=this.reportState.generator).enableSourceSnapshots)||e.call(t)}async _createReportSource(e,t){var r,n;return null==(r=(n=this.reportState.generator).createSourceSnapshot)?void 0:r.call(n,e,t)}async _writeYamlExecutionReport(e){let t=this.reportState,r=t.yamlRecords.findIndex(t=>t.runId===e.runId),n=r<0?t.yamlRecords.length:r;t.yamlRecords[n]=e;try{var o,i;let e=await (null==(o=(i=t.generator).writeRunnerReport)?void 0:o.call(i,this.buildYamlReportInput(),t.yamlScopeId,this.getReportMeta()));return t.file=e??t.file,e}catch(r){throw t.yamlRecords[n]=Object.freeze({...e,status:"failed",reportError:r}),r}}buildYamlReportInput(){return lg(this.reportState.yamlRecords.map(e=>({...e,...e.execution?{execution:{document:{...e.execution.document,reportScopeId:this.reportState.yamlScopeId},cases:e.execution.cases.map(e=>({...e,...e.run?{run:{...e.run,reportScopeId:this.reportState.yamlScopeId}}:{},...e.attempts?{attempts:e.attempts.map(e=>({...e,reportScopeId:this.reportState.yamlScopeId}))}:{}}))}}:{}})),{runId:this.reportState.yamlScopeId})}createEmptyDump(){return new aG({sdkVersion:t7(),groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[],modelBriefs:[],deviceType:this.context.getDeviceType()})}createReportState(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{dump:this.createEmptyDump(),fileName:e,generator:lp.create(e,{generateReport:this.opts.generateReport,persistExecutionDump:this.opts.persistExecutionDump,outputFormat:this.opts.outputFormat,autoPrintReportMsg:this.opts.autoPrintReportMsg,reuseExistingReport:t}),executionIndexByRunner:new WeakMap,yamlScopeId:(0,eH.uR)(),yamlRecords:[],activeOperations:new Set}}clearDumpInMemory(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.reportState;e.dump=this.createEmptyDump(),e.executionIndexByRunner=new WeakMap,e.lastExecution=void 0,e.yamlRecords.length=0}assertReportIdle(){(0,eH.vA)(!this.reportState.activeOperations.size&&!this.context.isExternallyBusy(),"Cannot reset or finalize a report while the Agent is executing. Await the active operation first.")}assertReportWritable(){let e=this.reportState;return(0,eH.vA)(!this.context.isDestroyed(),"Cannot execute using a destroyed Agent."),(0,eH.vA)(!this.reportReset,"Report reset is in progress. Await resetDump() first."),(0,eH.vA)(!e.finalization,"The report has been finalized. Call and await resetDump() before executing again."),e}async withReportOperation(e){let t=this.assertReportWritable(),r=Promise.resolve().then(e);t.activeOperations.add(r);try{return await r}finally{t.activeOperations.delete(r)}}async resetDump(){if((0,eH.vA)(!this.context.isDestroyed(),"Cannot reset a report using a destroyed Agent."),this.reportReset)return this.reportReset;this.assertReportIdle(),this.reportReset=(async()=>{try{await this.finalizeReport()}catch(e){An(`Failed to finalize previous report; resetting dump: ${String(e)}`)}(0,eH.vA)(!this.context.isDestroyed(),"Cannot reset a report using a destroyed Agent.");let e=c1(this.opts.testId||this.context.getDeviceType()||"web");return this.reportState=this.createReportState(e),this.dump})();try{return await this.reportReset}finally{this.reportReset=void 0}}async finalizeReport(){let e=this.reportState;return e.finalization||(this.assertReportIdle(),e.finalization=(async()=>{await e.generator.flush();let t=await e.generator.finalize();return e.file=t,this.clearDumpInMemory(e),t})()),e.finalization}appendExecutionDump(e,t){(0,eH.vA)(!this.reportState.finalization,"Cannot append to a finalized report. Await resetDump() first.");let r=this.dump;if(t){let n=this.reportState.executionIndexByRunner.get(t);if(void 0!==n){r.executions[n]=e;return}r.executions.push(e),this.reportState.executionIndexByRunner.set(t,r.executions.length-1);return}r.executions.push(e)}dumpDataString(e){return(this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,eH.ht||(null==e?void 0:e.inlineScreenshots))?this.dump.serializeWithInlineScreenshots():this.dump.serialize()}reportHTMLString(e){if(t$)return"";let t=e();if(!this.reportState.yamlRecords.length)return t4(t);let r=this.reportState.yamlScopeId,n=ll(this.buildYamlReportInput(),this.dump,{reportId:r,scopeId:this.reportState.yamlScopeId,sourcePath:this.reportFile??"<inline-agent-report>"});return`${t4({dumpString:t,attributes:{"data-group-id":r,"data-report-id":r}})}
855
+ ${ng(n)}`}writeOutActionDumps(e){let t=this.reportState;if(t.finalization){if(e)throw new sq.s8("Cannot append to a finalized report. Await resetDump() first.",{code:"REPORT_FINALIZED"});return}let r=e||t.lastExecution;r&&(t.lastExecution=r,t.generator.onExecutionUpdate(r,this.getReportMeta(),this.opts.reportAttributes)),t.file=t.generator.getReportPath()}async flushReport(){this.reportReset&&await this.reportReset;let e=this.reportState;return e.finalization?e.finalization:(this.writeOutActionDumps(),await e.generator.flush(),e.lastExecution?e.file??void 0:void 0)}getReportMeta(){return{groupName:this.dump.groupName,groupDescription:this.dump.groupDescription,sdkVersion:this.dump.sdkVersion,modelBriefs:this.dump.modelBriefs,deviceType:this.dump.deviceType}}get onDumpUpdate(){return this.dumpUpdateListeners[0]}set onDumpUpdate(e){this.dumpUpdateListeners=[],e&&this.dumpUpdateListeners.push(e)}addDumpUpdateListener(e){return this.dumpUpdateListeners.push(e),()=>{this.removeDumpUpdateListener(e)}}removeDumpUpdateListener(e){let t=this.dumpUpdateListeners.indexOf(e);t>-1&&this.dumpUpdateListeners.splice(t,1)}clearDumpUpdateListeners(){this.dumpUpdateListeners=[]}notifyDumpUpdateListeners(e){let t=this.dumpDataString();for(let r of this.dumpUpdateListeners)try{r(t,e)}catch(e){console.error("Error in onDumpUpdate listener",e)}}bindRunner(e){this.reportByRunner.set(e,this.reportState)}assertRunnerCurrent(e){let t=this.reportByRunner.get(e);(0,eH.vA)(t===this.reportState&&!t.finalization,"Cannot write a late execution update into a different or finalized report.")}async flushPendingWrites(){await this.reportState.generator.flush()}async waitForOperations(){for(;this.reportState.activeOperations.size;)await Promise.allSettled([...this.reportState.activeOperations])}async waitForReset(){this.reportReset&&await this.reportReset.catch(()=>{})}constructor(e){var t;Ar(this,"context",void 0),Ar(this,"reportState",void 0),Ar(this,"reportReset",void 0),Ar(this,"reportByRunner",void 0),Ar(this,"dumpUpdateListeners",void 0),this.context=e,this.reportByRunner=new WeakMap,this.dumpUpdateListeners=[];const r=this.opts,n=r.reportFileName??c1(r.testId||e.getDeviceType()||"web");this.reportState=this.createReportState(n,(null==(t=r.reportAttributes)?void 0:t["data-group-id"])===n)}}let Ai=["read-only","read-write","write-only"],Aa=Ai.map(e=>`"${e}"`).join(", ");function As(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class Al{async register(e){await this.replaceAcceptedFiles(c4(Array.isArray(e)?e:[e]))}async registerFromAllowedDir(e,t){let r;await this.replaceAcceptedFiles((r=(0,ts.resolve)(t),c4((Array.isArray(e)?e:[e]).map(e=>{let t=(0,ts.resolve)(r,e),n=(0,ts.relative)(r,t);if(".."===n||n.startsWith(`..${ts.sep}`)||(0,ts.isAbsolute)(n))throw Error(`File chooser path must be inside the configured fileChooserAllowedDir: ${e}`);return t}))))}async replaceAcceptedFiles(e){let t=await this.clear();if(t)throw t;if(e.length){if(!this.interfaceInstance.registerFileChooserListener)throw Error(`File upload is not supported on ${this.interfaceInstance.interfaceType}`);this.registration=await this.interfaceInstance.registerFileChooserListener(async t=>{await t.accept(e)})}}async clear(){let e=this.registration;if(this.registration=void 0,e)try{return await e.getError()}finally{e.dispose()}}constructor(e){As(this,"interfaceInstance",void 0),As(this,"registration",void 0),this.interfaceInstance=e}}async function Ac(e,t,r){if(!(null==t?void 0:t.length))return r();if(!e.registerFileChooserListener)throw Error(`File upload is not supported on ${e.interfaceType}`);let n=async e=>{await e.accept(t)},{dispose:o,getError:i}=await e.registerFileChooserListener(n);try{let e=await r(),t=await i();if(t)throw t;return e}finally{o()}}class AA{async append(e,t){await this.runner.append(e,t)}async appendAndRun(e,t){return this.runner.appendAndFlush(e,t)}async run(e){return this.runner.flush(e)}isInErrorState(){return this.runner.isInErrorState()}latestErrorTask(){return this.runner.latestErrorTask()}appendErrorPlan(e){return this.runner.appendErrorPlan(e)}getRunner(){return this.runner}constructor(e,t,r){!function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}(this,"runner",void 0),this.runner=new cB(e,t,r)}}function Au(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let Ad=(0,e0.aZ)("agent-progress-bus",{console:!0});class Ap{subscribe(e){return this.listeners.push(e),()=>{this.unsubscribe(e)}}unsubscribe(e){let t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}clear(){this.listeners=[]}get listenerCount(){return this.listeners.length}constructor(){Au(this,"listeners",[]),Au(this,"sequence",0),Au(this,"publish",async(e,t,r)=>{let n={scope:e,phase:t,sequence:++this.sequence,data:r};for(let e of this.listeners)try{await e(n)}catch(e){Ad("error in progress listener",e)}})}}function Ah(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Am(e){return null==e?e:"string"==typeof e?e.length>180?`${e.slice(0,177)}...`:e:"number"==typeof e||"boolean"==typeof e?e:Array.isArray(e)?e.slice(0,5).map(Am):Ah(e)&&"string"==typeof e.prompt?Am(e.prompt):Ah(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,Am(r)]})):String(e)}function Af(e){return e instanceof Error?e.message:String(e)}function Ag(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function Ay(e){let t=e.center;if(Array.isArray(t)&&t.length>=2){let e=Ag(t[0]),r=Ag(t[1]);if(void 0!==e&&void 0!==r)return[e,r]}}function Av(e){return!!Ah(e)&&("locatedPixelResult"in e||"center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let Ab=["locate","from","to","start","end"],Aw=(0,e0.aZ)("agent:usage-intent",{console:!0});function AE(e,t){if(e)return e.intent?(Aw(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}function Ax(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let Ak=(0,e0.aZ)("agent:task-builder");function AS(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function AI(e){if("string"==typeof e)return{prompt:e};let{deepThink:t,...r}=e,n=r.deepLocate??t;return void 0===n?r:{...r,deepLocate:n}}function AC(e){return{type:"Locate",param:AI(e),thought:""}}class AO{async build(e,t,r,n){let o=[],i={tasks:o,planningModel:t,locateModel:r,cacheable:null==n?void 0:n.cacheable,multimodalPrompt:null==n?void 0:n.multimodalPrompt,deepLocate:null==n?void 0:n.deepLocate,abortSignal:null==n?void 0:n.abortSignal},a=new Map([["Locate",e=>this.handleLocatePlan(e,i)],["Finished",e=>this.handleFinishedPlan(e,i)]]),s=e=>this.handleActionPlan(e,i);for(let t of e){var l;null==(l=i.abortSignal)||l.throwIfAborted();let e=a.get(t.type)??s;await e(t)}return{tasks:o}}handleFinishedPlan(e,t){let r={type:"Action Space",subType:"Finished",param:null,thought:e.thought,executor:async()=>{}};t.tasks.push(r)}async handleLocatePlan(e,t){let r=this.createLocateTask(e,e.param,t);t.tasks.push(r)}async handleActionPlan(e,t){let r=e.type,n=rG(r,this.actionSpace),o=e.param,i=r7(n.paramSchema);r8(o,n.paramSchema),i.forEach(e=>{if(null==o?void 0:o[e]){let n=AC(o[e]);Ak("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(o[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelResult=${c7(o[e])}`);let i=this.createLocateTask(n,o[e],t,t=>{o[e]=t});t.tasks.push(i)}else Ak(`field '${e}' is not provided for action ${r}`)});let a={type:"Action Space",subType:r,thought:e.thought,param:e.param,planningFeedbackMaxLength:n.planningFeedbackMaxLength,executor:async e=>{var i,a,s,l,c,A,u;let d=t.abortSignal??e.signal,p=e.task.timing;Ak("executing action",r,o,`taskContext.element.center: ${null==(i=e.element)?void 0:i.center}`);let h=e.uiContext;(0,eH.vA)(h,"uiContext is required for Action task"),r8(o,n.paramSchema);let{shrunkShotToLogicalRatio:m}=h;if(void 0===m)throw Error("shrunkShotToLogicalRatio is not defined in Action task");let f=(()=>{if(!n.paramSchema)return o;try{return r9(o,n.paramSchema,{shrunkShotToLogicalRatio:m})}catch(e){throw Error(`Invalid parameters for action ${n.name}: ${e.message}
856
+ Parameters: ${JSON.stringify(o)}`,{cause:e})}})(),g=!this.actionReadiness;e.task.actionReadiness=g?"default":"custom",null==d||d.throwIfAborted(),cN(p,"beforeInvokeActionHookStart");let y=g?n.delayBeforeRunner??200:0;try{let e=(await Promise.allSettled([null==(a=(s=this.interface).beforeInvokeAction)?void 0:a.call(s,n.name,o,d),y>0?iR(d).call({timeMs:y}):Promise.resolve()])).find(e=>"rejected"===e.status);if((null==e?void 0:e.status)==="rejected")throw e.reason}catch(e){throw Error(`error in running beforeInvokeAction for ${n.name}: ${(null==e?void 0:e.message)||String(e)}`,{cause:e})}finally{cN(p,"beforeInvokeActionHookEnd")}null==d||d.throwIfAborted(),cN(p,"callActionStart"),Ak("calling action",n.name);let v=await n.call.call(this.interface,f,g?{...e,signal:d}:{...e,signal:d,skipDefaultWait:!0});cN(p,"callActionEnd"),Ak("called action",n.name,"result:",v),null==d||d.throwIfAborted(),cN(p,"afterInvokeActionHookStart"),cN(p,"waitForActionReadyStart");try{if(g){let e=n.delayAfterRunner??this.waitAfterAction??300;e>0&&await iR(d).call({timeMs:e}),await (null==(l=(c=this.interface).defaultActionWait)?void 0:l.call(c,n.name,f,d))}else await this.actionReadiness.wait({id:e.task.taskId,name:n.name,param:f},d,this.operationResource)}finally{cN(p,"waitForActionReadyEnd")}null==d||d.throwIfAborted();try{await (null==(A=(u=this.interface).afterInvokeAction)?void 0:A.call(u,n.name,f,d))}catch(e){throw Error(`error in running afterInvokeAction for ${n.name}: ${(null==e?void 0:e.message)||String(e)}`,{cause:e})}finally{cN(p,"afterInvokeActionHookEnd")}return{output:v}}};t.tasks.push(a)}createLocateTask(e,t,r,n){var o,i,a,s;let{cacheable:l,locateModel:c,deepLocate:A}=r,u=AI(t);return(null==(i=r.multimodalPrompt)||null==(o=i.images)?void 0:o.length)&&u.prompt&&!(null==(s=r3(u.prompt))||null==(a=s.images)?void 0:a.length)&&(u={...u,prompt:{...r.multimodalPrompt,prompt:r2(u.prompt)}}),void 0!==l&&(u={...u,cacheable:l}),A&&!u.deepLocate&&(u={...u,deepLocate:!0}),{type:"Planning",subType:"Locate",param:u,thought:e.thought,executor:async e=>{var t,o,i,a,s;let l,A,d,p,h,m,f=r.abortSignal??e.signal;null==f||f.throwIfAborted();let{task:g}=e,{uiContext:y}=e,v=c7(u)?u:void 0;(0,eH.vA)((null==u?void 0:u.prompt)||v,`No prompt or id or position or locatedPixelResult to locate, param=${JSON.stringify(u)}`),y||(y=await this.service.contextRetrieverFn(f),null==f||f.throwIfAborted()),(0,eH.vA)(y,"uiContext is required for Service task");let{shrunkShotToLogicalRatio:b}=y;if(void 0===b)throw Error("shrunkShotToLogicalRatio is not defined in locate task");let w=e=>{var t,r,n,o,i,a,s;e&&(l=e,g.log={dump:e,rawResponse:null==(t=e.taskInfo)?void 0:t.rawResponse,rawAssistantOutput:null==(r=e.taskInfo)?void 0:r.rawAssistantOutput,searchAreaRawChoiceMessage:null==(n=e.taskInfo)?void 0:n.searchAreaRawChoiceMessage},g.usage=AE(null==(o=e.taskInfo)?void 0:o.usage,"locate"),g.searchArea=null==(i=e.taskInfo)?void 0:i.searchArea,(null==(a=e.taskInfo)?void 0:a.searchAreaUsage)&&(g.searchAreaUsage=AE(e.taskInfo.searchAreaUsage,"locate")),(null==(s=e.taskInfo)?void 0:s.reasoning_content)&&(g.reasoning_content=e.taskInfo.reasoning_content))},E=v?function(e){var t;if(!e)return;let{center:r,rect:n}=e.locatedPixelResult;return{center:[...r],description:"string"==typeof e.prompt?e.prompt:(null==(t=e.prompt)?void 0:t.prompt)||"",...n?{rect:n}:{}}}(v):void 0,x=u.deepLocate?void 0:E,k=!!x;if(!k&&u.xpath&&this.interface.rectMatchesCacheFeature)try{d=await this.interface.rectMatchesCacheFeature({xpaths:[u.xpath]})}catch{}let S=d?Ae({center:[d.left+d.width/2,d.top+d.height/2],description:"string"==typeof u.prompt?u.prompt:(null==(t=u.prompt)?void 0:t.prompt)||"",rect:d},b):void 0,I=!!S,C=u.prompt,O=null==(o=this.taskCache)?void 0:o.matchLocateCache(C),R=null==O||null==(i=O.cacheContent)?void 0:i.cache,j=k||I?null:await c8({taskCache:this.taskCache,interfaceInstance:this.interface},R,C,u.cacheable),P=j?Ae(j,b):void 0,M=!!P,T=e.task.timing;if(!I&&!M&&!k)try{cN(T,"callAiStart"),A=await this.service.locate(u,{context:y,planLocatedElement:E},c,f),w(A.dump),p=A.element}catch(e){throw e instanceof aM&&w(e.dump),e}finally{cN(T,"callAiEnd")}let N=x||S||P||p;if(N){let e=function(e){var t,r,n;let o=[null==(t=e.center)?void 0:t[0],null==(r=e.center)?void 0:r[1]];if((null==(n=e.center)?void 0:n.length)!==2||o.some(e=>"number"!=typeof e||!Number.isFinite(e)))return`Invalid locate result coordinates: ${JSON.stringify(e)}`}(N);if(e){if(l)throw new aM(e,l);throw Error(e)}}let D=AS(null==O||null==(a=O.cacheContent)?void 0:a.cache);if(N&&this.taskCache&&!M&&(!k||!D)&&!1!==u.cacheable)if(this.interface.cacheFeatureForPoint)try{let e=[Math.round(N.center[0]/b),Math.round(N.center[1]/b)],t=this.getDefaultModelRuntime(),r=await this.interface.cacheFeatureForPoint(e,{targetDescription:"string"==typeof u.prompt?u.prompt:null==(s=u.prompt)?void 0:s.prompt,modelRuntime:{...t,executionId:c.executionId}});AS(r)?(Ak("update cache, prompt: %s, cache: %o",C,r),h=r,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:C,cache:r},O)):Ak("no cache data returned, skip cache update, prompt: %s",C)}catch(e){Ak("cacheFeatureForPoint failed: %s",e)}else Ak("cacheFeatureForPoint is not supported, skip cache update");if(!N){if(l)throw new aM(`Element not found : ${u.prompt}`,l);throw Error(`Element not found: ${u.prompt}`)}k&&v?m={from:"Plan",context:{locatedPixelResult:v.locatedPixelResult}}:I?m={from:"User expected path",context:{xpath:u.xpath}}:M&&(m={from:"Cache",context:{cacheEntry:R,cacheToSave:h}});let z=u.promptDisplay,B=z?{...N,description:z}:N;return z&&(null==l?void 0:l.matchedElement)&&(l.matchedElement=l.matchedElement.map(e=>({...e,description:z}))),null==n||n(B),{output:{element:{...B,dpr:y.deprecatedDpr}},hitBy:m}}}}constructor({getDefaultModelRuntime:e,interfaceInstance:t,service:r,taskCache:n,actionSpace:o,waitAfterAction:i,actionReadiness:a,operationResource:s}){Ax(this,"interface",void 0),Ax(this,"service",void 0),Ax(this,"getDefaultModelRuntime",void 0),Ax(this,"taskCache",void 0),Ax(this,"actionSpace",void 0),Ax(this,"waitAfterAction",void 0),Ax(this,"actionReadiness",void 0),Ax(this,"operationResource",void 0),this.getDefaultModelRuntime=e,this.interface=t,this.service=r,this.taskCache=n,this.actionSpace=o,this.waitAfterAction=i,this.actionReadiness=a,this.operationResource=s??t}}function AR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:150;return void 0===e?"":("object"==typeof e&&(e=JSON.stringify(e)),"number"==typeof e)?e.toString():"string"==typeof e&&e.length>t?`${e.slice(0,t)}...`:"string"==typeof e?e.trim():""}function Aj(e){return e.subType||e.type}function AP(e){if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e){if("string"==typeof e.promptDisplay)return e.promptDisplay;if("object"==typeof e.prompt&&null!==e.prompt&&e.prompt.prompt)return e.prompt.prompt;if("string"==typeof e.prompt)return e.prompt;if("string"==typeof e.description)return e.description}return""}function AM(e){if(!e)return{content:""};let t=e=>{var t;return(null==e||null==(t=e.multimodalPrompt)?void 0:t.images)&&Array.isArray(e.multimodalPrompt.images)?e.multimodalPrompt.images:void 0},r=e=>"string"==typeof e?e:JSON.stringify(e);if(e.demand)return{content:r(e.demand),images:t(e)};if(e.assertion)return{content:r(e.assertion),images:t(e)};if(e.dataDemand){let{dataDemand:n}=e;if("string"==typeof n)return{content:n};if("object"==typeof n)return{content:r(n.demand||n),images:t(n)}}return{content:""}}function AT(e,t){return t?`${e} - ${t}`:e}function AN(e){var t,r,n,o,i,a,s,l,c,A,u;let d;if("Planning"===e.type&&(d="Locate"===e.subType?AP(null==e?void 0:e.param):(null==(t=e.output)?void 0:t.log)||(null==(r=e.param)?void 0:r.userInstructionDisplay)||((null==(n=e.param)?void 0:n.userInstruction)?r2(e.param.userInstruction):void 0)),"Insight"===e.type&&(d=AM(null==e?void 0:e.param).content),"Action Space"===e.type){let t=null==e||null==(o=e.param)?void 0:o.locate,r=t?AP(t):"";(d=e.thought||"","number"==typeof(null==e||null==(i=e.param)?void 0:i.timeMs))?d=`${null==e||null==(a=e.param)?void 0:a.timeMs}ms`:"string"==typeof(null==e||null==(s=e.param)?void 0:s.scrollType)?d=(u=null==e?void 0:e.param)?`${u.direction||"down"}, ${u.scrollType||"singleAction"}, ${u.distance||"distance-not-set"}`:"":"string"==typeof(null==e||null==(l=e.param)?void 0:l.direction)&&(null==e?void 0:e.subType)==="PullGesture"?d=function(e){if(!e)return"";let t=[];return t.push(`direction: ${e.direction||"down"}`),e.distance&&t.push(`distance: ${e.distance}`),e.duration&&t.push(`duration: ${e.duration}ms`),t.join(", ")}(null==e?void 0:e.param):void 0!==(null==e||null==(c=e.param)?void 0:c.value)?d=null==e||null==(A=e.param)?void 0:A.value:(null==e?void 0:e.param)&&"object"==typeof(null==e?void 0:e.param)&&Object.keys((null==e?void 0:e.param)||{}).length>0&&(d=null==e?void 0:e.param),r&&(d=d&&"object"!=typeof d?`${r} - ${d}`:r)}if(void 0===d)return"";if("string"==typeof d)return d;if("object"==typeof d){let e=AP(d);if(e)return e;let t=Object.entries(d);if(0===t.length)return"";let r=e=>"string"==typeof e?e:null==e?String(e):"object"==typeof e?JSON.stringify(e):String(e);if(1===t.length){let[e,n]=t[0];return`${e}: ${r(n)}`}return t.map(e=>{let[t,n]=e;return`${t}: ${r(n)}`}).join(", ")}return String(d)}function AD(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let Az=(0,e0.aZ)("device-task-executor"),AB=(0,e0.aZ)("device-task-executor",{console:!0});class AF{get page(){return this.interface}createExecutionSession(e,t){var r,n,o;let i=new AA(e,e=>(null==t?void 0:t.uiContext)?Promise.resolve(t.uiContext):Promise.resolve(this.service.contextRetrieverFn(e)),{abortSignal:(null==t?void 0:t.abortSignal)??(null==(r=this.getAbortSignal)?void 0:r.call(this)),onTaskStart:this.onTaskStartCallback,tasks:null==t?void 0:t.tasks,referenceImages:null==t?void 0:t.referenceImages,onSnapshotChange:async(e,r)=>{var n,o,i;await (null==(o=this.hooks)||null==(n=o.onSnapshotChange)?void 0:n.call(o,e,r)),await (null==t||null==(i=t.onSnapshotChange)?void 0:i.call(t,e,r))},...(null==t?void 0:t.onTaskEvent)?{onTaskEvent:t.onTaskEvent}:{}});return null==(o=this.hooks)||null==(n=o.onExecutionCreated)||n.call(o,i.getRunner()),i}getActionSpace(){return this.providedActionSpace}async emitProgress(e,t,r){var n,o;await (null==(o=this.hooks)||null==(n=o.onProgress)?void 0:n.call(o,e,t,r))}emitAiActProgress(e,t){return this.emitProgress("aiAct",e,t)}setPendingFeedbackMessage(e,t,r){e.pendingFeedbackMessage=r?`Time: ${t}, ${r}`:`Current time: ${t}`}collectPlanningFeedback(e){let t=e.flatMap(e=>{let{planningFeedback:t,planningFeedbackMaxLength:r}=e;return t?[function(e,t){if("unlimited"===t)return e;let r=t&&Number.isFinite(t)&&t>0?Math.floor(t):500;return e.length<=r?e:`${e.slice(0,r)}
857
+ ...[truncated, ${e.length-r} more characters]`}(t,r)]:[]});return t.length>0?t.join("\n\n"):void 0}async getTimeString(e){if(this.useDeviceTime)if(this.interface.getDeviceLocalTimeString)try{return await this.interface.getDeviceLocalTimeString(e)}catch(e){AB(`Failed to get device time string, falling back to runtime time: ${e}`)}else AB("useDeviceTime is enabled but getDeviceLocalTimeString is not implemented, falling back to runtime time.");return ne(e)}async convertPlanToExecutable(e,t,r,n){return this.taskBuilder.build(e,t,r,n)}async loadYamlFlowAsPlanning(e,t,r){var n;let o=this.createExecutionSession(AT((null==r?void 0:r.type)||"Act",(null==r?void 0:r.prompt)||r2(e)),{referenceImages:null==(n=r3(e))?void 0:n.images}),i={type:"Planning",subType:"LoadYaml",param:{userInstruction:e,...(null==r?void 0:r.prompt)?{userInstructionDisplay:r.prompt}:{}},executor:async e=>{let{uiContext:r}=e;return(0,eH.vA)(r,"uiContext is required for Planning task"),{output:{actions:[],shouldContinuePlanning:!1,log:"",yamlString:t},cache:{hit:!0},hitBy:{from:"Cache",context:{yamlString:t}}}}},a=o.getRunner();return await o.appendAndRun(i),{runner:a}}async sleep(e,t){var r;t??(t=null==(r=this.getAbortSignal)?void 0:r.call(this));let n=this.createExecutionSession("Sleep",{abortSignal:t}),o=iR(t);await n.appendAndRun({type:"Action Space",subType:o.name,param:{timeMs:e},executor:async t=>{let{task:r}=t;(0,eH.vA)(Number.isFinite(e)&&e>0,`ms for sleep must be a finite number greater than 0, but got ${e}`),cN(r.timing,"callActionStart");try{await o.call({timeMs:e})}finally{cN(r.timing,"callActionEnd")}}})}async runPlans(e,t,r,n,o){var i;let a=(null==o?void 0:o.abortSignal)??(null==(i=this.getAbortSignal)?void 0:i.call(this)),s=this.createExecutionSession(e,{...o,abortSignal:a}),l=s.getRunner(),c={...r,executionId:l.id},A={...n,executionId:l.id},{tasks:u}=await this.convertPlanToExecutable(t,c,A,{abortSignal:a}),{output:d}=await s.appendAndRun(u)??{};return{output:d,runner:l}}async action(e,t,r,n,o,i){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"balance",s=arguments.length>7?arguments[7]:void 0,l=arguments.length>8?arguments[8]:void 0,c=arguments.length>9?arguments[9]:void 0,A=arguments.length>10?arguments[10]:void 0;return null==c||c.throwIfAborted(),Ac(this.interface,s,async()=>this.runAction(e,t,r,n,o,i,a,l,c,A))}invalidateFailedCacheHitLocates(e,t){if(this.taskCache)for(let o=t;o<e.tasks.length;o++){var r,n;let t=e.tasks[o];if("Planning"===t.type&&"Locate"===t.subType&&(null==(r=t.hitBy)?void 0:r.from)==="Cache"){let e=null==(n=t.param)?void 0:n.prompt;e&&this.taskCache.markLocateCacheStale(e)}}}async runAction(e,t,r,n,o,i){var a,s;let l,c,A,u,d=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"balance",p=arguments.length>7?arguments[7]:void 0,h=arguments.length>8?arguments[8]:void 0,m=arguments.length>9?arguments[9]:void 0;h??(h=null==(a=this.getAbortSignal)?void 0:a.call(this));let f=new oy,g=(null==m?void 0:m.prompt)||r2(e),y=this.createExecutionSession(AT((null==m?void 0:m.type)||"Act",g),{abortSignal:h,referenceImages:null==(s=r3(e))?void 0:s.images,onTaskEvent:async e=>{await (null==c?void 0:c(e))}}),v=y.getRunner();t={...t,executionId:v.id},r={...r,executionId:v.id};let b="default"===t.config.slot&&"default"===r.config.slot,w="deepThink"!==d&&b,E="deepThink"===d?2:1;Az("setting includeLocateInPlanning to",w,{effort:d,noIndividualLocateModel:b});let x=0,k=[],S=i??this.replanningCycleLimit;if(void 0===S)throw Error("replanningCycleLimit is required for TaskExecutor.action");await this.emitAiActProgress("start",{prompt:g,planLimit:S});let I=async(e,t)=>(await this.emitAiActProgress("failed",{...t?{planIndex:t}:{},planLimit:S,error:e}),y.appendErrorPlan(e)),C=0,O=0;if(null==h?void 0:h.aborted)return I(`Task aborted: ${h.reason||"abort signal received"}`);let R=()=>(l??(l=op(e)),l);for(;;){let i,a=x+1;if(O=a,null==h?void 0:h.aborted)return I(`Task aborted: ${h.reason||"abort signal received"}`,a);let s=f.subGoalsToText()||void 0,l=f.memoriesToText()||void 0,g=await y.appendAndRun({type:"Planning",subType:"Plan",param:{userInstruction:e,...(null==m?void 0:m.prompt)?{userInstructionDisplay:m.prompt}:{},replanningCycleLimit:S,aiActContext:n,imagesIncludeCount:E,effort:d,...s?{subGoalStatus:s}:{},...l?{memoriesStatus:l}:{}},executor:async e=>{let o,{uiContext:i}=e;(0,eH.vA)(i,"uiContext is required for Planning task");let s=e.task.timing;await this.emitAiActProgress("plan_thinking",{planIndex:a,planLimit:S,screenshot:i.screenshot});let l=this.getActionSpace();Az("actionSpace for this interface is:",l.map(e=>e.name).join(", ")),(0,eH.vA)(Array.isArray(l),"actionSpace must be an array"),0===l.length&&console.warn(`ActionSpace for ${this.interface.interfaceType} is empty. This may lead to unexpected behavior.`);let c="custom"===t.adapter.planning.kind?t.adapter.planning.planFn:iQ;try{let e=await R();cN(s,"callAiStart"),o=await c(e,{context:i,actionContext:aC(n),actionSpace:l,modelRuntime:t,locateModelRuntime:r,getDefaultModelRuntime:this.getDefaultModelRuntime,conversationHistory:f,includeLocateInPlanning:w,imagesIncludeCount:E,effort:d,abortSignal:h})}catch(t){throw t instanceof ty&&(e.task.usage=AE(t.usage,"planning"),e.task.log={...e.task.log||{},rawResponse:t.rawResponse,rawAssistantOutput:t.rawAssistantOutput}),await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:S,error:Af(t)}),t}finally{cN(s,"callAiEnd")}Az("planResult",JSON.stringify(o,null,2));let{actions:u,thought:p,log:m,memory:g,error:y,usage:v,rawResponse:b,rawAssistantOutput:x,reasoning_content:k,finalizeSuccess:I,finalizeMessage:C,updateSubGoals:O,markFinishedIndexes:j}=o;if(A=C,e.task.log={...e.task.log||{},rawResponse:b,rawAssistantOutput:x},e.task.usage=AE(v,"planning"),e.task.reasoning_content=k,e.task.output={actions:u||[],log:m,thought:p,memory:g,yamlFlow:o.yamlFlow,output:C,shouldContinuePlanning:o.shouldContinuePlanning,updateSubGoals:O,markFinishedIndexes:j},e.uiContext=i,(m||p)&&await this.emitAiActProgress("plan_planned",{planIndex:a,planLimit:S,...m?{log:m}:{},...p?{thought:p}:{}}),y){let e=`Failed to continue: ${y}
858
+ ${m||""}`;await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:S,error:e})}if((0,eH.vA)(!y,`Failed to continue: ${y}
859
+ ${m||""}`),!1===I){let e=`Task failed: ${C||"No error message provided"}
860
+ ${m||""}`;await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:S,error:e}),(0,eH.vA)(!1,e)}return{cache:{hit:!1}}}},{allowWhenError:!0}),b=null==g?void 0:g.output;u=b;let j=(null==b?void 0:b.actions)||[];k.push(...(null==b?void 0:b.yamlFlow)||[]);try{i=await this.convertPlanToExecutable(j,t,r,{cacheable:o,multimodalPrompt:r3(e),deepLocate:p,abortSignal:h})}catch(e){return I(`Error converting plans to executable tasks: ${Af(e)}, plans: ${JSON.stringify(j)}`,a)}f.pendingFeedbackMessage&&console.warn("unconsumed pending feedback message detected, this may lead to unexpected planning result:",f.pendingFeedbackMessage);let P=await this.getTimeString(),M=v.tasks.length;c=function(e,t,r){return async n=>{var o;let i=function(e){var t,r;if("Action Space"!==e.type||"Finished"===e.subType||"Error"===e.subType)return;let n="string"==typeof e.subType&&e.subType.length>0?e.subType:"Action",o=function(e){if(Ah(e)){for(let t of Ab){let r=e[t];if(Av(r))return r}return Object.values(e).find(Av)}}(e.param);if(o){let e=Ay(o);if(e){let t=function(e){let t=function(e,t){let r=e[t];if(!Array.isArray(r)||r.length<4)return;let n=Ag(r[0]),o=Ag(r[1]),i=Ag(r[2]),a=Ag(r[3]);if(void 0!==n&&void 0!==o&&void 0!==i&&void 0!==a)return[n,o,i,a]}(e,"bbox");if(t)return t;if(!Ah(e.rect))return;let r=Ag(e.rect.left),n=Ag(e.rect.top),o=Ag(e.rect.width),i=Ag(e.rect.height);if(void 0!==r&&void 0!==n&&void 0!==o&&void 0!==i)return[r,n,r+o,n+i]}(o),r="string"==typeof o.description?o.description:"string"==typeof o.prompt?o.prompt:"";return{name:n,...r?{target:r}:{},point:e,...t?{bbox:t}:{}}}}if(Ah(t=e.param)&&Object.entries(t).some(e=>{let[t,r]=e;return!!Ab.includes(t)&&"string"==typeof r||Av(r)&&!Ay(r)}))return;let i=(r=e.param)&&"object"==typeof r?"string"==typeof r.prompt?Am(r.prompt):r.locate&&"object"==typeof r.locate&&null!==r.locate?{locate:Am(r.locate.prompt),...Object.fromEntries(Object.entries(r).filter(e=>{let[t]=e;return"locate"!==t}).slice(0,4).map(e=>{let[t,r]=e;return[t,Am(r)]}))}:Am(r):Am(r);return{name:n,...void 0!==i&&""!==i?{param:i}:{}}}(n.task);if(!i)return;let a={planIndex:e,planLimit:t,action:i},s=null==(o=n.task.timing)?void 0:o.cost;switch(n.kind){case"start":await r("plan_action",a),await r("action_running",a);break;case"finish":await r("action_done",{...a,durationMs:s});break;case"error":await r("action_failed",{...a,durationMs:s,error:n.task.errorMessage})}}}(a,S,(e,t)=>this.emitAiActProgress(e,t));try{await y.appendAndRun(i.tasks),this.setPendingFeedbackMessage(f,P,this.collectPlanningFeedback(v.tasks.slice(M)))}catch(t){if(sK(t))throw t;C++;let e=await this.getTimeString();this.setPendingFeedbackMessage(f,e,`Error executing running tasks: ${(null==t?void 0:t.message)||String(t)}`),Az("error when executing running tasks, but continue to run if it is not too many errors:",t instanceof Error?t.message:String(t),"current error count in one planning loop:",C)}finally{c=void 0}if(C>5)return I("Too many errors in one planning loop",a);if(null==h?void 0:h.aborted)return I(`Task aborted: ${h.reason||"abort signal received"}`,a);if(!(null==b?void 0:b.shouldContinuePlanning))break;if(this.invalidateFailedCacheHitLocates(v,M),++x>S)return I(`Task stopped: the planning cycle limit (${S}) has been reached. This limit prevents the model from getting stuck in an endless planning loop. If your task requires more planning cycles, increase replanningCycleLimit or set the environment variable MIDSCENE_REPLANNING_CYCLE_LIMIT to a higher value. See https://midscenejs.com/zh/reference/#common for details.`,a);if(!f.pendingFeedbackMessage){let e=await this.getTimeString();f.pendingFeedbackMessage=`Time: ${e}, I have finished the action previously planned.`}}return await this.emitAiActProgress("complete",{planIndex:O,planLimit:S,...A??(null==u?void 0:u.output)?{output:A??(null==u?void 0:u.output)}:{},...(null==u?void 0:u.log)?{log:u.log}:{},...(null==u?void 0:u.thought)?{thought:u.thought}:{}}),{output:{yamlFlow:k,output:A},runner:v}}createTypeQueryTask(e,t,r,n,o,i){return{type:"Insight",subType:e,param:{domIncluded:null==n?void 0:n.domIncluded,...(null==n?void 0:n.context)!==void 0?{context:n.context}:{},dataDemand:o?{demand:t,multimodalPrompt:o}:t},executor:async a=>{let s,l,{task:c}=a,A=e=>{var t,r,n,o,i;s=e,c.log={dump:e,rawResponse:null==(t=e.taskInfo)?void 0:t.rawResponse,rawAssistantOutput:null==(r=e.taskInfo)?void 0:r.rawAssistantOutput,searchAreaRawChoiceMessage:null==(n=e.taskInfo)?void 0:n.searchAreaRawChoiceMessage},c.usage=AE(null==(o=e.taskInfo)?void 0:o.usage,"insight"),(null==(i=e.taskInfo)?void 0:i.reasoning_content)&&(c.reasoning_content=e.taskInfo.reasoning_content)},u=a.uiContext;(0,eH.vA)(u,"uiContext is required for Query task");let d="Query"!==e,p=t,h="result";d&&("Assert"===e||"WaitFor"===e)?p={[h="StatementIsTruthy"]:aO(e,t)}:d&&(p={[h=e]:aO(e,t)});let m="";if((null==n?void 0:n.domIncluded)&&this.interface.getElementsNodeTree){Az("appending tree info for page");let e=await this.interface.getElementsNodeTree();m=await function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],o=e=>Object.entries(e).map(e=>{let[r,n]=e;return`${r}="${AR(n,t)}"`}).join(" ");return(function e(n){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=!(arguments.length>2)||void 0===arguments[2]||arguments[2],s="",l="",c="",A=!0,u=" ".repeat(i),d="";for(let t=0;t<(n.children||[]).length;t++){let r=e(n.children[t],i+1,a);r&&(d+=`
861
+ ${r}`)}if(n.node&&n.node.rect.width>4&&n.node.rect.height>4&&(!r||r&&n.node.content)&&(!a||a&&n.node.isVisible)){var p,h;let e;A=!1,e=(null==(p=n.node.attributes)?void 0:p.htmlTagName)?n.node.attributes.htmlTagName.replace(/[<>]/g,""):n.node.attributes.nodeType.replace(/\sNode$/,"").toLowerCase();let r=n.node.rect?{left:n.node.rect.left,top:n.node.rect.top,width:n.node.rect.width,height:n.node.rect.height}:{};s=`<${e} id="${n.node.id}" ${o((h=n.node.attributes||{},Object.keys(h).reduce((e,r)=>{let n=h[r];return"style"===r||"htmlTagName"===r||"nodeType"===r||(e[r]=AR(n,t)),e},{})))} ${o(r)}>`;let i=AR(n.node.content,t);l=i?`
862
+ ${u} ${i}`:"",c=`</${e}>`}else r||d.trim().startsWith("<>")||(s="<>",l="",c="</>");if(A&&!d.trim())return"";let m=`${u}${s}${l}${d}
863
+ ${u}${c}`;return m.trim()?m:""})(e,0,n).replace(/^\s*\n/gm,"")}(e,200,!1,(null==n?void 0:n.domIncluded)==="visible-only")}try{l=await this.service.extract(p,r,n,m,o,u,{...i,abortSignal:(null==i?void 0:i.abortSignal)??a.signal})}catch(e){throw e instanceof aM&&A(e.dump),e}finally{var f=c,g=u;let e=null==g?void 0:g.screenshotSequence;if(e&&e.length>1){let t=[];for(let r=0;r<e.length-1;r++){let n=e[r];t.push({type:"screenshot",ts:n.capturedAt,screenshot:n,description:`Observed frame ${r+1}/${e.length}`,timing:"observed-frame"})}f.recorder=f.recorder?[...t,...f.recorder]:t}(null==g?void 0:g.screenshotSequence)&&(g.screenshotSequence=void 0)}let{data:y,thought:v,dump:b}=l;A(b);let w=y;return d&&("string"==typeof y?w=y:"WaitFor"===e?w=null!=y&&y[h]:null==y?w=null:(null==y?void 0:y[h])!==void 0?w=y[h]:(null==y?void 0:y.result)!==void 0?w=y.result:(0,eH.vA)(!1,"No result in query data")),"Assert"===e&&(w=!!w),{output:w,log:s,thought:v}}}}async createTypeQueryExecution(e,t,r,n,o,i){var a;let s=(null==i?void 0:i.abortSignal)??(null==(a=this.getAbortSignal)?void 0:a.call(this));null==s||s.throwIfAborted();let l=this.createExecutionSession(AT(e,"string"==typeof t?t:JSON.stringify(t)),{...(null==i?void 0:i.uiContext)?{uiContext:i.uiContext}:{},referenceImages:null==o?void 0:o.images,abortSignal:s}),c=l.getRunner(),A={...r,executionId:c.id},u=await this.createTypeQueryTask(e,t,A,n,o,{...i,abortSignal:s}),d=await l.appendAndRun(u);if(!d)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:p,thought:h}=d;return{output:p,thought:h,runner:c}}async waitFor(e,t,r){var n;let o=null==(n=this.getAbortSignal)?void 0:n.call(this),{textPrompt:i,multimodalPrompt:a}=c9(e),s=`waitFor: ${i}`,l=this.createExecutionSession(AT("WaitFor",s),{referenceImages:null==a?void 0:a.images,abortSignal:o}),c=l.getRunner(),A={...r,executionId:c.id},{timeoutMs:u,checkIntervalMs:d,domIncluded:p,screenshotIncluded:h,...m}=t,f={domIncluded:p,screenshotIncluded:h,...m};(0,eH.vA)(e,"No assertion for waitFor"),(0,eH.vA)(u,"No timeoutMs for waitFor"),(0,eH.vA)(d,"No checkIntervalMs for waitFor"),(0,eH.vA)(d<=u,`wrong config for waitFor: checkIntervalMs must be less than timeoutMs, config: {checkIntervalMs: ${d}, timeoutMs: ${u}}`);let g=Date.now(),y=g,v="";for(;y-g<=u;){let e=Date.now();y=e,null==o||o.throwIfAborted();let t=await this.createTypeQueryTask("WaitFor",i,A,f,a,{abortSignal:o}),n=await l.appendAndRun(t);if(null==n?void 0:n.output)return{output:void 0,runner:c};v=(null==n?void 0:n.thought)||!n&&`No result from assertion: ${i}`||`unknown error when waiting for assertion: ${i}`;let s=Date.now();if(s-e<d){let t=s-e,n=d-t,i=`Check interval is ${d}ms, ${t}ms elapsed since last check, sleeping for ${n}ms`,{tasks:a}=await this.convertPlanToExecutable([{type:"Sleep",param:{timeMs:n},thought:i}],r,r,{abortSignal:o});a[0]&&await l.appendAndRun(a[0])}}return l.appendErrorPlan(`waitFor timeout: ${v}`)}constructor(e,t,r){AD(this,"interface",void 0),AD(this,"service",void 0),AD(this,"taskCache",void 0),AD(this,"getDefaultModelRuntime",void 0),AD(this,"providedActionSpace",void 0),AD(this,"taskBuilder",void 0),AD(this,"onTaskStartCallback",void 0),AD(this,"hooks",void 0),AD(this,"getAbortSignal",void 0),AD(this,"replanningCycleLimit",void 0),AD(this,"waitAfterAction",void 0),AD(this,"useDeviceTime",void 0),this.getDefaultModelRuntime=r.getDefaultModelRuntime,this.interface=e,this.service=t,this.taskCache=r.taskCache,this.onTaskStartCallback=null==r?void 0:r.onTaskStart,this.replanningCycleLimit=r.replanningCycleLimit,this.waitAfterAction=r.waitAfterAction,this.useDeviceTime=r.useDeviceTime,this.hooks=r.hooks,this.getAbortSignal=r.getAbortSignal,this.providedActionSpace=r.actionSpace,this.taskBuilder=new AO({getDefaultModelRuntime:r.getDefaultModelRuntime,interfaceInstance:e,service:t,taskCache:r.taskCache,actionSpace:this.getActionSpace(),waitAfterAction:r.waitAfterAction,actionReadiness:r.actionReadiness,operationResource:r.operationResource})}}function AL(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let AU={domIncluded:!1,screenshotIncluded:!0};class AK{resolveContext(e,t){return this.resolveAgentContext(e,null==t?void 0:t.context)}withContext(e,t){let r=this.resolveContext(e,t);return void 0===r?t:{...t,context:r}}executionOptions(e){var t;let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null==(t=this.getUIContext)?void 0:t.call(this);if(n||r||(null==e?void 0:e.abortSignal))return{...r||(null==e?void 0:e.abortSignal)?{abortSignal:null==e?void 0:e.abortSignal}:{},...n?{uiContext:n}:{}}}async aiQuery(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:AU,r=this.resolveModelRuntime("extract"),n=this.executionOptions(),o=this.withContext("aiQuery",t),{output:i}=n?await this.taskExecutor.createTypeQueryExecution("Query",e,r,o,void 0,n):await this.taskExecutor.createTypeQueryExecution("Query",e,r,o);return i}async aiBoolean(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:AU;return this.queryPrimitive("Boolean","aiBoolean",e,t)}async aiNumber(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:AU;return this.queryPrimitive("Number","aiNumber",e,t)}async aiString(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:AU;return this.queryPrimitive("String","aiString",e,t)}async aiAsk(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:AU;return this.queryPrimitive("String","aiAsk",e,t)}async queryPrimitive(e,t,r,n){let{textPrompt:o,multimodalPrompt:i}=c9(r),a=this.withContext(t,n),{output:s}=await this.taskExecutor.createTypeQueryExecution(e,o,this.resolveModelRuntime("Boolean"===e?"boolean":"extract"),a,i,this.executionOptions());return s}async aiAssert(e,t,r){let n=this.withContext("aiAssert",r??{}),o={domIncluded:(null==r?void 0:r.domIncluded)??AU.domIncluded,screenshotIncluded:(null==r?void 0:r.screenshotIncluded)??AU.screenshotIncluded,...void 0!==n.context?{context:n.context}:{}},{textPrompt:i,multimodalPrompt:a}=c9(e),s="string"==typeof e?e:e.prompt;try{let{output:e,thought:n}=await this.taskExecutor.createTypeQueryExecution("Assert",i,this.resolveModelRuntime("boolean"),o,a,this.executionOptions(r,!0)),l=!!e,c=l?void 0:`Assertion failed: ${t||s}
864
+ Reason: ${n||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:l,thought:n,message:c};if(!l)throw Error(c)}catch(e){if(e instanceof cF){var l,c;let n=null==(l=e.task)?void 0:l.thought,o=(null==(c=e.task)?void 0:c.errorMessage)||e.cause.message,i=`Assertion failed: ${t||s}
865
+ Reason: ${n||o||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:!1,thought:n,message:i};throw Error(i,{cause:e.cause})}throw e}}constructor(e,t,r,n){AL(this,"taskExecutor",void 0),AL(this,"resolveModelRuntime",void 0),AL(this,"resolveAgentContext",void 0),AL(this,"getUIContext",void 0),this.taskExecutor=e,this.resolveModelRuntime=t,this.resolveAgentContext=r,this.getUIContext=n}}function AZ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let AJ=(e,t,r,n,o)=>{e[t]||(e[t]={promptTokens:0,completionTokens:0,totalTokens:0,calls:0});let i=e[t];i.promptTokens+=r,i.completionTokens+=n,i.totalTokens+=o,i.calls+=1};class AQ{add(e){let t=e.prompt_tokens??0,r=e.completion_tokens??0,n=e.total_tokens??0;this.totalPromptTokens+=t,this.totalCompletionTokens+=r,this.totalTokens+=n,this.totalCachedInput+=e.cached_input??0,this.totalTimeCostMs+=e.time_cost??0,this.calls+=1,AJ(this.byIntent,e.intent??"unknown",t,r,n),AJ(this.byModel,e.model_name??"unknown",t,r,n)}snapshot(){let e=e=>{let t={};for(let[r,n]of Object.entries(e))t[r]={...n};return t};return{totalPromptTokens:this.totalPromptTokens,totalCompletionTokens:this.totalCompletionTokens,totalTokens:this.totalTokens,totalCachedInput:this.totalCachedInput,totalTimeCostMs:this.totalTimeCostMs,calls:this.calls,byIntent:e(this.byIntent),byModel:e(this.byModel)}}reset(){this.totalPromptTokens=0,this.totalCompletionTokens=0,this.totalTokens=0,this.totalCachedInput=0,this.totalTimeCostMs=0,this.calls=0,this.byIntent={},this.byModel={}}constructor(){AZ(this,"totalPromptTokens",0),AZ(this,"totalCompletionTokens",0),AZ(this,"totalTokens",0),AZ(this,"totalCachedInput",0),AZ(this,"totalTimeCostMs",0),AZ(this,"calls",0),AZ(this,"byIntent",{}),AZ(this,"byModel",{})}}let Aq=/^(Given|When|Then|And|But)\s+(.+)$/i,AX=/^(Scenario):\s*(.*)$/i,AW=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,AH=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},AY=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},AG=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,AV=(e,t)=>{let r=e.keyword===e.effectiveKeyword?e.keyword:`${e.keyword} as ${e.effectiveKeyword}`;return"Given"===e.effectiveKeyword?`setting up the precondition (${r} -> ${t})`:"When"===e.effectiveKeyword?`performing the user action (${r} -> ${t})`:`verifying the expected result (${r} -> ${t})`},A$=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",A_=async(e,t,r)=>{let n=(e=>{let t,r,n=e.split(/\r?\n/),o=[],i=[],a=0,s="prelude";for(let[e,r]of n.entries()){let n=e+1,l=r.trim();if(!l||l.startsWith("#")||l.startsWith("@"))continue;if('"""'===l||"'''"===l)throw Error(`runGherkinScenario does not support doc strings; found one at line ${n}.`);if(l.startsWith("|"))throw Error(`runGherkinScenario does not support data tables; found one at line ${n}.`);if(AW.test(l))throw Error(`runGherkinScenario does not support "${l}" at line ${n}.`);let c=l.match(AX);if(c){a+=1,t=c[2].trim()||void 0,s="scenario";continue}let A=l.match(Aq);if(A){let e={keyword:AH(A[1]),text:A[2].trim(),lineNumber:n};"scenario"===s?o.push(e):i.push(e);continue}throw Error(`runGherkinScenario does not support content at line ${n}: ${l}`)}if(a>1)throw Error(`runGherkinScenario expects exactly one Scenario, but found ${a}.`);if(1===a&&i.length>0)throw Error("runGherkinScenario cannot mix anonymous steps with a Scenario block.");let l=1===a?o:i;if(0===l.length)throw Error("runGherkinScenario requires at least one Gherkin step.");return{scenario:t,steps:l.map(e=>{let t,n="Given"===(t=e.keyword)||"When"===t||"Then"===t?e.keyword:r;if(!n)throw Error(`runGherkinScenario cannot resolve "${e.keyword}" at line ${e.lineNumber}; use Given, When, or Then before ${e.keyword}.`);return r=n,{...e,effectiveKeyword:n}})}})(t),o={...r,cacheable:!1};for(let t of n.steps){AY(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",i=AG(t);try{"aiAct"===n?await e.aiAct(i,o):(null==r?void 0:r.context)!==void 0||(null==r?void 0:r.abortSignal)?await e.aiAssert(i,void 0,{context:r.context,abortSignal:r.abortSignal}):await e.aiAssert(i)}catch(e){throw Error(`runGherkinScenario failed while ${AV(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${A$(e)}`,{cause:e})}}},A0=e=>e?` in ${e}`:"",A1=async(e,t)=>{let n,o,{fromMarkdown:i}=await r(95902)("mdast-util-from-markdown"),{toMarkdown:a}=await r(75845)("mdast-util-to-markdown"),s=i(e),l=(n=[],(o=e=>{Array.isArray(e.children)&&(e.children=e.children.map(e=>{if("imageReference"===e.type){let r=e.identifier||e.label||"unknown";throw Error(`runMarkdown does not support reference-style image "${r}"${A0(t)}. Use direct image syntax instead.`)}if("image"===e.type){var r;let o,i=(o=n.length,`参考图片-${String(o+1).padStart(3,"0")}`);if(!e.url)throw Error(`Markdown image ${i}${A0(t)} is missing a URL.`);if(n.push({name:i,url:(r=e.url,!t||/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(r)||(0,ts.isAbsolute)(r)?r:(0,ts.resolve)((0,ts.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${A0(t)}.`);return{type:"text",value:i}}return o(e),e}))})(s),n);return 0===l.length?{prompt:e,imageCount:0}:{prompt:{prompt:a(s),images:l,convertHttpImage2Base64:!0},imageCount:l.length}};var A2=r(57012),A3=r(85409),A5=r(8963).Buffer;function A4(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let A7=rm.Ik({type:rm.eu("midscene_ui_observation"),version:rm.eu(1),startedAt:rm.ai().finite().nonnegative(),endedAt:rm.ai().finite().nonnegative(),frames:rm.YO(rm.Ik({path:rm.Yj().min(1),mimeType:rm.k5(["image/png","image/jpeg"]),capturedAt:rm.ai().finite().nonnegative()}).strict()).min(1),shotSize:rm.Ik({width:rm.ai().finite().positive(),height:rm.ai().finite().positive()}).strict(),shrunkShotToLogicalRatio:rm.ai().finite().positive()}).strict().refine(e=>e.endedAt>=e.startedAt,{path:["endedAt"],message:"must be greater than or equal to startedAt"});function A8(e){return{...e,frames:e.frames.map(e=>({...e})),shotSize:{...e.shotSize}}}class A6{persistFrame(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized)throw Error("UI observation record has already been finalized");let r=/^data:image\/(png|jpe?g);base64,([\s\S]+)$/i.exec(e);if(!r)throw Error("UI observation frame must be a PNG or JPEG data URL");let n="png"===r[1].toLowerCase()?"png":"jpeg",o="png"===n?"image/png":"image/jpeg",i=A5.from(r[2],"base64");if(0===i.length)throw Error("UI observation frame contains no image data");let a=(0,aN.createHash)("sha256").update(i).digest("hex"),s=`${a}.${n}`;(0,A2.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0});let l=(0,ts.join)(this.temporaryFramesDirectory,s);return(0,A2.existsSync)(l)||(0,A2.writeFileSync)(l,i),{path:`${(0,ts.basename)(this.framesDirectory)}/${s}`,mimeType:o,capturedAt:t}}resolveFramePath(e){if(this.disposed)throw Error("UI observation record writer has been disposed");let t=this.finalized?this.framesDirectory:this.temporaryFramesDirectory;return(0,ts.join)(t,(0,ts.basename)(e.path))}pruneFrames(e){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized||!(0,A2.existsSync)(this.temporaryFramesDirectory))return;let t=new Set(e.map(e=>(0,ts.basename)(e.path)));for(let e of(0,A2.readdirSync)(this.temporaryFramesDirectory))t.has(e)||(0,A2.rmSync)((0,ts.join)(this.temporaryFramesDirectory,e),{force:!0})}finalize(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalizedRecord)return this.finalizedRecord;let r=function(e){let t=A7.safeParse(e);if(!t.success){let e=t.error.issues[0],r=e.path.length>0?e.path.join("."):"record";throw Error(`Invalid UI observation record at ${r}: ${e.message}`)}return t.data}({type:"midscene_ui_observation",version:1,frames:e,...t});return this.pruneFrames(r.frames),(0,A2.mkdirSync)((0,ts.dirname)(this.outputPath),{recursive:!0}),(0,A2.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0}),(0,A2.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),(0,A2.renameSync)(this.temporaryFramesDirectory,this.framesDirectory),this.finalized=!0,this.finalizedRecord={...r,frames:r.frames.map(e=>({...e,path:(0,ts.resolve)((0,ts.dirname)(this.outputPath),e.path)}))},this.finalizedRecord}dispose(){this.disposed||((0,A2.rmSync)(this.temporaryFramesDirectory,{recursive:!0,force:!0}),(0,A2.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),this.disposed=!0,this.finalizedRecord=null)}constructor(e){A4(this,"outputPath",void 0),A4(this,"framesDirectory",void 0),A4(this,"temporaryFramesDirectory",void 0),A4(this,"finalized",!1),A4(this,"disposed",!1),A4(this,"finalizedRecord",null),this.outputPath=e?(0,ts.resolve)(e):function(){let e=Math.random().toString(36).slice(2,10);return(0,ts.resolve)((0,tc.ZH)("output"),`observation-${Date.now()}-${e}.json`)}();const t=(0,ts.extname)(this.outputPath),r=(0,ts.basename)(this.outputPath,t);this.framesDirectory=(0,ts.join)((0,ts.dirname)(this.outputPath),`${r}.frames`),this.temporaryFramesDirectory=`${this.framesDirectory}.tmp-${A3.pid}-${Math.random().toString(36).slice(2,10)}`}}function A9(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ue=(0,e0.aZ)("ui-observer"),ut=(0,e0.aZ)("ui-observer",{console:!0});class ur{get frameCount(){return this.record.frames.length}get startedAt(){return this.record.startedAt}get endedAt(){return this.record.endedAt}ensureUsable(){(0,eH.vA)(!this.disposed,"UI observation has been disposed")}ensureFixedWindowOptions(e){(0,eH.vA)((null==e?void 0:e.domIncluded)===void 0,"UIObservation does not support domIncluded because it only evaluates recorded screenshots")}async aiQuery(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiQuery(e,t)}async aiBoolean(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiBoolean(e,t)}async aiNumber(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiNumber(e,t)}async aiString(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiString(e,t)}async aiAsk(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiAsk(e,t)}async aiAssert(e,t,r){return this.ensureUsable(),this.ensureFixedWindowOptions(r),this.insight.aiAssert(e,t,r)}async exportRecord(){return this.ensureUsable(),A8(this.record)}async dispose(){var e,t;this.disposed||(null==(e=this.disposeRecord)||e.call(this),this.disposed=!0,null==(t=this.onDisposed)||t.call(this))}constructor(e,t,r,n){A9(this,"insight",void 0),A9(this,"disposeRecord",void 0),A9(this,"onDisposed",void 0),A9(this,"disposed",void 0),A9(this,"record",void 0),this.insight=t,this.disposeRecord=r,this.onDisposed=n,this.disposed=!1,this.record=A8(e)}}function un(e){return"string"==typeof e&&/^data:image\/(?:png|jpe?g);base64,/i.test(e)}class uo{get bufferedFrameCount(){return this.frames.length}async start(){(0,eH.vA)(!this.loopPromise&&!this.stopped,"observer has already started"),this.startedAt=Date.now();try{this.source=await this.deps.openFrameSource()??null}catch(e){ue(`frame source unavailable, using screenshot fallback: ${e}`),this.source=null}if(this.usingFallback=!this.source,this.usingFallback)ue("no continuous frame source; sampling via plain screenshots");else{let e=Date.now();for(;!this.source.latest()&&Date.now()-e<3e3;)await new Promise(e=>setTimeout(e,50));this.source.latest()||ue("no first frame within 3000ms; starting anyway")}await this.captureOnce(),this.loopPromise=this.runLoop(),this.watchdogMs>0&&(this.watchdogTimer=setTimeout(()=>{ut(`UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`),this.stop().catch(()=>{})},this.watchdogMs),"function"==typeof this.watchdogTimer.unref&&this.watchdogTimer.unref())}stop(){return this.stopPromise||(this.stopPromise=this.finalizeStop()),this.stopPromise}async finalizeStop(){this.stopped=!0,this.watchdogTimer&&(clearTimeout(this.watchdogTimer),this.watchdogTimer=null),await this.loopPromise;try{this.frames.length>0&&(this.persistPromise=this.persistUnstoredFrames().catch(e=>{ue(`frame persistence failed, will retry during export: ${e}`)}));let e=this.deps.capturePreparedRepresentative(),[,t]=await Promise.all([this.persistPromise,e]),r=this.frames.at(-1);this.source&&(null==r?void 0:r.persisted)&&(this.representativeFrame={...r.persisted,capturedAt:r.capturedAt},t.screenshot=nF.fromFile(this.writer.resolveFramePath(r.persisted),r.persisted.mimeType,r.capturedAt),ue("representative screenshot aligned with last sampled frame")),this.representative=t;let n=Date.now(),o=await this.finalizeRecord(n);return this.observation=new ur(o,this.deps.createInsight(o),()=>this.writer.dispose(),this.deps.onDisposed),this.observation}finally{var e,t;if(this.source)try{await this.source.stop()}catch(e){ue(`error stopping frame source: ${e}`)}ue(`observation stopped with ${this.frames.length} buffered frames (+1 representative)`),null==(e=(t=this.deps).onStopped)||e.call(t)}}async finalizeRecord(e){(0,eH.vA)(this.stopped&&this.representative,"observation must be stopped before finalizing the observed window"),this.persistPromise&&(await this.persistPromise,this.persistPromise=null),await this.persistUnstoredFrames();let t=this.frames.map(e=>((0,eH.vA)(e.persisted,"observation frame was not persisted"),{...e.persisted,capturedAt:e.capturedAt}));if(!this.representativeFrame){let e=this.representative;this.representativeFrame=this.writer.persistFrame(e.screenshot.base64,e.screenshot.capturedAt),e.screenshot=nF.fromFile(this.writer.resolveFramePath(this.representativeFrame),this.representativeFrame.mimeType,this.representativeFrame.capturedAt)}let r=[...t,this.representativeFrame];r.length>50&&ut(`WARNING: exporting ${r.length} frames (soft limit 50). Running insight against this observation sends every frame to the model; consider increasing intervalMs or decreasing maxFrames to reduce token cost.`),ue(`exporting ${r.length} file-backed observation frames (${this.persistedByRef.size} decoded source refs)`);let n={startedAt:this.startedAt,endedAt:e,shotSize:{...this.representative.shotSize},shrunkShotToLogicalRatio:this.representative.shrunkShotToLogicalRatio};return this.writer.finalize(r,n)}async dispose(){if(!this.disposed)try{this.stopPromise?await this.stopPromise:this.stopped||await this.stop()}finally{if(this.observation)await this.observation.dispose();else{var e,t;this.writer.dispose(),null==(e=(t=this.deps).onDisposed)||e.call(t)}this.frames=[],this.persistedByRef.clear(),this.observation=null,this.disposed=!0}}async persistUnstoredFrames(){let e=this.dedupeRefs(this.frames.filter(e=>!e.persisted)).filter(e=>!this.persistedByRef.has(e.ref));for(let t=0;t<e.length;t+=4){let r=e.slice(t,t+4),n=this.source?await this.source.decode(r):r.map(e=>((0,eH.vA)(un(e.ref),"fallback observation frame must be an image data URL"),e.ref));(0,eH.vA)(n.length===r.length,"frame source decode() must return one image per frame handle");let o=await Promise.all(n.map(e=>cQ(e,{shrinkFactor:this.screenshotShrinkFactor})));for(let e=0;e<r.length;e++)this.persistedByRef.set(r[e].ref,this.writer.persistFrame(o[e],r[e].capturedAt))}for(let e of this.frames)e.persisted??(e.persisted=this.persistedByRef.get(e.ref));e.length>0&&ue(`decoded and persisted ${e.length} source frames`)}async captureOnce(){try{if(this.source){let e=this.source.latest();if(!e)return;if(un(e.ref)){let t=await cQ(e.ref,{shrinkFactor:this.screenshotShrinkFactor}),r=this.writer.persistFrame(t,e.capturedAt);this.pushFrame({ref:r.path,capturedAt:e.capturedAt,persisted:r})}else this.pushFrame(e);return}let e=await cQ(await this.deps.captureRawScreenshot(),{shrinkFactor:this.screenshotShrinkFactor}),t=this.writer.persistFrame(e,Date.now());this.pushFrame({ref:t.path,capturedAt:t.capturedAt,persisted:t})}catch(e){ue(`frame capture failed, skipping tick: ${e}`)}}async runLoop(){for(;!this.stopped;){let e=Date.now();for(await this.captureOnce();!this.stopped&&Date.now()-e<this.intervalMs;)await new Promise(e=>setTimeout(e,50))}}pushFrame(e){this.frames.push(e),this.frames.length>this.maxFrames&&(this.frames=this.thinBuffer(this.frames),this.writer.pruneFrames(this.frames.flatMap(e=>e.persisted?[e.persisted]:[])),ue(`frame buffer thinned to ${this.frames.length} frames`))}thinBuffer(e){if(e.length<=1)return e;let t=Array(e.length).fill(!1);t[0]=!0;for(let r=1;r<e.length;r++)e[r].ref!==e[r-1].ref&&(t[r]=!0);t[e.length-1]=!0;let r=[],n=0;for(let o=0;o<e.length;o++)t[o]?(r.push(e[o]),n=0):(n%2==0&&r.push(e[o]),n++);if(r.length>this.maxFrames){let e=r.length/this.maxFrames,t=[];for(let n=0;n<this.maxFrames;n++)t.push(r[Math.floor(n*e)]);t[this.maxFrames-1]=r[r.length-1],r=t}return r}dedupeRefs(e){let t=new Set,r=[];for(let n of e)t.has(n.ref)||(t.add(n.ref),r.push(n));return r}constructor(e,t){A9(this,"deps",void 0),A9(this,"frames",void 0),A9(this,"source",void 0),A9(this,"usingFallback",void 0),A9(this,"stopped",void 0),A9(this,"disposed",void 0),A9(this,"loopPromise",void 0),A9(this,"stopPromise",void 0),A9(this,"representative",void 0),A9(this,"representativeFrame",void 0),A9(this,"watchdogTimer",void 0),A9(this,"persistPromise",void 0),A9(this,"persistedByRef",void 0),A9(this,"observation",void 0),A9(this,"startedAt",void 0),A9(this,"intervalMs",void 0),A9(this,"maxFrames",void 0),A9(this,"watchdogMs",void 0),A9(this,"screenshotShrinkFactor",void 0),A9(this,"writer",void 0),this.deps=e,this.frames=[],this.source=null,this.usingFallback=!1,this.stopped=!1,this.disposed=!1,this.loopPromise=null,this.stopPromise=null,this.representative=null,this.representativeFrame=null,this.watchdogTimer=null,this.persistPromise=null,this.persistedByRef=new Map,this.observation=null,this.startedAt=0,this.intervalMs=Math.max(200,(null==t?void 0:t.intervalMs)??1e3),this.maxFrames=Math.max(2,(null==t?void 0:t.maxFrames)??30),this.watchdogMs=(null==t?void 0:t.watchdogMs)??3e5,this.screenshotShrinkFactor=e.screenshotShrinkFactor??1,this.writer=e.observationRecordWriter??new A6}}function ui(e){(0,eH.vA)("midscene_ui_observation"===e.type&&1===e.version,"invalid UI observation record type or version"),(0,eH.vA)(e.frames.length>0,"UI observation record contains no frames"),(0,eH.vA)(Number.isFinite(e.shotSize.width)&&e.shotSize.width>0,"UI observation record shot width must be positive"),(0,eH.vA)(Number.isFinite(e.shotSize.height)&&e.shotSize.height>0,"UI observation record shot height must be positive"),(0,eH.vA)(Number.isFinite(e.shrunkShotToLogicalRatio)&&e.shrunkShotToLogicalRatio>0,"UI observation record screenshot ratio must be positive");let t=e.frames.map(e=>nF.fromFile(e.path,e.mimeType,e.capturedAt));return{screenshot:t[t.length-1],screenshotSequence:t,shotSize:{...e.shotSize},shrunkShotToLogicalRatio:e.shrunkShotToLogicalRatio}}function ua(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let us=(0,e0.aZ)("agent"),ul=(0,e0.aZ)("agent",{console:!0});class uc extends tJ{getModelConfig(e){return{...this.baseManager.getModelConfig(e),createOpenAIClient:this.createOpenAIClient}}constructor(e,t){super(),ua(this,"baseManager",void 0),ua(this,"createOpenAIClient",void 0),this.baseManager=e,this.createOpenAIClient=t}}class uA{static getTestRunnerNodeDefinitions(){return ca}get dump(){return this.reportManager.dump}set dump(e){this.reportManager.dump=e}get reportFile(){return this.reportManager.reportFile}set reportFile(e){this.reportManager.reportFile=e}get reportFileName(){return this.reportManager.reportFileName}set reportFileName(e){this.reportManager.reportFileName=e}_prepareForTestRunner(){this.reportManager._prepareForTestRunner()}async _createReportSource(e,t){return this.reportManager._createReportSource(e,t)}async _writeYamlExecutionReport(e){return this.reportManager._writeYamlExecutionReport(e)}get onDumpUpdate(){return this.reportManager.onDumpUpdate}set onDumpUpdate(e){this.reportManager.onDumpUpdate=e}get aiContexts(){return this.opts.aiContexts||(this.opts.aiContexts={}),this.opts.aiContexts}resolveUserContext(e,t){var r,n;if(void 0!==t)return t;let o=null==(r=this.opts.aiContexts)?void 0:r[e];if(void 0!==o)return o;let i=null==(n=this.opts.aiContexts)?void 0:n.default;if(void 0!==i)return i}withContext(e,t){let r=this.resolveUserContext(e,null==t?void 0:t.context);return void 0===r?t:{...t??{},context:r}}get page(){return this.interface}assertModelFamilyForNonWebContext(){"puppeteer"!==this.interface.interfaceType&&"playwright"!==this.interface.interfaceType&&"static"!==this.interface.interfaceType&&"chrome-extension-proxy"!==this.interface.interfaceType&&"page-over-chrome-extension-bridge"!==this.interface.interfaceType&&this.modelConfigManager.throwErrorIfNonVLModel()}resolveReplanningCycleLimit(e){return this.opts.replanningCycleLimit??tq.getEnvConfigValueAsNumber(tu.TN)??e.adapter.planning.defaultReplanningCycleLimit}resolveModelRuntime(e,t){return{...function(e,t,r){let n=ah(e.getModelConfig(t));if(!n.adapter.supportedTasks||n.adapter.supportedTasks.includes(r))return n;let o=ah({...e.getModelConfig("default"),intent:t});if(o.adapter.supportedTasks&&!o.adapter.supportedTasks.includes(r))throw Error(`The default model cannot perform ${r}. Configure a general-purpose default model.`);let i=`${n.config.modelFamily} does not support ${r}; using the default model`;return(0,e0.aZ)("ai:model-routing",{console:!0})(i),{...o,modelRouting:{requestedModel:n.config.modelName,requestedSlot:n.config.slot,task:r,reason:i}}}(this.modelConfigManager,e,t??("default"===e?"text":"insight"===e?"extract":e)),onUsage:t=>{this.usageCallCounter+=1;let r=t.intent?t:{...t,intent:e};this.consumeUsage(r,`callai:${t.request_id??this.usageCallCounter}`)}}}createInsight(e){var t=this;return new AK({createTypeQueryExecution:function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];return t.withReportOperation(()=>t.taskExecutor.createTypeQueryExecution(...r))}},e=>this.resolveModelRuntime("insight",e),(e,t)=>this.resolveUserContext(e,t),e)}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return us("Using frozen page context for action:",e),this.frozenUIContext;let t=uA.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await c5(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){us(`retryable context error (attempt ${e+1}/${t}), retrying in ${uA.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,uA.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}async startObserving(e){this.assertReportWritable(),(0,eH.vA)(!this.frozenUIContext,"startObserving() cannot be used while the UI context is frozen (call unfreezePageContext() first)"),(0,eH.vA)(!this.activeObserver,"An observation window is already active on this agent. Stop the existing observer first (await observer.stop()) before starting a new one.");let t=new uo({openFrameSource:async()=>{var e,t;return await (null==(e=(t=this.interface).openFrameSource)?void 0:e.call(t))??void 0},captureRawScreenshot:()=>this.interface.screenshotBase64(),capturePreparedRepresentative:()=>this.getUIContext("assert"),createInsight:e=>this.createInsight(()=>ui(e)),onStopped:()=>{this.activeObserver===t&&(this.activeObserver=null)},onDisposed:()=>this.ownedObservers.delete(t),screenshotShrinkFactor:this.opts.screenshotShrinkFactor},e);this.activeObserver=t,this.ownedObservers.add(t);try{await t.start()}catch(e){throw this.activeObserver=null,this.ownedObservers.delete(t),await t.dispose().catch(e=>{us(`error disposing failed observer start: ${e}`)}),e}return t}async setAIActionContext(e){ul('setAIActionContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}async setAIActContext(e){ul('setAIActContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}setAIContext(e,t){if(!lR(e))throw TypeError(`Unknown Agent context key: ${String(e)}`);if(void 0!==t&&"string"!=typeof t)throw TypeError("Agent context must be a string or undefined");this.aiContexts[e]=t,"aiAct"===e&&(void 0===t?(this.opts.aiActContext=void 0,this.opts.aiActionContext=void 0):(this.opts.aiActContext=t,this.opts.aiActionContext=t))}assertReportWritable(){this.reportManager.assertReportWritable()}async withReportOperation(e){return this.reportManager.withReportOperation(e)}async resetDump(){return this.reportManager.resetDump()}async finalizeReport(){return this.reportManager.finalizeReport()}appendExecutionDump(e,t){this.reportManager.appendExecutionDump(e,t)}collectUsageMetrics(e){for(let t of e.tasks)this.consumeUsage(t.usage,`${t.taskId}:usage`),this.consumeUsage(t.searchAreaUsage,`${t.taskId}:searchAreaUsage`)}consumeUsage(e,t){let r;if(e&&(r=e.request_id?`req:${e.request_id}`:e[tv]?`int:${e[tv]}`:t,!this.countedUsageKeys.has(r)&&(this.countedUsageKeys.add(r),this.metricsCollector.add(e),this.opts.onLLMUsage)))try{this.opts.onLLMUsage(e)}catch(e){ul(`onLLMUsage listener threw, ignoring: ${e}`)}}get metrics(){return this.metricsCollector.snapshot()}dumpDataString(e){return this.reportManager.dumpDataString(e)}reportHTMLString(e){return this.reportManager.reportHTMLString(()=>this.dumpDataString(e))}writeOutActionDumps(e){this.reportManager.writeOutActionDumps(e)}async flushReport(){return this.reportManager.flushReport()}async callbackOnTaskStartTip(e){let t=AN(e),r=t?`${Aj(e)} - ${t}`:Aj(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t,r){return this.withReportOperation(()=>this.executeActionInActionSpace(e,t,r))}async executeActionInActionSpace(e,t,r){us("callActionInActionSpace",e,",",t);let n={type:e,param:t&&"object"==typeof t&&!Array.isArray(t)?{...t}:t||{},thought:""};us("actionPlan",n);let o=[n].filter(Boolean),i=AT(e,AP((null==t?void 0:t.locate)||{})),a=this.resolveModelRuntime("locate"),s=this.resolveModelRuntime("planning"),{output:l}=await this.taskExecutor.runPlans(i,o,s,a,{abortSignal:r??s_(this)});return l}async aiTap(e,t){await this.withReportOperation(async()=>{(0,eH.vA)(e,"missing locate prompt for tap");let r=sS(e,this.withContext("aiTap",t)),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await Ac(this.interface,n,async()=>{await this.callActionInActionSpace("Tap",{locate:r})})})}async aiRightClick(e,t){(0,eH.vA)(e,"missing locate prompt for right click");let r=sS(e,this.withContext("aiRightClick",t));await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){(0,eH.vA)(e,"missing locate prompt for double click");let r=sS(e,this.withContext("aiDoubleClick",t));await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){(0,eH.vA)(e,"missing locate prompt for hover");let r=sS(e,this.withContext("aiHover",t));await this.callActionInActionSpace("Hover",{locate:r})}async aiInput(e,t,r){let n,o,i;"object"==typeof t&&null!==t&&"value"in t?(o=e,n=t.value,i=t):(n=e,o=t,i={...r,value:n}),(0,eH.vA)("string"==typeof n||"number"==typeof n,"input value must be a string or number, use empty string if you want to clear the input"),(0,eH.vA)(o,"missing locate prompt for input");let{locateParam:a,restParams:s}=sI(o,this.withContext("aiInput",i)),l="number"==typeof n?String(n):n,c=(null==i?void 0:i.mode)==="append"?"typeOnly":null==i?void 0:i.mode;await this.callActionInActionSpace("Input",{...s,value:l,locate:a,mode:c})}async aiKeyboardPress(e,t,r){let n,o;"object"==typeof t&&null!==t&&"keyName"in t?(n=e,o=t):(n=t,o={...r||{},keyName:e}),(0,eH.vA)(null==o?void 0:o.keyName,"missing keyName for keyboard press");let{locateParam:i,restParams:a}=sI(n||"",this.withContext("aiKeyboardPress",o));await this.callActionInActionSpace("KeyboardPress",{...a,locate:i})}async aiScroll(e,t,r){let n,o;if(("string"==typeof e||null==e||"object"==typeof e&&null!==e&&"prompt"in e)&&"object"==typeof t&&null!==t?(n=e,o=t):(n=t,o={...r||{},...e||{}}),o){let e=(e=>{if(e)return e in c3?c3[e]:e})(o.scrollType);e!==o.scrollType&&(o={...o||{},scrollType:e})}let{locateParam:i,restParams:a}=sI(n||"",this.withContext("aiScroll",o));await this.callActionInActionSpace("Scroll",{...a,locate:i})}async aiPinch(e,t){let{locateParam:r,restParams:n}=sI(e||"",this.withContext("aiPinch",t));await this.callActionInActionSpace("Pinch",{...n,locate:r})}async aiLongPress(e,t){(0,eH.vA)(e,"missing locate prompt for long press");let{locateParam:r,restParams:n}=sI(e,this.withContext("aiLongPress",t));await this.callActionInActionSpace("LongPress",{...n,locate:r})}async aiClearInput(e,t){(0,eH.vA)(e,"missing locate prompt for clear input");let r=sS(e,this.withContext("aiClearInput",t));await this.callActionInActionSpace("ClearInput",{locate:r})}async aiAct(e,t){return this.withReportOperation(()=>this.executeAiAct(e,t))}async executeAiAct(e,t){let r,n,o,i=null==t?void 0:t._internalReportDisplay,a="string"==typeof e?e:e.prompt,s=(null==i?void 0:i.prompt)||a,l=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0,c=null==t?void 0:t.abortSignal;if(null==c?void 0:c.aborted)throw Error(`aiAct aborted: ${c.reason||"signal already aborted"}`);let A=async()=>{var r,n,o,a;let l=this.resolveModelRuntime("planning"),A=this.resolveModelRuntime("locate"),u=this.resolveUserContext("aiAct",null==t?void 0:t.context),d=((e,t)=>{let r=aC(t);if(!r)return e;let n="string"==typeof e?e:e.prompt,o=`${r}
866
+
867
+ ${n}`;return"string"==typeof e?o:{...e,prompt:o}})(e,u),p=(()=>{let e=(null==t?void 0:t.effort)??((null==t?void 0:t.deepThink)===!0?"deepThink":"balance");if((null==t?void 0:t.effort)!==void 0&&void 0!==t.deepThink&&ul('When both "effort" and "deepThink" are provided, "effort" takes precedence.'),"fast"===e&&"custom"===l.adapter.planning.kind)throw Error(`The "fast" aiAct effort is not supported with custom planning adapters (modelFamily: ${l.config.modelFamily??"unknown"}).`);return"deepThink"===e&&"custom"===l.adapter.planning.kind?(ul(`The "deepThink" aiAct effort is not supported with custom planning adapters (modelFamily: ${l.config.modelFamily??"unknown"}). It will be ignored.`),"balance"):e})(),h=null==t?void 0:t.deepLocate;h&&!l.adapter.planning.supportsActionDeepLocate&&(ul(`The "deepLocate" option is not supported for aiAct with the current planning adapter (modelFamily: ${l.config.modelFamily??"unknown"}). It will be ignored.`),h=!1);let m=null==t?void 0:t.cacheable,f=this.resolveReplanningCycleLimit(l),g=l.adapter.planning.cacheEnabled&&!1!==m?null==(r=this.taskCache)?void 0:r.matchPlanCache(d):void 0,y=!1;if((null==g?void 0:g.cacheUsable)&&(null==(n=this.taskCache)?void 0:n.isCacheResultUsed)&&(null==(a=g.cacheContent)||null==(o=a.yamlWorkflow)?void 0:o.trim())){let t=g.cacheContent.yamlWorkflow;try{await this.taskExecutor.loadYamlFlowAsPlanning(e,t,i),us("matched cache, will call .runYaml to run the action"),await s$(async()=>{let e=s2(this),r=c?s0(this,c):void 0;try{await this.runYaml(t)}finally{null==r||r(),e.finish()}});return}catch(e){if(e instanceof s1||sK(e))throw e;null==c||c.throwIfAborted(),y=!0,ul(`cached aiAct plan failed, will replan and disable the stale cache: ${e instanceof Error?e.message:String(e)}`)}}let{output:v}=await this.taskExecutor.action(e,l,A,u,m,f,p,void 0,h,c,i);if(this.taskCache&&!1!==m){let e=y?[]:null==v?void 0:v.yamlFlow;if(!y&&!(null==e?void 0:e.length))return null==v?void 0:v.output;let t=e??[],r=iT.Ay.dump({tasks:[{name:s,flow:t}]});this.taskCache.updateOrAppendCacheRecord({type:"plan",prompt:d,yamlWorkflow:r},g)}return null==v?void 0:v.output},u=this.interface.registerFileChooserListener?new Al(this.interface):void 0;this.activeFileChooserAccepter=u,this.activeFileChooserAllowedDir=(null==t?void 0:t.fileChooserAllowedDir)?(0,ts.resolve)(t.fileChooserAllowedDir):void 0;try{if(null==l?void 0:l.length){if(!u)throw Error(`File upload is not supported on ${this.interface.interfaceType}`);await u.register(l)}o=await A()}catch(e){r={error:e}}finally{this.activeFileChooserAccepter=void 0,this.activeFileChooserAllowedDir=void 0;try{n=await (null==u?void 0:u.clear())}catch(e){ul(`Failed to clear file chooser registration: ${e}`)}}if(r)throw r.error;if(n)throw n;return o}async runMarkdown(e,t){return this.withReportOperation(()=>this.executeMarkdown(e,t))}async executeMarkdown(e,t){let r=await (0,cL.readFile)(e,"utf-8"),{prompt:n}=await A1(r,e);return this.aiAct(n,{...t,_internalReportDisplay:{type:"Markdown",prompt:(0,ts.basename)(e)}})}async runGherkinScenario(e,t){return this.withReportOperation(()=>A_(this,e,t))}async aiAction(e,t){return this.aiAct(e,t)}async aiQuery(e,t){return this.createInsight().aiQuery(e,t)}async aiBoolean(e,t){return this.createInsight().aiBoolean(e,t)}async aiNumber(e,t){return this.createInsight().aiNumber(e,t)}async aiString(e,t){return this.createInsight().aiString(e,t)}async aiAsk(e,t){return this.createInsight().aiAsk(e,t)}async aiLocate(e,t){return this.withReportOperation(()=>this.executeLocate(e,t))}async executeLocate(e,t){let r=sS(e,this.withContext("aiLocate",t));(0,eH.vA)(r,"cannot get locate param for aiLocate");let n=AC(r),o=this.resolveModelRuntime("locate"),i=this.resolveModelRuntime("planning"),{output:a}=await this.taskExecutor.runPlans(AT("Locate",AP(r)),[n],i,o,(null==t?void 0:t.uiContext)?{uiContext:t.uiContext}:void 0),{element:s}=a;return{rect:s?s.rect??{left:Math.max(s.center[0]-3.5,0),top:Math.max(s.center[1]-3.5,0),width:8,height:8}:void 0,center:null==s?void 0:s.center,dpr:null==s?void 0:s.dpr}}async aiAssert(e,t,r){return this.createInsight().aiAssert(e,t,r)}async aiWaitFor(e,t){let r=this.resolveModelRuntime("insight","boolean"),n=this.withContext("aiWaitFor",t);await this.withReportOperation(()=>this.taskExecutor.waitFor(e,{...n,timeoutMs:(null==n?void 0:n.timeoutMs)||15e3,checkIntervalMs:(null==n?void 0:n.checkIntervalMs)||3e3},r))}async ai(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.aiAct(...t)}async runYaml(e,t){return this.withReportOperation(()=>this.executeYaml(e,t))}async executeYaml(e,t){if(this.destroyed)throw Error("Cannot run YAML using a destroyed Agent.");let r=new cC(function(e,t,r){let n,o=e;if(-1!==e.indexOf("android")&&e.match(/deviceId:\s*(\d+)/)){let t;o=e.replace(/deviceId:\s*(\d+)/g,(e,r)=>(t=r,`deviceId: '${r}'`)),console.warn(`please use string-style deviceId in yaml script, for example: deviceId: "${t}"`)}let i=(n=!1,o.split("\n").map(e=>{let t=e.trimStart();if(!t||t.startsWith("#"))return e;if(0==e.length-t.length){if(sv.test(t))return n=!0,e;sb.test(t)&&(n=!1)}return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r="",n=0,o=0;for(;o<e.length;){let i=e.indexOf("${",o);if(-1===i)break;let a=e.indexOf("}",i+2);if(-1===a)break;let s=e.slice(i+2,a);if(!s){o=a+1;continue}r+=e.slice(n,i);let l=s.trim(),c=sg.env[l];if(void 0===c)if(t)r+=e.slice(i,a+1);else throw Error(`Environment variable "${l}" is not defined`);else r+=c;n=a+1,o=a+1}return r+e.slice(n)}(e,n)}).join("\n")),a=iT.Ay.load(i,{schema:iT.Ay.JSON_SCHEMA});a&&"object"==typeof a&&!Array.isArray(a)&&(null==r||r(a));let s=t?`, failed to load ${t}`:"";return sE(a),(0,eH.vA)(a.tasks,`property "tasks" is required in yaml script ${s}`),(0,eH.vA)(Array.isArray(a.tasks),`property "tasks" must be an array in yaml script, but got ${a.tasks}`),a}(e,"yaml"),async()=>({agent:this,freeFn:[]}),void 0,void 0,null==t?void 0:t.abortSignal);if(await r.run(),"error"===r.status){let e=r.taskStatusList.find(e=>sK(e.error));if(e)throw e.error;let t=r.taskStatusList.filter(e=>"error"===e.status).map(e=>{var t;return`task - ${e.name}: ${null==(t=e.error)?void 0:t.message}`}).join("\n");throw Error(`Error(s) occurred in running yaml script:
868
+ ${t}`)}return{result:r.result}}async evaluateJavaScript(e){return(0,eH.vA)(this.interface.evaluateJavaScript,"evaluateJavaScript is not supported in current agent"),this.withReportOperation(()=>this.interface.evaluateJavaScript(e))}addDumpUpdateListener(e){return this.reportManager.addDumpUpdateListener(e)}removeDumpUpdateListener(e){this.reportManager.removeDumpUpdateListener(e)}clearDumpUpdateListeners(){this.reportManager.clearDumpUpdateListeners()}addProgressListener(e){return this.progressBus.subscribe(e)}removeProgressListener(e){this.progressBus.unsubscribe(e)}clearProgressListeners(){this.progressBus.clear()}notifyDumpUpdateListeners(e){this.reportManager.notifyDumpUpdateListeners(e)}async destroy(){let e;if(!this.destroyed){for(let e of(this.destroyed=!0,await (0,sz.TH)(this),await this.reportManager.waitForOperations(),this.ownedObservers))try{await e.dispose()}catch(e){us(`error disposing unexported observer during destroy: ${e}`)}this.ownedObservers.clear(),this.activeObserver=null;try{var t,r;await (null==(t=(r=this.interface).destroy)?void 0:t.call(r))}catch(t){e=t}if(await this.reportManager.waitForReset(),sV(this)||await this.finalizeReport(),e)throw e}}async sleep(e,t){var r;null==t||null==(r=t.abortSignal)||r.throwIfAborted(),await this.withReportOperation(()=>this.taskExecutor.sleep(e,null==t?void 0:t.abortSignal))}async recordToReport(e,t){return this.withReportOperation(()=>this.writeRecordToReport(e,t))}async writeRecordToReport(e,t){let r=Date.now(),n=null==t?void 0:t.screenshots,o=null==t?void 0:t.screenshotBase64,i=void 0!==n,a=void 0!==o;if(i&&!Array.isArray(n))throw Error("recordToReport: screenshots must be an array");if(a&&"string"!=typeof o)throw Error("recordToReport: screenshotBase64 must be a string");if(i&&a)throw Error("recordToReport: provide only one of screenshots or screenshotBase64");if(t&&"subType"in t)throw Error("recordToReport: subType is not supported");let s=i?n:void 0;if(s&&0===s.length)throw Error("recordToReport: screenshots cannot be empty");let l=(s??(a?[{base64:o}]:[{base64:await this.interface.screenshotBase64()}])).map((e,t)=>{let n=function(e,t){if(!e||"string"!=typeof e.base64)throw Error(`recordToReport: screenshot #${t+1} must include a base64 string`);if(void 0!==e.description&&"string"!=typeof e.description)throw Error(`recordToReport: screenshot #${t+1} description must be a string`);return{base64:((e,t)=>{let r=(null==t?void 0:t.label)??"screenshot base64",n=e.trim();if(!n)throw Error(`${r} cannot be empty`);let o=n.match(n3);if(o){let e="jpg"===o[1].toLowerCase()?"jpeg":o[1].toLowerCase(),t=o[2];if(!t.replace(/\s/g,""))throw Error(`${r} cannot be empty`);return n7(e,t)}if(n.startsWith("data:")||!n5.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return n7("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),o=r+t;return{type:"screenshot",ts:o,screenshot:nF.create(n.base64,o),description:n.description}}),c={taskId:(0,eH.uR)(),type:"Log",subType:"Screenshot",status:"finished",recorder:l,timing:{start:r,end:r,cost:0},param:{content:(null==t?void 0:t.content)||""},executor:async()=>{}},A=new aY({id:(0,eH.uR)(),logTime:r,name:`Log - ${e||"untitled"}`,description:(null==t?void 0:t.content)||"",tasks:[c]});this.appendExecutionDump(A),this.writeOutActionDumps(A),await this.reportManager.flushPendingWrites(),this.notifyDumpUpdateListeners(A)}async recordErrorToReport(e,t){return this.withReportOperation(()=>this.writeErrorToReport(e,t))}async writeErrorToReport(e,t){let r=Date.now(),n=sD(t.error),o=[],i=t.screenshotBase64??await this.interface.screenshotBase64();i&&o.push({type:"screenshot",ts:r,screenshot:nF.create(i,r)});let a={taskId:(0,eH.uR)(),type:"Log",subType:"Error",status:"failed",recorder:o,timing:{start:r,end:r,cost:0},param:{content:t.content||""},error:n,errorMessage:n.message,errorStack:n.stack,executor:async()=>{}},s=new aY({id:(0,eH.uR)(),logTime:r,name:e,description:t.content||n.message,tasks:[a]});this.appendExecutionDump(s),this.writeOutActionDumps(s),await this.reportManager.flushPendingWrites(),this.notifyDumpUpdateListeners(s)}async logScreenshot(e,t){await this.recordToReport(e,t)}_unstableLogContent(){let{groupName:e,groupDescription:t,executions:r}=this.dump;return{groupName:e,groupDescription:t,executions:r||[]}}async freezePageContext(){us("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,us("Page context frozen successfully")}async unfreezePageContext(){us("Unfreezing page context"),this.frozenUIContext=void 0,us("Page context unfrozen successfully")}normalizeFileInput(e){return c4(Array.isArray(e)?e:[e])}async flushCache(e){if(!this.taskCache)throw Error("Cache is not configured");this.taskCache.flushCacheToFile(e)}constructor(e,t){let r;ua(this,"interface",void 0),ua(this,"service",void 0),ua(this,"reportManager",void 0),ua(this,"taskExecutor",void 0),ua(this,"opts",void 0),ua(this,"dryMode",!1),ua(this,"onTaskStartTip",void 0),ua(this,"taskCache",void 0),ua(this,"metricsCollector",new AQ),ua(this,"usageCallCounter",0),ua(this,"countedUsageKeys",new Set),ua(this,"progressBus",new Ap),ua(this,"destroyed",!1),ua(this,"actionReadiness",void 0),ua(this,"modelConfigManager",void 0),ua(this,"frozenUIContext",void 0),ua(this,"activeObserver",null),ua(this,"ownedObservers",new Set),ua(this,"fullActionSpace",void 0),ua(this,"activeFileChooserAccepter",void 0),ua(this,"activeFileChooserAllowedDir",void 0),this.interface=e,this.opts=function(e){let t=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},e||{});return ld(t),t}(t),void 0!==this.opts.waitForActionReady&&(this.actionReadiness=new sZ(this.opts.waitForActionReady)),function(e,t){if(void 0!==e.aiContexts&&("object"!=typeof e.aiContexts||null===e.aiContexts||Array.isArray(e.aiContexts)))throw TypeError("opts.aiContexts must be a plain object");for(let[t,r]of Object.entries(e.aiContexts??{})){if(!lR(t))throw TypeError(`Unknown Agent context key: ${t}`);if(void 0!==r&&"string"!=typeof r)throw TypeError(`Agent context "${t}" must be a string`)}let r=void 0!==e.aiActContext?"aiActContext":void 0!==e.aiActionContext?"aiActionContext":void 0;r&&t(`Agent option "${r}" is deprecated; use "aiContexts.aiAct" instead. When both are provided, "aiContexts.aiAct" takes precedence.`);let n={...e.aiContexts},o=n.aiAct??e.aiActContext??e.aiActionContext;if(void 0!==o&&(n.aiAct=o,e.aiActContext=o,e.aiActionContext=o),e.aiContexts=n,e.modelConfig&&("object"!=typeof e.modelConfig||Array.isArray(e.modelConfig)))throw Error(`opts.modelConfig must be a plain object map of env keys to values, but got ${typeof e.modelConfig}`)}(this.opts,ul),this.modelConfigManager=(null==t?void 0:t.modelConfig)?new tJ(t.modelConfig,t.createOpenAIClient):(null==t?void 0:t.createOpenAIClient)?new uc(tQ,t.createOpenAIClient):tQ,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new sa(async()=>this.getUIContext());const n=function(e){!function(e){if(!0===e)throw Error('cache: true requires an explicit cache ID. Please provide:\nExample: cache: { id: "my-cache-id" }');if(!e||"object"!=typeof e)return;if(!e.id)throw Error('cache configuration requires an explicit id.\nExample: cache: { id: "my-cache-id" }');if(void 0!==e.cacheDir&&("string"!=typeof e.cacheDir||!e.cacheDir.trim()))throw Error('cache.cacheDir must be a non-empty string when provided.\nExample: cache: { id: "my-cache-id", cacheDir: "./my-cache-dir" }');let t=e.strategy;if(void 0!==t&&"string"!=typeof t)throw Error(`cache.strategy must be a string when provided, but received type ${typeof t}`);if(void 0!==t&&!Ai.some(e=>e===t))throw Error(`cache.strategy must be one of ${Aa}, but received "${t}"`)}(e.cache);let t=function(e,t){if(void 0!==e){if(!1===e)return!1;if(!0===e)return{id:t};if("object"==typeof e&&null!==e)return e.id?e:{...e,id:t}}if(tq.getEnvConfigInBoolean(tu.Od)&&t)return{id:t}}(e.cache,e.cacheId||"default");if(!t)return null;if("object"==typeof t&&null!==t){var r;let e=t.id,n=t.strategy??"read-write",o="write-only"===n;return{id:e,enabled:!o,readOnly:"read-only"===n,writeOnly:o,cacheDir:null==(r=t.cacheDir)?void 0:r.trim()}}return null}(t||{});n&&(this.taskCache=new c$(n.id,n.enabled,void 0,{readOnly:n.readOnly,writeOnly:n.writeOnly,cacheDir:n.cacheDir}));const o=this.interface.actionSpace(),i=this.interface.registerFileChooserListener?[(r=async e=>{if(!this.activeFileChooserAccepter)throw Error("RegisterFileChooserAccept can only be used while aiAct is running");if(!this.activeFileChooserAllowedDir)throw Error("RegisterFileChooserAccept requires aiAct option fileChooserAllowedDir");await this.activeFileChooserAccepter.registerFromAllowedDir(e,this.activeFileChooserAllowedDir)},{name:"RegisterFileChooserAccept",description:"Configure files for file chooser dialogs triggered by later actions in this aiAct",interfaceAlias:"registerFileChooserAccept",paramSchema:iI,sample:{files:["fixtures/document.pdf"]},call:async e=>{await r(e.files)}})]:[];this.fullActionSpace=[...o,...i,iR()],this.taskExecutor=new AF(this.interface,this.service,{getDefaultModelRuntime:()=>this.resolveModelRuntime("default"),taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this),replanningCycleLimit:this.opts.replanningCycleLimit,waitAfterAction:this.opts.waitAfterAction,actionReadiness:this.actionReadiness,useDeviceTime:this.opts.useDeviceTime,getAbortSignal:()=>s_(this),operationResource:this,actionSpace:this.fullActionSpace,hooks:{onExecutionCreated:e=>{this.reportManager.bindRunner(e)},onSnapshotChange:async e=>{this.reportManager.assertRunnerCurrent(e);let t=e.dump();this.appendExecutionDump(t,e),this.collectUsageMetrics(t),this.writeOutActionDumps(t),await this.reportManager.flushPendingWrites(),this.reportManager.notifyDumpUpdateListeners(t)},onProgress:this.progressBus.publish}}),this.reportManager=new Ao({getOptions:()=>this.opts,getDeviceType:()=>this.interface.interfaceType,isDestroyed:()=>this.destroyed,isExternallyBusy:()=>!!this.activeObserver||sV(this)||(0,sz.ni)(this)}),Object.defineProperty(this,cU,{value:{exportRecord:async e=>((0,eH.vA)(e instanceof ur,"Cannot export an observation that was not created by this Midscene runtime"),e.exportRecord()),loadRecord:e=>(ui(e),new ur(e,this.createInsight(()=>ui(e))))}})}}ua(uA,"CONTEXT_RETRY_MAX",3),ua(uA,"CONTEXT_RETRY_DELAY_MS",1500);r(33675);r(8963).Buffer;RegExp(`${nI}="(inline|directory)"`);r(8963).Buffer;rm.k5(["split","to-markdown","merge-html"]).optional().describe("Report action to run. Supports: split, to-markdown, merge-html. Defaults to split."),rm.Yj().optional().describe("Input report HTML path (e.g. ./report/index.html). Used by split and to-markdown."),rm.KC([rm.Yj(),rm.YO(rm.Yj())]).optional().describe("Input report HTML path for the merge action. Repeat the flag to merge multiple reports (e.g. --htmlReport ./a/index.html --htmlReport ./b.html)."),rm.Yj().optional().describe("Output directory for generated report artifacts. For merge, defaults to the Midscene report directory."),rm.Yj().optional().describe("Output report file/directory name (without .html) for the merge action. Defaults to an auto-generated name."),rm.KC([rm.zM(),rm.Yj()]).optional().describe("Overwrite the existing merged report file if present (merge action only).");class uu{async getActionSpace(e){return[]}getRecorderScreenshotAssetUrl(e){return null}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};try{let r=this.prepareParamsForValidation(e.params,t);return t.paramSchema.parse(r),{valid:!0}}catch(e){return this.handleValidationError(e)}}createDisplayContent(e,t,r){return t&&e.params&&(null==r?void 0:r.paramSchema)?this.buildParamsDisplayList(e.params,r).join("\n")||e.prompt||"":e.prompt||""}formatBasicErrorMessage(e){return(null==e?void 0:e.message)||"Unknown error"}getSchemaKeys(e){if(!(null==e?void 0:e.paramSchema)||!("shape"in e.paramSchema))return[];let t=e.paramSchema;return t&&"shape"in t?Object.keys(t.shape):[]}filterValidParams(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return Object.keys(e).forEach(n=>{t.includes(n)||void 0===e[n]||null===e[n]||""===e[n]||(r[n]=e[n])}),r}actionNeedsStructuredParams(e){return"object"!=typeof e.paramSchema||!("shape"in e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0}prepareParamsForValidation(e,t){let r={...e};return t.paramSchema&&r7(t.paramSchema).forEach(e=>{"string"==typeof r[e]&&(r[e]={prompt:r[e],center:[0,0],rect:{left:0,top:0,width:0,height:0}})}),r}handleValidationError(e){if(e.errors&&e.errors.length>0){let t=e.errors.filter(e=>{let t=e.path.join(".");return!t.includes("center")&&!t.includes("rect")}).map(e=>{let t=e.path.join(".");return`${t}: ${e.message}`});if(t.length>0)return{valid:!1,errorMessage:`Validation error: ${t.join(", ")}`}}let t=e instanceof Error?e.message:"Unknown validation error";return{valid:!1,errorMessage:`Parameter validation failed: ${t}`}}buildParamsDisplayList(e,t){let r=[],n=t.paramSchema;if(!(n&&"shape"in n))return r;let o=r7(n);return Object.keys(n.shape).forEach(t=>{let n=e[t];if(this.isValidParamValue(n)){let e=this.capitalizeFirstLetter(t),i=this.formatParamValue(t,n,o.includes(t));r.push(`${e}: ${i}`)}}),r}isValidParamValue(e){return null!=e&&""!==e}capitalizeFirstLetter(e){return e.charAt(0).toUpperCase()+e.slice(1)}formatParamValue(e,t,r){return r||"string"==typeof t?`"${t}"`:"number"==typeof t&&"distance"===e?`${t}px`:`${t}`}}function ud(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class up extends uu{get id(){return this._id}onDumpUpdate(e){this.dumpUpdateCallback=void 0,this.dumpUpdateCallback=e}setProgressCallback(e){this.progressCallback=void 0,this.progressCallback=e}async parseStructuredParams(e,t,r){return await cP(e,t,r)}formatErrorMessage(e){return((null==e?void 0:e.message)||"").includes("of different extension")?"Conflicting extension detected. Please disable the suspicious plugins and refresh the page. Guide: https://midscenejs.com/quick-start.html#chrome-extension-faq":this.formatBasicErrorMessage(e)}async getActionSpace(e){var t;if(!this.agent&&this.agentFactory)try{this.agent=await this.agentFactory(),this.configDirty=!1}catch(e){return console.warn("Failed to create agent for actionSpace:",e),[]}if(null==(t=this.agent)?void 0:t.getActionSpace)return await this.agent.getActionSpace();if(this.agent&&"interface"in this.agent&&"object"==typeof this.agent.interface){let e=this.agent.interface;if(null==e?void 0:e.actionSpace)return e.actionSpace()}return e&&"object"==typeof e&&"actionSpace"in e?e.actionSpace():[]}async checkStatus(){return!0}async overrideConfig(e){tW(e),this.configDirty=!0,console.log("Config updated. Agent will be recreated on next execution.")}async runConnectivityTest(e){let t=new tJ(e);return sf({defaultModelConfig:t.getModelConfig("default"),locateModelConfig:t.getModelConfig("locate"),planningModelConfig:t.getModelConfig("planning"),insightModelConfig:t.getModelConfig("insight")})}async detachDebuggerSafely(){try{var e,t;let r=null==(e=this.agent)?void 0:e.interface;await (null==r||null==(t=r.detachDebugger)?void 0:t.call(r))}catch(e){console.warn("Failed to detach debugger:",e)}}async executeAction(e,t,r){var n,o,i;if(this.executionController)throw Error("Another task is already running");let a=new AbortController;this.executionController=a;let s=()=>{var e;return a.abort(null==(e=r.abortSignal)?void 0:e.reason)};(null==(n=r.abortSignal)?void 0:n.aborted)?s():null==(o=r.abortSignal)||o.addEventListener("abort",s,{once:!0});try{return await this.executeWithReport(e,t,{...r,abortSignal:a.signal})}finally{null==(i=r.abortSignal)||i.removeEventListener("abort",s),this.executionController=void 0}}async executeWithReport(e,t,r){var n,o,i;let a;if(this.agentFactory&&(!this.agent||this.configDirty)){if(this.agent){console.log("Destroying old agent before execution...");try{await (null==(n=(o=this.agent).destroy)?void 0:n.call(o))}catch(e){console.warn("Failed to destroy old agent:",e)}this.agent=null}await this.recreateAgent()}if(!this.agent)throw Error("No agent available. Please provide either an agent instance or agentFactory.");let s=this.agent,l=await this.getActionSpace();await s.resetDump(),r.requestId&&(this.currentRequestId=r.requestId,a=s.addDumpUpdateListener((e,t)=>{this.currentRequestId===r.requestId&&this.dumpUpdateCallback&&this.dumpUpdateCallback(e,t)}));try{let n=null,o=null;try{null==(i=r.abortSignal)||i.throwIfAborted(),n=await cM(s,e,l,t,r)}catch(e){o=e}let a={result:n,dump:null,reportHTML:null,error:o?o instanceof Error?o.message:String(o):null};try{if(s.dumpDataString){let e=s.dumpDataString();e&&(a.dump=aG.fromSerializedString(e))}}catch(e){console.warn("Failed to get dump from agent:",e)}try{s.reportHTMLString&&(a.reportHTML=s.reportHTMLString()||null)}catch(e){}try{await s.finalizeReport()}catch(e){a.error??(a.error=this.formatErrorMessage(e))}return a}finally{a&&a()}}async recreateAgent(){if(!this.agentFactory)throw Error("Cannot recreate agent: factory function not provided. Please provide agentFactory in PlaygroundConfig to enable agent recreation.");console.log("Creating new agent with latest config...");try{this.agent=await this.agentFactory(),this.configDirty=!1,console.log("Agent created successfully")}catch(e){throw console.error("Failed to create agent:",e),e}}async cancelTask(e){var t,r;null==(t=this.executionController)||t.abort(Error(`Task cancelled by user: ${e}`));let n=this.agent;if(!n)return{error:"No active agent found for this requestId"};let o=null,i=null;try{if("function"==typeof n.dumpDataString){let e=n.dumpDataString();e&&(o=aG.fromSerializedString(e))}}catch(e){console.warn("[LocalExecutionAdapter] Failed to get dump data before cancel:",e)}try{if("function"==typeof n.reportHTMLString){let e=n.reportHTMLString();e&&"string"==typeof e&&(i=e)}}catch(e){console.warn("[LocalExecutionAdapter] reportHTMLString not available in this environment")}try{return await (null==(r=n.destroy)?void 0:r.call(n)),{success:!0,dump:o,reportHTML:i}}catch(t){let e=t instanceof Error?t.message:"Unknown error";return console.error(`[LocalExecutionAdapter] Failed to cancel agent: ${e}`),{error:`Failed to cancel: ${e}`,dump:o,reportHTML:i}}finally{this.agent===n&&(this.agent=null)}}async getCurrentExecutionData(){let e={dump:null,reportHTML:null};try{var t,r;if(null==(t=this.agent)?void 0:t.dumpDataString){let t=this.agent.dumpDataString();t&&(e.dump=aG.fromSerializedString(t))}(null==(r=this.agent)?void 0:r.reportHTMLString)&&(e.reportHTML=this.agent.reportHTMLString()||null)}catch(e){console.error("Failed to get current execution data:",e)}return e}async getInterfaceInfo(){var e,t,r;if(!(null==(e=this.agent)?void 0:e.interface))return null;try{let e=this.agent.interface.interfaceType||"Unknown",n=(null==(t=(r=this.agent.interface).describe)?void 0:t.call(r))||void 0,o="function"==typeof this.agent.interface.size?await this.agent.interface.size():void 0,i="function"==typeof this.agent.interface.actionSpace?this.agent.interface.actionSpace().map(e=>null==e?void 0:e.name).filter(e=>"string"==typeof e):void 0;return{type:e,description:n,...o?{size:o}:{},...i?{actionTypes:i}:{}}}catch(e){return console.error("Failed to get interface info:",e),null}}async getRuntimeInfo(){var e,t,r,n;if(!(null==(e=this.agent)?void 0:e.interface))return null;try{let e;return e=(n={interfaceType:this.agent.interface.interfaceType||"Unknown",interfaceDescription:(null==(t=(r=this.agent.interface).describe)?void 0:t.call(r))||void 0,supportsScreenshot:"function"==typeof this.agent.interface.screenshotBase64,mjpegStreamUrl:this.agent.interface.mjpegStreamUrl}).interfaceType||"Unknown",{platformId:n.platformId,title:n.title,platformDescription:n.platformDescription,interface:{type:e,description:n.interfaceDescription},preview:n.preview?n.preview:"number"==typeof n.scrcpyPort?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{kind:"scrcpy",screenshotPath:"/screenshot",capabilities:[{kind:"scrcpy",label:"scrcpy streaming",live:!0},{kind:"screenshot",label:"Screenshot fallback",live:!1}],custom:e,...t}}({scrcpyPort:n.scrcpyPort}):n.mjpegStreamUrl?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{kind:"mjpeg",screenshotPath:"/screenshot",mjpegPath:"/mjpeg",capabilities:[{kind:"mjpeg",label:"MJPEG streaming",live:!0},{kind:"screenshot",label:"Screenshot fallback",live:!1}],...e}}():n.supportsScreenshot?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{kind:"screenshot",screenshotPath:"/screenshot",capabilities:[{kind:"screenshot",label:"Screenshot polling",live:!1}],...e}}():{kind:"none",capabilities:[]},executionUxHints:function(e){if(!e)return[];let t=e.executionUxHints;if(Array.isArray(t))return t.filter(e=>"string"==typeof e&&e.length>0);let r=e.executionUx;return"string"==typeof r&&r.length>0?[r]:[]}(n.metadata),metadata:{...n.metadata||{}}}}catch(e){return console.error("Failed to get runtime info:",e),null}}constructor(e,t){super(),ud(this,"agent",void 0),ud(this,"agentFactory",void 0),ud(this,"dumpUpdateCallback",void 0),ud(this,"progressCallback",void 0),ud(this,"_id",void 0),ud(this,"currentRequestId",void 0),ud(this,"executionController",void 0),ud(this,"configDirty",!1),this.agent=e??null,this.agentFactory=t,this._id=(0,eH.uR)()}}function uh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class um extends uu{resolveReportUrl(e){if(!e||!this.serverUrl)return e;let t={...e,url:new URL(e.url,this.serverUrl).toString()};return e.replayUrl&&(t.replayUrl=new URL(e.replayUrl,this.serverUrl).toString()),t}onDumpUpdate(e){this.dumpUpdateCallback=void 0,this.dumpUpdateCallback=e}get id(){return this._id}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};if(t.paramSchema&&"object"==typeof t.paramSchema){let r=t.paramSchema;if(r.shape||"ZodObject"===r.type){let t=r.shape||{},n=Object.keys(t).filter(r=>{var n,o;let i=t[r];return!((null==i?void 0:i.isOptional)||(null==i||null==(n=i._def)?void 0:n.innerType)||(null==i||null==(o=i._def)?void 0:o.typeName)==="ZodOptional")&&(void 0===e.params[r]||""===e.params[r])});if(n.length>0)return{valid:!1,errorMessage:`Missing required parameters: ${n.join(", ")}`}}}return{valid:!0}}async parseStructuredParams(e,t,r){return await cP(e,t,r)}formatErrorMessage(e){let t=(null==e?void 0:e.message)||"",r=[{keyword:"adb",message:"ADB connection error. Please ensure device is connected and USB debugging is enabled."},{keyword:"UIAutomator",message:"UIAutomator error. Please ensure the UIAutomator server is running on the device."}].find(e=>{let{keyword:r}=e;return t.includes(r)});return r?r.message:this.formatBasicErrorMessage(e)}async executeAction(e,t,r){if(this.serverUrl&&"undefined"!=typeof window)return this.executeViaServer(e,t,r);throw Error("Remote execution adapter requires server URL for execution")}async executeViaServer(e,t,r){let n={type:e,prompt:t.prompt,...this.buildOptionalPayloadParams(r,t)};r.context&&(n.context=r.context),r.requestId&&this.dumpUpdateCallback&&this.startProgressPolling(r.requestId);try{let e=await fetch(`${this.serverUrl}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!e.ok){let t=await e.text().catch(()=>"Unknown error");throw Error(`Server request failed (${e.status}): ${t}`)}let t=await e.json();return(null==t?void 0:t.report)&&(t.report=this.resolveReportUrl(t.report)),t}catch(e){throw console.error("Execute via server failed:",e),e}finally{this.stopProgressPolling()}}buildOptionalPayloadParams(e,t){let r={};return[{key:"requestId",value:e.requestId},{key:"deepLocate",value:e.deepLocate},{key:"deepThink",value:e.deepThink},{key:"screenshotIncluded",value:e.screenshotIncluded},{key:"domIncluded",value:e.domIncluded},{key:"deviceOptions",value:e.deviceOptions},{key:"reportDisplay",value:e.reportDisplay},{key:"params",value:t.params}].forEach(e=>{let{key:t,value:n}=e;null!=n&&""!==n&&(r[t]=n)}),r}async getActionSpace(e){if(this.serverUrl&&"undefined"!=typeof window)try{let t=await fetch(`${this.serverUrl}/action-space`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e})});if(!t.ok)throw Error(`Failed to get action space: ${t.statusText}`);let r=await t.json();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from server:",e)}if(e&&"object"==typeof e&&"actionSpace"in e)try{let t=e.actionSpace,r=await t();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from context:",e)}return[]}async checkStatus(){if(!this.serverUrl)return!1;try{let e=await fetch(`${this.serverUrl}/status`);if(200===e.status){try{let t=await e.json();t.id&&"string"==typeof t.id&&(this._id=t.id)}catch(e){console.debug("Failed to parse status response:",e)}return!0}return!1}catch(e){return console.warn("Server status check failed:",e),!1}}async overrideConfig(e){if(!this.serverUrl)throw Error("Server URL not configured");try{let t=await fetch(`${this.serverUrl}/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aiConfig:e})});if(!t.ok){let e=await t.json().catch(()=>null),r=(null==e?void 0:e.error)||t.statusText;throw Error(r)}}catch(e){throw console.error("Failed to override server config:",e),e}}async runConnectivityTest(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/connectivity-test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:e})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return t.json()}async getTaskProgress(e){if(!this.serverUrl)return{};if(!(null==e?void 0:e.trim()))return console.warn("Invalid requestId provided for task progress"),{};try{let t=await fetch(`${this.serverUrl}/task-progress/${encodeURIComponent(e)}`);if(!t.ok)return console.warn(`Task progress request failed: ${t.statusText}`),{};return await t.json()}catch(e){return console.error("Failed to poll task progress:",e),{}}}startProgressPolling(e){this.stopProgressPolling(),this.pollingIntervalId=setInterval(async()=>{try{let t=await this.getTaskProgress(e);t.executionDump&&this.dumpUpdateCallback&&this.dumpUpdateCallback("",t.executionDump)}catch(e){console.error("Error polling task progress:",e)}},500)}stopProgressPolling(){this.pollingIntervalId&&(clearInterval(this.pollingIntervalId),this.pollingIntervalId=void 0)}async cancelTask(e){if(!this.serverUrl)return{error:"No server URL configured"};if(!(null==e?void 0:e.trim()))return{error:"Invalid request ID"};try{let t=await fetch(`${this.serverUrl}/cancel/${encodeURIComponent(e)}`,{method:"POST"});if(!t.ok)return{error:`Cancel request failed: ${t.statusText}`};let r=await t.json();return(null==r?void 0:r.report)&&(r.report=this.resolveReportUrl(r.report)),{success:!0,...r}}catch(e){return console.error("Failed to cancel task:",e),{error:"Failed to cancel task"}}}async getScreenshot(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/screenshot`);if(!e.ok)return 409!==e.status&&console.warn(`Screenshot request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get screenshot:",e),null}}async interact(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/interact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Interact request failed (${t.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async startRecorderSession(e){if(!this.serverUrl)return{ok:!1,supported:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,supported:(null==r?void 0:r.supported)??!1,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:(null==r?void 0:r.error)||`Recorder start request failed (${t.status})`};return{ok:(null==r?void 0:r.ok)??!0,supported:(null==r?void 0:r.supported)??!0,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:null==r?void 0:r.error}}catch(e){return{ok:!1,supported:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderCapabilities(){if(!this.serverUrl)return{supported:!1,source:"unsupported",error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/capabilities`),t=await e.json().catch(()=>null);if(!e.ok)return{supported:!1,source:"unsupported",error:(null==t?void 0:t.error)||`Recorder capabilities request failed (${e.status})`};return{supported:(null==t?void 0:t.supported)===!0,source:(null==t?void 0:t.source)||"unsupported",platformId:null==t?void 0:t.platformId,error:null==t?void 0:t.error}}catch(e){return{supported:!1,source:"unsupported",error:e instanceof Error?e.message:"Unknown error"}}}async stopRecorderSession(){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/stop`,{method:"POST"});if(!e.ok)return{ok:!1,error:`Recorder stop request failed (${e.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(!this.serverUrl)return{events:[],nextIndex:e};try{let t=await fetch(`${this.serverUrl}/recorder/events?since=${encodeURIComponent(String(e))}&flushPending=false`);if(!t.ok)return{events:[],nextIndex:e};let r=await t.json().catch(()=>null);return{events:Array.isArray(null==r?void 0:r.events)?r.events:[],nextIndex:"number"==typeof(null==r?void 0:r.nextIndex)&&Number.isFinite(r.nextIndex)?r.nextIndex:e}}catch(t){return console.error("Failed to poll recorder events:",t),{events:[],nextIndex:e}}}async describeRecorderEventAtPoint(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/describe-event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({event:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Recorder describe request failed (${t.status})`};return r||{ok:!1,error:"Empty recorder describe response"}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Failed to describe recorder event"}}}async getRecorderScreenshotAsset(e){if(!this.serverUrl||!e)return null;try{let t=await fetch(`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`);if(!t.ok)return null;let r=await t.blob();return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e("string"==typeof n.result?n.result:null),n.onerror=()=>t(n.error),n.readAsDataURL(r)})}catch(e){return console.error("Failed to fetch recorder screenshot asset:",e),null}}getRecorderScreenshotAssetUrl(e){return this.serverUrl&&/^[a-zA-Z0-9_-]+$/.test(e)?`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`:null}async clearRecorderScreenshotAssets(e){if(!this.serverUrl||!e)return;let t=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok)throw Error(`Recorder screenshot cleanup request failed (${t.status})`)}async pruneRecorderScreenshotAssets(e,t){if(!this.serverUrl||!e)return;let r=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}/prune`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({assetIds:t})});if(!r.ok)throw Error(`Recorder screenshot prune request failed (${r.status})`)}async getInterfaceInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/interface-info`);if(!e.ok)return console.warn(`Interface info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get interface info:",e),null}}async getRuntimeInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/runtime-info`);if(!e.ok)return console.warn(`Runtime info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get runtime info:",e),null}}async getSessionInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/session`);if(!e.ok)return console.warn(`Session info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get session info:",e),null}}async getSessionSetup(e){if(!this.serverUrl)return null;try{let t=new URLSearchParams;Object.entries(e||{}).forEach(e=>{let[r,n]=e;("string"==typeof n||"number"==typeof n||"boolean"==typeof n)&&t.set(r,String(n))});let r=t.size>0?`?${t.toString()}`:"",n=await fetch(`${this.serverUrl}/session/setup${r}`);if(!n.ok){let e=await n.json().catch(()=>null);throw Error((null==e?void 0:e.error)||n.statusText||"Failed to load session setup")}return await n.json()}catch(e){throw console.error("Failed to get session setup:",e),e}}async listSessionTargets(){if(!this.serverUrl)return[];try{let e=await fetch(`${this.serverUrl}/session/targets`);if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText||"Failed to load session targets")}let t=await e.json();return Array.isArray(t)?t:[]}catch(e){throw console.error("Failed to get session targets:",e),e}}async createSession(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e||{})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return await t.json()}async destroySession(){if(!this.serverUrl)throw Error("Server URL not configured");let e=await fetch(`${this.serverUrl}/session`,{method:"DELETE"});if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText)}return await e.json()}constructor(e){super(),uh(this,"serverUrl",void 0),uh(this,"_id",void 0),uh(this,"dumpUpdateCallback",void 0),uh(this,"pollingIntervalId",void 0),this.serverUrl=e}}function uf(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ug{createAdapter(e,t,r,n){switch(e){case"local-execution":if(!r&&!n)throw Error("Agent or agentFactory is required for local execution");return new up(r,n);case"remote-execution":return new um(t||("undefined"!=typeof window&&window.location.protocol.includes("http")?window.location.origin:"http://localhost:5800"));default:throw Error(`Unsupported execution type: ${e}`)}}runtimeMetadataAdapter(){return this.adapter instanceof up||this.adapter instanceof um?this.adapter:null}async executeAction(e,t,r){var n;return await (null==(n=this.beforeActionHook)?void 0:n.call(this,e,t,r)),await this.adapter.executeAction(e,t,r)}setBeforeActionHook(e){this.beforeActionHook=e}async getActionSpace(e){return this.adapter.getActionSpace(e)}validateStructuredParams(e,t){return this.adapter.validateParams(e,t)}formatErrorMessage(e){return this.adapter.formatErrorMessage(e)}createDisplayContent(e,t,r){return this.adapter.createDisplayContent(e,t,r)}get id(){if(this.adapter instanceof um||this.adapter instanceof up)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof um)||this.adapter.checkStatus()}async overrideConfig(e){return this.adapter.overrideConfig(e)}async runConnectivityTest(e){return this.adapter.runConnectivityTest(e)}async getTaskProgress(e){return this.adapter instanceof um?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof um?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof up?this.adapter.onDumpUpdate(e):this.adapter instanceof um&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof up&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof um){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:t.report||null}}else if(this.adapter instanceof up){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:null}}return null}async getCurrentExecutionData(){return this.adapter instanceof up&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof um?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof um?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof um?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof um?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof um?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof um?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof um?this.adapter.describeRecorderEventAtPoint(e):{ok:!1,error:"Recorder aiDescribe requires remote execution"}}async getRecorderScreenshotAsset(e){return this.adapter instanceof um?this.adapter.getRecorderScreenshotAsset(e):null}getRecorderScreenshotAssetUrl(e){return this.adapter.getRecorderScreenshotAssetUrl(e)}async clearRecorderScreenshotAssets(e){this.adapter instanceof um&&await this.adapter.clearRecorderScreenshotAssets(e)}async pruneRecorderScreenshotAssets(e,t){this.adapter instanceof um&&await this.adapter.pruneRecorderScreenshotAssets(e,t)}async getInterfaceInfo(){let e=this.runtimeMetadataAdapter();return e?e.getInterfaceInfo():null}async getRuntimeInfo(){let e=this.runtimeMetadataAdapter();return e?e.getRuntimeInfo():null}async getSessionInfo(){return this.adapter instanceof um?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof um?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof um?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof um)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof um)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof up?"In-Browser-Extension":"Server"}constructor(e){uf(this,"adapter",void 0),uf(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var uy=r(13819);function uv(e){var t,r,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};uy.Ay.error({message:null!=(t=o.title)?t:"Something went wrong",description:null!=(r=o.description)?r:function(e){if("string"==typeof e)return e;if(e instanceof Error)return e.message||e.toString();if(e&&"object"==typeof e&&"message"in e){let t=e.message;if("string"==typeof t)return t}try{return JSON.stringify(e)}catch(t){return String(e)}}(e),placement:"bottomRight",duration:null!=(n=o.duration)?n:5})}var ub=r(85810);function uw(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?Object.fromEntries(e.fields.map(e=>[e.key,function(e,t){var r,n,o,i,a;return null!=t&&""!==t?t:"select"===e.type?null!=(i=null!=(o=e.defaultValue)?o:null==(n=e.options)||null==(r=n[0])?void 0:r.value)?i:"":null!=(a=null!=t?t:e.defaultValue)?a:""}(e,t[e.key])])):{}}function uE(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=uw(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}function ux(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function uk(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function uS(e){return Object.keys(e).length>0}function uI(e){return e?JSON.stringify(e):null}let uC="npx puppeteer@24.6.0 browsers install chrome",uO="https://pptr.dev/guides/configuration",uR=/could not find (?:google )?chrome/;function uj(e){if(e instanceof Error)return e.message||e.toString();if("string"==typeof e)return e;if(e&&"object"==typeof e&&"message"in e){let t=e.message;if("string"==typeof t)return t}return String(e)}function uP(){return(0,a.jsxs)("span",{"aria-hidden":!0,style:{display:"block",height:16,position:"relative",width:16},children:[(0,a.jsx)("span",{style:{border:"1.5px solid currentColor",borderRadius:3,height:10,left:5,position:"absolute",top:3,width:8}}),(0,a.jsx)("span",{style:{background:"#f6f8fa",border:"1.5px solid currentColor",borderRadius:3,height:10,left:2,position:"absolute",top:0,width:8}})]})}function uM(e){let{error:t}=e,r=uj(t),[n,o]=(0,s.useState)(!1);return(0,a.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(0,a.jsx)("div",{children:"Studio could not find the Chrome browser required to create a Web Agent."}),(0,a.jsx)("div",{children:"Run this command, then try again:"}),(0,a.jsxs)("div",{onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),style:{background:"#f6f8fa",border:"1px solid #d9d9d9",borderRadius:6,boxSizing:"border-box",maxWidth:"100%",minHeight:46,position:"relative"},children:[(0,a.jsx)("pre",{style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:14,lineHeight:1.4,margin:0,overflowX:"auto",padding:"12px 44px 12px 12px",whiteSpace:"nowrap"},children:uC}),(0,a.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>o(!1),onClick:()=>(function(e){if("undefined"!=typeof navigator)try{var t;null==(t=navigator.clipboard)||t.writeText(e).catch(()=>void 0)}catch(e){}})(uC),onFocus:()=>o(!0),style:{alignItems:"center",background:"#ffffff",border:"1px solid #d9d9d9",borderRadius:6,bottom:7,color:"#555",cursor:"pointer",display:"inline-flex",height:28,justifyContent:"center",opacity:+!!n,padding:0,pointerEvents:n?"auto":"none",position:"absolute",right:7,transition:"opacity 120ms ease",width:28},title:"Copy command",type:"button",children:(0,a.jsx)(uP,{})})]}),(0,a.jsxs)("div",{children:["Guide:"," ",(0,a.jsx)("a",{href:uO,rel:"noreferrer",target:"_blank",children:uO})]}),(0,a.jsx)(h.A,{getPopupContainer:()=>document.body,overlayInnerStyle:{width:"min(680px, calc(100vw - 48px))"},overlayStyle:{maxWidth:"min(680px, calc(100vw - 48px))"},placement:"topRight",title:(0,a.jsx)("pre",{style:{margin:0,maxHeight:280,overflow:"auto",whiteSpace:"pre-wrap",width:"100%"},children:r}),zIndex:1e4,children:(0,a.jsx)("button",{style:{alignSelf:"flex-start",background:"transparent",border:0,color:"inherit",cursor:"help",padding:0,textDecoration:"underline"},type:"button",children:"Original error"})})]})}function uT(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function uN(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){uT(i,n,o,a,s,"next",e)}function s(e){uT(i,n,o,a,s,"throw",e)}a(void 0)})}}function uD(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function uz(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let uB=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:400,height:283,fill:"none",viewBox:"0 0 400 283"},e),r=r={children:[(0,a.jsx)("path",{fill:"url(#server-offline-background_svg__a)",fillOpacity:.7,d:"M0 283h283v400H0z",transform:"rotate(-90 0 283)"}),(0,a.jsx)("path",{fill:"url(#server-offline-background_svg__b)",d:"M0 0h400v283H0z"}),(0,a.jsxs)("defs",{children:[(0,a.jsxs)("radialGradient",{id:"server-offline-background_svg__b",cx:0,cy:0,r:1,gradientTransform:"matrix(0 115.5 -163.251 0 200 141.5)",gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#F2F4F7",stopOpacity:0}),(0,a.jsx)("stop",{offset:1,stopColor:"#F2F4F7"})]}),(0,a.jsx)("pattern",{id:"server-offline-background_svg__a",width:1,height:1,patternTransform:"matrix(18 0 0 18 0 283)",patternUnits:"userSpaceOnUse",preserveAspectRatio:"none",viewBox:"0 0 12 12",children:(0,a.jsx)("path",{stroke:"#A1A1A1",strokeWidth:.2,d:"M.1.1h11.8v11.8H.1z"})})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},uF=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:178,height:135,fill:"none",viewBox:"0 0 178 135"},e),r=r={children:[(0,a.jsx)("g",{filter:"url(#server-offline-foreground_svg__a)",children:(0,a.jsx)("rect",{width:74,height:97.5,fill:"url(#server-offline-foreground_svg__b)",rx:12,transform:"matrix(.86603 .5 -.86603 .5 99.136 28.5)"})}),(0,a.jsx)("rect",{width:78,height:101.5,y:-2,fill:"url(#server-offline-foreground_svg__c)",stroke:"url(#server-offline-foreground_svg__d)",strokeWidth:4,rx:14,transform:"matrix(.86603 .5 -.86603 .5 97.404 4)"}),(0,a.jsx)("path",{fill:"url(#server-offline-foreground_svg__e)",d:"M78.147 31.404a.9.9 0 0 1 .156-.559c.117-.178.295-.34.524-.478.228-.138.503-.248.806-.322a4 4 0 0 1 .961-.114c.33 0 .657.038.961.113s.578.184.807.322c.23.137.407.3.525.478.117.178.17.368.157.559v3c.014.19-.04.38-.156.559a1.6 1.6 0 0 1-.524.478 3 3 0 0 1-.806.322c-.304.075-.631.114-.961.114s-.657-.038-.961-.113a3 3 0 0 1-.807-.321 1.6 1.6 0 0 1-.525-.479.9.9 0 0 1-.157-.559zm-9.678 8.414c-.632-.015-1.23-.17-1.668-.434s-.682-.615-.682-.98c0-.366.246-.717.684-.98.438-.264 1.036-.42 1.669-.434h5.196c.33-.007.659.024.968.091.308.068.59.17.828.303s.428.29.557.466a.93.93 0 0 1 .196.555.93.93 0 0 1-.197.554c-.13.176-.32.334-.558.466s-.52.235-.829.303a4 4 0 0 1-.968.09zm38.106 11a4 4 0 0 1-.956-.098 3 3 0 0 1-.815-.305 1.7 1.7 0 0 1-.547-.463.93.93 0 0 1-.193-.55c0-.188.066-.375.193-.549s.313-.331.547-.463c.233-.132.511-.235.815-.304.304-.07.629-.102.956-.098h5.196c.327-.004.652.029.956.098s.582.172.815.304c.234.132.42.29.547.463s.193.361.193.55a.93.93 0 0 1-.193.55 1.7 1.7 0 0 1-.547.462 3 3 0 0 1-.815.305 4 4 0 0 1-.956.097zm-9.38 2.585c.017-.369.281-.72.74-.978.457-.258 1.071-.402 1.71-.402.64 0 1.255.144 1.713.402.457.258.722.61.738.978v3a.9.9 0 0 1-.169.552c-.12.176-.299.336-.527.471a3 3 0 0 1-.803.316 4 4 0 0 1-.951.11c-.327 0-.65-.037-.952-.11a3 3 0 0 1-.802-.316 1.6 1.6 0 0 1-.527-.47.9.9 0 0 1-.17-.553zm8.515-18.5c-1.838-1.06-4.33-1.656-6.93-1.656-2.598 0-5.09.596-6.928 1.657l-5.196 3c-.225.14-.495.252-.796.33s-.626.12-.956.123a4 4 0 0 1-.963-.102 3 3 0 0 1-.817-.312 1.7 1.7 0 0 1-.54-.471.9.9 0 0 1-.178-.557.95.95 0 0 1 .215-.551c.135-.174.33-.33.571-.46l5.196-3c2.757-1.591 6.495-2.485 10.393-2.485s7.636.894 10.392 2.485c2.756 1.592 4.305 3.75 4.305 6s-1.549 4.409-4.305 6l-5.196 3a2.9 2.9 0 0 1-.796.33 4.087 4.087 0 0 1-1.919.021 3 3 0 0 1-.817-.311 1.7 1.7 0 0 1-.54-.472.9.9 0 0 1-.177-.556.95.95 0 0 1 .214-.552c.135-.174.33-.33.572-.46l5.196-3c1.837-1.06 2.87-2.5 2.87-4s-1.033-2.94-2.87-4m-29.444 5c.224-.14.494-.252.795-.33s.626-.12.956-.123.657.03.963.102c.306.071.584.177.817.312.234.135.417.295.54.472a.9.9 0 0 1 .178.556.95.95 0 0 1-.215.551c-.135.174-.329.33-.571.46l-5.196 3c-1.838 1.06-2.87 2.5-2.87 4s1.032 2.94 2.87 4c1.838 1.062 4.33 1.658 6.929 1.658s5.091-.596 6.929-1.657l5.196-3c.465-.249 1.079-.384 1.712-.376.633.007 1.238.155 1.686.414.448.258.705.607.717.973s-.221.72-.652.988l-5.196 3c-2.756 1.592-6.494 2.486-10.392 2.486s-7.636-.894-10.392-2.486c-2.757-1.591-4.305-3.75-4.305-6s1.548-4.408 4.305-6z"}),(0,a.jsx)("path",{fill:"#000",d:"m108.005 6.698 3.211-1.854c.954-.55 2.247-.86 3.596-.86s2.642.31 3.596.86c.953.55 1.489 1.297 1.489 2.076 0 .778-.536 1.525-1.489 2.076l-9.589 5.535c-.317.184-.749.287-1.198.287-.45 0-.881-.103-1.199-.287-.317-.183-.496-.432-.496-.692s.179-.508.496-.692l9.589-5.535-2.398-1.384-9.588 5.535c-.953.551-1.489 1.298-1.489 2.076 0 .779.536 1.526 1.489 2.076s2.247.86 3.596.86c1.348 0 2.642-.31 3.595-.86l9.589-5.535c1.589-.918 2.482-2.163 2.482-3.46s-.893-2.543-2.482-3.46c-1.59-.918-3.745-1.433-5.993-1.433s-4.403.515-5.993 1.433l-4.394 2.537z"}),(0,a.jsxs)("defs",{children:[(0,a.jsxs)("linearGradient",{id:"server-offline-foreground_svg__b",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#D9D9D9"}),(0,a.jsx)("stop",{offset:1,stopColor:"#E9E9EB"})]}),(0,a.jsxs)("linearGradient",{id:"server-offline-foreground_svg__c",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#7D7E80"}),(0,a.jsx)("stop",{offset:1,stopColor:"#C7C9CC"})]}),(0,a.jsxs)("linearGradient",{id:"server-offline-foreground_svg__d",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#fff"}),(0,a.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.2})]}),(0,a.jsxs)("linearGradient",{id:"server-offline-foreground_svg__e",x1:72.75,x2:90.111,y1:33.874,y2:63.944,gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#fff"}),(0,a.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.5})]}),(0,a.jsxs)("filter",{id:"server-offline-foreground_svg__a",width:176.348,height:118.721,x:.786,y:16.015,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,a.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,a.jsx)("feColorMatrix",{in:"SourceAlpha",result:"hardAlpha",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"}),(0,a.jsx)("feOffset",{dy:4}),(0,a.jsx)("feGaussianBlur",{stdDeviation:10}),(0,a.jsx)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,a.jsx)("feColorMatrix",{values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0"}),(0,a.jsx)("feBlend",{in2:"BackgroundImageFix",result:"effect1_dropShadow_4624_2901"}),(0,a.jsx)("feBlend",{in:"SourceGraphic",in2:"effect1_dropShadow_4624_2901",result:"shape"})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var uL=r(24707),uU=r(36820),uK=r(9870),uZ=r(99877),uJ=r(63147),uQ=r(90638);let uq="Auto dismiss keyboard",uX={aiAct:{group:"interaction",title:"Auto Planning: plan the steps and execute"},aiTap:{group:"interaction",title:"Click an element"},aiDoubleClick:{group:"interaction",title:"Double-click an element"},aiHover:{group:"interaction",title:"Hover over an element"},aiInput:{group:"interaction",title:"Input text into an element"},aiRightClick:{group:"interaction",title:"Right-click an element"},aiKeyboardPress:{group:"interaction",title:"Press keyboard keys"},aiScroll:{group:"interaction",title:"Scroll the page or element"},aiLocate:{group:"interaction",title:"Locate an element on the page"},aiQuery:{group:"extraction",title:"Extract data directly from the UI"},aiBoolean:{group:"extraction",title:"Get true/false answer"},aiNumber:{group:"extraction",title:"Extract numeric value"},aiString:{group:"extraction",title:"Extract text value"},aiAsk:{group:"extraction",title:"Ask a question about the UI"},aiAssert:{group:"validation",title:"Assert a condition is true"},aiWaitFor:{group:"validation",title:"Wait for a condition to be met"}},uW=["aiAct","aiTap","aiQuery","aiAssert"],uH=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
869
+ Welcome to Midscene.js Playground!
870
+
871
+ This is a panel for experimenting and testing Midscene.js features. You can use natural language instructions to operate the ${e}, such as clicking buttons, filling in forms, querying information, etc.
872
+
873
+ Please enter your instructions in the input box below to start experiencing.
874
+ `,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};uH();let uY={result:void 0,dump:null,reportHTML:null,report:null,error:null},uG="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABfCAYAAACgCTpnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAS6ADAAQAAAABAAAAXwAAAAARa1b5AAAaTElEQVR4AeVcB7iUxbme3T2FKl1BlKZgFDWo2JCiPCpgohQBsRB7iTwmJrZriD0RSACDBb3Gq6i5sWCEq6KiCNhBrKBIUzw0KYfqKbtn233f2X1/5vzssntOaJrveWa/mW/6+38z883882+osrLyTwcddNCX06ZNCxhjiuCKHcdwYdoVgIfSLgjO9HLwVvMz/NOjWCw2NxqNvv/JJ5/0QO8awzVxHMON4PaDawBXD64uHAEliAIwE3iI/olReXn5E0lQPB4vWbJkySXo3v6OawF/c7imcATOBY2AUfP+YwALAqyl6LAJBoNtOnbs+NjatWtHnnHGGdQmAuF3rjYRJGqUX6s4NEnuEE1Jfuy/n3322QBqlktbtmx5c9y4caehbx3g2sG1gTsIriUctY2aRi2rD/efMywnT57cLZFIVLhg0R8Oh7974403rgYYh8F1hCNwbeFawx0A1wyOGqi57Cc/jwWXL19egUm+FJ020RfH4CdMrykuLm57+umnT1i4cOH1xx9/POerOhQ7zl0ptUqS/2SHZah58+aNzz777LMKCwtbRv9vvIm996wJHX6KCdRvbAKBQEGLFi26nnPOOR0ikciijz76qAJgcC4iICTNS+QiyRimP5nmDJPctCnJj+W3ZcuW7TBHvWWH3t9/kyy/5tBkxfVdkrFPp1cbmVgISiZNmjQC/ToG7kg4Ds/2cJzL/MPyJzmPBbH6JTA/bUCHTbD5wWQmGS4zkUdHmOi/RhuTiFtZvXr12lx00UVj3nvvveGtW7duCKE7LLVqarWUOfGTGpZ2foHWrCUigTRYFh38RGf8jwmPv9Akt6yzolAoVP+UU0753TvvvDNyyJAh1CgBRi7ANJcJMNYhpyEoznJdP8P7LFmwNm/e/D1amPCDxVYnvvnEhP98jokv+sDrRIcOHX7xxBNPPPjkk0/2glCAafIXWH4tE2C2TuRzQXL9Xj37mocNN2vWrFkH8yEabE5zakdKlm0ykfsvNdHXJmKMcr6GgVW/frsLLrjgz2+++eaQZs2a0d4SaNIwguUH7Ec9LNn4xm3btg327t17cLBew+Lo6w97gCDOoaRJLJ5jEt99YUKde5lAUR1a/UXQsu5Dhw5tDRNk4eLFi2l3UEtcpzL82uOGs/mVd5/gBKsR5qzkZZddNqygsLBBbO4UYyq2Zm1cckOJic97xYQ6HGsCTWjQA+3GjTtii3RUkyZNlr/11lubIBJYjJZfgIgzjuQPZ5PZxHvzh8Mw+dVXX0WqqqrWsyFaEXfWqCSmuPC4YSY2+2kvGey1n994440TXn/99XNhs9F04LB0h2a+w1JlZgJRcXuFW7AAVALatZItyDTJZ2xZPGaqnrvbRB77LUyNcpsEIDU688wzb/3iiy9uOO2007iH9AOmyZ8rZbbVkiAJKNdv69ibPxYsNCC5devWNFiZJ/lsjYx/8qqJjB5oEmuW2CSw+gOHH374ec8///xfbr/99s4QCjByd/IXYDsDTdUKPIX3CvfA2rhxowUrn2Hob2li3XITHjPYxOZO9aIwLI+99dZbJ+AE9hwINRxlXpDvTMukUS5Irt+rZ096PLDWrVtn56y8h6G/lVWVpmrSTabqn7cZE6uysXXq1GnWr1+/2z7//PMR2JRzS+SCJrBc84JaxjbJ+UFT2Ja/p39CqJBHLKFevXo1PfbYY38RLK5TGHvj0Vq3I7HiSxP/6u3UZrxeI27GA9h/dgFonXG6sXjOnDnbULg6La76GCaJ+/020hcv2W7nnmatWLFiM87itwTYQbh/hxIrvjLheweY+Py3vGJwenHcPffcMw5W/2kQah7TsNRcpnmMD5GO7ROg4hBZcgGVbLdyNojWN0yswuB5553Xt6ioaP/4p69hxrejsvaVxyIm/sk0Y6rCJnTYSehy0KDs/Y466qjeOPIpnD179iLMkwlUIBDEWacLhOtXeyRz8yhut3E+OVJy1qxZZdAsa43Wet5KlbX9F1ujKIZ0+G/DAb492KDVX3jcccddgc34mN///vedkDiTlrk2mbRMmuZqm+oSeArvFu4NQ5SexAEfre+8DNOatCaxdB6GJTbjS+Z62Q444IBud99997innnpKm/GdTf6ZgPJr1W4HzAUrgdOHEvYm0CJ1ruX1bBd4kttKTWTCxSY6/b/xWLzN+MEXXnjhaEz6lzZt2lSb8Uyg5TuX+QHcBS3fXoQLVnLDhg0rGRXIcvqwPVstfThIjE4dayITrzLJ9P4Tw7L4xBNPHIGXvHdcfPHFbVGyOyw18cvMkAHrahr7QHI1y/WnYnfBbzWwVq1atQZnyYnaGKY1aUv8y9kYlv1NomSBl61du3Z977///vGPP/54Dwhd7XINWNlkBEuAERj2w69VuxywamDNnTt3FSqNB5oeiOrZlt1HyY2rTXgsNuPvPONVst9++x0yfPjwUR9++OEl8GtYuuaFO/H7tUxgibNc1+/VU1sPEeFTJC/AUUsRzqbOgR3RMDbnXziqof24GwnDMv7lLJNc/50JHdGTBoxdLXFR5YTBgwc3w6Hksq+//roSLVCnxdUohl1yw9n8bvoa+TXeOeMm169fH8HLizUsIdupaY1KzzNxbN7L2FsOMom133g5cJVgIIbkfRMnToSRVm0e07B05zFpGfsjlwtYr658PdWGIV6ohisqKtYy826b5LO0LPH9MhMePcgeLCoJhmKnyy+/fBTOyAbVrVuXN3jcuUxgaR4TYO5ctksBqwYW7KzEDz/8sJqN3R3mg0DIyiMVJvL470zVs3dhMx61yWD1N+7Tp89IbMZvwarJKwMELBNoBEuASbvIBRg5SeFUqAa/1cBCvuSmTZvSw3DX21r5tiv29j/s5J/cZJ+bzdapU6dBr7766t/uu+++rhC4gFHDpGUCbGegqRkCT+GcnGCROGdxn0awSmk+7LItD0uvBSVK5lvzgmaGCIbr0ddcc80ogNYfMgGWS8t22bCUZrE9dpLHClTKWzV7GyzboPKt1oCNvnSf92YcZ2TN+/bt+8dFixbd1LVr16Zp0HKZF+ynnIahNEthVrlTIupUYWs6kHfu3Lluz549zy6oW79BbOYk7yAPcXuNEsvmmcSyj9G4niZQXM+ekeEktjMutHTCcdmyDz74gDaOOi2u9rqg+GUKkyudK6vmF1hEnf5QWVkZX4sNxJFNk9RRTeq0oFquvRBIblyFlfIlE2r3c2ONZrShYcOGB3fv3v0UnGJswpl/CUQCSh3Pxf09UXq/3IY1DO0QhCSJVacSb3s2M3ZfGIq2lekfHvOE77vIRN98zBPjwsqBAwYMuAtmzw0Yllot3WGpyZ8mhlUI8ExDUkCRy+/VQw8zsxBPs+AvuO66607GUzssiSPixDefQrQPEU4sEl+/bxKrvk69GS8s5rAM4ST2KAzLQ2H+LME9sh/QYnVanJ1wQcgmV2fdtFZGkESedsHWWkPhnjZM1ZB8ePyLGanN+MqFXvJWrVp1HzNmzP0Ykn0g1Grpt/ipHDItqCzEQMCJQ2SpGmBM6IGU9iew7VnBpPvaMGSbXEqWrjThvw41sfef98Qclueee+6dOBS4HLYZXya4oAk4AuYOy52B5gGYcRji3kITnJUPYKrYrKe8huyTHm7G5880XABCR3THxFLIYVmAC3fH9+/fvw32uss+/vjjMrTd67TjdzXHH08lqhZPsKSS1DIbxiux+lhlhgTqNAhFX38Eusd8+zYlVi0y8QUz8XLkZBNowI9EcOOlUaMOPXr0OAbArXzttdf4BkaAiDOZCwjDoh3kBIgkNOyQxCFgGVbEjSZU4N2USSXbt38TqxdjMz7Q0OQRAbBOv/71r8dj0r88fXStlVJDUqultkpUGDpiI1AtV4QiyQuwEhbgXKsPrnfvn0irOOQ/DsIG3NqHldtM6Gfd0OWgPSPjsDz//PPbYDu3GBdXdOvaBSNn/yw4SEUUvWG4bdu2IJ7GaZgs2/GaJF+a/tgosfwLE4eJETqihwnU5X1hOywPOfXUU7tg1SzBsY//xahGV9auEiA79FwO9GOYGO2HBPv6ipi1Z4hILP88tRlf+K6XDBfujhgxYsQE3Lq+EEIOQQ3DnCYFwfITweN9LYv87n554a98V4eTZZtN5MErTPSV+6EWPFjBPFNQwFvXN3777bcjMd3wwormKy12HHF0xEdD1QYQ3lG7SktLV0G+149q2Lh/mwBSdNoDJvLAZYaXiUXt27cf/Oijj47D0fVRkAkocoLkOgsYBRqr1YbjahCOaiL7shWPtteIOIfZV3Dfbt/CYbU85oorrpg4b968IShM2iTuahZua6RoB8AWLFjwPcCqCtTHrZr0BFmjlu2jiZOb19oPIdxXcDhhaY5N+D3Qjz/icJEfo2roudwKZfZT/ein/VGHW4X58+e/QfPBPg1nD4b4PUt4hxkoxmvEOvXteZaBPwC/4dkWXEqeik/J3LRIY9MyL+XMA57lvSiOqN6bOXPm3bD+P0cnY2kXB48ToGrDT2F8AhzGDn4NwbIr4h4AK9D4AFN8JSZiCwbu2AkMnCzUlPAZcxSOt7Ar+UEEqDJWFQvHK8sq4/GtlbhYx08H6XhwWI6+boZ/K64TVEDTiMsOlEnogYfXYqvxOqoLV0RCu7uJ3wgl8MK14KRBtio0PoYv1jYnk9vojaPDYfxbQAU6Vo62lWHFroAmlMFfCVaOj7a2godh+lQiTRTyKC4WhwFYHOVEcJpShbgwZLzHSa3hKyRx+iknpyNperKBrJrFhDBOv8cVxz16VBOdMtaEuvSxQwcaEb/zzjufx6d73wCYCNqkYeFyO0QQR7vAdXro9kWME6f05G459Cs/8yqfyvFMB8RVG442IW7mrWDEnnyHmNy2wcRefZDV8qZgMY64TwJQfNLqnDSA4NGF4fiKn1uYTI5xrmN65XU1ScAJTIHkcf9qiHK2g/Y9iII9bZhGZz1p7z+w7i6gO+6443B4/WCxowKLALigZQJPgCltNsAEFnk17RJYkG8HKe1PYA7YgkmyItC0ddbVgxnzIpxgFA66Ja+kfBtdNfnPNi0m3NDVV199FjbCnDIEGLWAYAkwgSZAqGHyu1xAiSs/uTSLXEC5w9IOQ6qZSH6reiUlJfYGsz2qadxSaWrFC3/5W1N4xhUmdMyZeeXny1VeESdh49vu3nvvPQFeNt4FzD8kpS0EwwVJfoGkdOQEiuXQuUCxHm8I0i/NkhCy7Qnwnw9buSBR+O8MxeChXU1hn6tYjCk69w+w5vIzBax24Rsh0qBBg/rjzkNTeNnWbKBJU1wwsvmZ1gVKYLmAuZrlgYV8lqqB9vbbb/MQ0IJV20kep62m+JKxWCWCBkM6VtWgeWXh6Zervp3yJD5zic6cZNM0aNCgKT5v6Y1PjxkWYAJN2iYNIRcY0h4BKbmbln6CJKDcYShMsoJlEwAofmxuTx9qu0csHHaHCTRrjXYYg5cI82AGvFTY95q8T2Bjrz4EG8aeFhmcFPTDZ3qH2sJSP+qIHzR1XCAIGMpdmdIRHDlpE7nKJ/fmLAkpIymcgDFnzYfaDMPQsf1MwYkDbIEwCLfiKveMG2644cNV6zd+WzTwFivP9cN/AohO/atNhqOVupjsB+HVPbdl3LeJvPZC4AInjRMoLhc44i5IAkqc9excs5gA1m7qELCG1725dSm68B5WYmBcJp555pmXp0+fvho2U+WECRNeTB7Ttyp4yHE2PtdPbM4UXNadb5Phou4JY8eO7YYA51u6aptdmyj1sN3OExCGXZ4NJAGkByBuK0uXb7WJfkVajgOy5akrSG2ULjcPBEzRr8Z43wDhBGMeNOo9ZLTzBsD6El/Pzi0aepudy3IWiLdLVc8BeHC+fcbnLENgfu2HfJzA6Fzg3OLcvrjgUe6G5XfT0y+yclZCUoTLbQIcv64CWDiqwd+tYLLOhwpOHW6/CmNaaOYGTMxTsGfj8m3B4h5v9OjRU6r2P2RrQbfB+RRpj4j1PSOOhg99+OGHmZG2F8EiZ18EnLQNouoPPx0mOLZ/eXIkS1VgPc5PtUKWLl1ajlWMdwfyekMdbHmIKRp4s4pLTpky5SW8s1sFAVcl2jl2KX/22WeXv//++y8XDrgh7/Myzl36xPjoo4/uiyPhA1Ee5y+CJeD82qahiiQeufOdJ8zlkWYxnQuSF4YVX4XdOzube48IK73o0nGeHYXzsA/wlmg2slqNAhdg1jiExr2yLR4qKfzFdYjKTbxFE3vtIZsQb56a33XXXb9CgGC5zgVNQEnTagWSWuaCJRm5Bxy+Q4zgWGQNhbmue7PTwTadmdTgxKIUnZkC08PTJohlQVuOo9wN+JRucqjXRYlgyw42X64f2l38uwQSrn+filMJnp/739D4AfODxuw1Bo6FEBiSB5Drx5IfxwdQK5lgZ6/Fgh2OgZV+NZNhHk5y9XvuxRdfXIGgtKoaUJDbMF5Lvb6udOO8wiF/ZNbc5OwbYaDWufLKKy/GCsnJ1A+YhqPmMQGWu44sKVgASYClQj7gANhaRmQFq7iuKb4EtlD6qBbz3KcYYh8gi4Cy8xTC4gTK+nHuXfbyyy8/E/jZKVWho3tDnJviC2Zh3/iOTXjggQd2HTVqVE8ENHeJU7vYPzl3KNZYq1gZC3JJ2kUZ/XbVwLmWfX+UzTAtGvRfmM/a2nIAbOnIkSP/F9qo1c8PmIASj1x11VUfLlu2bFrR4D9gmmZfc1N08p9gNdHGNOass866CG5/eF2gpFnsowsUs4hqBJofLBayA2CY5NdjRSyzRzXeC6FUfXw9XtDzAhuA7RmbOnXqC6AVELggZfK7sgi+CHs62qjVxsLel6YKzvHLv0fguRcJR98H33zzzX3gpTbJCSx3GDJ5jQBiBpELFkESCTDLcY26FKcPZXzq+v8ZJuSH50XDRymPgXZ8fO21186CgPsvgiHHISd/Rv7QQw8tx4WN5wr6XWsCjVogeW6KTXvQ2zeefPLJQ7Fv7IhcmUDya1etAHPBYusEkutP4m+fSqlZFLpD0W6Ssa0h4QXBNnz98ELa+MwFjsAk9xy0Y3J5LPlt4YAbbZm5flL7xrE2GY6gG+Gd3xB848OhyH5JowiM62z6tEz+vLgfLGUSaJbjXKsSVnfqqCb97208xCs4/mybHqtf8pVXXvnnI488sgSCTJrjAYJ4+TnhyG85zIhNuN0yMXTCgFiw/c9t2bl+YnNe9PaN7du3Px2v4rsijzSJXP5MgOUqvlp8PmBxkudRzWrm5IoYaNDUFJ1/t1fQypUr511//fVvQOAHqhoYiHd3/a5f6apgxL69obT046Kht6OyPEYL5tDEioW2LfyyH9e8r8IHUXiL6mkT4/wF+cM2f64fgVVNk9KZXBmPakooD7ZoA6DuMoGGvHIOYykc3oil+zHeFkQw0/AjEC4w2u2LK86mw4WUMGy0h5MHdy4vOHEgq8hKwVaHmjo3P28KegyzaWjf4VTj+yOPPFKbWPZBVCuAlJmcK0cmqgYUEiSwIU5pVrODTLB9Fy8PNtocft9AoE672iWNYZzAseYIwmy8OsOHxjRMH7rpppvm4/X5jLYDb+wf/3y6tx9EXIpgz/E8v/CXv0EPaIsawxt9M2bMeBZf80/HYkSzhfWI1B+Fa8WlWW5mdYAy+u0wxB/7rOR1HV50FcH++gx/xzkV4Xw1ypalMsEFoMC0gGF+jIwfP/7vkaKGawv6jVB1lgdbdbTaZBcBAAVNKsXx99PdunW7Gf948haAUlluXW6fqpVXk4AfLBVK7gEFfxz/6bc2vmB2vKD7ebZ8rI7l+Cz3bwCxHAJpk0CTRpELEHK3A34/O2nBAo8+8MADJdiIP13Y+5KkNXipTTiOrvOHqSbY9mgDTCpgakzD3xvcgquP/8D/DW5L5xdYbn3qj8uRvPbEYUHwODT5+oWTJC/dN4dr9cLvhp4d2bSef2VgCR0ZDznHIx2Xrs5wh8EdAtcGrhUcJzYe0uGqiy2TyzrL57JOzjDrYjzTMT3ztYXrdNJJJ52IufJT/NNIMv7dfFWdxIIy97bbbrseafrAnQ7XC64b3HFwR8J1gmMZbhvYH9bFOl2zAsH8iA3ORHoCevrxf60NLT2rTgO+vGiFLc1Hw4YNexp+ahSJ6aRB1CZpiPt0mUblkoso54NSGczLhxbEP4lswd8WTML3hXwgAdS7FPPSM9g8v4spgOlYDutQfWyPtJqybPUjquaUCSx1hI1no1lh4N133/0B2xncaEmW40DvHnyF9QPlcEzPtHRsoBrJfHKMYzrXIegR42094CyTzhLmxDfxhcTTWHUj2Jy/gO3UFkQonuWpDj0kAea2xa2f5aod9OdNqlQZCA5l9smCU101ZEJYER9CozfgT3fGpNOAeRWr0eIuaGysv8HMy7r89fEB0mnIilOm9qjdKpd1ChxyAScZ0zGN2wYCRhJPhXby69csZmRDhDy5KjJ4nf8CzqgWQMbGqKNKq8YILHUkUwOR3RLzklSGV1dKvIOcYKle5VMe1SuAFFY7VIfqTFeRP9MTUg41JJOGSdvElVeNUKPUeDesNGooufKrTnKWTUDEPa1Oy1Q3gpZUruoUQOLZ2uC2Q2Xl5H7NUga3MPpZuRpGzka4JJm4GunmoZ/kcgKksOLcspWf9Qsogaz0TKP6XK42U6ZyxJm3xpQPWKxMDVTDGHZlaoTiFXYbysZRno2Ul/HKL06gVKfqVTnKJ646/Vzluvnkz4v7K1bYbVgmv79wdSoTZ1rKSeKpUOrXXyelfnDcsJuXfrdOAeTKVKe48vjLyRlWQ5VQ4UycMr+c+dQIl9Pvht109PvJX67qcjnzKJ2b31+Xwv76mUcyN3/e/kyVSybOwuj3h1WJ2wD5s3Hl8fNMZUvm5/68DLO+XHUqPlP+vGRqiJvYL3PDrt/NQ7/bGNfvj/PnU9hftht2/Urvcrc+1880/rCbr0b+bI3IJM8k81eWqWGZZP58Cu+sjmxx2crPJlddNeb/D/KyIM/aYvSmAAAAAElFTkSuQmCC",uV="data:image/png;base64,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";function u$(e){return"object"==typeof e&&null!==e}let u_=e=>({left:e.center[0]-4,top:e.center[1]-4,width:8,height:8});function u0(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let u1=(e,t,r)=>{let n,o=(n=e.width/e.height>=t/r?e.width:e.height/r*t)>400?.1:n>50?.2:.3,i=Math.min(t,n+t*o*2),a=Math.min(e.left-t*o,t-i);a=Math.max(a,0);let s=Math.min(e.top-r*o,r-r/t*i);return{left:Math.round(a),top:Math.round(s=Math.max(s,0)),width:Math.round(i)}},u2=(e,t)=>u1({left:0,top:0,width:e,height:t},e,t),u3=(e,t,r)=>{var n;let o=null==e||null==(n=e.uiContext)?void 0:n.shotSize;return{width:(null==o?void 0:o.width)||t,height:(null==o?void 0:o.height)||r}},u5=e=>e.map((e,t)=>({execution:e,index:t})).sort((e,t)=>(Number.isFinite(e.execution.logTime)?e.execution.logTime:1/0)-(Number.isFinite(t.execution.logTime)?t.execution.logTime:1/0)||e.index-t.index).map(e=>{let{execution:t}=e;return t}),u4=e=>{var t,r;let n,o,i,a,s=e?Array.isArray(e.executions)?e:{sdkVersion:"",groupName:"Execution",modelBriefs:[],executions:[e]}:null;if(!s)return console.warn("[allScriptsFromDump] dump is empty"),{scripts:[],modelBriefs:[]};let l=(i=s.sdkVersion,a=[],(u5((null==(r=s.executions)?void 0:r.filter(Boolean))||[]).forEach(e=>{e.tasks.forEach(e=>{var t,r;let i=null==(t=e.uiContext)?void 0:t.shotSize;if(i){let e=i.width,t=i.height;n||(n=e,o=t)}if(e.usage){let{model_name:t,model_description:n,intent:o}=e.usage;r={intent:o,name:t,modelDescription:n},a.some(e=>e.intent===r.intent&&e.name===r.name&&e.modelDescription===r.modelDescription)||a.push(r)}})}),n&&o)?{width:n,height:o,sdkVersion:i,modelBriefs:a,deviceType:s.deviceType}:(console.warn("width or height is missing in dump file"),null));if(!l)return{scripts:[],sdkVersion:s.sdkVersion,modelBriefs:[]};let{width:c,height:A}=l,u=[],d=u5((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=u7(d[e],-1,c,A,e);t&&u.push(...t)}return{scripts:u.filter((e,t)=>t===u.length-1||"Done"!==e.title),width:c,height:A,sdkVersion:l.sdkVersion,modelBriefs:l.modelBriefs,deviceType:l.deviceType}},u7=function(e,t,r,n){let o,i;if(arguments.length>4&&void 0!==arguments[4]&&arguments[4],!e||!e.tasks.length||0===r||0===n)return null;let a=[];if(-1===t)a=e.tasks;else{let r=e.tasks.findIndex(e=>e===t);if(-1===r)return console.error("task not found, cannot generate animation scripts"),null;if(r===e.tasks.length-1)return null;for(let t=r;t<e.tasks.length&&(!(t>r)||"Planning"!==e.tasks[t].type||"Plan"!==e.tasks[t].subType);t++)a.push(e.tasks[t])}if(0===a.length)return null;let s=(e,t)=>{if(!t)return e;let r=u0({},e),n=null;return Object.defineProperty(r,"img",{get:()=>(null===n&&(n=t.base64),n),enumerable:!0}),r},l=[],c=!1,A="";a.forEach((e,t)=>{var u,d,p,h,m,f,g,y,v,b;let w=null==(b=a[t])?void 0:b.taskId;if(i=w,0===t&&(A=AN(e)),"Planning"===e.type){let t=[];if("Plan"===e.subType){let r=(null==(d=e.output)?void 0:d.actions)||[];if(r.length>0){let e=r[0],n=["locate","start","end"];if(e.param)for(let r in n.forEach(r=>{e.param[r]&&"object"==typeof e.param[r]&&"center"in(e.param[r]||{})&&t.push(e.param[r])}),e.param)!n.includes(r)&&"object"==typeof e.param[r]&&"center"in(e.param[r]||{})&&t.push(e.param[r])}}else"Locate"===e.subType&&(null==(u=e.output)?void 0:u.element)&&(t=[e.output.element]);let i=Aj(e),a=AN(e),A=e.uiContext,h=null==A?void 0:A.screenshot;if(A&&h){let{width:u,height:d}=u3(e,r,n);l.push(s({type:"img",duration:300,title:i,subTitle:a,imageWidth:u,imageHeight:d,taskId:w},h)),t.forEach(t=>{var r,n,p,m,f;let g;r=u0({},u1(u_(t),u,d)),n=n={pointerLeft:t.center[0],pointerTop:t.center[1]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(n)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(n,e))}),o=r,l.push(s({type:"insight",context:A,camera:o,highlightElement:t,searchArea:(null==e?void 0:e.searchArea)??(null==(m=u$(g=null==e?void 0:e.log)&&u$(f=g.dump)&&"string"==typeof f.type&&u$(f.taskInfo)?g.dump:null)||null==(p=m.taskInfo)?void 0:p.searchArea),duration:400,insightCameraDuration:800,title:i,subTitle:t.description||a,imageWidth:u,imageHeight:d,taskId:w},h)),c=!0})}if(e.recorder&&e.recorder.length>0){let t=null==(p=e.recorder[0])?void 0:p.screenshot,{width:o,height:i}=u3(e,r,n);l.push(s({type:"img",duration:900,title:Aj(e),subTitle:AN(e),imageWidth:o,imageHeight:i,taskId:w},t))}}else if("Action Space"===e.type){let t=Aj(e),o=AN(e);l.push({type:"spinning-pointer",duration:300,title:t,subTitle:o,taskId:w}),c&&(l.push({type:"clear-insight",duration:200,title:t,subTitle:o,taskId:w}),c=!1),l.push({type:"pointer",img:uG,duration:0,title:t,subTitle:o,taskId:w});let i=null==(m=e.recorder)||null==(h=m[0])?void 0:h.screenshot,{width:a,height:A}=u3(e,r,n);l.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?u2(a,A):void 0,title:t,subTitle:o,imageWidth:a,imageHeight:A,taskId:w},i))}else{let t=Aj(e),o=AN(e),i=null==(g=e.recorder)||null==(f=g[e.recorder.length-1])?void 0:f.screenshot;if(i){let{width:a,height:c}=u3(e,r,n);l.push(s({type:"img",duration:900,camera:u2(a,c),title:t,subTitle:o,imageWidth:a,imageHeight:c,taskId:w},i))}}if("finished"!==e.status){let t=Aj(e),o=e.errorMessage||"unknown error",i=o.indexOf("NOT_IMPLEMENTED_AS_DESIGNED")>0?"Further actions cannot be performed in the current environment":o,a=null==(v=e.recorder)||null==(y=v[e.recorder.length-1])?void 0:y.screenshot,{width:c,height:A}=u3(e,r,n);l.push(s({type:"img",camera:u2(c,A),duration:900,title:t,subTitle:i,imageWidth:c,imageHeight:A,taskId:w},a))}}),c&&(l.push({type:"clear-insight",duration:200,title:"",subTitle:"",taskId:i}),c=!1);let u=a.length>0?u3(a[a.length-1],r,n):{width:r,height:n};return l.push({title:"End",subTitle:A,type:"img",duration:200,camera:u2(u.width,u.height),taskId:void 0}),l};function u8(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function u6(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){u8(i,n,o,a,s,"next",e)}function s(e){u8(i,n,o,a,s,"throw",e)}a(void 0)})}}function u9(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function dt(e){if(!e)return"Unknown error";if("string"==typeof e)return e;if("object"==typeof e){var t,r;if(null==(t=e.dump)?void 0:t.error)return dt(e.dump.error);if(e.message)return String(e.message);if(null==(r=e.cause)?void 0:r.message)return String(e.cause.message)}try{let t=JSON.stringify(e);if(t&&"{}"!==t)return t}catch(e){}let n=String(e);return"[object Object]"===n?"Unknown error (an empty error object was received)":n}function dr(e,t){return e?Array.isArray(null==e?void 0:e.executions)?u4(e):e.tasks&&Array.isArray(e.tasks)?u4({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function dn(e,t){return(null==e?void 0:e.dump)?dr(e.dump,t):(null==e?void 0:e.reportHTML)?function(e,t){try{var r;let n=(r=function(e){let t={};for(let r of e.matchAll(/<script type="midscene-image" data-id="([^"]+)">([\s\S]*?)<\/script>/g)){let[,e,n]=r;t[e]=nd(n)}return t}(e),e=>{let t=r[e.id];if(!t)throw Error(`Missing inline report image "${e.id}"`);return t}),o=aT(JSON.parse(function(e){let t=nf(),r=e.lastIndexOf('<script type="midscene_web_dump"');if(-1===r)throw Error("No dump script found in HTML");let n=e.indexOf(">",r);if(-1===n)throw Error("No dump script found in HTML");let o=e.indexOf(t,n);if(-1===o)throw Error("No dump script found in HTML");return nd(e.substring(n+1,o))}(e)),n);return dr(o,t)}catch(e){return console.error("Failed to restore replay from playground report:",e),null}}(e.reportHTML,t):null}function di(e){return u6(function*(){var t,r,n;if(!e.dump&&(null==(t=e.report)?void 0:t.replayUrl))try{let t=yield fetch(e.report.replayUrl);if(!t.ok)throw Error(`Report replay request failed (${t.status})`);r=yield t.json(),n=e.report.url,e.dump=aT(r,e=>new URL("file"===e.storage&&e.path?e.path:`./screenshots/${encodeURIComponent(e.id)}.${nD(e)}`,n).toString())}catch(e){console.error("Failed to load playground report replay:",e)}})()}function da(e){return"aiAct"===e||"runMarkdown"===e}function ds(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class dl{initDB(){return new Promise((e,t)=>{let r=indexedDB.open(this.dbName,this.version);r.onerror=()=>t(r.error),r.onsuccess=()=>e(r.result),r.onupgradeneeded=e=>{let t=e.target.result;this.storeConfigs.forEach(e=>{let{name:r,keyPath:n}=e;t.objectStoreNames.contains(r)||t.createObjectStore(r,{keyPath:n}).createIndex("timestamp","timestamp",{unique:!1})})}})}async withTransaction(e,t,r){let n=(await this.dbPromise).transaction(e,t);return r(Array.isArray(e)?e.map(e=>n.objectStore(e)):n.objectStore(e))}promisifyRequest(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}async put(e,t){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.put(t))})}async get(e,t){return this.withTransaction(e,"readonly",async e=>this.promisifyRequest(e.get(t)))}async getAll(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return this.withTransaction(e,"readonly",async e=>{let r=t?await this.promisifyRequest(e.index("timestamp").getAll()):await this.promisifyRequest(e.getAll());return t?r.sort((e,t)=>e.timestamp-t.timestamp):r})}async clear(e){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.clear())})}async delete(e,t){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.delete(t))})}async count(e){return this.withTransaction(e,"readonly",async e=>this.promisifyRequest(e.count()))}getDBPromise(){return this.dbPromise}constructor(e,t,r){ds(this,"dbPromise",void 0),ds(this,"dbName",void 0),ds(this,"version",void 0),ds(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let dc=async(e,t,r,n)=>{try{return await e()}catch(e){return console.error(t,e),e instanceof Error&&"QuotaExceededError"===e.name&&n&&(console.log("Storage quota exceeded, running cleanup..."),await n()),r}},dA=(e,t,r)=>async()=>{try{let n=await e.getAll(t);if(n.length>r){let o=n.sort((e,t)=>e.timestamp-t.timestamp).slice(0,n.length-r);await Promise.all(o.map(r=>e.delete(t,r.id)))}}catch(e){console.error(`Failed to cleanup ${t}:`,e)}};function du(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function dd(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){du(i,n,o,a,s,"next",e)}function s(e){du(i,n,o,a,s,"throw",e)}a(void 0)})}}function dp(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dh(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){dp(e,t,r[t])})}return e}function dm(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}let df="playground_messages",dg="playground_results";class dy{saveMessages(e){return dd(function*(){yield dc(()=>dd(function*(){yield this.dbManager.clear(df);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=dm(dh({},e),{result:"result"===e.type?void 0:e.result}),n={id:e.id||`msg-${t}`,data:r,timestamp:e.timestamp?e.timestamp.getTime():Date.now()+t};return this.dbManager.put(df,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return dd(function*(){return(yield dc(()=>dd(function*(){let e=yield this.dbManager.getAll(df,!0);return 0===e.length?[]:Promise.all(e.map(e=>dd(function*(){let t=e.data,r=dm(dh({},t),{timestamp:new Date(t.timestamp)});if("result"===t.type&&t.id){let e=yield this.loadResult(t.id);e&&(r.result=e.result,r.replayScriptsInfo=e.replayScriptsInfo,r.replayCounter=e.replayCounter,r.verticalMode=e.verticalMode)}return r}).call(this)))}).call(this),"Failed to load messages from IndexedDB",[],this.messagesCleanup))||[]}).call(this)}clearMessages(){return dd(function*(){yield dc(()=>dd(function*(){yield Promise.all([this.dbManager.clear(df),this.dbManager.clear(dg)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return dd(function*(){yield dc(()=>dd(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(dg,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return dd(function*(){return(yield dc(()=>dd(function*(){let t=yield this.dbManager.get(dg,e);return(null==t?void 0:t.data)||null}).call(this),"Failed to load result from IndexedDB",null))||null}).call(this)}compressResultForStorage(e){let t=e.result,r=null==t?void 0:t.dump;return t&&r?Array.isArray(null==r?void 0:r.executions)?dm(dh({},e),{result:dm(dh({},t),{dump:dm(dh({},r),{executions:r.executions.map(e=>dm(dh({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?dm(dh({},e),{result:dm(dh({},t),{dump:dm(dh({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return dm(dh({},e),{uiContext:e.uiContext?dm(dh({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>dm(dh({},e),{screenshot:e.screenshot}))})})}compressScreenshotIfNeeded(e){if(!e)return e;if(e.length>1048576){let t=Math.round(e.length/1024);return`[COMPRESSED: ${t}KB screenshot removed for storage]`}return e}getStorageStats(){return dd(function*(){return(yield dc(()=>dd(function*(){let[e,t]=yield Promise.all([this.dbManager.count(df),this.dbManager.count(dg)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return dd(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){dp(this,"dbManager",void 0),dp(this,"namespace",void 0),dp(this,"messagesCleanup",void 0),dp(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new dl(`midscene_playground_${e}`,1,[{name:df,keyPath:"id"},{name:dg,keyPath:"id"}]),this.messagesCleanup=dA(this.dbManager,df,100),this.resultsCleanup=dA(this.dbManager,dg,50)}}function dv(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function db(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){dv(i,n,o,a,s,"next",e)}function s(e){dv(i,n,o,a,s,"throw",e)}a(void 0)})}}function dw(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dE(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){dw(e,t,r[t])})}return e}function dx(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}class dk{checkStorageSpace(){try{let e="storage-test",t="x".repeat(102400);return localStorage.setItem(e,t),localStorage.removeItem(e),!0}catch(e){return!1}}saveMessages(e){return db(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>dx(dE({},e),{result:"result"===e.type?void 0:e.result})),r=JSON.stringify(t);localStorage.setItem(this.messagesKey,r)}catch(t){if(t instanceof DOMException&&"QuotaExceededError"===t.name){console.warn("LocalStorage quota exceeded, attempting to clear old data and retry..."),yield this.handleQuotaExceeded();try{let t=e.slice(-10).map(e=>dx(dE({},e),{result:"result"===e.type?void 0:e.result})),r=JSON.stringify(t);localStorage.setItem(this.messagesKey,r),console.info("Successfully saved recent messages after clearing storage")}catch(e){console.error("Failed to save even after clearing storage:",e),yield this.clearMessages()}}else console.error("Failed to save messages to localStorage:",t)}}).call(this)}loadMessages(){return db(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>db(function*(){if("result"===e.type&&e.id){let t=`${this.resultsKey}-${e.id}`,r=localStorage.getItem(t);if(r)try{let t=JSON.parse(r);return dE({},e,t)}catch(e){console.warn("Failed to parse stored result:",e)}}return e}).call(this)))}catch(e){return console.error("Failed to load messages from localStorage:",e),[]}}).call(this)}clearMessages(){return db(function*(){try{localStorage.removeItem(this.messagesKey),Object.keys(localStorage).forEach(e=>{e.startsWith(this.resultsKey)&&localStorage.removeItem(e)})}catch(e){console.error("Failed to clear messages from localStorage:",e)}}).call(this)}saveResult(e,t){return db(function*(){try{let r=`${this.resultsKey}-${e}`;localStorage.setItem(r,JSON.stringify(t))}catch(r){if(r instanceof DOMException&&"QuotaExceededError"===r.name){console.warn("LocalStorage quota exceeded when saving result, clearing old results..."),yield this.handleQuotaExceeded();try{let r=`${this.resultsKey}-${e}`;localStorage.setItem(r,JSON.stringify(t))}catch(e){console.error("Failed to save result even after clearing storage:",e)}}else console.error("Failed to save result to localStorage:",r)}}).call(this)}handleQuotaExceeded(){return db(function*(){try{let e=Object.keys(localStorage),t=e.filter(e=>e.startsWith(this.resultsKey)),r=t.slice(0,Math.max(1,Math.floor(t.length/2)));r.forEach(e=>{localStorage.removeItem(e)}),console.info(`Cleared ${r.length} old result entries to free up storage space`);let n=e.filter(e=>e.includes("playground")||e.includes("agent")||e.startsWith("midscene"));if(n.length>10){let e=n.slice(0,Math.floor(n.length/3));e.forEach(e=>{e!==this.messagesKey&&localStorage.removeItem(e)}),console.info(`Cleared ${e.length} additional playground-related entries`)}}catch(e){console.error("Failed to handle quota exceeded:",e)}}).call(this)}constructor(e="playground"){dw(this,"messagesKey",void 0),dw(this,"resultsKey",void 0),dw(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class dS{saveMessages(e){return db(function*(){this.messages=[...e]}).call(this)}loadMessages(){return db(function*(){return[...this.messages]}).call(this)}clearMessages(){return db(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return db(function*(){this.results.set(e,t)}).call(this)}constructor(){dw(this,"messages",[]),dw(this,"results",new Map)}}class dI{saveMessages(e){return db(function*(){})()}loadMessages(){return db(function*(){return[]})()}clearMessages(){return db(function*(){})()}saveResult(e,t){return db(function*(){})()}}function dC(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"indexeddb",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"playground";switch(e){case"indexeddb":if("undefined"!=typeof indexedDB)return new dy(t);return console.warn("IndexedDB not available, falling back to localStorage"),dC("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new dk(t);return console.warn("localStorage not available, falling back to memory storage"),dC("memory",t);case"memory":return new dS;case"none":return new dI;default:throw Error(`Unknown storage type: ${e}`)}}function dO(){if("undefined"!=typeof indexedDB)try{return indexedDB.open("test",1).onerror=()=>{},"indexeddb"}catch(e){}if("undefined"!=typeof localStorage)try{return localStorage.setItem("test","test"),localStorage.removeItem("test"),"localStorage"}catch(e){}return"memory"}function dR(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function dj(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){dR(i,n,o,a,s,"next",e)}function s(e){dR(i,n,o,a,s,"throw",e)}a(void 0)})}}function dP(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function dM(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}let dT=e=>{var t;let r=e.highlightElements||[],n=e.highlightRect,o=null==(t=e.uiContext)?void 0:t.shotSize;if(!o)return(0,a.jsx)("div",{className:"blackboard",children:(0,a.jsx)("div",{className:"blackboard-main-content",style:{padding:"20px"},children:"No UI context available"})});let i=e.uiContext,l=o.width,c=o.height,A=s.useMemo(()=>(function(e){if(!(null==e?void 0:e.length))return[];let t=new Map;return e.forEach((e,r)=>{var n;if(!(null==e?void 0:e.center))return;let o="content"in e&&e.content?e.content:"description"in e&&e.description?e.description:void 0,i=["id"in e?e.id:"",o||"",(n=e.center,`${n[0]}:${n[1]}`)].join("|");t.has(i)||t.set(i,{key:"id"in e&&e.id||`${i||"highlight"}-${r}`,label:o,center:e.center})}),Array.from(t.values())})(r),[r]),u=s.useMemo(()=>{var e;return(null==i||null==(e=i.screenshot)?void 0:e.base64)||""},[i]),d=A.map(e=>u_(e)),p=null;return 1===d.length?p=(0,a.jsx)("div",{className:"bottom-tip",children:(0,a.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d[0])]})}):d.length>1&&(p=(0,a.jsx)("div",{className:"bottom-tip",children:(0,a.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d)]})})),(0,a.jsxs)("div",{className:"blackboard",children:[(0,a.jsxs)("div",{className:"blackboard-main-content",style:{width:"fit-content",maxWidth:"100%",position:"relative"},children:[u&&(0,a.jsx)("img",{src:u,alt:"screenshot",className:"blackboard-screenshot",draggable:!1}),(0,a.jsxs)("div",{className:"blackboard-overlay",style:{aspectRatio:`${l}/${c}`,"--ui-scale":Math.max(1,Math.sqrt(l/1920))},children:[n&&(0,a.jsx)("div",{className:"blackboard-rect blackboard-rect-search",style:{left:`${n.left/l*100}%`,top:`${n.top/c*100}%`,width:`${n.width/l*100}%`,height:`${n.height/c*100}%`},children:(0,a.jsx)("span",{className:"blackboard-rect-label",children:"Search Area"})}),A.map(e=>{let t=u_(e);return(0,a.jsx)("div",{className:"blackboard-rect blackboard-rect-highlight",style:{left:`${t.left/l*100}%`,top:`${t.top/c*100}%`,width:`${t.width/l*100}%`,height:`${t.height/c*100}%`}},`${e.key}-rect`)})]})]}),(0,a.jsx)("div",{className:"bottom-tip",style:{display:e.hideController?"none":"block"},children:p})]})};var dN=r(49783),dD=r(37294),dz=r(14985),dB=r(31090),dF=r(92946),dL=r(60090),dU=r(53776);let dK=e=>{let{text:t,disabled:r=!1,speed:n=5,className:o="",colorTheme:i="blue"}=e,s={"--animation-duration":`${n}s`},l=`theme-${i}`;return(0,a.jsx)("div",{className:`shiny-text ${l} ${r?"disabled":""} ${o}`,style:s,children:t})},dZ=(0,a.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,a.jsx)("br",{}),"Please run one of the commands under the midscene project directory:",(0,a.jsx)("br",{}),"a. ",(0,a.jsx)("strong",{children:"npx midscene-playground"}),(0,a.jsx)("br",{}),"b. ",(0,a.jsx)("strong",{children:"npx --yes @midscene/web"})]}),dJ=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:dZ;return(0,a.jsx)("div",{className:"server-tip",children:(0,a.jsx)(W.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},dQ=(0,a.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,a.jsx)(dK,{disabled:!0,text:"The result will be shown here"})});var dq=JSON.parse('{"content":[{"content":"Swag Labs","rect":{"left":895,"top":38,"width":130,"height":32,"zoom":1},"center":[960,54],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"d6c5e2f100","attributes":{"nodeType":"TEXT Node"},"indexId":0},{"content":"Username","rect":{"left":814,"top":154,"width":292,"height":40,"zoom":1},"center":[960,174],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'a9021f480e\']","id":"a9021f480e","attributes":{"class":".input_error.form_input","placeholder":"Username","type":"text","data-test":"username","id":"user-name","name":"user-name","autocorrect":"off","autocapitalize":"none","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":1},{"content":"Password","rect":{"left":814,"top":209,"width":292,"height":40,"zoom":1},"center":[960,229],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'580f3b761d\']","id":"580f3b761d","attributes":{"class":".input_error.form_input","placeholder":"Password","type":"password","data-test":"password","id":"password","name":"password","autocorrect":"off","autocapitalize":"none","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":2},{"content":"","rect":{"left":814,"top":253,"width":292,"height":45,"zoom":1},"center":[960,275],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'3e1faf0fd6\']","id":"3e1faf0fd6","attributes":{"class":".error-message-container","nodeType":"CONTAINER Node"},"indexId":3},{"content":"Login","rect":{"left":814,"top":303,"width":292,"height":49,"zoom":1},"center":[960,327],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'6db0b64062\']","id":"6db0b64062","attributes":{"type":"submit","class":".submit-button.btn_action","data-test":"login-button","id":"login-button","name":"login-button","value":"Login","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":4},{"content":"Accepted usernames are:","rect":{"left":570,"top":435,"width":221,"height":21,"zoom":1},"center":[680,445],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"5ca36a5942","attributes":{"nodeType":"TEXT Node"},"indexId":5},{"content":"standard_user","rect":{"left":570,"top":479,"width":109,"height":19,"zoom":1},"center":[624,488],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"fd2fe54174","attributes":{"nodeType":"TEXT Node"},"indexId":6},{"content":"locked_out_user","rect":{"left":570,"top":503,"width":126,"height":19,"zoom":1},"center":[633,512],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"403daee75b","attributes":{"nodeType":"TEXT Node"},"indexId":7},{"content":"problem_user","rect":{"left":570,"top":527,"width":101,"height":19,"zoom":1},"center":[620,536],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"2b34f1e161","attributes":{"nodeType":"TEXT Node"},"indexId":8},{"content":"performance_glitch_user","rect":{"left":570,"top":551,"width":193,"height":19,"zoom":1},"center":[666,560],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"6ae63a4d9e","attributes":{"nodeType":"TEXT Node"},"indexId":9},{"content":"error_user","rect":{"left":570,"top":575,"width":84,"height":19,"zoom":1},"center":[612,584],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"76030282f1","attributes":{"nodeType":"TEXT Node"},"indexId":10},{"content":"visual_user","rect":{"left":570,"top":599,"width":92,"height":19,"zoom":1},"center":[616,608],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"f34b057726","attributes":{"nodeType":"TEXT Node"},"indexId":11},{"content":"Password for all users:","rect":{"left":960,"top":435,"width":221,"height":21,"zoom":1},"center":[1070,445],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"e693f608cd","attributes":{"nodeType":"TEXT Node"},"indexId":12},{"content":"secret_sauce","rect":{"left":960,"top":477,"width":101,"height":19,"zoom":1},"center":[1010,486],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"cde9de9828","attributes":{"nodeType":"TEXT Node"},"indexId":13}],"size":{"width":1920,"height":1080},"screenshotBase64":"data:image/png;base64,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8xecP25c2/qkSycuun/hzOuuG3nIiEcWLlz56xfbBgYAAIBPMwEagO3AQ4sW9evb9/h3q2tdXd2EsWN/8eCDlbeXfPOKsy+84OBhww4YMmTrb108YUJ9fd3Io46ccMklZ5xy6ueHD6+s9+nd1Kd3U9thu/bdpbFHQ1EUpVJp3uzZzzz/3NAv/uV5Ey+dMHbsgP79t23gqqqqAf37V1VVVd7W19f1/9znKq//dKedpl151Xev/96Bo7647De/mTJpUmW9saHhntvn/tfLr3xp9PGTp0z5m+OOG3/m2MpHN98255Irrjjh6GMuu+jCmbfOOXz06AcffnjbBgMAAIBPki04ANgObNq0afYP5559+uk/vvvuoihOPOaYt9ata9vxefkrLxdFsf7tt2u6dNn6W2vWvrnnwD0+22/Xp5Y8PeywUa2trR9+leqqqjETxv/n88/X1NQseeaZR375y6OOOOKaG25o359lwzvvbNmyZff+/ZcuW3b131+3Q8+epVKptbX1C8MPbm1tnXvXneVyefkrL9/xk5+cfPzxN82eVRTFaytWvPXWuqIofnD77Xf/9KftOw8AAADkCNAAbB9u/dGPLvzyOQcNPeDRxY+PGzPmlttu27Jly4d/ZcYPbimXSzdMndqvb99Fjz9+2ZWTX1q+/EOO39zcvN/gwdOnTOnevfuGDe/s1NT06muvtffPUbyxZs3Y888//eSTr7rs8tdXrZo1d26lMg8a+Bc79Oz5DzfNbDtyS3Pze767+Mkn230eAAAAyBGgAdg+rFq9+q5/vHfcmDFda2t3auoz9647P/IrfZqarp0x4+rrruvT1HTjtGu+dtFXzrrwgqIoVq5evc+gQZVjamtrBw0ceO+CBZXjr7zssr867rjnli6tbC29zdO+tW7dpk2b+u6888pVqyp7QBel3z29cIfGxueWvnD6+HO6VFePOvTQ22fe/PN/+edfL1u29MVlL7z44hEnjK4cVl9XX1fX9b3n/Yh7uAEAAODTxR7QAGw3Zt465/BRo75+8cVz75y3bv36tvVyuVwul4uiKJXL5XK59G7qnTxx4pRJk+rr6tesXbvmzbUtLS2V9V88+OCIgw46eNiwno2NE8+/4E+6daus79q3b9farpUzHHX4EYcceFDbJUqlUrlcLhWl37149xK/z8aNGx9+7LFxY8bs0Nh44P77/+2J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QoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoCE6ZwSAAAInUlEQVQGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIOJ/AFTldxexlFiCAAAAAElFTkSuQmCC","screenshotBase64WithElementMarker":"data:image/png;base64,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vn9Zpk27K62tozJ7ztxMn/5g9t9vdGruvufebGqvPQen5nOf/1K+9e2L06mpqTE77NAv+++3X0495eTstNNOebVd8J9fy/cvuSwvpl+/fvnhD76fTgfsv1923nmnPPXUghz+pqNyyCFvSEPXrrlj6rQ899zz+dAH359vf+fivJj9998v69evz2lnvCvDhg5J//79M/ePf8xTTy1IfX19vvPtr6d//x2yse2375NzPvyhfO0b38qnJ3w2l1z2g4wZ84YsXbI00+68MytWrMzee++V17/+oAAAALDtqA8AAADbjPr6+vznBV/Orrvskttu+02m3XlX7pg6LTU77NAvJ580Pp/8xL+nqakxmxq178jMn/9kRreOysZGj25NTV1dkZEjhmdTp/3TKVm3bl2+9/3LMvPhWZn58Kz06NEjb37TEfnSFz+bL37pq7n7nnuzqeOPPy5fvfCirF69JnvvtWcqlUqq1WqWr1iRRx+dlwcffCg/nXh1fnLl5Rk6dEheTU8//UyefvqZvJiVq1ZnY926dcvEn/w4Hz7n3Myc+XBuvPGm1AwevEc+8R8fT+uoUfn2dy7Oixm8x+4596Mfzoc/8i+597778/Cs2amrKzJy5Ii8591n5vUHH5QX8oEPvDfb990+3734kjz11IL87Gc/T0337t0zfvwJ+cynPpGGhoYAAACw7ags3rC6GgAAALZJq1atyh//9EgG7rxT+vXrl83tySf/kuUrVmTI3nunrq7I/+RTn/lsfvazn+ezEz6dU045ORtbt25dzj3v47nttt/kiMP/IRd/95vZWqxZsyZ//OMj2WWXgenTp3derjVr1uZPf/pTXve616W5uWdeio6Ojvz1r4uyYMGC9OnTJ7vuukuKoggAAADbnvoAAACwzerevXtGt47KlrLLLgPzUt1yy22pOfbYo7OphoaGfOB9Z+W2236TeY89lq1JU1NTRo0amVeqqakx++47Mi9HURQZMKB/BgzoHwAAALZtRQAAAGArtF2vXqmZPWduXsjDD89KzfB99gkAAADwX+oDAAAAW6Gjj/7HfOe738v73n92xh1zVIYP3yev221Q5sz9Y+6774Hc/pvfpq6uLm95y7EBAAAA/kt9AAAAYCv0kQ9/MGvWrMlPJ/4sP7v6mvzs6muysZ49e+Rb3/ha3vCGgwMAAAD8l/oAAADAVqhSqeTf/+1f84EPvDd3/GFqnn7mmSxduiyDBu2avffeK4P32CONjQ0BAAAA/j/1AQAAgK1YS3Nzxo07OgAAAMD/rggAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEJ9AAC2pPaOpK092dCRakdHAAAAyqhSFEl9kXStS+qKAABsKfUBANhS1qxPZUNHGhsb06WpS+rq6gIAAFBG7e3tWb9+fdauXptqfZE0dQkAwJZQHwCALWFVW7rU1adHr+YAAACUXV1dXerq6tLY2JiVq1Zl/aq2pHvXAABsbkUAADa3NevTpa4+Pbp3DwAAwLamR/fu6VJXn6xZHwCAza0IAMDm1N6RyoaO9OjePQAAANuqHt27p7KhI2nvCADA5lQEAGBzamtPY2NjAAAAtnWNjY1JW3sAADanIgAAm9OGjnTp0iUAAADbui5duiQbOgIAsDkVAQDYjKodHamrqwsAAMC2rq6uLtWOjgAAbE5FAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohfoAAABsTSqVALymVKsBAADYWtQHAABga1OtBuA1oVIJAADA1qQIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCfQAAADaXSiUAAAAAbDlFAAAAAAAAACiFIgAAAFtaS0uqjz2WjB2bl2L9+vX55je/meXLl2dT3/ve9/L0008HAAAAgKQIAADAltTSkup116Wy2255qarVap566qm0t7dnUwsXLsy6desCAAAAQFIfAACALWXs2GTSpFQCAAAAwOZQHwAAgC1l8uTk619PJk1KJk/Oq23x4sW59tprs2DBguywww45+OCDM2rUqHS66667cv/99+f555/PLrvskje96U0ZOHBgaiZOnJgRI0Zk7ty5mT17ds4777zccMMNGTFiRB566KE88sgj6dmzZ4444oiMHDkyne6+++5MnTo1K1asyIABA3LMMcdk4MCB6ejoyEUXXZSjjjoqt912W55//vnsvvvuOfnkk3PHHXdk+vTpqVQq2X///XPEEUek07x58/L73/8+Tz31VPr27ZuDDjooo0ePDgAAAMBLUR8AAIAtZdCgZP78ZOzYbA7XX399+vXrl3e+851ZsGBBLr/88uy+++5pbm7OnXfemXvuuSennnpqWlpaMmPGjFx22WX5yEc+kt69e2fx4sWZNGlSxowZk3e9611pamrK4sWLc91112X8+PF561vfmvvvvz8TJ07MwIED07t378yePTu//vWv8573vCc77rhj7r777lx22WX59Kc/nZpFixbl9ttvzzve8Y5s2LAhEydOzIUXXpghQ4bknHPOycKFC/PjH/84AwYMyLBhw/KXv/wlEydOzIknnpg99tgj8+bNyzXXXJOuXbtm+PDhAQAAAPjfFAEAANhS5s/P5lStVvPss89m8eLFGTRoUD75yU+mR48eqbnrrrtyxBFHpLm5OdVqNSNHjswOO+yQWbNmpdOQIUMyduzYDBw4MEVRpGafffbJkCFD0tjYmDe84Q3p0aNHnnzyydQMGDAgZ599dnbcccesWLEiQ4YMSVtbWxYuXJhORxxxRHr37p1+/fpl9OjRWb16dY477rh069Yte+yxRwYPHpzHH388NdOnT88+++yTXXfdNevXr88uu+yS1tbWPPDAAwEAAAB4KeoDAACwlSuKIkVRZMOGDdlYtVrNhg0b0qVLl9ScfPLJue222/KDH/wgGzZsSGtra4488sjU/PWvf80vf/nLtLS0ZGNtbW3p1L9//2xqhx12SKdKpZK+fftm5cqVqalUKvnFL36RZcuWpaWlJZVKJTVr1qxJp759+6bT9ttvn549e6axsTGdtt9++yxbtiw1Tz/9dB577LE88cQT2VivXr0CAAAA8FLUBwAAYCtXX1+fAQMGZOHChenbt286Pffcc6lUKunfv386OjqyZs2avOUtb0lRFHnuuedy2WWXpW/fvjnwwAPTt2/fHH/88dlzzz3Tqb29PZVKJZ2KosimKpVKXsztt9+eXr165X3ve19q1q5dmwkTJmRjRVFkY5VKJS+mX79+2XXXXXPUUUelU0dHRwAAAABeqiIAAACvASNGjMgtt9ySRYsWpWbVqlWZNGlShg4dmrq6ulQqlVx66aWZOnVqarbbbrt069Yt7e3tqRk1alRuueWWrFq1KjWPP/54JkyYkOeffz6v1Pr167N+/fpUq9V0dHTkxhtvTKVSySs1YsSI3HfffXnqqadSs3z58lxwwQWZPn16AAAAAF6K+gAAALwGvPGNb8yGDRvy3e9+Nx0dHeno6Mjw4cNz4oknpqZSqeS0007LxIkTM3ny5HR0dGTXXXdNa2trag4//PCsXbs2F1xwQerr69PR0ZG3ve1t6du3b16pN7/5zbn88svzuc99Lh0dHdl///3Tv3//vFJ77LFHxo0blx//+MepVqtZvXp1Dj300IwePToAAAAAL0V9AAAAXiPe9KY35U1velOWLVuWnj17piiKbGyXXXbJxz/+8axcuTL19fVpbGxMp0qlknHjxuXoo4/OihUr0tLSko198IMfzKY++MEPZlPvfe97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3LuXoyeO4xZcsSKB5ctzN0d+/pl8m437VbFCBZ576mkSkhLZtW8fQYGB+JYqxelz50jPyKBW9er4+fpyN7du3ebnX07g5elFo/r1+D0XL18m6eZN7kdxb2/atmlDGb/S7D6wn8tXr9KkUSNu3brNz7+cwM3L04snW7agauXKnDl3ngOHD5GXn8+dqlSqROcXXsBms3PyzBl27d+H0+nExTAMmjdpwt3cSEgg5upVCioXEMATjzfH38+Pn45GceLUKZxOJ3fzWMNGWCxmjhw7hsPhQET+2MUjUZisnoiIiIg8LKYUW44TERERkYfEmZ5LjaZNkP+vj5a8T6cOHVj+yUpCQkMRERH5b1azWjVK+/nR65VX6PbSy1y4dImW7doiIiL/08UjUZisnoiIiIg8LBZERERERERERP4N40aMpFOHDrjt3r8fERERERER+c+wICIiIiJ/uQvRFzlwuDRXrsYiIiLy3+7ipWgOHjmMS0xsLPOXLEZERERERET+MyyIiIiIyF9uwdKlLFi6FBERkcLg3Q8+4N0PPkBERERERET+8wxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERET+cmX8/WncoAEPk4eHB61btMBsNiMiIv+ddm/Z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QdGiRek/YgRff/sNNrudkLlzCZ0ylZBx40lNS2PuwoWMGjyEe3X5yhWGjBnD/BkzCBk3nhsJCcyYN4/+vXvj9s6iRaz+cAWXjh3n1u3bTJkzm0cbNsDthbZt+fSfy3Dr3qkTZ86d48mOL+DidDrp3r8fq5Yv59juPeTk5jJ+2jQWzpnDvcq32ZgZNp9Rg4cwa/LbnDh9irkL36NhvXq4ha9ZTYO6dTnw7XYsFgs5OTkMnzAep9OJS2JSEj0G9Gdp2LvMeXsKWdnZfLltK59Gfo5LKR8foo/+jFvixWhcqjZuRHpGBiIifxW73U58YgJ/JDklhT+Sk5vDvys5JYU/I3x1BGs3buBOdoeDO+Xk5pCTm8PvuZmczB9xOBwkp6byR+x2O8kpKfyR5JQURERERERE5OEzpdhynIiIiIg8JM70XGo0bcJ/mtlsxt+vNPGJCfwZFrOZ0n6liU9M4N9RtkwA8YkJ/J5yAQEkJCXhcDj4s/xLlyY1NRWb3U5Bn//rI557+mnutGrtWsZMnYKbYRiUslpJTk3l95jNZvz9ShOfmMDv8fP1JS09HbvdjoiIiIiI/P9dPBKFyeqJiIiIyMNiQURERORvwG63E5+YwJ9ls9uJT0zg3xWfmMAfuZGQwL8r6eZN7mbQW6MpWqQId7p1O4+CHA4Hyamp/BG73U58YgJ/JDklBREREREREREREflrWRARERGRv4Ws7GxERERERERERESkcDMQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxEREZFCrE7t2rRu0YJ6jzzCw1Lc25tWzZvzoDVt3Bi/UqUQERERERERERERuVcGIiIiIoVYx7btGDloMJs/j2Rgnz48DFUqVWL9J5/yoC1fuJAmjR9FRERERERERERE5F5ZEBERESnE5i1ehMu7M2dRs1p15H/XuWNHalWvztyFCxEREREREREREZH/LhZERERE/gacODFhQv53zR9rwu28PEREREREREREROS/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2Wxw9PgJwldH4Fbaz4+lYe/SunlzihYtSv8RI/j622+4V6+/9hqjBg+hfNmynDh9im3ffUfDevXo9+abuFSrUoV506bzWKNGWMxmzkdH03/ECGKvxeHW+5XuTBw9ilJWH+KuX2f5Jyv5LDISlxfatuXTfy6joDPnzvFkxxcQEREREfm/7uKRKExWT0REREQeFlOKLceJiIiIyEPiTM+lRtMm/DfwL12a1NRUbHY7d+Pl6YVhmMjKzubP8vP1JS09Hbvdzt2ULFECu91Odk4OBQ3rP4BZkydzp8tXrtDs2WcoqGSJEthsdnJyc7gbT09PDJOJ7Jwc7lfsyVN4e3lxp0FvjWbTli24GYZBKauV5NRUfo+XpxfFPIqSkpbG7ynj709iUhIiIiIiIoXFxSNRmKyeiIiIiDwsFkRERETk/yfp5k3+SE5uDv+u5JQU/khGZiZ3E746grUbN3Anu8PBnTIyM/kjubm5/FkNW7fCxP+UlZ1NQQ6Hg+TUVP5ITm4OObk5/JHEpCRERERERERERETk3lkQERERkf/zbt++ze3bt/lPS01LQ0RERERERERERP7vMhARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgULIiIiIvJvqV2jBrm3bnH111+5m+Le3jRu0ACn08mps2dJS09HRERERERERERE5GGwICIiIiL/ljHD3+RK7FXmLlzI3fiXLs3IQYMp7edL2TIB1GnRHLvdjoiIiIiIiIiIiMiDZiAiIiIiD9WV2Fi6vt6Xrq+/Tmk/P3xLlUJERERERERERETkYTAQERERkb+E0+lERERERERERERE5GGyICIiIlKIbY1cy+TZs5g2YQKN6tXnl9OnmTJnNuejo3EJLF+edSs/4fbt28yYP4+eXbvR/tlnuBGfQLNnn8GluLc3oVND+McTT5Cfn893u3YxY9475OXn41aieAn+tWgxT7VqxZXYWN7/1wq27tjB/RjUty/dO3WmYmAgh48eZWbYfC7FxOCyZ+s2Nmz+mjcHDmL3vn38cvo0IwcPZufevQwfP457Me7NN3FZsHQpbssWLOCHPXvYtGULLk0aNWLk4CE8/thjnL1wgfCICDZv/5aCBvXtS/dOnakYGMjho0eZGTafSzExuASWL8+6lZ9w+/ZtZsyfR8+u3Wj/7DPciE+g2bPPICIiIiIiIiIiIg+XgYiIiEghVrVyZVZ+sJTtP+zk1QH9SctIZ234SkoUL45LQmIifYcNJTYujo8WL+HW7du8NnAg/UeOxMVkMrH243DKBgTw+vBhDBs3lkb167N84UIK6t+rF7/Fx9PtjdfZuXcvKxYuonGDBtyrQX37MqB3H95ZvIhnX36Z89EX2fjZKnysVlxqVq9OgH8Zuvd7g84dO1KjejU69+lNpw4dqF2jBvciwL8MAf5lKCioQiA+Ja24mEwmFobO5dDRozz29FN8tOozFs2dSykfH9wG9e3LgN59eGfxIp59+WXOR19k42er8LFacUlITKTvsKHExsXx0eIl3Lp9m9cGDqT/yJGIiIiIiIiIiIjIw2cgIiIiUsh9v3s34asjiDp+nNGTJ1PG359HGzbEJd9m41JMDL9eiyMjM5NRkyex/9AhTp87i0uNqlV5rHFj+r05nOMnT3Lk2DEGjR7Fi+3a42O14hYdE8OM+fM4ceoU85cs5uTZszz/7LPcq76vvkb46ghirl7FbDGzdtMmXFo1b47bF19/xYlTp0hJTWXTli2cvXCBuOvXqRgYyIPgdDpJz8igSnAw/qVLs3XHDpo8/RTZ2dm49X31NcJXRxBz9Spmi5m1mzbh0qp5c1zybTYuxcTw67U4MjIzGTV5EvsPHeL0ubOIiIiIiIiIiIjIw2dBREREpJA7cPgQbplZWZw8c5pa1auze/9+Coo6fow71aldm7hr18jOycEt7vp1snNyqFOrFgcOH8blwOFDFHTw8GFqVqvOvShapAg1qlalX89e9O7eA7fMrCx8rD642Ww23PLzbTwMb015m2H9+rE1ci2G2czW7duZ9s5c8vLzKVqkCDWqVqVfz1707t4Dt8ysLHysPtwp6vgxRERERERERERE5K9lQURERKSQa1S/Ptu++w4XDw8PHqlZk4XLlnEnp5P/4VJMDJWCgihftiy/xcfj4ufrS3Fvb6JjYnBrVK8+BTWsV48z589xL/Ly84mNi2PSzJns2r8Pt7JlAkhJS+VBuZmSQoM6dXDz8PCgTu3afLltGy6enp44HA7emjKFt6ZMoWa1any1eg2/nDnNZ5GR5OXnExsXx6SZM9m1fx9uZcsEkJKWyp2cTkREREREREREROQvZiAiIiJSyHV76WWebtUaP19fpowZQ36+jZ+PH8fNMAxMJhMuhmFgMplwO3P+PJevXGH6hIkEV6xIaT8/FsyazaGoKBKTknCrX6cOfXr0wFqyJK+83InmTZvy4759uBmGgWEYuBiGgWEYFPTltq1MmzCBwPLlKWKx0KvbK3yzfj1ms5kH5Yfdu2nVvDktmzWjlI8PE0eOori3NwVtXvM5vbq9gtls5mZyMjm5uTgcTty+3LaVaRMmEFi+PEUsFnp1e4Vv1q/HbDbjZhgGJpMJF8MwMJlMiIiIiIiIiIiIyF/DgoiIiEght3n7t6xYtAgfq5XrN27Qe8gQklNTcXmhbVs+/ecy3Lp36sSZc+d4suMLuNjtdrr07cPH73/A4R924nQ6OXDoEL2HDqGg0IXvMajv67w3ew6ZWVnMWbCA3fv34zKs/wBmTZ6M25mDP+EyY/48ln70ES7vLFqEtWRJ9n+7HYvZzInTpxk+fjy5ubk8KMdO/kLkpo2sXvEvPIoWZdPWrWzY/DVuubm5jA0JYfyIEcyeMgUPDw+2fPstGzZ/jds7ixZhLVmS/d9ux2I2c+L0aYaPH09ubi4uL7Rty6f/XIZb906dOHPuHE92fAERERERERERERF5+EwpthwnIiIiIg+JMz2XGk2b8J9y7tBhhowdw76ffsK/dGkSEhP5s0qWKIHNZicnN4ffU8bfn+SUFOx2O3+GxWzGWrIkyamp3I8Gdeuy86uvuZs6LZqTkJiIm6enJ4bJRHZODr/Hr1QpsnNzuXXrFndjMZuxlixJcmoqIiIiIiJy7y4eicJk9URERETkYbEgIiIi8jfgcDhISEzk35GRmcn/JjEpiX+HzW4nOTWV+3X63DlqPPYod5Oank5Bubm5/G+SU1P5Iza7neTUVEREREREREREROT/FgsiIiIi8l/PbreTkpaGiIiIiIiIiIiI/L1ZEBERESnEWrRrS1ZWFiIiIiIiIiIiIiJ/BxZERERECrHUtDRERERERERERERE/i4MRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMREREROSBKVq0KI8/9hitW7TAw8MDuX+B5cvTukULHn/sMYoWKcIfqVmtGkUsFh60IhYLrVu0oIjFgoiIiIiIiIiIyH8TAxERERF5IOo98ggXo47y7qzZTBk7FmvJksj9a1S/PiMHDWb5ewv51+Il/J4WTZtxYPsO3hw4iAfNarWyaVUEVqsVERERERERERGR/yYWREREROSB6NiuHTt27mTwmLeQP2/L9u1s2b6dl5/vwMRRo/g9p86e4cNPPmHLju38nt1bttDx1VfJzMpCRERERERERETk78CCiIiIiDwQ5cuWIyEpEXkwnE4nfyQzK4upoXP4PWX8/alTqzYmkwkREREREREREZG/CwsiIiIihdjWyLVMnj2LaRMm0KhefX45fZopc2ZzPjoat6DAQGZMmkTLps2IT0xk45bNvL9iBW5frV5DaT8/ItatxWIpwvD+/Snj70+dFs1JSEzkmX/8g5mTJlMuIACb3U6bJ/+BS5c+fYhPTMClVvXqhIwfT9PGj/LrtWt8vmED4asjcJs+YSLPPf00J8+cZv2XXxEaMpUaVasx6K3RbNqyhT1bt7Fh89e8OXAQu/ft45fTpxk5eDA79+5l+PhxuFhLliR0aghtWrfGYrGwa98+xk0LISMzE5dBfftiMpkoWyaALi++yG/xNwiPWM0XX3+Fm5+vL/OmTeeJxx8n7vp1tn3/He+vWIHT6cRtUN++dO/UmYqBgRw+epSZYfO5FBPDvSru7c17s+fwj1atyMvLIyMzE5fl4eGs/mI992L9J59QoVx5Ll+5wqC3RnPr1i0K2rQqggZ162Iymfhu4ybsDgdXYq/Sa/Bg3Px8fZk3bTpPPP44cdevs+3773h/xQqcTiduzR59lBGDBlE5KJivvtnG0o8+Iu76de5Fm9at6d+rN68NGojbgN59CA6qSEhoKC4mk4mpY8fRtk0bShQvzo979zBj/nzSMzJwCwoMZMakSbRs2oz4xEQ2btnM+ytW4PbV6jWU9vMjYt1aLJYiDO/fnzL+/tRp0ZyExEREREREREREROTvxTxx2pQZiIiIiDwst2188NFH/KeEjB9P+2eeZe2mTSwL/5i6jzzCyEGDWfPFF+Tl5eFjtbJt3Xqijh1n3LQQfjl1mlFDBuPhUYyo48dw+SkqCpvNxphhwynu7c28xYtY8emnXI2NxeFwkJiUxA97dlM5OJhTZ88yefYsvtq2jd9u3MDhdFK+bFm2rVvPvp9+Ysqc2Zy9cIHZb79NTm4ux0+dxOV8dDRHj59gzpQpVK1ciZWr17B4+XKOn/yF3Fu3mDd9BhcvXWJW2HzemTaN3xLimTB9Ou+ETOOb77/nZnIyC+eEEhRYgZ4DB7Fxy2Z6dnsFu93O8VMncWnbpg3jhr/JhUvRTJ/3Drdv5zF/xgxWro4g99YtihYpwra160jNSGf025M5ceo0E0eNIi09ndPnzuEyqG9fBvTuw8yw+Sxetpzy5coya/LbrN20kVu3b3Mv3psTim+pUvQeMpjdBw7Qv1cvxk+bxuZvv8HhdOJWq3p1nnj8ccJXR3CnIz8fY8ePO5k4ahRHjx8nNi6Ogg4dPcrOvXt4tUsXXun3Buu/+pLvdu0iPSMDl6JFirBt7TpSM9IZ/fZkTpw6zcRRo0hLT+f0uXN4eXnx5sCB1KhajamhoXy1bSs9OnemWuUq7PjxR+5Fgzp16dD2OcJXr8btuaefplJQRTZ/+y0uL7Zrz8A+fXh14ABWr1/HK506EVi+AvsP/YSLj9XKtnXriTp2nHHTQvjl1GlGDRmMh0cxoo4fw+WnqChsNhtjhg2nuLc38xYvYsWnn3I1NhaHw4GIiIiI/N8yYuAgTMWKICIiIvKwGIiIiIgUct/v3k346giijh9n9OTJlPH359GGDXF5skVLnE4nEevXYRgGsdfiiNy4kVe7dMEtNi6O89HRWEuWZPj4cXzz/fccPXGcfJsNl6zsbC7FxJCRmUl6RjqXYmK4FBODzW7HpV2bZ/j1+jVmzJ/H+ehotu/8gRnz59G3Rw/cEhITOXHqFC4frVpFxLq1HD1xnJS0NNy++PorTpw6RUpqKpu2bOHshQvEXb9OxcBAXD741wr6DhvGjcQE4hMS2LJ9Oy+2b09BmVlZTJ41i1Nnz/LPjz/i6q+/8vSTT+JSv05dgipWZMhbb3H2wgV+3LeXrq/3JTbuGm59X32N8NURxFy9itliZu2mTbi0at6ce9Wgbl0+37CBuOvXORQVxU9HjlCtSmVsdjv3KvZaHGfOnyc7J4eiRYpwp9i4OK7++isuMVevcikmhl+vXcOtfp26BFWsyJC33uLshQv8uG8vXV/vS2zcNQoKmRvKoagoDh09ypIPP6RdmzaYTCYelLSMdKxWK9UqVyY1LY1egwezfGU4bk+2aInT6SRi/ToMwyD2WhyRGzfyapcuuMXGxXE+OhpryZIMHz+Ob77/nqMnjpNvsyEiIiIiIiIiIn8/FkREREQKuQOHD+GWmZXFyTOnqVW9Orv376dO7Vr4lirFZ8uWU5DdZuNOv8XH81t8PPerbu3anLt4kYLOXrhArRo1sJjN2Ox2Coo6doy7sdlsuOXn27iTbylf5k2fQeXgYDKzsihZogS5ubkUdDDqCHa7HbfLV64QWK48LnVq1+LCpWjybTbcLl+5wuUrV3ApWqQINapWpV/PXvTu3gO3zKwsfKw+3KutO3bQu0d3Tp07S2D58rRo1pTFHy7nr1Sndi0uXIom32bD7fKVK1y+coWCzkdH43bh0iXK+PtTpEgR8vLyeBD2HjxI2JIljB46jFUfNuDipWhmzg9j1/59uNSpXQvfUqX4bNlyCrLbbNzpt/h4fouPR0RERERERERE/t4siIiIiBRyjerXZ9t33+Hi4eHBIzVrsnDZMlyiL8dw8fJl2nfripuXpxeensW4k9Pp5M+4FBPDGz17UlDloGCuxMZis9v5H5zcN5PJxDshIaz8fA2fRUbiMmrIEF7r0pWCHA4nv+dSTAyVgytRkK+PD1arlSuxseTl5xMbF8ekmTPZtX8fbmXLBJCSlsq9sljMVCxfgS2RkdxMTubtWbM5dPQof6VLMTFUDq5EQb4+PlitVq7ExuLmcDj4s26mJBPgXwaz2Yzdbsfl0YYNyMzKwq1CuXJs2rqF8NURFPf2ZvTQoSwNC6NuyxY4nU6iL8dw8fJl2nfripuXpxeensW4k9PpRERERERERERExEBERESkkOv20ss83ao1fr6+TBkzhvx8Gz8fP47LnoMHqBIczBs9e1LEYqFcQABbIiN5qf3zuBmGgWEycDEMA8MwuB/f7d5FQBl/Rg4ejI/VSs1q1Xh7zBi++uYb3EwmE4ZhwsVkmDAMg/thNgwqVwrGMAxcalarxsA+fbgfx06eJC8vj2njJ1CsWDGCAgPZ8NkqnnvqKdy+3LaVaRMmEFi+PEUsFnp1e4Vv1q/HbDZzL0oUL86bAwcxZOwY2nXtygs9erD6i/UUZDKZMAwDk8mEi2EYGIZBQYZhYBgGLibDwDAMTCYTBd1ISCAxKYmXnu9AKR8fint743bs5Eny8vKYNn4CxYoVIygwkA2freK5p57iQTl89CiGYTCgd2+8vbzo1KEDrZq3oKAX27Xny4gIyvj7k5ObS9LNmzicTtz2HDxAleBg3ujZkyIWC+UCAtgSGclL7Z/HzTAMDJOBi2EYGIaBiIiIiIiIiIj8fVkQERERKeQ2b/+WFYsW4WO1cv3GDXoPGUJyaiouiUlJ9BjQn6Vh7zLn7SlkZWfz5batfBr5OS6lfHyIPvozbokXo3Gp2rgR6RkZ3ItLMTH0GTqUd2fOYurYceTk5rJ200bmL1mM256t23ikZk1cjv64C5c+Q4fwzfffcy9sdjshc+cSOmUqIePGk5qWxtyFCxk1+P9hD17g/ZAL/oF/ft9zjM1jF7NNbl2IZ81d7KEUmsY/ityKXAojI1SuiVGruSVyKffHlMsjKYSenn8qt8wT/5DLmNao7cx2NrZzdjiX/+v8X6/zeu21Px7Job7e7/eheb3a29uz23775ZJzz82hX/hC2tracssv7silU6emz7fPOSdDBg/OXbfdnuampjz0yCOZeMwxaW9vz+uxuK0tzz73XH508SV54cUXM2KVVTLruWdz4je+mXvu/116/fAHF+fj222XPi1PTk+v7T+9ax78wx8yauTIPHrPvelzzSWXptcZ552bM847L326u7tz+nnn5qgvHppzJk/OE089lQ/tMD692tvbs9t+++WSc8/NoV/4Qtra2nLLL+7IpVOn5s3ycmdnTj3j9Bx5yKE57YQT89AjD+db3zk7G2+wQfpc9sOrs9H66+fu225Pc3Nz2traMvHYY9LT05NeLXPn5jMHHZjzzzgz3zzxa1m0eHF+custufKaH6XXsKFDM/2B/06flienp9fam26ShS+8EAAAAADeeRrzO9t6AgDQT3oWtmfdLTbP2+Wx+36XQ7/y5fz23nszYpVVMqelJa9m+MorZ8HChenq6sobcf4ZZ2Z+6/yc/O1v59WMWGWVtLa2prOrK/2huakpqwxfJbNb5uTvMXzYsCx84YV0dnXllTQ3NWXI4MGZ19qapR124EE57YQTsqynn3kmY7cfl8022jg3Tp2azT+2XVrmzk0pJRP23z+77rRTxu+2W94Ow4cNy8IXXkhnV1f+Fj+6+JJ8fLvtsqyrrr02Xz7pa+lTSsmwIUMyr7U1r6apqSkjhq+S2S1z8mqGr7xyFixcmK6urgAA8M/ryfunpTFkYAAA+ktzAADeAbq7uzOnpSWvZd78+XmjVhw0KOuuvXamXv/feS1zn38+/amzqyuzW+bk7zWvtTWvpbOrK/NaW7Osy66emmt/fEOW1dXdnV6DV1opTaXkX1ZcMS1z56anpyerDB+egSsMzNtlXmtr3ogJRx+VAcstl2Ut6XgpS+vu7s681ta8lq6ursxumZPXMm/+/AAAAADA/6Q5AAD8XY6YMCFf/+oxmfbgg/n5L+7IO1lHR0c6Ojryan5z7z25/qabcvsNP05ra2tWHjYsL730Uj5/+MT8s1m0eHEAAAAA4B9NcwAAKrbVDuOzaNGi9KdLrroql199dRa3tYXX1tXVlS+f9LV85esn5f3vWztLOpZk1nPPpaenJwAAAADA3685AAAVa12wIP1tyZIl4W/T09OTJ59+KgAAAADAm6sEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVmgMAULkJ+++fvXb9dNZcY4387oEHcuoZp+epGTPSa43VVst1l1+Rjo6OTDp9SvbZfY/suP24/HX2nIzdflx63XT1D7PK8OGZet21aW5eLhMPPDAjR4zImK22zJyWlvTaafz4HHrA5zN6vfXyfx55JOdcdGF+e++96bXGaqvlusuvSEdHRyadPiX77L5Hdtx+XP46e07Gbj8ur8fHPvKRHPi5fbP3hIPT56B998u711ozX588Ob1GjhiRk77y1Wy79daZ39qam2+/LWedf36Wts2HP5wvTTgkG62/fh59/LFccOllueN//1d6rbHaarnu8ivS0dGRSadPyT6775Edtx+Xv86ek7HbjwsAAAAA8I+v6biTvzYpAAD9paMz37vkkrxdJuy/fw7ad7+cesbp+e6FF2W1d62a0044Mdfe+OMs6ehIe3t7fnXXXdlwzJhMPPCgPD59er5x5pm5/qab0vL83PS6d9q0dHZ25suHTcy/rLhipnz3nPzgyivzp5kz093dnY995CO5+Lvn5twffD+nn3duuro6c87kb+XOu+/K7JaWtLe351d33ZUNx4zJxAMPyuPTp+cbZ56Z62+6KS3Pz83rsdGY9fOJ8R/PZVdfnT4f3267vGetNfOz225Lr5OPPTZDBg/Ovocekt/cc08mn3RSHnnsscycNSu9Ntto41z9gx/kgksvyaQpU7Jg4Qv57re+lXvu/13+Mnt22tvb86u77sqGY8Zk4oEH5fHp0/ONM8/M9TfdlJbn5wYAAPj7HXHwhDRWWC4AAP2lOQAAFdv/s3vnsqunZsaf/pSm5qZce+ON2XOXXbP1llvm5ttvz8udnXlqxoz8+dlZWX/06Bx5wvFZ1sxZs/L49OkZMnhwJh7z1fxl9uwsbe899silV12VH/7Hf6TX9KefzgYfGJM9PrVLHnr44bzc2ZmnZszIn5+dlfVHj86RJxyf/rBg4QtZf/QH8p4118pDD/8hY7cfl56envTZ69O75pd33pn7Hnggyy+/fB546MH85p57stsnP5lpDz6Ylzs789SMGfnzs7Oy/ujROfKE4wMAAAAA/HNpDgBApQYst1zWXXvtfGGfz2XfvT6TPi8uWpShQ4ZmWdMe/H1ey19mz85fZs/Ostb/19G57Ze/zNIee+KJ7DDuY1nWtAd/n/5y/iUXp5RGvnf66Vlz9dVz9/335/hTJ+WZmTPTa8y/js5aa6yRqy76fpbWuqA1y5r24O8DAAAAAPzzaQ4AQKVeevnlzJw1K8efemp+dddv02fVkaMyf0FrltXTk9fU09OTV/LUMzPyobFjc8NPf5o+73n3Wpn+9Iwsq6cnb8jz8+dl1IiRaWpqSldXV3pttvFGeXHRovQZNXJkzjr//Ew+++yMGjkyF5xxZk48+ss5+Kgj02v6jKdz77T7882zzkqflYcOzcudnVlWT08AAAAAgH9CJQAAFfvJrbfk5GOPzRqrrZblmpvzuT32zM+vvz5NTU3pU0pJo9FIr1JKGo1GllZKSWmU9CqlpJSSpd1068+z8/gd8skddswKK6yQcdtskz132TU333F7+pRS0mg00quUkkajkb/F7x54IKWUHLTvvllx0KDs+olPZOstt8rSJh13XKacckoGDRyUBQsXZsELC9Pd3Z0+P/v5bdl3r89ky823SKPRyKYbbZT7fvlfWWuNNdKnlJJGo5FepZQ0Go0AAAAAAP88GvM723oCANBPeha2Z90tNs/bpZSSKaeckj132TXNTU156JFHMvnss3PvtPvTa6fx43PlBRdmaY8+9lg+uvNO6TVs6NBMf+C/s6y1N90kC194IX0OP/jgHHHwhAwbOjQtz8/Nt77znfzohhvSa6fx43PlBRdmaY8+9lg+uvNO+VscsPfeOfKQQ7PaqqvmoUcezq2/+EU23mCDfOHww9Nrnfe9L1NOPiUf3GSTNDc15fHp03PgEUdk5rOz0mffPffKcUcdmWFDhmbWc8/loisuz79fc0167TR+fK684MIs7dHHHstHd94pAADAm+PJ+6elMWRgAAD6S2N+Z1tPAAD6Sc/C9qy7xeZ5uzU3NWXI4MGZ19qa/tJoNDJqxMjMbpmTv9XMPzycFQcNyrImHH1Ubrz55vQppWTYkCGZ19qaVzNo4KCssPyAzF+wIK9m5IgRaZk7NwAAwFvryfunpTFkYAAA+ktzAADeATq7ujKvtTX9qaenJ7Nb5uSN2PgjW6eR/9+ixYuztO7u7sxrbc1raWtvS1t7W15Ly9y5AQAAAADq0xwAAN52rQsWBAAAAADg71UCAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAD/z3rrrJPlmpvzdhgzenQ+stVW2eADHwgAAAAAwBtVAgBAttpibO6+/Y4cfvCEvB12Hr9DvjThkPzsR9fk4P32CwAAAADAG9EcAADy8B8fzfevuCI333F73g5TvntOep156mlZb533BwAAAADgjWgOAAB5cdGinDT5m3m79aQnjTQCAAAAAPBGNAcAoFLbb7ttjj3iS9nps59JR0dH+hz9xcOy9nvfm8OPPSa9rr/iiqz+rtXy9DPPZMLRR2XJkiVZ2sgRI3LSV76abbfeOvNbW3Pz7bflrPPPT5+vHn54ep11/vnpc+FZZ+WXv/51brz55vRad+11MuWUU7LJhhvmxUWLcvX11+eM887Nm2XY0KG55drrstNn9krrggXptdlGG+e0E0/MJ/baM3322nXX7LvnXln3/e/P3ffdl7MvuCCPPPbH9FlrjTUy6fjj86EtxmZ2S0t+fPPPct4PfpA+pxx7XD6+3Xb5w6OP5Pqf3JTJXz8p6669TiYcfVRuvPnmAAAAAABvrxIAgEr9+u67s+bqq2e3nXdOn4EDB2biQQfll3femT7HfP3kTDjqyHxo7NhssemmWdZXJk7MoEEDs+0nd87EY47J5/feJx/Zaqv0GTViZEaNGJmlrbX6Ghk6eEh6NRqNXHvZZXn0icez+ce2yxHHHZuJBx2U9dZZJ2+WpqamrLfOOmlqakqfQYMGZp33vjd9Vlt11Zxx6mn59nfPyb+N+1hm/OlPmXLKKekzdMiQ3HjV1Px51rMZv/tumTRlSj7z6U/nsAMPSp/vX3lFjjn55OzxqV1y/NFH5aLLr8gOu++eO3/72wAAAAAAb7/mAABU6qWXXsplV0/NhP33z49uuCG99txll7y4aFFuvuP29Jn57Kz0WtzWlgHLLZdlLVj4QtYf/YG8Z8218tDDf8jY7celp6cnr1dzU1MOmHhYHnviiQwYMCAPP/po7vnd7/LJHXfMmd/7Xt4q7UuWpKurK+uus06mz5iRyd85OysPG5ZGo5Genp58dKsPpaenJ1Ovvy6llMx8dlau+fGP89nddsuFl12aXnNaWvLii4vS65KrrsoNP/1pAAAAAIB/HM0BAKjY5T/8YY469IvZcvMtcu+0+3PIAQfk4iuvTFdXV16v8y+5OKU08r3TT8+aq6+eu++/P8efOinPzJyZ1+Plzs5stvHGOW/KlKy00kppb1+SVUeOzF/nzMlbqXXBghz0pS9l/89+Nqcdf0LmzpuXS6dOzYWXXZpeY0b/a1YeNiz/fuFFWVpXZ2deybTf/z4AAAAAwD+W5gAAVGze/Pm5/qaf5JADDsgKyy+fVUeOytTrr8vfYtTIkTnr/PMz+eyzM2rkyFxwxpk58egv5+Cjjkyv5+fPz0ZjxqTP8ssvnzGjR+cnt96aXqNGjsypxx+fj3/603l8+vT0uv6KK/JmenHRorz00ktZ/V3vyvPz5qXXZhttnDQa6bPy0KF5fPqT2f+wL2a55uaM22abXHXR9/OLX/3vPDVjRqY/PSNPPv10dtxj9/QZNHBQBg5cIa+oJwAAAADAP5gSAIDKXXT5Fdlh3Lh87StfydTrrs2ixYuztFJKSinp1SglpZQ0Go30mXTccZlyyikZNHBQFixcmAUvLEx3d3f6/PLOO7P1llvmQ2PHZtjQoTnuS0fmX1ZcMX3WWn31rLD8CimlpNFo5JM77JgP/9uWWVqj0UgpJY000mg0UkpJo9HI69XR0ZHf3ndfDjnggKw8dGj+7YMfzOf23DNLW2P11XPvL/4zG44Zk5c7OzO7pSXd3d3p7u5Or1/fc3fe9+535/P77JPlmpvzrlGjcvM11+RTO/6v9Gk0GimlkV6N0kgpJQAAAADAP47G/M62ngAA9JOehe1Zd4vN83a79tLLss3WW2ezbT6a5/761/QZNXJkHr3n3izrjPPOzRnnnZde67zvfZly8in54CabpLmpKY9Pn54DjzgiM5+dlV6NRiOnT5qUPT61S5YfMCA33nJLmppKHnjwoVx29dSUUvLdb307e+26axYtXpyH//jH3PfAAxm5yir58klfS6+Zf3g4Kw4alKW1t7dnzQ3Wz+u11RZjM+m447LxBhtkzty5mXT6lHzr6ydnvc0/mD5Hf/Gw7LvXXhk6ZEgGLLdcTj/v3Hzv4ovTZ5MNN8z5Z5yZ96y5ZhYtXpyf3HpLTvzGN9Ld3Z1ev7n15/nAeutlaft98dD8/D//MwAAwP/syfunpTFkYAAA+ktjfmdbTwAA+knPwvasu8XmqcGggYOywvIDMn/BgrySgQMHpjQaWdzWlley4qBBGTBgQFoXLMjf6rADD8ppJ5yQZT39zDMZu/24LG2V4cPz/Lx5eS3vGjUqLc8/n66urryS4SuvnAULF6arqysAAMCb58n7p6UxZGAAAPpLcwAAeF3a2tvS1t6WV9Pe3p7XsritLYvb2vJGXHb11Fz74xuyrK7u7izr+Xnz8j/565w5eS3z5s8PAAAAAPDPpzkAAPzD6+joSEdHRwAAAAAAXksJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAPSjlzs7M3illQIAAPBON3illfJyZ2cAAPpTCQBAP1ryUkc222ijAAAAvNNtttHGWfJSRwAA+lMJAEA/Gjx8aPbeffcAAAC80+29+24ZPHxoAAD6UwkAQH8a0JzNN90023546wAAALxTbfvhrbP5ppsmA5oDANCfSgAA+tmKw4fknMmTs/EGGwQAAOCdZuMNNsg5kydnxeFDAgDQ30oAAPpbc1NWHD4k1156aT6/9z4BAAB4p/j83vvk2ksvzYrDhyTNTQEA6G/NAQB4KyzXlKaVBuaIQw/JkYcckmkP/j5/fOKJdHZ2BgAAoCbNzc35wHrrZfNNNk13I2laaWDSVAIA8FZoDgDAW6WpZKVRKyfdPdlm3LbZZrtt0pOeAAAA1KSRRlIaSVNJSiMAAG+l5gAAvNVKIylN6dUIAAAAAABvlhIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAP5ve3BAAgAAgAAo+j+6H6ECFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwYYkQHKd0AqxtAAAAAElFTkSuQmCC","url":"https://www.saucedemo.com/"}');let dX=e=>{let{uiContextPreview:t,setUiContextPreview:r,showContextPreview:n}=e;return n?(0,a.jsxs)("div",{className:"form-part context-panel",children:[(0,a.jsx)("h3",{children:"UI Context"}),t?(0,a.jsx)(dT,{uiContext:t,hideController:!0}):(0,a.jsxs)("div",{children:[(e=>{switch(e){case"finished":case"passed":case"success":case"connected":return(0,a.jsx)("span",{style:{color:"#00AD4B"},children:(0,a.jsx)(dN.A,{})});case"finishedWithWarning":return(0,a.jsx)("span",{style:{color:"#f7bb05"},children:(0,a.jsx)(dD.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,a.jsx)("span",{style:{color:"#FF0A0A"},children:(0,a.jsx)(dz.A,{})});case"pending":return(0,a.jsx)(dB.A,{});case"cancelled":case"skipped":return(0,a.jsx)("span",{style:{color:"#8c8c8c"},children:(0,a.jsx)(dF.A,{})});case"running":return(0,a.jsx)(dL.A,{});default:return(0,a.jsx)(dU.A,{})}})("failed")," No UI context",(0,a.jsx)(q.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(dq)},children:"Load Demo"}),(0,a.jsx)("div",{children:"To load the UI context, you can either use the demo data above, or click the 'Send to Playground' in the report page."})]})]}):null};var dW=r(54291);let dH=e=>{let{className:t="",playgroundSDK:r,onVerify:n,agentOptions:o,onAgentOptionsSave:i,configModalClassName:s,configModalWidth:l,envTextareaAutoSize:c,envTextareaMinRows:A}=e,{config:u}=Z();return Object.keys(u||{}).length>=1?null:(0,a.jsxs)("div",{className:`env-config-reminder ${t}`,children:[(0,a.jsx)(dW.A,{className:"reminder-icon"}),(0,a.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,a.jsx)(el,{agentOptions:o,configModalClassName:s,configModalWidth:l,envTextareaAutoSize:c,envTextareaMinRows:A,mode:"text",onAgentOptionsSave:i,onVerify:n,playgroundSDK:r,showTooltipWhenEmpty:!1})]})};var dY=r(67062),dG=r(36130),dV=r(12297),d$=r(15862),d_=r(17615),d0=r(52107),d1=r(74544),d2=r(91235),d3=r(61879),d5=r(99876),d4=r(11269);let d7=e=>{var t,r;return(0,a.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,a.jsx)("path",{fill:"currentColor",d:"M1.333 13v-2.5a.667.667 0 0 1 1.334 0V13c0 .184.149.333.333.333h2.5a.667.667 0 0 1 0 1.334H3c-.92 0-1.667-.746-1.667-1.667m12 0v-2.5a.667.667 0 0 1 1.334 0V13c0 .92-.746 1.667-1.667 1.667h-2.5a.667.667 0 0 1 0-1.334H13a.333.333 0 0 0 .333-.333m-12-7.5V3c0-.92.747-1.667 1.667-1.667h2.5a.667.667 0 0 1 0 1.334H3A.333.333 0 0 0 2.667 3v2.5a.667.667 0 0 1-1.334 0m12 0V3A.333.333 0 0 0 13 2.667h-2.5a.667.667 0 0 1 0-1.334H13c.92 0 1.667.747 1.667 1.667v2.5a.667.667 0 0 1-1.334 0M5.667 10.333h4.666V5.667H5.667zm6 .167c0 .644-.523 1.167-1.167 1.167h-5A1.167 1.167 0 0 1 4.333 10.5v-5c0-.644.523-1.167 1.167-1.167h5c.644 0 1.167.523 1.167 1.167z"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},d8=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,a.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M11.333 13.667 14.667 8l-3.334-5.667H4.667L1.333 8l3.334 5.667z"}),(0,a.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M8 9.667a1.667 1.667 0 1 0 0-3.334 1.667 1.667 0 0 0 0 3.334Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function d6(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function d9(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function pe(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function pt(e,t,r,n){if(!t.img)return;e.img&&t.img!==e.img&&(e.prevImg=e.img,e.imageChanged=!0);let o=t.imageWidth||r,i=t.imageHeight||n,a=e.imgW!==o||e.imgH!==i;if(e.img=t.img,e.imgW=o,e.imgH=i,a){let t=pe(o,i);e.camera=d9({},t),e.prevCamera=d9({},t),e.pointerMoved=!1}}function pr(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function pn(e,t,r,n,o){let i=Math.round(n/2),a=Math.round(o/2);return e||Math.abs(t.pointerLeft-i)>1||Math.abs(t.pointerTop-a)>1||Math.abs(r.pointerLeft-i)>1||Math.abs(r.pointerTop-a)>1}function po(e,t,r,n,o){let i=pe(r,n),a={img:"",imgW:r,imgH:n,camera:d9({},i),prevCamera:d9({},i),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:uG,pointerVisible:!1,title:"",subTitle:"",taskId:void 0,frameInScript:0,scriptIndex:0,imageChanged:!1,pointerMoved:!1,rawProgress:0};for(let i=0;i<e.length;i++){var s,l;let c=e[i],A=c.startFrame+c.durationInFrames;if(0===c.durationInFrames){c.startFrame<=t&&("pointer"===c.type&&c.pointerImg&&(a.pointerImg=c.pointerImg,a.pointerVisible=!0),a.title=c.title||a.title,a.subTitle=c.subTitle||a.subTitle,a.taskId=null!=(s=c.taskId)?s:a.taskId,a.scriptIndex=i);continue}if(t<c.startFrame)break;switch(a.title=c.title||a.title,a.subTitle=c.subTitle||a.subTitle,a.taskId=null!=(l=c.taskId)?l:a.taskId,a.scriptIndex=i,a.frameInScript=t-c.startFrame,a.rawProgress=Math.min(a.frameInScript/c.durationInFrames,1),c.type){case"img":!function(e,t,r,n,o){pt(e,t,n,o);let i=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=d9({},e.camera),e.camera=d9({},t.cameraTarget),e.pointerMoved=pr(e.prevCamera,e.camera)):r>=i&&(e.pointerMoved=!1,e.imageChanged=!1),e.spinning=!1}(a,c,t,r,n);break;case"insight":!function(e,t,r,n,o){if(pt(e,t,n,o),e.insights.some(e=>e.highlightElement===t.highlightElement&&e.searchArea===t.searchArea)||e.insights.push({highlightElement:t.highlightElement,searchArea:t.searchArea,alpha:1}),t.cameraTarget&&void 0!==t.insightPhaseFrames){let n=t.startFrame+t.insightPhaseFrames;r>=n&&(e.prevCamera=d9({},e.camera),e.camera=d9({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=pr(e.prevCamera,e.camera))}e.spinning=!1}(a,c,t,r,n);break;case"clear-insight":!function(e,t,r){let n=t.startFrame+t.durationInFrames,o=1-e.rawProgress;e.insights=e.insights.map(e=>{var t,r;return t=d9({},e),r=r={alpha:o},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t}),r>=n&&(e.insights=[]),e.spinning=!1}(a,c,t);break;case"spinning-pointer":a.spinning=!0,a.spinningElapsedMs=a.frameInScript/o*1e3;break;case"sleep":a.spinning=!1}t>=A&&("clear-insight"!==c.type&&(a.imageChanged=!1),a.pointerMoved=!1,a.rawProgress=1,c.cameraTarget&&(a.prevCamera=d9({},a.camera)))}if(!a.img){let t=e.find(e=>"img"===e.type&&e.img);t&&(a.img=t.img,a.imgW=t.imageWidth||r,a.imgH=t.imageHeight||n)}return{img:a.img,imageWidth:a.imgW,imageHeight:a.imgH,prevImg:a.imageChanged?a.prevImg:null,camera:a.camera,prevCamera:a.prevCamera,insights:a.insights,spinning:a.spinning,spinningElapsedMs:a.spinningElapsedMs,currentPointerImg:a.pointerImg,pointerVisible:a.pointerVisible,title:a.title,subTitle:a.subTitle,taskId:a.taskId,frameInScript:a.frameInScript,scriptIndex:a.scriptIndex,imageChanged:a.imageChanged,pointerMoved:a.pointerMoved,rawProgress:a.rawProgress}}function pi(e,t,r,n){let o=Math.min(e/r,t/n),i=r*o,a=n*o;return{offsetX:(e-i)/2,offsetY:(t-a)/2,contentWidth:i,contentHeight:a}}function pa(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function ps(e){return{scale:e,width:44*e,height:56*e,hotspotX:6*e,hotspotY:4*e,centerOffsetX:44*e/2,centerOffsetY:56*e/2}}function pl(e){return pa(e,"imageWidth"),ps(Math.max(1,Math.sqrt(e/1920)))}function pc(e){let t=e.height;return{size:t,centerOffset:t/2}}let pA=e=>{let{frameMap:t,autoZoom:r,frame:n,width:o,height:i,fps:l}=e,{scriptFrames:c,imageWidth:A,imageHeight:u}=t,d=(0,s.useMemo)(()=>po(c,n,A,u,l),[c,n,A,u,l]);if(!d.img)return null;let{img:p,imageWidth:h,imageHeight:m,prevImg:f,camera:g,prevCamera:y,insights:v,spinning:b,spinningElapsedMs:w,currentPointerImg:E,pointerVisible:x,title:k,subTitle:S,frameInScript:I,imageChanged:C,pointerMoved:O,rawProgress:R}=d,j=r?O?Math.min(R/.375,1):R:1,P=O?R<=.375?0:Math.min((R-.375)/.625,1):R,M=y.pointerLeft+(g.pointerLeft-y.pointerLeft)*j,T=y.pointerTop+(g.pointerTop-y.pointerTop)*j,N=r?y.left+(g.left-y.left)*P:0,D=r?y.top+(g.top-y.top)*P:0,z=r?y.width+(g.width-y.width)*P:h,{offsetX:B,offsetY:F,contentWidth:L,contentHeight:U}=pi(o,i,h,m),K=h/z,Z=-(L/h*N),J=-(U/m*D),Q=`scale(${K}) translate(${Z}px, ${J}px)`,q=m/h*z,X=(M-N)/z*L,W=(T-D)/q*U,H=pn(x,g,y,h,m),Y=pl(h),G=pc(Y),V=Y.scale,$=C?Math.min(I/10,1):1,_=b?(Math.sin(w/500-Math.PI/2)+1)/2*Math.PI*2:0;return(0,a.jsx)("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"#000"},children:(0,a.jsx)("div",{style:{position:"absolute",left:B,top:F,width:L,height:U,overflow:"hidden"},children:(0,a.jsxs)("div",{style:{width:L,height:U,position:"relative",overflow:"hidden"},children:[C&&f&&$<1&&(0,a.jsx)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:1-$},children:(0,a.jsx)("img",{alt:"",src:f,style:{width:L,height:U,transformOrigin:"0 0",transform:Q}})}),(0,a.jsxs)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:C?$:1},children:[(0,a.jsx)("img",{alt:"",src:p,style:{width:L,height:U,transformOrigin:"0 0",transform:Q}}),(0,a.jsx)("div",{style:{position:"absolute",top:0,left:0,width:L,height:U,transformOrigin:"0 0",transform:Q,pointerEvents:"none"},children:0===v.length?null:v.map((e,t)=>{let r=[];if(e.highlightElement){let n=u_(e.highlightElement);r.push((0,a.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(253, 89, 7, 0.4)",border:`${2*V}px solid #fd5907`,boxShadow:`${2*V}px ${2*V}px ${+V}px rgba(51, 51, 51, 0.3)`,opacity:e.alpha,pointerEvents:"none"}},`highlight-${t}`))}if(e.searchArea){let n=e.searchArea;r.push((0,a.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(2, 131, 145, 0.4)",border:`${2*V}px solid #028391`,boxShadow:`${2*V}px ${2*V}px ${+V}px rgba(51, 51, 51, 0.3)`,opacity:e.alpha,pointerEvents:"none"}},`search-${t}`))}return r})})]}),b&&(0,a.jsx)("img",{alt:"",src:uV,style:{position:"absolute",left:X-G.centerOffset,top:W-G.centerOffset,width:G.size,height:G.size,transform:`rotate(${_}rad)`,transformOrigin:"center center",filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}}),H&&!b&&(0,a.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:X-Y.hotspotX,top:W-Y.hotspotY,width:Y.width,height:Y.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};function pu(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function pd(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){pu(i,n,o,a,s,"next",e)}function s(e){pu(i,n,o,a,s,"throw",e)}a(void 0)})}}let pp=!1;function ph(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function pm(e,t,r){let n=r.contentWidth/r.imageWidth,o=r.contentHeight/r.imageHeight;return{left:r.offsetX+(e.left*n+t.tx)*t.zoom,top:r.offsetY+(e.top*o+t.ty)*t.zoom,width:e.width*n*t.zoom,height:e.height*o*t.zoom}}function pf(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function pg(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){pf(i,n,o,a,s,"next",e)}function s(e){pf(i,n,o,a,s,"throw",e)}a(void 0)})}}function py(e,t){let r=Math.floor(e/t),n=Math.floor(r/60);return`${String(n).padStart(2,"0")}:${String(r%60).padStart(2,"0")}`}function pv(e){var t,r,n,o,i;let l,{message:c}=ew.A.useApp(),{autoZoom:A,setAutoZoom:u,playbackSpeed:d,setPlaybackSpeed:p,subtitleEnabled:m,setSubtitleEnabled:f}=C();(0,s.useEffect)(()=>{(null==e?void 0:e.autoZoom)!==void 0&&u(e.autoZoom)},[null==e?void 0:e.autoZoom,u]);let g=null==e?void 0:e.replayScripts,y=(0,s.useMemo)(()=>g&&0!==g.length?function(e,t){let r=(null==t?void 0:t.imageWidth)||1920,n=(null==t?void 0:t.imageHeight)||1080;for(let t of e)if(("img"===t.type||"insight"===t.type)&&t.img){r=t.imageWidth||r,n=t.imageHeight||n;break}let o=[],i=0;for(let t of e){var a,s,l,c;let e=t.duration;switch(t.type){case"sleep":{let r=Math.ceil(e/1e3*30);o.push({type:"sleep",startFrame:i,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),i+=r;break}case"img":{let l=Math.max(Math.ceil(e/1e3*30),1),c=t.camera,A=t.imageWidth||r,u=t.imageHeight||n,d={type:"img",startFrame:i,durationInFrames:l,img:t.img,imageWidth:A,imageHeight:u,title:t.title,subTitle:t.subTitle,taskId:t.taskId};c&&(d.cameraTarget={left:c.left,top:c.top,width:c.width,pointerLeft:null!=(a=c.pointerLeft)?a:Math.round(A/2),pointerTop:null!=(s=c.pointerTop)?s:Math.round(u/2)}),o.push(d),i+=l;break}case"insight":{let a=Math.max(Math.ceil(e/1e3*30),1),s=Math.ceil((t.insightCameraDuration||0)/1e3*30),A=a+s,u=t.imageWidth||r,d=t.imageHeight||n,p=t.camera,h={type:"insight",startFrame:i,durationInFrames:A,img:t.img,imageWidth:u,imageHeight:d,insightPhaseFrames:a,cameraPhaseFrames:s,highlightElement:t.highlightElement,searchArea:t.searchArea,title:t.title,subTitle:t.subTitle,taskId:t.taskId};p&&(h.cameraTarget={left:p.left,top:p.top,width:p.width,pointerLeft:null!=(l=p.pointerLeft)?l:Math.round(u/2),pointerTop:null!=(c=p.pointerTop)?c:Math.round(d/2)}),o.push(h),i+=A;break}case"clear-insight":{let r=Math.max(Math.ceil(e/1e3*30),1);o.push({type:"clear-insight",startFrame:i,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),i+=r;break}case"spinning-pointer":{let r=Math.max(Math.ceil(e/1e3*30),1);o.push({type:"spinning-pointer",startFrame:i,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),i+=r;break}case"pointer":o.push({type:"pointer",startFrame:i,durationInFrames:0,pointerImg:t.img,title:t.title,subTitle:t.subTitle,taskId:t.taskId})}}let A=Math.max(i,1);return{scriptFrames:o,totalDurationInFrames:A,fps:30,stepsDurationInFrames:A,imageWidth:r,imageHeight:n}}(g,{imageWidth:null==e?void 0:e.imageWidth,imageHeight:null==e?void 0:e.imageHeight}):null,[null==e?void 0:e.imageHeight,null==e?void 0:e.imageWidth,g]),v=(0,s.useRef)(null),b=(0,s.useRef)(null),w=(0,s.useRef)(null),[E,x]=(0,s.useState)({width:0,height:0});(0,s.useEffect)(()=>{let e=b.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;x(t=>t.width===e&&t.height===r?t:{width:e,height:r})}});return t.observe(e),()=>t.disconnect()},[]);let k=function(e){var t,r;let{durationInFrames:n,fps:o,autoPlay:i=!1,loop:a=!1}=e,[l,c]=(0,s.useState)(0),[A,u]=(0,s.useState)(i),d=(0,s.useRef)(A),p=(0,s.useRef)(l),h=(0,s.useRef)(null!=(t=e.playbackRate)?t:1),m=(0,s.useRef)(n),f=(0,s.useRef)(o),g=(0,s.useRef)(a);d.current=A,p.current=l,h.current=null!=(r=e.playbackRate)?r:1,m.current=n,f.current=o,g.current=a,(0,s.useEffect)(()=>{let e;if(!A)return;let t=null,r=0,n=o=>{if(null!==t){let e=(o-t)*h.current;r+=e;let n=1e3/f.current;for(;r>=n;){r-=n;let e=p.current+1;if(e>=m.current)if(g.current)p.current=0,c(0);else{p.current=m.current-1,c(m.current-1),u(!1);return}else p.current=e,c(e)}}t=o,e=requestAnimationFrame(n)};return e=requestAnimationFrame(n),()=>cancelAnimationFrame(e)},[A]);let y=()=>{p.current>=m.current-1&&(p.current=0,c(0))},v=(0,s.useCallback)(()=>{y(),u(!0)},[]),b=(0,s.useCallback)(()=>u(!1),[]);return{currentFrame:l,playing:A,play:v,pause:b,toggle:(0,s.useCallback)(()=>{d.current?u(!1):(y(),u(!0))},[]),seekTo:(0,s.useCallback)(e=>{let t=Math.max(0,Math.min(e,m.current-1));p.current=t,c(t)},[])}}({durationInFrames:Math.max(null!=(t=null==y?void 0:y.totalDurationInFrames)?t:1,1),fps:null!=(r=null==y?void 0:y.fps)?r:30,autoPlay:null==(n=null==e?void 0:e.autoPlay)||n,loop:!1,playbackRate:d}),S=(0,s.useMemo)(()=>{if(!y)return 0;for(let e=y.scriptFrames.length-1;e>=0;e--){let t=y.scriptFrames[e];if(t.taskId)return t.startFrame+t.durationInFrames-1}return Math.max(0,y.totalDurationInFrames-1)},[y]),I=(0,s.useCallback)(()=>{var e;k.playing?k.pause():(e=k.currentFrame,S>0&&e>=S&&k.seekTo(0),k.play())},[S,k.currentFrame,k.pause,k.play,k.playing,k.seekTo]);(0,s.useEffect)(()=>{!y||k.playing||!(k.currentFrame<y.totalDurationInFrames-1)&&S>0&&k.seekTo(S)},[S,y,k.currentFrame,k.playing,k.seekTo]),(0,s.useEffect)(()=>{if(!y||!(null==e?void 0:e.onTaskChange))return;if(!k.playing){null!==w.current&&(w.current=null,e.onTaskChange(null));return}let t=function(e,t){let r=null;for(let i of e){var n,o;if(0===i.durationInFrames){i.startFrame<=t&&(r=null!=(n=i.taskId)?n:r);continue}if(t<i.startFrame)break;r=null!=(o=i.taskId)?o:r}return r}(y.scriptFrames,k.currentFrame);t!==w.current&&(w.current=t,e.onTaskChange(t))},[y,null==e?void 0:e.onTaskChange,k.currentFrame,k.playing]);let O=(0,s.useMemo)(()=>{var e;let t;return y?(e=k.currentFrame,(t=po(y.scriptFrames,e,y.imageWidth,y.imageHeight,y.fps)).img?t:null):null},[y,k.currentFrame]),R=(0,s.useCallback)(()=>pg(function*(){if((null==e?void 0:e.reportFormat)==="html-and-external-assets"&&e.reportUrl)return void globalThis.open(e.reportUrl,"_blank","noopener,noreferrer");try{var t,r;let n=null==e?void 0:e.reportFileContent;if(!n&&(null==e?void 0:e.reportUrl)){let t=yield fetch(e.reportUrl);if(!t.ok)throw Error(`Report request failed (${t.status})`);n=yield t.text()}if(!n)return;yield(t={content:n,onDownloadReport:null==e?void 0:e.onDownloadReport},(r=function*(){let{content:e,defaultFileName:r="midscene_report.html",onDownloadReport:n,documentRef:o,urlRef:i,blobFactory:a,scheduleRevoke:s}=t;if(n)return void(yield n({content:e,defaultFileName:r}));let l=null!=o?o:globalThis.document;if(!l)throw Error("Report download requires a document context.");let c=null!=i?i:globalThis.URL;if(!(null==c?void 0:c.createObjectURL)||!(null==c?void 0:c.revokeObjectURL))throw Error("Report download requires URL.createObjectURL support.");let A=(null!=a?a:(e,t)=>new Blob(e,t))([e],{type:"text/html"}),u=c.createObjectURL(A),d=l.createElement("a");d.href=u,d.download=r,d.style.display="none",l.body.appendChild(d);try{d.click()}finally{l.body.removeChild(d),(null!=s?s:e=>setTimeout(e,0))(()=>{c.revokeObjectURL(u)})}},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){d6(i,n,o,a,s,"next",e)}function s(e){d6(i,n,o,a,s,"throw",e)}a(void 0)})})())}catch(e){uv(e,{title:"Failed to download report"})}})(),[null==e?void 0:e.onDownloadReport,null==e?void 0:e.reportFileContent,null==e?void 0:e.reportFormat,null==e?void 0:e.reportUrl]),j=(0,s.useMemo)(()=>O&&(O.title||O.subTitle)?{title:O.title,subTitle:O.subTitle}:null,[O]),[P,M]=(0,s.useState)(!1),[T,N]=(0,s.useState)(0),D=(0,s.useRef)(!1),[z,B]=(0,s.useState)(!0),F=(0,s.useRef)(null),L=(0,s.useCallback)(()=>{B(!0),F.current&&clearTimeout(F.current),P||(F.current=setTimeout(()=>B(!1),3e3))},[P]),U=(0,s.useCallback)(()=>{B(!0),F.current&&clearTimeout(F.current)},[]),K=(0,s.useCallback)(()=>{F.current&&clearTimeout(F.current),P||(F.current=setTimeout(()=>B(!1),1e3))},[P]);(0,s.useEffect)(()=>{P&&(B(!0),F.current&&(clearTimeout(F.current),F.current=null))},[P]),(0,s.useEffect)(()=>{let e=e=>{var t;let r=null==(t=e.target)?void 0:t.tagName;"INPUT"!==r&&"TEXTAREA"!==r&&"SELECT"!==r&&"Space"===e.code&&(e.preventDefault(),I())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[I]);let Z=(0,s.useRef)(null),J=(0,s.useCallback)(e=>{if(!y||!Z.current)return;let t=Z.current;t.setPointerCapture(e.pointerId);let r=e=>{let r=t.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e-r.left)/r.width));k.seekTo(Math.round(n*S))};r(e.clientX);let n=e=>r(e.clientX),o=()=>{t.removeEventListener("pointermove",n),t.removeEventListener("pointerup",o)};t.addEventListener("pointermove",n),t.addEventListener("pointerup",o)},[y,k,S]),[Q,X]=(0,s.useState)(!1),W=(0,s.useCallback)(()=>{let e=v.current;e&&(document.fullscreenElement?document.exitFullscreen().then(()=>X(!1)):e.requestFullscreen().then(()=>X(!0)))},[]);(0,s.useEffect)(()=>{let e=()=>X(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let H=(0,s.useCallback)(()=>pg(function*(){if(y&&!D.current){D.current=!0,M(!0),N(0);try{var e,t;yield(e={autoZoom:A},t=e=>N(Math.round(100*e)),pd(function*(){if(pp)throw Error("Video export is already in progress");pp=!0;try{var r,n,o;yield(r=y,n=e,o=t,pd(function*(){var e;let{totalDurationInFrames:t,fps:i}=r,a=null==(e=null==n?void 0:n.autoZoom)||e,s=new Set;for(let e of r.scriptFrames)e.img&&s.add(e.img);let l=new Map;yield Promise.all([...s].map(e=>pd(function*(){try{l.set(e,(yield ph(e)))}catch(e){}})()));let c=new Set([uG]);for(let e of r.scriptFrames)e.pointerImg&&c.add(e.pointerImg);let A=new Map;yield Promise.all([...c].map(e=>pd(function*(){try{A.set(e,(yield ph(e)))}catch(e){}})()));let u=null;try{u=yield ph(uV)}catch(e){}let d=document.createElement("canvas");d.width=960,d.height=540;let p=d.getContext("2d"),h=d.captureStream(i),m=new MediaRecorder(h,{mimeType:"video/webm"}),f=[];return m.ondataavailable=e=>{e.data.size>0&&f.push(e.data)},new Promise((e,n)=>{let s=null,c=!1,d=0,g=performance.now(),y=g,v=null,b=null,w=1e3/i,E=()=>{v&&clearTimeout(v),b&&clearTimeout(b),document.removeEventListener("visibilitychange",k),h.getTracks().forEach(e=>e.stop())},x=e=>{c||s||(s=e,"inactive"!==m.state?m.stop():(E(),c=!0,n(e)))},k=()=>{document.hidden&&x(Error("Video export was interrupted because the report tab was hidden"))};m.onerror=()=>{x(Error("MediaRecorder error"))},m.onstop=()=>{if(E(),c)return;if(c=!0,s)return void n(s);if(0===f.length)return void n(Error("No video data"));let t=new Blob(f,{type:"video/webm"}),r=URL.createObjectURL(t),o=document.createElement("a");o.href=r,o.download="midscene_replay.webm",o.click(),setTimeout(()=>URL.revokeObjectURL(r),1e3),e()},document.addEventListener("visibilitychange",k),m.start();let S=e=>{if(!c&&"inactive"!==m.state){if(d>0&&e-y>Math.max(2e3,10*w))return void x(Error("Video export was interrupted because rendering stalled"));y=e,p.clearRect(0,0,960,540),function(e,t,r,n,o,i,a){var s,l,c,A,u,d,p,h,m,f,g,y,v,b,w,E,x;let k,{scriptFrames:S,imageWidth:I,imageHeight:C,fps:O}=r,R=po(S,t,I,C,O);if(!R.img)return;let{img:j,prevImg:P,imageWidth:M,imageHeight:T,camera:N,prevCamera:D,pointerMoved:z,imageChanged:B,rawProgress:F,frameInScript:L,spinning:U,spinningElapsedMs:K,currentPointerImg:Z,pointerVisible:J,insights:Q}=R,q=a?z?Math.min(F/.375,1):F:1,{camLeft:X,camTop:W,camWidth:H}=(h=D,m=N,f=M,g=z?F<=.375?0:Math.min((F-.375)/.625,1):F,a?{camLeft:(y=h.left,v=m.left,y+(v-y)*g),camTop:(b=h.top,w=m.top,b+(w-b)*g),camWidth:(E=h.width,x=m.width,E+(x-E)*g)}:{camLeft:0,camTop:0,camWidth:f}),Y=(l=D.pointerLeft,c=N.pointerLeft,l+(c-l)*q),G=(A=D.pointerTop,u=N.pointerTop,A+(u-A)*q),V=M/H,{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et}=pi(960,540,M,T),er=-(ee/M*X),en=-(et/T*W),eo=B?Math.min(Math.max(L/10,0),1):1;e.fillStyle="#000",e.fillRect(0,0,960,540);let ei=(t,r)=>{let o=n.get(t);o&&!(r<=0)&&(e.save(),e.globalAlpha=r,e.beginPath(),e.rect(0,0,960,540),e.clip(),e.translate($+er*V,_+en*V),e.scale(V,V),e.drawImage(o,0,0,ee,et),e.restore())};B&&P&&eo<1&&ei(P,1-eo),ei(j,B?eo:1),Q.length>0&&function(e,t,r,n){for(let o of(e.save(),e.beginPath(),e.rect(n.offsetX,n.offsetY,n.contentWidth,n.contentHeight),e.clip(),t))if(!(o.alpha<=0)){if(e.save(),e.globalAlpha*=o.alpha,o.highlightElement){let t=pm(u_(o.highlightElement),r,n);e.fillStyle="rgba(253, 89, 7, 0.4)",e.fillRect(t.left,t.top,t.width,t.height),e.strokeStyle="#fd5907",e.lineWidth=1,e.strokeRect(t.left,t.top,t.width,t.height),e.shadowColor="rgba(51, 51, 51, 0.4)",e.shadowBlur=2,e.shadowOffsetX=4,e.shadowOffsetY=4,e.strokeRect(t.left,t.top,t.width,t.height),e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0}if(o.searchArea){let t=pm(o.searchArea,r,n);e.fillStyle="rgba(2, 131, 145, 0.4)",e.fillRect(t.left,t.top,t.width,t.height),e.strokeStyle="#028391",e.lineWidth=1,e.strokeRect(t.left,t.top,t.width,t.height)}e.restore()}e.restore()}(e,Q,{zoom:V,tx:er,ty:en},{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et,imageWidth:M,imageHeight:T});let ea=T/M*H,es=$+(Y-X)/H*ee,el=_+(G-W)/ea*et,ec=(pa(ee,"contentWidth"),ps(pl(M).scale*(ee/M))),eA=pc(ec),eu=null!=(s=o.get(Z))?s:o.get(uG),ed=pn(J,N,D,M,T);U&&i&&(d=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},ec),p=p={width:eA.size,height:eA.size,centerOffsetX:eA.centerOffset,centerOffsetY:eA.centerOffset},Object.getOwnPropertyDescriptors?Object.defineProperties(d,Object.getOwnPropertyDescriptors(p)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(p)).forEach(function(e){Object.defineProperty(d,e,Object.getOwnPropertyDescriptor(p,e))}),k=(Math.sin(K/500-Math.PI/2)+1)/2*Math.PI*2,e.save(),e.translate(es,el),e.rotate(k),e.drawImage(i,-d.centerOffsetX,-d.centerOffsetY,d.width,d.height),e.restore()),!U&&ed&&eu&&e.drawImage(eu,es-ec.hotspotX,el-ec.hotspotY,ec.width,ec.height)}(p,d,r,l,A,u,a),null==o||o((d+1)/t),(d+=1)<t?(g+=w,b=setTimeout(()=>{requestAnimationFrame(S)},Math.max(0,g-performance.now()))):v=setTimeout(()=>{"inactive"!==m.state&&m.stop()},2*w)}};requestAnimationFrame(e=>{y=e,g=e,S(e)})})})())}finally{pp=!1}})()),c.success("Video exported")}catch(e){console.error("Export failed:",e),uv(e,{title:"Video export failed"})}finally{D.current=!1,M(!1),N(0)}}})(),[A,y]),Y=(0,s.useMemo)(()=>{if(!y||S<=0)return[];let e=[];for(let t of y.scriptFrames){if("img"!==t.type&&"insight"!==t.type||0===t.durationInFrames)continue;let r=t.startFrame,n=r/S*100;if(n>1&&n<99){let o=[t.title,t.subTitle].filter(Boolean);e.push({percent:n,title:o.length>0?o.join(": "):`Chapter ${e.length+1}`,frame:r})}}return e},[y,S]),G=!!((null!=(o=null==e?void 0:e.reportFileContent)?o:null)||(null==e?void 0:e.reportUrl)),V=(null==e?void 0:e.reportFormat)==="html-and-external-assets"?"Open report":"Download report",$=(null==e?void 0:e.canDownloadReport)!==!1,_=null!=(i=null==e?void 0:e.presentation)?i:"default";if(!g||0===g.length||!y)return G&&$?(0,a.jsx)("div",{className:"player-container player-container-empty","data-presentation":_,children:(0,a.jsxs)("div",{className:"player-empty-state",children:[(0,a.jsx)("span",{className:"player-empty-text",children:"No replay available"}),(0,a.jsx)(q.Ay,{icon:(0,a.jsx)(dY.A,{}),onClick:()=>{R()},children:V})]})}):null;let ee=(null==O?void 0:O.imageWidth)||y.imageWidth,et=(null==O?void 0:O.imageHeight)||y.imageHeight,er=et>ee,en=S>0?Math.min(100,k.currentFrame/S*100):0;return(0,a.jsx)("div",{className:"player-container","data-fit-mode":null==e?void 0:e.fitMode,"data-presentation":_,children:(0,a.jsxs)("div",{className:"canvas-container",ref:v,onMouseMove:L,onMouseEnter:U,onMouseLeave:K,children:[(0,a.jsx)("div",{className:"player-wrapper","data-portrait":er?"":void 0,style:{aspectRatio:`${ee}/${et}`},children:(0,a.jsx)("div",{ref:b,style:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",overflow:"hidden"},onClick:I,children:(l=E.width>0&&E.height>0?Math.min(E.width/ee,E.height/et):1,(0,a.jsx)("div",{style:{width:ee*l,height:et*l,flexShrink:0,position:"relative",overflow:"hidden"},children:(0,a.jsx)("div",{style:{width:ee,height:et,transformOrigin:"0 0",transform:`scale(${l})`},children:(0,a.jsx)(pA,{frameMap:y,autoZoom:A&&k.playing,frame:k.currentFrame,width:ee,height:et,fps:y.fps})})}))})}),m&&j&&(0,a.jsxs)("div",{className:"player-subtitle",children:[j.title&&(0,a.jsx)("span",{className:"player-subtitle-badge",children:j.title}),j.subTitle&&(0,a.jsx)("span",{className:"player-subtitle-text",children:j.subTitle})]}),!(null==e?void 0:e.hideControls)&&(0,a.jsxs)("div",{className:`control-bar ${z?"":"hidden"}`,onClick:e=>e.stopPropagation(),children:[(0,a.jsx)("div",{className:"status-icon",onClick:I,children:k.playing?(0,a.jsx)(dG.A,{}):(0,a.jsx)(dV.A,{})}),(0,a.jsxs)("span",{className:"time-display",children:[py(Math.min(k.currentFrame,S),y.fps)," ","/ ",py(S+1,y.fps)]}),(0,a.jsxs)("div",{className:"seek-bar-track",ref:Z,onPointerDown:J,children:[(0,a.jsx)("div",{className:"seek-bar-fill",style:{width:`${en}%`}}),(0,a.jsx)("div",{className:"seek-bar-knob",style:{left:`${en}%`}}),Y.map(e=>(0,a.jsx)(h.A,{title:e.title,overlayClassName:"chapter-tooltip",children:(0,a.jsx)("div",{className:"chapter-marker",style:{left:`${e.percent}%`},onClick:t=>{t.stopPropagation(),k.seekTo(e.frame)}})},e.percent))]}),(0,a.jsxs)("div",{className:"player-custom-controls",children:[G&&$?(0,a.jsx)(h.A,{title:V,children:(0,a.jsx)("div",{className:"status-icon",onClick:()=>{R()},children:(0,a.jsx)(dY.A,{})})}):null,(0,a.jsx)(d3.A,{trigger:["hover","click"],placement:"topRight",overlayStyle:{minWidth:"148px"},dropdownRender:()=>(0,a.jsxs)("div",{className:"player-settings-dropdown",children:[(0,a.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px",borderRadius:"4px",cursor:P?"not-allowed":"pointer",opacity:P?.5:1},onClick:P?void 0:H,children:[(0,a.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:P?(0,a.jsx)(d5.A,{type:"circle",percent:T,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,a.jsx)(d$.A,{style:{width:"16px",height:"16px"}})}),(0,a.jsx)("span",{className:"player-export-label",children:P?`Exporting ${T}%`:"Export video"})]}),(0,a.jsx)("div",{className:"player-settings-divider"}),(0,a.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,a.jsx)(d7,{style:{width:"16px",height:"16px"}}),(0,a.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,a.jsx)(d4.A,{size:"small",checked:A,onChange:e=>u(e)})]}),(0,a.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,a.jsx)(d_.A,{style:{width:"16px",height:"16px"}}),(0,a.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,a.jsx)(d4.A,{size:"small",checked:m,onChange:e=>f(e)})]}),(0,a.jsx)("div",{className:"player-settings-divider"}),(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px"},children:[(0,a.jsx)(d0.A,{style:{width:"16px",height:"16px"}}),(0,a.jsx)("span",{style:{fontSize:"14px"},children:"Playback speed"})]}),[.5,1,1.5,2].map(e=>(0,a.jsxs)("div",{onClick:()=>p(e),style:{height:"32px",lineHeight:"32px",padding:"0 8px 0 28px",fontSize:"14px",cursor:"pointer",borderRadius:"4px"},className:`player-speed-option${d===e?" active":""}`,children:[e,"x"]},e))]}),menu:{items:[]},children:(0,a.jsx)("div",{className:"status-icon",children:(0,a.jsx)(d8,{style:{width:"16px",height:"16px"}})})}),!(null==e?void 0:e.hideFullscreenControl)&&(0,a.jsx)("div",{className:"status-icon",onClick:W,children:Q?(0,a.jsx)(d1.A,{}):(0,a.jsx)(d2.A,{})})]})]})]})})}let pb=e=>{let{result:t,loading:r,serverValid:n,serviceMode:o,replayScriptsInfo:i,replayCounter:s,loadingProgressText:l,verticalMode:c=!1,notReadyMessage:A,fitMode:u,autoZoom:d,showOutputAlongsideReport:p=!1,canDownloadReport:h,onDownloadReport:m,playerPresentation:f,hidePlayerFullscreenControl:g}=e,y="result-wrapper";c&&(y+=" vertical-mode-result"),i&&c&&(y+=" result-wrapper-compact");let v=dQ;if(n||"Server"!==o){var b,w,E,x,k,S,I,C,O,R;if(r)v=(0,a.jsxs)("div",{className:"loading-container",children:[(0,a.jsx)(ef.A,{spinning:r,indicator:(0,a.jsx)(uK.A,{spin:!0})}),(0,a.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,a.jsx)(dK,{text:l,speed:3})})]});else if(null==t?void 0:t.error){let e=(0,a.jsx)("pre",{style:{color:"#ff4d4f",whiteSpace:"pre-wrap"},children:null==t?void 0:t.error});v=t.reportHTML||t.report||i?(0,a.jsxs)("div",{className:"combined-result-layout",children:[(0,a.jsxs)("div",{style:{flex:"0 0 auto",maxHeight:"40%",overflow:"auto"},children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Error:"}),e]}),(0,a.jsxs)("div",{className:"combined-result-section",children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,a.jsx)("div",{className:"combined-result-player",children:(0,a.jsx)(pv,{replayScripts:null==i?void 0:i.scripts,imageWidth:null==i?void 0:i.width,imageHeight:null==i?void 0:i.height,reportFileContent:t.reportHTML||null,reportUrl:null==(b=t.report)?void 0:b.url,reportFormat:null==(w=t.report)?void 0:w.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==o,onDownloadReport:m,presentation:f,hideFullscreenControl:g},s)})]})]}):e}else if(p&&(null==t?void 0:t.result)!==void 0&&i){let e="string"==typeof(null==t?void 0:t.result)?(0,a.jsx)("pre",{children:null==t?void 0:t.result}):(0,a.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}),r=(null==t?void 0:t.reportHTML)||null;v=(0,a.jsxs)("div",{className:"combined-result-layout",children:[(0,a.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,a.jsxs)("div",{className:"combined-result-section",children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,a.jsx)("div",{className:"combined-result-player",children:(0,a.jsx)(pv,{replayScripts:i.scripts,imageWidth:i.width,imageHeight:i.height,reportFileContent:r,reportUrl:null==(E=t.report)?void 0:E.url,reportFormat:null==(x=t.report)?void 0:x.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==o,onDownloadReport:m,presentation:f,hideFullscreenControl:g},s)})]})]})}else if(i){let e=(null==t?void 0:t.reportHTML)||null;v=(0,a.jsx)(pv,{replayScripts:i.scripts,imageWidth:i.width,imageHeight:i.height,reportFileContent:e,reportUrl:null==t||null==(k=t.report)?void 0:k.url,reportFormat:null==t||null==(S=t.report)?void 0:S.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==o,onDownloadReport:m,presentation:f,hideFullscreenControl:g},s)}else if(p&&(null==t?void 0:t.result)!==void 0&&((null==t?void 0:t.reportHTML)||(null==t?void 0:t.report))){let e="string"==typeof(null==t?void 0:t.result)?(0,a.jsx)("pre",{children:null==t?void 0:t.result}):(0,a.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)});v=(0,a.jsxs)("div",{className:"combined-result-layout",children:[(0,a.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,a.jsxs)("div",{className:"combined-result-section",children:[(0,a.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,a.jsx)("div",{className:"combined-result-player",children:(0,a.jsx)(pv,{reportFileContent:t.reportHTML||null,reportUrl:null==(I=t.report)?void 0:I.url,reportFormat:null==(C=t.report)?void 0:C.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==o,onDownloadReport:m,presentation:f,hideFullscreenControl:g},s)})]})]})}else p&&(null==t?void 0:t.result)!==void 0?v="string"==typeof(null==t?void 0:t.result)?(0,a.jsx)("pre",{children:null==t?void 0:t.result}):(0,a.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}):(null==t?void 0:t.reportHTML)||(null==t?void 0:t.report)?v=(0,a.jsx)(pv,{reportFileContent:t.reportHTML||null,reportUrl:null==(O=t.report)?void 0:O.url,reportFormat:null==(R=t.report)?void 0:R.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==o,onDownloadReport:m,presentation:f,hideFullscreenControl:g},s):(null==t?void 0:t.result)!==void 0&&(v="string"==typeof(null==t?void 0:t.result)?(0,a.jsx)("pre",{children:null==t?void 0:t.result}):(0,a.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}))}else v=dJ(A);return(0,a.jsx)("div",{className:y,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:v})},pw=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:20,height:20,fill:"none","aria-label":"Playground",viewBox:"0 0 20 20"},e),r=r={children:[(0,a.jsx)("rect",{width:20,height:20,fill:"#2B83FF",rx:10}),(0,a.jsx)("path",{fill:"#2B83FF",stroke:"#fff",strokeLinejoin:"round",strokeWidth:1.125,d:"M6.866 5.882a.56.56 0 0 1 .667-.078l3.248 1.875 3.247 1.875a.563.563 0 0 1 0 .974l-3.247 1.875-3.248 1.875a.563.563 0 0 1-.784-.74l1.749-3.497-1.75-3.498a.56.56 0 0 1 .118-.661Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function pE(){return(0,s.createElement)("svg",{width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0,focusable:!1},(0,s.createElement)("path",{d:"M3 7.99984L6.33333 11.3332L13 4.6665",stroke:"#188F4D",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"}))}function px(){return(0,s.createElement)("svg",{width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0,focusable:!1},(0,s.createElement)("path",{d:"M5 5L11 11M11 5L5 11",stroke:"#FF4D4F",strokeWidth:"1.2",strokeLinecap:"round"}))}let pk="ZodOptional",pS="ZodDefault",pI="ZodNullable",pC="ZodObject",pO=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),pR=e=>{var t,r,n;let o=e=>!!(null==e?void 0:e.prompt);if((null==(t=e._def)?void 0:t.typeName)===pC){let t;if(e._def.shape&&(t="function"==typeof e._def.shape?e._def.shape():e._def.shape),!t&&e.shape&&(t=e.shape),t&&"prompt"in t&&t.prompt||o(t))return!0;let n=(null==(r=e._def)?void 0:r.description)||e.description||"";if("string"==typeof n&&n.toLowerCase().includes("input field"))return!0}if("object"==typeof e&&null!==e){let t=e.description||(null==(n=e._def)?void 0:n.description)||"";if("string"==typeof t){let e=t.toLowerCase();if(e.includes("input field")||e.includes("element")||e.includes("locate"))return!0}if("ZodObject"===e.typeName||"ZodObject"===e.type)return!!o(e.shape)||"string"==typeof t&&t.toLowerCase().includes("input field")}return!1},pj=e=>{var t,r,n,o,i;let a=e,s=!1,l=!1;for(;(null==(t=a._def)?void 0:t.typeName)===pk||(null==(r=a._def)?void 0:r.typeName)===pS||(null==(n=a._def)?void 0:n.typeName)===pI;)(null==(o=a._def)?void 0:o.typeName)===pk&&(s=!0),(null==(i=a._def)?void 0:i.typeName)===pS&&(l=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:l}},pP=(e,t)=>null==e?void 0:e.find(e=>e.interfaceAlias===t||e.name===t),pM=(e,t)=>{var r,n;if(!(null==e?void 0:e.length)||!t)return null;let o=pP(e,t);if(!(null==o?void 0:o.paramSchema)||!pO(o.paramSchema))return null;let i=o.paramSchema.shape||{},a=Object.keys(i);if(1!==a.length)return null;let[s]=a,{actualField:l}=pj(i[s]),c=pR(l);if(!("ZodString"===(null==(r=l._def)?void 0:r.typeName)||c))return null;let A=(null==(n=l._def)?void 0:n.description)||l.description||(c?"Describe the element you want to interact with":`Enter ${s}`);return{name:s,placeholder:A}};var pT=r(28460),pN=r(3246),pD=r(91631),pz=r(64665);let pB=e=>{var t,r;return(0,a.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:6,height:10,fill:"none",viewBox:"0 0 6 10"},e),r=r={children:(0,a.jsx)("path",{fill:"#000",fillOpacity:.25,fillRule:"evenodd",d:"M.195 9.138a.667.667 0 0 1 0-.943l3.529-3.528L.195 1.138a.667.667 0 0 1 .943-.943l4 4c.26.26.26.683 0 .943l-4 4a.667.667 0 0 1-.943 0",clipRule:"evenodd"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},pF=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,a.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M1.505 4.164c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,a.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M7.57 3.465v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var pL={};pL.d=(e,t)=>{for(var r in t)pL.o(t,r)&&!pL.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},pL.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),pL.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var pU={};function pK(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}pL.r(pU),pL.d(pU,{create:()=>m.vt});let{create:pZ}=pU,pJ="midscene-prompt-history-v2",pQ="midscene-last-selected-type",pq=pZ((e,t)=>{let r;return{history:(r=localStorage.getItem(pJ))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(pQ)||"aiAct",clearHistory:r=>{let n=pK({},t().history);delete n[r],e({history:n}),localStorage.setItem(pJ,JSON.stringify(n))},addHistory:r=>{var n,o;let{type:i}=r,a=t().history,s=a[i]||[],l=JSON.stringify({prompt:r.prompt,params:r.params}),c=[r,...s.filter(e=>JSON.stringify({prompt:e.prompt,params:e.params})!==l)];c.length>10&&(c.length=10);let A=(n=pK({},a),o=o={[i]:c},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(o)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(o,e))}),n);e({history:A}),localStorage.setItem(pJ,JSON.stringify(A))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(pQ,t)}}}),pX=e=>{if(!e)return"";if("aiAct"===e)return"Action";let t=e.startsWith("ai")?e.slice(2):e;if(t.startsWith("IOS"))return t.substring(3).replace(/([A-Z])/g," $1").replace(/^/,"IOS").trim();let r=t.replace(/([A-Z])/g," $1").trim(),n=r.split(" ");return(n.length>3?n.slice(-3).join(" "):r).replace(/\b\w/g,e=>e.toUpperCase())};function pW(e){return{supportsImeStrategy:"android"===e,supportsScreenshotStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function pH(e){return Object.values(pW(e)).some(Boolean)}var pY=r(16356);let pG=e=>{var t,r;return(0,a.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:27,height:27,fill:"none",viewBox:"0 0 27 27"},e),r=r={children:(0,a.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.333,d:"M19.527 8.855h-2M14.86 7.522v2.667M14.86 8.855H7.527M10.194 13.522H7.527M12.86 12.189v2.666M20.193 13.522H12.86M19.527 18.189h-2M14.86 16.855v2.667M14.86 18.189H7.527"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},pV=e=>{let t,{showDeepLocateOption:r=!1,showDeepThinkOption:n=!1,enableTracking:o=!1,showDataExtractionOptions:i=!1,hideDomAndScreenshotOptions:s=!1,deviceType:l,trigger:c,popupPlacement:A="bottomRight"}=e,u=Z(e=>e.forceSameTabNavigation),d=Z(e=>e.setForceSameTabNavigation),p=Z(e=>e.deepLocate),m=Z(e=>e.setDeepLocate),f=Z(e=>e.deepThink),g=Z(e=>e.setDeepThink),y=Z(e=>e.screenshotIncluded),v=Z(e=>e.setScreenshotIncluded),b=Z(e=>e.domIncluded),w=Z(e=>e.setDomIncluded),E=Z(e=>e.imeStrategy),x=Z(e=>e.setImeStrategy),k=Z(e=>e.screenshotStrategy),S=Z(e=>e.setScreenshotStrategy),I=Z(e=>e.autoDismissKeyboard),C=Z(e=>e.setAutoDismissKeyboard),O=Z(e=>e.keyboardDismissStrategy),R=Z(e=>e.setKeyboardDismissStrategy),j=Z(e=>e.alwaysRefreshScreenInfo),P=Z(e=>e.setAlwaysRefreshScreenInfo),M=pW(l),T=pH(l);if(!o&&!r&&!n&&!i&&!T)return null;let N=(t=[],o&&t.push({label:(0,a.jsx)(pY.A,{onChange:e=>d(e.target.checked),checked:u,children:"Limit popup to current tab"}),key:"track-config"}),r&&t.push({label:(0,a.jsx)(pY.A,{onChange:e=>{m(e.target.checked)},checked:p,children:"Deep Locate"}),key:"deep-locate-config"}),n&&t.push({label:(0,a.jsxs)("div",{style:{padding:"4px 0"},children:[(0,a.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Deep Think"}),(0,a.jsxs)(pz.A.Group,{size:"small",value:f,onChange:e=>g(e.target.value),children:[(0,a.jsx)(h.A,{title:"Controlled by MIDSCENE_MODEL_REASONING_ENABLED env variable",children:(0,a.jsx)(pz.A,{value:"unset",children:"Auto"})}),(0,a.jsx)(pz.A,{value:!0,children:"On"}),(0,a.jsx)(pz.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),i&&!s&&(t.push({label:(0,a.jsx)(pY.A,{onChange:e=>{v(e.target.checked)},checked:y,children:"Include screenshot in request"}),key:"screenshot-included-config"}),t.push({label:(0,a.jsxs)("div",{style:{padding:"4px 0"},children:[(0,a.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Include DOM info in request"}),(0,a.jsxs)(pz.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,a.jsx)(pz.A,{value:!1,children:"Off"}),(0,a.jsx)(pz.A,{value:!0,children:"All"}),(0,a.jsx)(pz.A,{value:"visible-only",children:"Visible only"})]})]}),key:"dom-included-config"})),M.supportsImeStrategy&&(t.push({label:(0,a.jsxs)("div",{style:{padding:"4px 0"},children:[(0,a.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"IME strategy"}),(0,a.jsxs)(pz.A.Group,{size:"small",value:E,onChange:e=>x(e.target.value),children:[(0,a.jsx)(pz.A,{value:"always-yadb",children:"Always YADB"}),(0,a.jsx)(pz.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),M.supportsScreenshotStrategy&&t.push({label:(0,a.jsxs)("div",{style:{padding:"4px 0"},children:[(0,a.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Screenshot strategy"}),(0,a.jsxs)(pz.A.Group,{size:"small",value:k,onChange:e=>S(e.target.value),children:[(0,a.jsx)(pz.A,{value:"auto",children:"Auto"}),(0,a.jsx)(pz.A,{value:"always-yadb",children:"Always YADB"})]})]}),key:"screenshot-strategy-config"}),M.supportsAutoDismissKeyboard&&t.push({label:(0,a.jsx)(pY.A,{onChange:e=>C(e.target.checked),checked:I,children:uq}),key:"auto-dismiss-keyboard-config"}),M.supportsKeyboardDismissStrategy&&t.push({label:(0,a.jsxs)("div",{style:{padding:"4px 0"},children:[(0,a.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Keyboard dismiss strategy"}),(0,a.jsxs)(pz.A.Group,{size:"small",value:O,onChange:e=>R(e.target.value),children:[(0,a.jsx)(pz.A,{value:"esc-first",children:"ESC first"}),(0,a.jsx)(pz.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),M.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,a.jsx)(pY.A,{onChange:e=>P(e.target.checked),checked:j,children:"Always refresh screen info"}),key:"always-refresh-screen-info-config"})),!M.supportsImeStrategy&&M.supportsAutoDismissKeyboard&&t.push({label:(0,a.jsx)(pY.A,{onChange:e=>C(e.target.checked),checked:I,children:uq}),key:"auto-dismiss-keyboard-config"}),t),D=null!=c?c:(0,a.jsx)("button",{"aria-label":"Open run configuration",className:"selector-trigger-button",type:"button",children:(0,a.jsx)(pG,{width:24,height:24})});return(0,a.jsx)("div",{className:"selector-trigger",children:(0,a.jsx)(d3.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:N},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:A,trigger:["click"],children:D})})};var p$=r(82752);let{TextArea:p_}=J.A,p0=(e,t)=>`${e}${t?" (Optional)":""}`,p1=e=>{let{name:t,label:r,isRequired:n,marginBottom:o,placeholder:i}=e,s=i||`Enter ${t}`;return(0,a.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:o},colon:!1,children:(0,a.jsx)(J.A,{placeholder:s})},t)},p2=e=>{let{name:t,label:r,isRequired:n,marginBottom:o,placeholder:i}=e,s=i||`Describe the ${t}, use natural language`;return(0,a.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:o},colon:!1,children:(0,a.jsx)(p_,{rows:2,placeholder:s})},t)},p3=e=>{var t;let{name:r,label:n,fieldSchema:o,isRequired:i,marginBottom:s,placeholder:l}=e,c=((null==(t=o._def)?void 0:t.values)||[]).map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)}));return(0,a.jsx)(ub.A.Item,{name:["params",r],label:n,rules:i?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:s},colon:!1,children:(0,a.jsx)(X.A,{placeholder:l||`Select ${r}`,options:c})},r)},p5=e=>{let{name:t,label:r,isRequired:n,marginBottom:o,placeholder:i}=e,s=500*("distance"===t),l=i&&Number(i)||s,c="distance"===t?1e4:void 0;return(0,a.jsx)(ub.A.Item,{name:["params",t],label:`${r}${"distance"===t?" (px)":""}`,rules:n?[{required:!0,message:`Please input ${t}`},{type:"number",min:0,message:`${r} must be at least 0`}]:[{type:"number",min:0,message:`${r} must be at least 0`}],style:{flex:"distance"===t?1:void 0,marginBottom:o},colon:!1,children:(0,a.jsx)(p$.A,{placeholder:l.toString(),min:0,max:c,step:"distance"===t?10:1,style:{width:"100%"}})},t)},p4=e=>{let{name:t,label:r,isRequired:n,marginBottom:o,placeholder:i}=e;return(0,a.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:o},colon:!1,children:(0,a.jsx)(X.A,{placeholder:i||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var p7=r(70316);let p8=e=>{var t,r;return(0,a.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:18,height:16,fill:"none",viewBox:"0 0 18 16"},e),r=r={children:(0,a.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m3.124 2.667 11.162 10.666M3.124 13.333 14.286 2.667"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p6=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:25,height:25,fill:"none",viewBox:"0 0 25 25"},e),r=r={children:[(0,a.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M6.63 9.021c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,a.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M12.695 8.322v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p9=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:19,height:19,fill:"none",viewBox:"0 0 19 19"},e),r=r={children:[(0,a.jsxs)("g",{stroke:"currentColor",strokeLinejoin:"round",strokeOpacity:.65,strokeWidth:1.5,clipPath:"url(#magnifying-glass_svg__a)",children:[(0,a.jsx)("path",{d:"M8.397 14.29a6.375 6.375 0 1 0 0-12.75 6.375 6.375 0 0 0 0 12.75Z"}),(0,a.jsx)("path",{strokeLinecap:"round",d:"M10.519 5.42a3 3 0 0 0-2.122-.88 3 3 0 0 0-2.121.88M12.98 12.499l3.182 3.182"})]}),(0,a.jsx)("defs",{children:(0,a.jsx)("clipPath",{id:"magnifying-glass_svg__a",children:(0,a.jsx)("path",{fill:"#fff",d:"M.522.04h18v18h-18z"})})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},{Text:he}=d.A,ht=e=>{let{onSelect:t,history:r,currentType:n,trigger:o,popupPlacement:i="bottom",title:l="History",showClear:c=!0,onClear:A,searchPlaceholder:u="Search",emptyText:d="No history record",noMatchText:p="No matching history record",renderItemActions:h,renderItemLabel:m,overlayClassName:f,popupWidth:g=320,popupHeight:y=400,portalContainerSelector:v}=e,[b,w]=(0,s.useState)(!1),[E,x]=(0,s.useState)(""),[k,S]=(0,s.useState)(0),I=pq(e=>e.clearHistory),C=(0,s.useRef)(null),O=(0,s.useRef)(null),[R,j]=(0,s.useState)(null),[P,M]=(0,s.useState)(null),[T,N]=(0,s.useState)(!1),D=(0,s.useMemo)(()=>{let e=Date.now(),t=e-6048e5,n=e-31536e6,o=r.filter(e=>e.prompt.toLowerCase().includes(E.toLowerCase()));return{recent7Days:o.filter(e=>e.timestamp>=t),recent1Year:o.filter(e=>e.timestamp<t&&e.timestamp>=n),older:o.filter(e=>e.timestamp<n)}},[r,E]),z=()=>{w(!1)};(0,s.useEffect)(()=>{if(!b)return;let e=()=>{var e,t;if(!O.current)return;let r=O.current.getBoundingClientRect(),n=v?O.current.closest(v):null,o=null==n?void 0:n.getBoundingClientRect(),a=null!=(e=null==o?void 0:o.width)?e:window.innerWidth,s=null!=(t=null==o?void 0:o.height)?t:window.innerHeight,l=o?r.right-o.left:r.right,c=o?r.top-o.top:r.top,A=o?r.bottom-o.top:r.bottom,u=Math.max(16,a-g-16),d=Math.max(16,s-y-16);j({left:Math.min(Math.max(16,l-g),u),top:Math.min(Math.max(16,"top"===i?c-y-8:A+8),d)}),M(null!=n?n:document.body),N(!!n)},t=e=>{C.current&&!C.current.contains(e.target)&&O.current&&!O.current.contains(e.target)&&w(!1)};e();let r=setTimeout(()=>{document.addEventListener("click",t)},100);return window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{clearTimeout(r),document.removeEventListener("click",t),window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[b,y,i,g,v]);let B=(e,r)=>0===r.length?null:(0,a.jsxs)("div",{className:"history-group",children:[(0,a.jsx)("div",{className:"history-group-title",children:e}),r.map((e,r)=>(0,a.jsxs)("div",{className:"history-item",onClick:()=>{t(e),w(!1)},children:[(0,a.jsx)("span",{className:"history-item-label",children:m?m(e,{close:z}):e.prompt}),h?(0,a.jsx)("span",{className:"history-item-actions",onClick:e=>e.stopPropagation(),children:h(e,{close:z,scrollVersion:k})}):null]},`${e.timestamp}-${r}`))]},e);return(0,a.jsxs)("div",{className:"history-selector-wrapper",children:[(0,a.jsx)("div",{className:"selector-trigger",onClick:()=>w(e=>!e),ref:O,children:null!=o?o:(0,a.jsx)(p6,{width:24,height:24})}),b&&R&&P&&(0,p7.createPortal)((0,a.jsx)("div",{className:f?`history-modal-overlay ${f}${T?" history-modal-overlay-in-container":""}`:`history-modal-overlay${T?" history-modal-overlay-in-container":""}`,ref:C,style:R,children:(0,a.jsxs)("div",{className:"history-modal-container",children:[(0,a.jsxs)("div",{className:"history-modal-header",children:[(0,a.jsxs)(he,{strong:!0,style:{fontSize:"16px"},children:[l," (",r.length,")"]}),(0,a.jsx)(q.Ay,{size:"small",type:"text",icon:(0,a.jsx)(p8,{width:16,height:16}),onClick:()=>w(!1),className:"close-button"})]}),(0,a.jsx)("div",{className:"history-search-section",children:(0,a.jsxs)("div",{className:"search-input-wrapper",children:[(0,a.jsx)(J.A,{placeholder:u,value:E,onChange:e=>x(e.target.value),prefix:(0,a.jsx)(p9,{width:18,height:18}),className:"search-input",allowClear:!0}),c?(0,a.jsx)(q.Ay,{type:"link",onClick:()=>{A?A():I(n),x(""),w(!1)},className:"clear-button",disabled:0===r.length,children:"Clear"}):null]})}),(0,a.jsx)("div",{className:"history-content",onScroll:()=>{S(e=>e+1)},children:0===r.length?(0,a.jsx)("div",{className:"no-results",children:(0,a.jsx)(he,{type:"secondary",children:d})}):(0,a.jsxs)(a.Fragment,{children:[B("Last 7 days",D.recent7Days),B("Last 1 year",D.recent1Year),B("Earlier",D.older),E&&0===D.recent7Days.length&&0===D.recent1Year.length&&0===D.older.length&&(0,a.jsx)("div",{className:"no-results",children:(0,a.jsx)(he,{type:"secondary",children:p})})]})})]})}),P)]})};function hr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let{TextArea:hn}=J.A;function ho(){return(0,a.jsx)("span",{"aria-hidden":"true",className:"prompt-stop-square-icon"})}let hi=e=>{var t,r,n,o,i,l,c,A;let{runButtonEnabled:u,form:d,serviceMode:p,selectedType:m,dryMode:f,stoppable:g,loading:y,onRun:v,onStop:b,clearPromptAfterRun:w=!0,actionSpace:E,hideDomAndScreenshotOptions:x=!1,deviceType:k,chrome:S}=e,[I,C]=(0,s.useState)(!1),[O,R]=(0,s.useState)(""),j="aiQuery"===m?"What do you want to query?":"aiAssert"===m?"What do you want to assert?":"aiTap"===m?"What element do you want to tap?":"aiDoubleClick"===m?"What element do you want to double-click?":"aiHover"===m?"What element do you want to hover over?":"aiInput"===m?"Format: <value> | <element>\nExample: hello world | search box":"aiRightClick"===m?"What element do you want to right-click?":"aiKeyboardPress"===m?"Format: <key> | <element (optional)>\nExample: Enter | text field":"aiScroll"===m?"Format: <direction> <amount> | <element (optional)>\nExample: down 500 | main content":"aiLocate"===m?"What element do you want to locate?":"aiBoolean"===m?"What do you want to check (returns true/false)?":"aiNumber"===m?"What number do you want to extract?":"aiString"===m?"What text do you want to extract?":"aiAsk"===m?"What do you want to ask?":"aiWaitFor"===m?"What condition do you want to wait for?":"What do you want to do?",P=(null==S?void 0:S.variant)==="minimal",M=(null==S?void 0:S.placeholder)||j,T=(A=null==S?void 0:S.primaryActionLabel)?A:pX(m)||"Action",N=null!=(i=null==S?void 0:S.settingsPlacement)?i:"toolbar",D=(0,s.useRef)(null),z=(0,s.useRef)(null),B=ub.A.useWatch("params",d),F=(0,s.useRef)(null),L=pq(e=>e.history),U=pq(e=>e.lastSelectedType),K=pq(e=>e.addHistory),Z=pq(e=>e.setLastSelectedType),Q=(0,s.useMemo)(()=>L[m]||[],[L,m]),X=(0,s.useMemo)(()=>pP(E,m),[E,m]),{markExplicitSelection:W,skipNextRestore:H,shouldSkipRestoreOnce:Y}=function(e){let{enabled:t,form:r,selectedType:n,onAfterReset:o,defaultType:i="aiAct"}=e,[a,l]=(0,s.useState)(!1),c=(0,s.useRef)(!1);(0,s.useEffect)(()=>{t&&!a&&n&&n!==i&&(c.current=!1,r.setFieldsValue({type:i,prompt:"",params:{}}),null==o||o())},[t,a,n,i,r,o]);let A=(0,s.useCallback)(()=>{t&&l(!0)},[t]),u=(0,s.useCallback)(()=>{c.current=!0},[]),d=(0,s.useCallback)(()=>!!c.current&&(c.current=!1,!0),[]);return(0,s.useMemo)(()=>({markExplicitSelection:A,skipNextRestore:u,shouldSkipRestoreOnce:d}),[A,u,d])}({enabled:P,form:d,selectedType:m,onAfterReset:(0,s.useCallback)(()=>{F.current=null,R("")},[])}),G=(0,s.useMemo)(()=>!!E&&!!(null==X?void 0:X.paramSchema)&&(!pO(X.paramSchema)||Object.keys(X.paramSchema.shape||{}).length>0),[m,X,E]),V=(0,s.useMemo)(()=>{if(E&&E.length>0&&X){if(X.paramSchema&&pO(X.paramSchema)){let e=X.paramSchema.shape||{};return Object.keys(e).some(t=>{let{isOptional:r}=pj(e[t]);return!r})}return!!X.paramSchema}return!0},[m,X,E]),$=(0,s.useMemo)(()=>["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert"].includes(m),[m]),_=(0,s.useMemo)(()=>{if("aiAct"===m||"aiLocate"===m)return!0;if(E&&(null==X?void 0:X.paramSchema)&&pO(X.paramSchema)){let e=X.paramSchema.shape||{};return Object.keys(e).some(t=>{let{actualField:r}=pj(e[t]);return pR(r)})}return!1},[m,X,E]),ee=(0,s.useMemo)(()=>"aiAct"===m,[m]),et=(0,s.useMemo)(()=>{let e="In-Browser-Extension"===p,t=$&&!x,r=pH(k);return e||_||ee||t||r},[p,_,ee,$,x,k]),er=(0,s.useMemo)(()=>(e=>{let t=Object.keys(uX);if(!(null==e?void 0:e.length))return t;let r=e.map(e=>e.interfaceAlias||e.name),n=new Set;return t.forEach(e=>{let t=uX[e];"aiAct"===e||(null==t?void 0:t.group)==="extraction"||(null==t?void 0:t.group)==="validation"?n.add(e):r.includes(e)&&n.add(e)}),r.forEach(e=>{n.add(e)}),Array.from(n)})(E),[E]),en=(0,s.useMemo)(()=>er.filter(e=>!uW.includes(e)),[er]),eo=(0,s.useCallback)(e=>{W(),d.setFieldValue("type",e)},[d,W]),ei=(0,s.useMemo)(()=>[{key:"interaction-group",label:"Interaction APIs",match:e=>{var t;return(null==(t=uX[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=uX[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=uX[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!uX[e]}],[]),ea=(0,s.useCallback)(e=>{var t;return{key:e,label:pX(e),title:(null==(t=uX[e])?void 0:t.title)||"",onClick:()=>eo(e)}},[eo]),es=(0,s.useMemo)(()=>{let e=[];for(let t of ei){let r=en.filter(t.match);0!==r.length&&e.push({key:t.key,type:"group",label:t.label,children:r.map(ea)})}return e},[ei,en,ea]),el=(0,s.useMemo)(()=>{let e=uW.filter(e=>er.includes(e)),t=[];return e.length>0&&t.push({key:"primary-group",type:"group",label:"Primary APIs",children:e.map(ea)}),t.push(...es),{items:t}},[er,ea,es]),ec=(0,s.useMemo)(()=>({items:es}),[es]),eA=(0,s.useCallback)(()=>{if(!G||!E)return{};if((null==X?void 0:X.paramSchema)&&pO(X.paramSchema)){let e={},t=X.paramSchema.shape||{};return Object.keys(t).forEach(r=>{let n=(e=>{var t;let r=e;for(;null==(t=r._def)?void 0:t.innerType;){if(r._def.typeName===pS){if("function"==typeof r._def.defaultValue)return r._def.defaultValue();if(void 0!==r._def._serializedDefaultValue)return r._def._serializedDefaultValue}r=r._def.innerType}})(t[r]);void 0!==n&&(e[r]=n)}),e}return{}},[m,G,X,E]);(0,s.useEffect)(()=>{P||d.getFieldValue("type")||!U||d.setFieldValue("type",U)},[d,P,U]),(0,s.useEffect)(()=>{!P&&m&&m!==U&&Z(m)},[m,P,U,Z]);let eu=(0,s.useCallback)(()=>{let e=z.current;if(!e)return;let t=null,r=e.querySelector(".ant-radio-button-wrapper-checked"),n=e.querySelector(".more-apis-button.selected-from-dropdown");if(r?t=r:n&&(t=n),t){let r=e.getBoundingClientRect(),n=t.getBoundingClientRect(),o=n.left-r.left+e.scrollLeft,i=n.width,a=r.width;e.scrollTo({left:Math.max(0,o-(a-i)/2),behavior:"smooth"})}},[]);(0,s.useEffect)(()=>{if(Y())return;if(P){let e=eA();d.setFieldsValue({prompt:"",params:e}),R(""),F.current=null;return}let e=Q[0];if(!e||!F.current||e.timestamp!==F.current.timestamp)if(e)d.setFieldsValue({type:e.type,prompt:e.prompt||"",params:e.params}),R(e.prompt||""),F.current=e;else{let e=eA();d.setFieldsValue({prompt:"",params:e}),R(""),F.current=null}},[m,Q,d,eA,P,Y]),(0,s.useEffect)(()=>{let e=setTimeout(()=>{eu()},100);return()=>clearTimeout(e)},[m,eu]);let ed=ub.A.useWatch("prompt",d);(0,s.useEffect)(()=>{ed!==O&&R(ed||"")},[ed,O]);let ep=(0,s.useCallback)(e=>{W(),e.type!==m&&H(),d.setFieldsValue({prompt:e.prompt,type:e.type,params:e.params}),R(e.prompt)},[d,W,m,H]),eh=(0,s.useCallback)(e=>{R(e.target.value)},[]),em=(0,s.useMemo)(()=>!!G&&!!E&&!!((null==X?void 0:X.paramSchema)&&pO(X.paramSchema))&&1===Object.keys(X.paramSchema.shape||{}).length,[m,G,X,E]),ef=(0,s.useMemo)(()=>P?pM(E,m):null,[E,P,m]),eg=(0,s.useMemo)(()=>((e,t,r,n,o)=>{if(!e)return!1;if(!(()=>{if(n){if(!n.paramSchema)return!1;if("object"==typeof n.paramSchema&&"shape"in n.paramSchema)return Object.keys(n.paramSchema.shape||{}).length>0}return!0})())return!0;if(t){let e=r||{};if((null==n?void 0:n.paramSchema)&&pO(n.paramSchema)){let t=n.paramSchema.shape||{};return Object.keys(t).every(r=>{let{isOptional:n}=pj(t[r]),o=e[r];return n||void 0!==o&&""!==o&&null!==o})}return!0}return o.trim().length>0})(u,!!G,B,X,O),[u,G,X,O,B]),ey=V&&!G&&!O.trim()&&!y&&!g,ev=(0,s.useCallback)(()=>{let e=d.getFieldsValue(),t="";if(G&&e.params&&E)if((null==X?void 0:X.paramSchema)&&pO(X.paramSchema)){let r="",n=[],o=X.paramSchema.shape||{};Object.keys(o).forEach(t=>{var i;let a=null==(i=e.params)?void 0:i[t];if(null!=a&&""!==a){let{actualField:e}=pj(o[t]);pR(e)?r=String(a):"distance"===t?n.push(`${a}`):n.push(String(a))}});let i=n.join(" ");t=r?`${r} - ${i}`:i}else t=e.prompt||"";else t=e.prompt||"";let r={type:e.type,prompt:t,params:e.params,timestamp:Date.now()};if(K(r),v(),w)if(F.current=r,R(""),G){let e=eA();d.setFieldValue("params",e)}else d.setFieldValue("prompt","")},[d,K,v,G,m,w,E,X,eA]),eb=(0,s.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg?(ev(),e.preventDefault(),e.stopPropagation()):"Enter"===e.key&&setTimeout(()=>{if(D.current){var e;let t=null==(e=D.current.resizableTextArea)?void 0:e.textArea;if(t){let e=t.selectionStart,r=t.value.lastIndexOf("\n");(-1===r||e>r)&&(t.scrollTop=t.scrollHeight)}}},0)},[ev,eg]),ew=(0,s.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg&&(ev(),e.preventDefault(),e.stopPropagation())},[ev,eg]),eE=(0,s.useCallback)(()=>{if(!G)return null;if(E&&(null==X?void 0:X.paramSchema)&&pO(X.paramSchema)){let e=X.paramSchema.shape||{},t=Object.keys(e);if(1===t.length){let r=t[0],{actualField:n}=pj(e[r]),o=pR(n),i=(()=>{var e,t;if(null==(e=n._def)?void 0:e.description)return n._def.description;if(n.description)return n.description;if(E&&(null==X?void 0:X.paramSchema)&&"object"==typeof X.paramSchema&&"shape"in X.paramSchema){let e=(X.paramSchema.shape||{})[r];if(null==e||null==(t=e._def)?void 0:t.description)return e._def.description;if(null==e?void 0:e.description)return e.description}return o?"Describe the element you want to interact with":"keyName"===r?"Enter key name or text to type":"value"===r?"Enter text to input":`Enter ${r}`})();return(0,a.jsx)(ub.A.Item,{name:["params",r],style:{margin:0},children:(0,a.jsx)(J.A.TextArea,{className:"main-side-console-input-textarea",rows:3,placeholder:i,autoFocus:!0,onKeyDown:ew})})}let r=[],n=t.sort((t,r)=>{let n=e[t],o=e[r],{isOptional:i}=pj(n),{isOptional:a}=pj(o);return!i&&a?-1:i&&!a?1:0});if(n.forEach((t,o)=>{var i,s,l;let{actualField:c,isOptional:A}=pj(e[t]),u=pR(c),d=t.charAt(0).toUpperCase()+t.slice(1),p=12*(o!==n.length-1),h=(()=>{var e,r;if(null==(e=c._def)?void 0:e.description)return c._def.description;if(c.description)return c.description;if(E&&(null==X?void 0:X.paramSchema)&&"object"==typeof X.paramSchema&&"shape"in X.paramSchema){let e=(X.paramSchema.shape||{})[t];if(null==e||null==(r=e._def)?void 0:r.description)return e._def.description;if(null==e?void 0:e.description)return e.description}if(u)return"Describe the element you want to interact with"})(),m={name:t,label:d,fieldSchema:c,isRequired:!A,marginBottom:p,placeholder:h};u?r.push((0,a.jsx)(p2,hr({},m),t)):(null==(i=c._def)?void 0:i.typeName)==="ZodEnum"?r.push((0,a.jsx)(p3,hr({},m),t)):(null==(s=c._def)?void 0:s.typeName)==="ZodNumber"?r.push((0,a.jsx)(p5,hr({},m),t)):(null==(l=c._def)?void 0:l.typeName)==="ZodBoolean"?r.push((0,a.jsx)(p4,hr({},m),t)):r.push((0,a.jsx)(p1,hr({},m),t))}),"aiScroll"===m){let e=r.find(e=>s.isValidElement(e)&&"direction"===e.props.name),t=r.find(e=>s.isValidElement(e)&&"distance"===e.props.name),n=r.filter(e=>s.isValidElement(e)&&"direction"!==e.props.name&&"distance"!==e.props.name);if(e&&t)return(0,a.jsxs)("div",{className:"structured-params",children:[(0,a.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:12},children:[e,t]}),n]})}return(0,a.jsx)("div",{className:"structured-params",children:r})}return null},[m,G,E,X,ew]),ex=(0,s.useCallback)(()=>{C(!0)},[]),ek=(0,s.useCallback)(()=>{C(!1)},[]),eS=(0,s.useCallback)(()=>{let e=e=>(0,a.jsx)(q.Ay,{type:"primary",icon:(0,a.jsx)(pT.A,{}),style:{borderRadius:20,zIndex:999},onClick:ev,disabled:!eg,loading:y,children:e});return f?"aiAct"===m?(0,a.jsx)(h.A,{title:"Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",children:e("Dry Run")}):e("Run"):g?(0,a.jsx)(q.Ay,{className:"prompt-stop-button",icon:(0,a.jsx)(ho,{}),onClick:b,style:{borderRadius:20,zIndex:999},children:"Stop"}):e("Run")},[f,y,ev,b,eg,m,g]),eI=(0,s.useCallback)(()=>{let e=e=>(0,a.jsx)(q.Ay,{"aria-label":e,className:"minimal-run-trigger",type:"primary",icon:(0,a.jsx)(pN.A,{}),onClick:ev,disabled:!eg,loading:y});return f?"aiAct"===m?(0,a.jsx)(h.A,{title:"Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",children:e("Dry run")}):e("Run"):g?(0,a.jsx)(q.Ay,{"aria-label":"Stop running",className:"minimal-run-trigger minimal-run-trigger-stop prompt-stop-button",icon:(0,a.jsx)(ho,{}),onClick:b}):e("Run")},[f,y,ev,eg,b,m,g]),eC=null!=(l=null==S||null==(t=S.icons)?void 0:t.action)?l:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAASdJREFUeAHtlt3NgjAUhg8/CVx+G8gGX5xAnUDdQMcgkIgJBLbQEXQD3MAR6gZewgXgOUn9iRp6vAC96JM07YG36Zv+nBZAwySO4ymWgUoXRdEfaYGJyRElSbKyLGuHJVdpHcc5khb7RMCAZcA0TU82PYZ8IPsoZ4ttoEu0ga8bMB6DNE1X8H6jTUBuLmQL7SxkLbDkzz/ruhZBEKxfDGRZNm2aZgc9UFXVLAzDPbVvS1AUxQGrE3SPwHK8BganBy7NBuTU+r5vKLSNbG5RuwQF+hRoA9rA76RifMl4+JjI4Z5yu0KUZTnE8c4U3GbAdd3/HgYnPNu2R9eg98uIvmOGfL2M2tCpWBv4BQPiqW7j9IGWZ4CODT7X5pRAVFrUjEn7eNQ0bVwAyWpjMDlJKpAAAAAASUVORK5CYII=",eO=null==S||null==(r=S.icons)?void 0:r.actionChevron,eR=null!=(c=null==S||null==(n=S.icons)?void 0:n.settings)?c:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg==",ej=null==S||null==(o=S.icons)?void 0:o.history,eP=(0,s.useCallback)(()=>et&&"input"===N?(0,a.jsx)("div",{className:I?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,a.jsx)(pV,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topLeft",trigger:(0,a.jsx)("button",{"aria-label":"Open run configuration",className:"input-icon-trigger",type:"button",children:(0,a.jsx)("img",{alt:"",className:"input-toolbar-icon",src:eR})})})}):null,[k,ex,ek,et,x,I,eR,p,N,$,_,ee]),eM=V?G?ef?(0,a.jsx)(ub.A.Item,{name:["params",ef.name],style:{margin:0},children:(0,a.jsx)(hn,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:"prompt"===ef.name?M:ef.placeholder,autoFocus:!0,onKeyDown:ew})}):em?eE():(0,a.jsx)("div",{className:"structured-params-container",children:eE()}):(0,a.jsx)(ub.A.Item,{name:"prompt",style:{margin:0},children:(0,a.jsx)(hn,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:M,autoFocus:!0,onKeyDown:eb,onChange:eh,ref:D})}):(0,a.jsxs)("div",{className:"no-input-method",children:['Click "Run" to execute ',pX(m)]});return P?(0,a.jsxs)("div",{className:"prompt-input-wrapper prompt-input-wrapper-minimal",children:[(0,a.jsx)(ub.A.Item,{hidden:!0,name:"type",style:{margin:0},children:(0,a.jsx)(J.A,{})}),(0,a.jsxs)("div",{className:`main-side-console-input minimal-main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,a.jsxs)("div",{className:"minimal-toolbar-row",children:[(0,a.jsxs)("div",{className:"minimal-toolbar-left",children:[(0,a.jsx)(d3.A,{menu:el,placement:"topLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,a.jsxs)("button",{"aria-label":`Select action type (current: ${T})`,className:"minimal-action-trigger",disabled:!u,type:"button",children:[(0,a.jsx)("img",{alt:"",className:"minimal-action-icon",src:eC}),(0,a.jsx)("span",{className:"minimal-action-label",children:T}),eO?(0,a.jsx)("img",{alt:"",className:"minimal-action-chevron",src:eO}):(0,a.jsx)(pB,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,a.jsx)(ht,{onSelect:ep,history:Q,currentType:m,popupPlacement:"top",trigger:(0,a.jsx)("button",{"aria-label":"Open prompt history",className:"minimal-icon-trigger",type:"button",children:ej?(0,a.jsx)("img",{alt:"",className:"minimal-toolbar-icon minimal-toolbar-icon-history",src:ej}):(0,a.jsx)(pF,{"aria-hidden":"true",className:"minimal-toolbar-icon minimal-toolbar-icon-history",focusable:"false"})})}),et&&"hidden"!==N?(0,a.jsx)("div",{className:I?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,a.jsx)(pV,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topRight",trigger:(0,a.jsx)("button",{"aria-label":"Open run configuration",className:"minimal-icon-trigger",type:"button",children:(0,a.jsx)("img",{alt:"",className:"minimal-toolbar-icon",src:eR})})})}):null]}),(0,a.jsxs)("div",{className:"form-controller-wrapper",children:[null==S?void 0:S.inputActions,eI()]})]})]})]}):(0,a.jsxs)("div",{className:"prompt-input-wrapper",children:[(0,a.jsxs)("div",{className:"mode-radio-group-wrapper",children:[(0,a.jsxs)("div",{className:"mode-radio-group",ref:z,children:[(0,a.jsx)(ub.A.Item,{name:"type",style:{margin:0},children:(0,a.jsx)(pz.A.Group,{buttonStyle:"solid",disabled:!u,children:uW.map(e=>{var t;return(0,a.jsx)(h.A,{title:(null==(t=uX[e])?void 0:t.title)||"",children:(0,a.jsx)(pz.A.Button,{value:e,children:pX(e)})},e)})})}),(0,a.jsx)(d3.A,{menu:ec,placement:"bottomLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,a.jsxs)(q.Ay,{className:`more-apis-button ${!uW.includes(m)?"selected-from-dropdown":""}`,children:[m&&!uW.includes(m)?pX(m):"more",(0,a.jsx)(pD.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,a.jsxs)("div",{className:"action-icons",children:[(0,a.jsx)(ht,{onSelect:ep,history:Q,currentType:m}),et&&"toolbar"===N&&(0,a.jsx)("div",{className:I?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,a.jsx)(pV,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k})})]})]}),(0,a.jsxs)("div",{className:`main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,a.jsxs)("div",{className:"form-controller-wrapper",children:[(0,a.jsxs)("div",{className:"input-actions-wrapper",children:[eP(),null==S?void 0:S.inputActions]}),eS()]})]})]})};function ha(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}let hs=[...cO,...cR,"aiAct"];function hl(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function hc(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){hl(i,n,o,a,s,"next",e)}function s(e){hl(i,n,o,a,s,"throw",e)}a(void 0)})}}function hA(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let hu=new Set;function hd(e){let{error:t}=e;if(!t)return null;let r=t.replace(/^(Error:\s*)+/,"Error: ");return(0,a.jsx)(W.A,{message:(0,a.jsx)("span",{style:{color:"#ff4d4f"},children:r}),type:"error",showIcon:!0})}function hp(e){let{action:t,content:r,description:n,error:o,shouldShowLoading:i}=e,{ref:l,truncated:c}=function(e,t){let r=(0,s.useRef)(null),[n,o]=(0,s.useState)(!1),i=(0,s.useCallback)(()=>{var e;o((e=r.current,!!e&&("multi-line"===t?e.scrollHeight-e.clientHeight>1:e.scrollWidth>e.clientWidth)))},[t]);return(0,s.useLayoutEffect)(()=>{if(i(),window.addEventListener("resize",i),"undefined"==typeof ResizeObserver||!r.current)return()=>window.removeEventListener("resize",i);let e=new ResizeObserver(i);return e.observe(r.current),()=>{window.removeEventListener("resize",i),e.disconnect()}},[e,i]),{ref:r,truncated:n}}(r,"multi-line"),A=(0,a.jsxs)("div",{className:"progress-row-content",children:[(0,a.jsxs)("div",{className:"progress-row-copy",ref:l,children:[t?(0,a.jsx)("span",{className:"progress-action-item",children:t}):null,n?(0,a.jsx)("div",{className:"progress-description-wrap",children:i?(0,a.jsx)(dK,{text:n,className:"progress-description"}):(0,a.jsx)("span",{className:"progress-description",children:n})}):null]}),o&&(0,a.jsx)(hd,{error:o})]});return c?(0,a.jsx)(h.A,{title:r,children:A}):A}function hh(e){var t,r,n,o,i,l,c;let{playgroundSDK:A,storage:u,contextProvider:d,config:p={},envConfigReminderProps:h,branding:m={},className:f="",dryMode:g=!1,showContextPreview:y=!0}=e,[v]=ub.A.useForm(),{config:b}=Z(),[w,E]=(0,s.useState)(!1),x=(0,s.useRef)(null);(0,s.useEffect)(()=>{hc(function*(){if(A&&"function"==typeof A.checkStatus)try{yield A.checkStatus(),E(!0)}catch(e){console.warn("Failed to initialize SDK, using default namespace:",e),E(!0)}else E(!0)})()},[A]);let k=p.storageNamespace,S=k?void 0:A&&A.id&&"string"==typeof A.id?`agent-${A.id}`:"playground-default",I=(0,s.useMemo)(()=>{if(!1===p.persistMessages)return null;if(u)return u;if(!w)return null;let e=k||S,t=dO();return console.log(`Using ${t} storage for namespace: ${e}`),dC(t,e)},[u,w,k,p.persistMessages,S]),{loading:C,setLoading:O,infoList:R,setInfoList:j,actionSpace:P,actionSpaceLoading:M,uiContextPreview:T,setUiContextPreview:N,showScrollToBottomButton:D,verticalMode:z,replayCounter:B,setReplayCounter:F,messagesInitialized:L,infoListRef:U,currentRunningIdRef:K,interruptedFlagRef:J,clearInfoList:Q,handleScrollToBottom:X}=function(e,t,r,n){let o=!(arguments.length>4)||void 0===arguments[4]||arguments[4],[i,a]=(0,s.useState)(!1),[l,c]=(0,s.useState)([]),[A,u]=(0,s.useState)([]),[d,p]=(0,s.useState)(!0),[h,m]=(0,s.useState)(),[f,g]=(0,s.useState)(!1),[y,v]=(0,s.useState)(!0),b=(0,s.useRef)(0),[w,E]=(0,s.useState)(!1),[x,k]=(0,s.useState)(0),S=(0,s.useRef)(null),I=(0,s.useRef)(null),C=(0,s.useRef)({}),O=(0,s.useRef)(),[,R]=(0,s.useState)(0);(0,s.useEffect)(()=>{let e=!1,r=null!=t?t:null,i=t=>{e||c(t)};return O.current!==r&&(t||0===l.length)&&dj(function*(){let a=dM(dP({},uH(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield dj(function*(){if(!o)return[];let e=dC(dO(),"playground-default");try{if(null==e?void 0:e.loadMessages){let r=yield e.loadMessages();if(r.length>1)return console.log("Found data in old namespace, migrating..."),(null==t?void 0:t.saveMessages)&&(yield t.saveMessages(r)),e.clearMessages&&(yield e.clearMessages()),r}}catch(e){console.debug("No data found in old namespace:",e)}return[]})()),e.some(e=>"welcome"===e.id)?i(e):i([a,...e])}catch(e){console.error("Failed to load messages:",e),i([a])}else i([a]);e||(O.current=r,R(e=>e+1))})(),()=>{e=!0}},[o,t]),(0,s.useEffect)(()=>{(null==t?void 0:t.saveMessages)&&l.length>1&&t.saveMessages(l).catch(e=>{e instanceof DOMException&&"QuotaExceededError"===e.name?console.warn("Storage quota exceeded - some messages may not be saved persistently"):console.error("Failed to save messages:",e)})},[l,t]),(0,s.useEffect)(()=>{(null==r?void 0:r.getUIContext)&&!h&&r.getUIContext().then(e=>m(e)).catch(e=>{console.error("Failed to get UI context:",e)})},[r,h]),(0,s.useEffect)(()=>{dj(function*(){p(!0);try{var t;if(!e)return void u([]);let n=h||(yield null==r||null==(t=r.getUIContext)?void 0:t.call(r)),o=yield e.getActionSpace(n);u(o||[])}catch(e){console.error("Failed to load action space:",e),u([])}finally{p(!1)}})()},[e,h,r]),(0,s.useEffect)(()=>{E(window.innerWidth<750);let e=()=>{E(window.innerWidth<750)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let j=(0,s.useCallback)(()=>{setTimeout(()=>{S.current&&(S.current.scrollTop=S.current.scrollHeight)},100)},[]),P=(0,s.useCallback)(()=>{if(S.current){let{scrollTop:e,scrollHeight:t,clientHeight:r}=S.current,n=e+r>=t-10;g(!n);let o=e<b.current;b.current=e,n?v(!0):o&&v(!1)}},[]),M=(0,s.useCallback)(()=>{S.current&&(S.current.scrollTo({top:S.current.scrollHeight,behavior:"smooth"}),g(!1),v(!0))},[]);(0,s.useEffect)(()=>{l.length>0&&y&&j()},[l,j,y]),(0,s.useEffect)(()=>{let e=S.current;if(e)return e.addEventListener("scroll",P),P(),()=>{e.removeEventListener("scroll",P)}},[P]);let T=(0,s.useCallback)(()=>dj(function*(){if(c([dM(dP({},uH(n)),{id:"welcome",timestamp:new Date})]),null==t?void 0:t.clearMessages)try{yield t.clearMessages()}catch(e){console.error("Failed to clear stored messages:",e)}})(),[t,n]),N=(0,s.useCallback)(()=>dj(function*(){if(null==r?void 0:r.refreshContext)try{let e=yield r.refreshContext();m(e)}catch(e){console.error("Failed to refresh context:",e)}})(),[r]);return{loading:i,setLoading:a,infoList:l,setInfoList:c,messagesInitialized:O.current===(null!=t?t:null),actionSpace:A,actionSpaceLoading:d,uiContextPreview:h,setUiContextPreview:m,showScrollToBottomButton:f,verticalMode:w,replayCounter:x,setReplayCounter:k,infoListRef:S,currentRunningIdRef:I,interruptedFlagRef:C,clearInfoList:T,refreshContext:N,handleScrollToBottom:M,scrollToBottom:j}}(A,I,d,m.targetName,!1!==p.persistMessages&&!p.storageNamespace),{handleRun:W,handleStop:H,cancelCurrentExecution:Y,canStop:G}=function(e){let{playgroundSDK:t,storage:r,actionSpace:n,loading:o,setLoading:i,setInfoList:a,replayCounter:l,setReplayCounter:c,verticalMode:A,currentRunningIdRef:u,interruptedFlagRef:d,deviceType:p}=e,{deepLocate:h,deepThink:m,screenshotIncluded:f,domIncluded:g,imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}=Z(),x=(0,s.useCallback)(function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u6(function*(){if(!t)return void console.warn("PlaygroundSDK is not available");let o=Date.now(),s=e.type,x=n.displayContent||`${e.type}: ${e.prompt||JSON.stringify(e.params)}`,k={id:`user-${Date.now()}`,type:"user",content:x,timestamp:new Date};a(e=>[...e,k]),i(!0);let S=u9({},uY),I={id:`system-${o}`,type:"system",content:"",timestamp:new Date,loading:!0,loadingProgressText:""};a(e=>[...e,I]);try{u.current=o,d.current[o]=!1,t.onDumpUpdate&&t.onDumpUpdate((e,t)=>{var r;if(d.current[o]||!(null==t||null==(r=t.tasks)?void 0:r.length))return;let n=t.tasks.map((e,t)=>{var r;let n,i;return{id:`progress-${o}-task-${t}`,type:"progress",content:(n=Aj(e),(i=AN(e))?`${n} - ${i}`:n),actionKind:Aj(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:dt(e.error),result:null}:void 0}});a(e=>{let t=e.findIndex(e=>e.id===`system-${o}`);if(-1===t)return e;let r=e.filter(e=>!("progress"===e.type&&e.id.startsWith(`progress-${o}-`)));return[...r.slice(0,t+1),...n,...r.slice(t+1)]})}),da(s)||!0!==m||console.warn("[Playground] Non-aiAct action will be executed without deepThink. deepThink is only forwarded for aiAct and runMarkdown.",{actionType:s,requestId:o.toString()});let r="unset"===m?void 0:m,i=u9(de(u9({requestId:o.toString(),deepLocate:h},da(s)&&void 0!==r?{deepThink:r}:{}),{screenshotIncluded:f,domIncluded:g,deviceOptions:{imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}}),n.reportDisplay?{reportDisplay:n.reportDisplay}:{});if(S.result=yield t.executeAction(s,e,i),"object"==typeof S.result&&null!==S.result){let e=S.result;e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report),e.error&&(S.error=dt(e.error)),"result"in e&&(S.result=e.result)}}catch(e){if(d.current[o])return;S.error=dt(e),console.error("Playground execution error:",e),"object"==typeof e&&null!==e&&(e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report))}if(yield di(S),d.current[o])return;i(!1),u.current=null;let C=null,O=l,R=dn(S,p);R&&(c(e=>e+1),C=R,O=l+1),a(e=>e.map(e=>e.id===`system-${o}`?de(u9({},e),{content:"",loading:!1,loadingProgressText:""}):e));let j={id:`result-${o}`,type:"result",content:"Execution result",timestamp:new Date,result:S,loading:!1,replayScriptsInfo:C,replayCounter:O,loadingProgressText:"",verticalMode:A,actionType:s};if(a(e=>[...e,j]),null==r?void 0:r.saveResult)try{yield r.saveResult(j.id,j)}catch(e){console.error("Failed to save result:",e)}})()},[t,r,n,i,a,l,c,A,u,d,h,m,f,g,p,y,v,b,w,E]),k=(0,s.useCallback)(function(){let{appendStopMessage:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u6(function*(){let r=u.current;if(!(r&&t&&t.cancelExecution))return;d.current[r]=!0,u.current=null,i(!1);let n=t=>{a(n=>{let o=n.map(e=>e.id===`system-${r}`?de(u9({},e),{content:"",loading:!1,loadingProgressText:""}):e);if(!e||o.some(e=>e.id===`stop-${r}`||e.id===`stop-result-${r}`))return o;if(t&&(t.dump||t.reportHTML||t.report)){let e=null,n=l;return(e=dn(t,p))&&(c(e=>e+1),n=l+1),[...o,{id:`stop-result-${r}`,type:"result",content:"Execution stopped by user",timestamp:new Date,result:{result:null,dump:t.dump,reportHTML:t.reportHTML,report:t.report||null,error:null},loading:!1,verticalMode:A,replayScriptsInfo:e,replayCounter:n}]}return[...o,{id:`stop-${r}`,type:"system",content:"Operation stopped",timestamp:new Date,loading:!1}]})};try{let e=yield t.cancelExecution(r.toString()),o=null;if(e)o=e;else if(t.getCurrentExecutionData)try{o=yield t.getCurrentExecutionData()}catch(e){console.error("Failed to get execution data before stop:",e)}o&&(yield di(o)),n(o)}catch(e){console.error("Failed to stop execution:",e),n()}})()},[t,u,d,i,a,A,l,c,p]),S=(0,s.useCallback)(()=>u6(function*(){u.current&&(yield k({appendStopMessage:!0}))})(),[k,u]);return{cancelCurrentExecution:k,handleRun:x,handleStop:S,canStop:o&&!!u.current&&!!t&&!!t.cancelExecution}}({playgroundSDK:A,storage:I,actionSpace:P,loading:C,setLoading:O,setInfoList:j,replayCounter:B,setReplayCounter:F,verticalMode:z,currentRunningIdRef:K,interruptedFlagRef:J,deviceType:p.deviceType}),V=(0,s.useRef)(Y),$=(0,s.useRef)(p.onExecutionStatusChange),_=(0,s.useRef)(p.onBeforeExecutionStart),ee=null!=(t=p.executionScopeKey)?t:null,et=(0,s.useRef)(ee);(0,s.useEffect)(()=>{V.current=Y},[Y]),(0,s.useEffect)(()=>{$.current=p.onExecutionStatusChange},[p.onExecutionStatusChange]),(0,s.useEffect)(()=>{_.current=p.onBeforeExecutionStart},[p.onBeforeExecutionStart]);let er=(0,s.useCallback)(()=>(function(e){var t;return(t=function*(e){let{clearTimeline:t,clearTimelineBeforeRun:r=!1,onBeforeExecutionStart:n}=e;yield null==n?void 0:n(),r&&(yield t())},function(){var e=this,r=arguments;return new Promise(function(n,o){var i=t.apply(e,r);function a(e){ha(i,n,o,a,s,"next",e)}function s(e){ha(i,n,o,a,s,"throw",e)}a(void 0)})}).apply(this,arguments)})({clearTimeline:Q,clearTimelineBeforeRun:p.clearTimelineBeforeRun,onBeforeExecutionStart:_.current}),[Q,p.clearTimelineBeforeRun]);(0,s.useEffect)(()=>{var e;null==(e=p.onExecutionStatusChange)||e.call(p,{running:C,stoppable:G,stop:H})},[G,p.onExecutionStatusChange,H,C]),(0,s.useEffect)(()=>()=>{var e;V.current(),null==(e=$.current)||e.call($,{running:!1,stoppable:!1,stop:()=>void 0})},[]),(0,s.useEffect)(()=>{et.current!==ee&&(et.current=ee,Y())},[Y,ee]),(0,s.useEffect)(()=>{(null==A?void 0:A.overrideConfig)&&b&&A.overrideConfig(b).catch(e=>{console.error("Failed to override SDK config:",e),p.suppressConfigErrorToast||uv(e,{title:"Failed to apply AI configuration"})})},[A,b,p.suppressConfigErrorToast]);let en=(0,s.useCallback)(()=>hc(function*(){try{let e=v.getFieldsValue();yield er(),yield W(e)}catch(e){uv(e,{title:"Execution failed"})}})(),[v,W,er]);(0,s.useEffect)(()=>{let e=p.externalRunRequest;if(e&&function(e){let{request:t,handledRequestIds:r,lastRequestId:n,sdkReady:o,messagesInitialized:i}=e;return!!(t&&t.id!==n&&!(null==r?void 0:r.has(t.id))&&o&&i)}({request:e,handledRequestIds:hu,lastRequestId:x.current,sdkReady:w,messagesInitialized:L})){if(x.current=e.id,hu.add(e.id),hu.size>100){let e=hu.values().next().value;e&&hu.delete(e)}hc(function*(){yield er(),yield W(e.value,hA({displayContent:e.displayContent},e.reportDisplay?{reportDisplay:e.reportDisplay}:{}))})().catch(e=>{uv(e,{title:"Execution failed"})})}},[p.externalRunRequest,W,L,er,w]);let eo=Object.keys(b||{}).length>=1,ei=p.serverMode||!g&&!M&&eo,ea=ub.A.useWatch("type",v)||uW["0"],es=(0,s.useMemo)(()=>A&&"function"==typeof A.getServiceMode?A.getServiceMode():"Server",[A]),el=y&&!1!==p.showContextPreview,ec=p.layout||"vertical",eA=!1!==p.showVersionInfo,eu=p.deviceType,ed=null!=(r=p.executionFlow)?r:{},ep=!0===ed.collapsible,eh=null!=(n=ed.label)?n:"Execution Flow",[em,ef]=(0,s.useState)(()=>new Set),eg=(0,s.useCallback)(e=>{ef(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),{firstInProgressGroup:ey,visibleInfoList:ev}=(0,s.useMemo)(()=>{let e=new Set,t=[],r=null,n=R.length>1;for(let o of R)if(!n||"welcome"!==o.id)if("progress"===o.type){if(null===r){r=o.id,e.add(o.id),t.push(o);continue}ep&&em.has(r)||t.push(o)}else r=null,t.push(o);return{firstInProgressGroup:e,visibleInfoList:t}},[em,ep,R]),eb=(0,s.useMemo)(()=>{for(let e=R.length-1;e>=0;e--)if("progress"===R[e].type)return R[e].id;return null},[R]),ew=(0,s.useMemo)(()=>(function(e){let t=new Set;for(let n=0;n<e.length;n++){var r;let o=e[n];(null==o?void 0:o.type)==="progress"&&(null==(r=e[n+1])?void 0:r.type)!=="progress"&&t.add(o.id)}return t})(ev),[ev]),eE=void 0!==p.emptyState&&1===ev.length&&(null==(i=ev[0])?void 0:i.id)==="welcome",ex=(0,s.useMemo)(()=>eE&&((e,t)=>{if(!(null==e?void 0:e.length)||!t||pM(e,t))return!1;let r=pP(e,t);return!!(null==r?void 0:r.paramSchema)&&!!pO(r.paramSchema)&&Object.keys(r.paramSchema.shape||{}).length>1})(P,ea),[P,eE,ea]),ek=!eE;(0,s.useEffect)(()=>{if(!ex)return;let e=()=>{let e=U.current;if(!e)return;let t=e.querySelector(".playground-empty-state-wrapper"),r=null==t?void 0:t.querySelector("[data-playground-empty-state-content-start]"),n=null==t?void 0:t.querySelector("[data-playground-empty-state-content-end]");if(!(r instanceof HTMLElement)||!(n instanceof HTMLElement))return;let o=e.getBoundingClientRect(),i=r.getBoundingClientRect(),a=n.getBoundingClientRect(),s=function(e){let{currentScrollTop:t,maxScrollTop:r,containerTop:n,containerBottom:o,contentStartTop:i,contentEndBottom:a,topSafeMargin:s=24,bottomSafeMargin:l=24}=e;return Math.max(0,Math.round(Math.min(t+a-(o-l),t+i-(n+s),r)))}({currentScrollTop:e.scrollTop,maxScrollTop:Math.max(0,e.scrollHeight-e.clientHeight),containerTop:o.top,containerBottom:o.bottom,contentStartTop:i.top,contentEndBottom:a.bottom});e.scrollTo({top:s,behavior:"auto"})},t=window.requestAnimationFrame(e),r=window.setTimeout(e,160);return()=>{window.cancelAnimationFrame(t),window.clearTimeout(r)}},[U,ea,ex]);let eS=["playground-empty-state-wrapper",ex?"playground-empty-state-wrapper-offset-for-prompt":""].filter(Boolean).join(" "),eI=!1!==p.showClearButton,eC=(0,s.useCallback)(()=>{Y().finally(()=>{Q()})},[Y,Q]),eO=eI&&ek?(0,a.jsx)("div",{className:"clear-button-container",children:(0,a.jsx)(q.Ay,{size:"small",icon:(0,a.jsx)(uL.A,{}),onClick:eC,type:"text",className:"clear-button"})}):null,eR=null!=(o=p.timelineWrapper)?o:(e,t)=>e,ej=p.hidePromptInput?null:(0,a.jsxs)("div",{className:"bottom-input-section",children:[p.showEnvConfigReminder?(0,a.jsx)(dH,(l=hA({},h),c=c={playgroundSDK:A},Object.getOwnPropertyDescriptors?Object.defineProperties(l,Object.getOwnPropertyDescriptors(c)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(c)).forEach(function(e){Object.defineProperty(l,e,Object.getOwnPropertyDescriptor(c,e))}),l)):null,(0,a.jsx)(hi,{runButtonEnabled:ei,form:v,serviceMode:es,selectedType:ea,dryMode:g,stoppable:G,loading:C,onRun:en,onStop:H,actionSpace:P,chrome:p.promptInputChrome,deviceType:eu})]}),eP="before-timeline"===p.promptInputPlacement;return(0,a.jsx)("div",{className:`playground-container ${ec}-mode ${f}`.trim(),children:(0,a.jsxs)(ub.A,{form:v,onFinish:en,className:"command-form",initialValues:{type:uW["0"]},children:[el&&(0,a.jsx)("div",{className:"context-preview-section",children:(0,a.jsx)(dX,{uiContextPreview:T,setUiContextPreview:N,showContextPreview:el})}),eP?ej:null,(0,a.jsx)("div",{className:"playground-timeline-region",children:eR((0,a.jsxs)("div",{className:["middle-dialog-area",eE?"middle-dialog-area-empty":""].filter(Boolean).join(" "),children:[p.timelineHeader,(0,a.jsx)("div",{ref:U,className:["info-list-container",eE?"info-list-container-empty":""].filter(Boolean).join(" "),children:eE?(0,a.jsx)("div",{className:eS,children:p.emptyState}):(0,a.jsx)(uQ.A,{itemLayout:"vertical",dataSource:ev,renderItem:e=>{var t,r,n,o;let i,l,c,A,u,d,h,f,g=ep&&ey.has(e.id),y=g&&em.has(e.id);return(0,a.jsxs)(uQ.A.Item,{className:"list-item",children:[g?(0,a.jsxs)("button",{type:"button",className:`progress-group-toggle ${em.has(e.id)?"is-collapsed":"is-expanded"}`,"aria-expanded":!em.has(e.id),onClick:()=>eg(e.id),children:[(0,a.jsx)("span",{className:"progress-group-toggle-label",children:eh}),(0,a.jsx)(uU.A,{className:"progress-group-toggle-chevron"})]}):null,y?null:"user"===e.type?(0,a.jsx)("div",{className:"user-message-container",children:(0,a.jsx)("div",{className:"user-message-bubble",children:e.content})}):"progress"===e.type?(0,a.jsx)("div",{children:(l=null==(t=(i=e.content.split(" - "))[0])?void 0:t.trim(),c=i.slice(1).join(" - ").trim(),A=e.id===eb,u=ew.has(e.id),f="completed"==(h=(d=C&&A)?"loading":(null==(r=e.result)?void 0:r.error)?"error":"completed")?function(e,t){if(!e)return null;if(t){let r=t(e);if(void 0!==r)return r}return(0,s.createElement)(pE)}(e.actionKind,ed.resolveActionIcon):null,(0,a.jsxs)("div",{className:`progress-row ${u?"progress-row-last":""}`,children:[l?(0,a.jsx)("span",{className:`progress-status-icon ${h}`,children:"loading"===h?(0,a.jsx)(uK.A,{spin:!0}):"error"===h?(0,s.createElement)(px):null!==f?f:"✓"}):null,(0,a.jsx)(hp,{action:l,content:e.content,description:c,error:null==(n=e.result)?void 0:n.error,shouldShowLoading:d})]}))}):(0,a.jsxs)("div",{className:"system-message-container",children:[!1!==p.showSystemMessageHeader&&(0,a.jsxs)("div",{className:"system-message-header",children:[(0,a.jsx)(uZ.A,{className:"system-message-icon",component:m.icon||pw,style:{fontSize:20}}),(0,a.jsx)("span",{className:"system-message-title",children:m.title||"Playground"})]}),(e.content||e.result)&&(0,a.jsx)("div",{className:"system-message-content",children:"result"===e.type?(0,a.jsx)(pb,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:es,replayScriptsInfo:e.replayScriptsInfo||null,replayCounter:e.replayCounter||0,loadingProgressText:e.loadingProgressText||"",verticalMode:e.verticalMode||!1,fitMode:"width",showOutputAlongsideReport:void 0!==(o=e.actionType)&&hs.includes(o),onDownloadReport:p.onDownloadReport,playerPresentation:"timeline",hidePlayerFullscreenControl:p.hidePlayerFullscreenControl}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"system-message-text",children:e.content}),e.loading&&e.loadingProgressText&&(0,a.jsx)("div",{className:"loading-progress-text",children:(0,a.jsx)("span",{children:e.loadingProgressText})})]})})]})]},e.id)}})}),ek&&D&&!1!==p.enableScrollToBottom&&(0,a.jsx)(q.Ay,{"aria-label":"Scroll to latest message",className:"scroll-to-bottom-button",shape:"circle",icon:(0,a.jsx)(uJ.A,{}),onClick:X})]}),{empty:eE,headerAction:eO})}),eP?null:ej,eA&&m.version&&(0,a.jsx)("div",{className:"version-info-section",children:(0,a.jsxs)("span",{className:"version-text",children:["Midscene.js version: ",m.version]})})]})})}let hm=e=>{var t,r;return(0,a.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,a.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m12 6-4 4-4-4"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},hf=e=>{var t,r;return(0,a.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:55,height:52,fill:"none",viewBox:"0 0 55 52"},e),r=r={children:[(0,a.jsxs)("mask",{id:"midscene-logo_svg__a",width:55.371,height:52.35,x:-.202,y:-.201,fill:"#000",maskUnits:"userSpaceOnUse",children:[(0,a.jsx)("path",{fill:"#fff",d:"M-.202-.201h55.371v52.35H-.202z"}),(0,a.jsx)("path",{fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"})]}),(0,a.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"}),(0,a.jsx)("path",{fill:"#3A4953",d:"m36.328 4.056 1.3 1.263zm-.83.853L34.2 3.646l-1.95 2.006 2.628.96zm13.968 14.069-1.707.609.14.39.295.291zm3.714 13.116 1.812.031zm-4.24 9.99 1.187 1.369zm-6.322 3.224.543 1.73.002-.002zm-.069.022-.543-1.729-.012.004zm-.088.029.546 1.727.01-.003zm-1.328.378-.446-1.757-.335.086-.28.202zm-13.634 4.399v1.812zm-13.632-4.399 1.06-1.47-.28-.202-.334-.084zm-1.328-.379-.55 1.727.004.001zm-.09-.028-.55 1.727zm-.067-.022.55-1.726-.005-.002zm-6.323-3.224-1.187 1.369zm-4.24-9.99-1.811.031zm3.715-13.116 1.272 1.29.295-.29.14-.391zm14.02-14.089.618 1.704 2.636-.955-1.954-2.011zm-.81-.833-1.3 1.262zm.948-2.244V0zm.563 4.935.615 1.704-1.23-3.409zM7.25 20.086l1.211 1.347.357-.32.151-.456zM3.803 32.06l-1.812.03zm9.244 11.378.55-1.726-.004-.002zm.09.029-.55 1.727h.004zm1.586.437 1.087-1.45-.304-.227-.369-.087zM27.5 48.152v1.812h.75l.532-.531zm.001-.001 1.282 1.281 3.093-3.093H27.5zm-12.776-4.247 1.087-1.45-.304-.227-.369-.087zm-1.586-.437-.55 1.727h.004zm-.09-.029.55-1.726-.004-.002zM3.805 32.06l-1.812.032zm3.447-11.973 1.211 1.347.357-.32.151-.456zm24.043 27.727.32 1.784-.64-3.567zm-.573.096-.271-1.792.542 3.584zm.892-.155-.348-1.778.695 3.557zm.255-.05.37 1.774.23-.048.21-.105zm.002 0 .81 1.62-1.179-3.395zm.623-.141L32.07 45.8l.845 3.524zm.215-.051.441 1.757.192-.048.177-.089zm.002-.001.81 1.62-1.251-3.378zM21.084 6.465V4.653h-.278l-.266.084zm-.572.191-.593-1.712 1.186 3.424zm.573-.19.545 1.728-.545-3.54zM35.38 1.811v1.812a.49.49 0 0 1-.351-.83l1.3 1.262 1.3 1.262C39.558 3.33 38.15 0 35.379 0zm.949 2.244-1.3-1.264-.829.854 1.3 1.263 1.298 1.263.83-.853zm-.83.853-.621 1.702a21.57 21.57 0 0 1 12.882 12.976l1.707-.61 1.706-.608A25.2 25.2 0 0 0 36.12 3.207zm13.968 14.069-1.272 1.29c2.043 2.015 3.29 5.063 3.174 11.795l1.812.03 1.812.032c.123-7.147-1.178-11.405-4.254-14.438zm3.714 13.116-1.812-.031c-.074 4.3-1.658 6.955-3.615 8.651l1.187 1.37 1.187 1.369c2.758-2.391 4.773-6.03 4.865-11.328zm-4.24 9.99-1.187-1.37c-1.919 1.663-4.188 2.395-5.68 2.866l.545 1.728.545 1.728c1.488-.469 4.421-1.379 6.964-3.583zm-6.322 3.224-.543-1.728-.069.021.543 1.729.544 1.729.068-.022zm-.069.022-.555-1.725-.089.029.556 1.724.556 1.725.088-.028zm-.088.029-.546-1.728q-.626.197-1.228.35l.446 1.756.445 1.756q.704-.178 1.429-.407zm-1.328.378-1.06-1.47a21.4 21.4 0 0 1-12.574 4.057v3.624c5.48 0 10.562-1.759 14.694-4.742zm-13.634 4.399v-1.812a21.4 21.4 0 0 1-12.571-4.056l-1.06 1.469-1.061 1.47a25.03 25.03 0 0 0 14.692 4.74zm-13.632-4.399.446-1.757q-.602-.151-1.228-.35l-.546 1.728-.546 1.728q.723.229 1.429.407zm-1.328-.379.55-1.726-.09-.029-.55 1.727-.55 1.727.09.028zm-.09-.028.55-1.727-.067-.021-.55 1.726-.55 1.727.067.022zm-.067-.022.545-1.728c-1.492-.47-3.762-1.202-5.681-2.866l-1.187 1.37-1.187 1.369c2.543 2.204 5.477 3.114 6.964 3.583zm-6.323-3.224 1.187-1.37c-1.957-1.696-3.54-4.35-3.615-8.651l-1.811.03-1.812.032c.091 5.297 2.106 8.937 4.864 11.328zm-4.24-9.99 1.812-.031c-.116-6.733 1.13-9.78 3.175-11.795l-1.272-1.29-1.272-1.29C1.185 20.72-.115 24.977.008 32.124zm3.715-13.116 1.707.609A21.57 21.57 0 0 1 20.172 6.593l-.617-1.704-.618-1.703a25.2 25.2 0 0 0-15.11 15.183zm14.02-14.089 1.3-1.262-.81-.834-1.3 1.263-1.3 1.262.811.834zm-.81-.833 1.3-1.263a.49.49 0 0 1-.351.831V1.812L19.691 0c-2.771 0-4.177 3.332-2.247 5.318zm.948-2.244v1.812H35.38V0H19.692zm.563 4.935-.616-1.705A23.2 23.2 0 0 0 5.53 19.514l1.72.572 1.72.571a19.58 19.58 0 0 1 11.9-12.206zM7.25 20.086l-1.212-1.348C3.27 21.228 1.866 24.83 1.99 32.091l1.812-.032 1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596zM3.803 32.06l-1.812.03c.082 4.753 1.861 7.854 4.18 9.864 2.236 1.938 4.852 2.746 6.33 3.212l.546-1.728.546-1.728c-1.511-.477-3.445-1.105-5.047-2.494-1.519-1.316-2.867-3.433-2.932-7.188zm9.244 11.378-.55 1.727.09.029.55-1.727.55-1.727-.09-.028zm.09.029-.546 1.728q.875.276 1.718.474l.414-1.765.414-1.764q-.706-.164-1.454-.401zm1.586.437-1.086 1.45a23.05 23.05 0 0 0 13.862 4.61V46.34a19.43 19.43 0 0 1-11.69-3.886zM27.5 48.152l1.282 1.281v-.001l-1.28-1.281-1.282-1.282-.001.001zm.001-.001v-1.812a19.43 19.43 0 0 1-11.69-3.885l-1.086 1.45-1.086 1.45A23.05 23.05 0 0 0 27.5 49.964zm-12.776-4.247.414-1.764c-.472-.11-.954-.243-1.454-.401l-.546 1.728-.546 1.728q.875.276 1.718.474zm-1.586-.437.55-1.727-.09-.028-.55 1.726-.55 1.727.09.029zm-.09-.029.546-1.728c-1.511-.477-3.444-1.105-5.047-2.494-1.518-1.316-2.866-3.433-2.93-7.188l-1.812.032-1.812.03c.082 4.752 1.86 7.853 4.18 9.864 2.235 1.938 4.85 2.745 6.33 3.212zM3.805 32.06l1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596l-1.211-1.347-1.212-1.348c-2.767 2.49-4.172 6.092-4.047 13.353zm3.447-11.973 1.72.571A19.58 19.58 0 0 1 20.87 8.451l-.615-1.704-.616-1.705A23.2 23.2 0 0 0 5.532 19.514zm24.043 27.727-.32-1.783q-.266.048-.524.087l.271 1.792.271 1.791q.319-.048.622-.103zm-.573.096.272 1.791q.316-.048.622-.103l-.32-1.784-.321-1.783a20 20 0 0 1-.524.087zm.892-.155.347 1.779c.061-.012.179-.034.278-.055l-.37-1.774-.369-1.774c-.071.015-.124.025-.234.046zm.255-.05.81 1.621h.003l-.81-1.622-.811-1.62h-.002zm.002 0-.369-1.775-.235.047.347 1.778.347 1.779.28-.056zm.623-.141.422 1.762c.023-.006.159-.037.234-.056l-.441-1.757-.441-1.758-.197.047zm.215-.051.81 1.62h.002l-.81-1.621-.81-1.621h-.002zm.002-.001-.441-1.758-.199.047.423 1.763.422 1.762.236-.057zM21.084 6.465l-.544-1.728q-.325.104-.621.207l.593 1.712.593 1.712q.273-.095.524-.174zm-.572.191.594 1.712q.27-.093.524-.174l-.545-1.729-.544-1.728q-.323.103-.622.207zm.573-.19V4.652zv1.812z",mask:"url(#midscene-logo_svg__a)"}),(0,a.jsx)("mask",{id:"midscene-logo_svg__b",width:53,height:50,x:1,y:1,maskUnits:"userSpaceOnUse",style:{maskType:"alpha"},children:(0,a.jsx)("path",{fill:"#F0F0F0",fillRule:"evenodd",d:"M24.214 12.537a4.63 4.63 0 0 0 6.64 0l6.608-6.805a23.4 23.4 0 0 1 12 13.247c2.56 2.524 3.833 6.176 3.714 13.114-.083 4.8-1.883 7.947-4.24 9.991-2.231 1.934-4.833 2.755-6.322 3.225l-.158.05q-.675.213-1.328.378a23.22 23.22 0 0 1-13.632 4.399 23.22 23.22 0 0 1-13.632-4.399q-.654-.165-1.33-.378l-.157-.05c-1.49-.47-4.092-1.291-6.322-3.225-2.358-2.044-4.157-5.192-4.24-9.99-.12-6.941 1.155-10.593 3.716-13.117a23.4 23.4 0 0 1 12.05-13.27zM35.38 1.812c1.168 0 1.763 1.406.949 2.244l-6.895 7.1c-.52.534-1.21.8-1.899.8h-.012a2.65 2.65 0 0 1-1.536-.503 2.7 2.7 0 0 1-.35-.299L19.552 4.89l.001-.001-.808-.833c-.814-.838-.22-2.244.949-2.244z",clipRule:"evenodd"})}),(0,a.jsxs)("g",{mask:"url(#midscene-logo_svg__b)",children:[(0,a.jsx)("path",{fill:"#fff",d:"M-4.044-9.086h63.087V65.49H-4.044z"}),(0,a.jsx)("g",{filter:"url(#midscene-logo_svg__c)",opacity:.8,children:(0,a.jsx)("path",{fill:"#005EEC",fillOpacity:.01,d:"M41.85 43.36c-.378-.748-3.453.67-7.362 2.242s-7.175 2.702-6.798 3.45c.378.746 3.853.078 7.763-1.494s6.773-3.452 6.396-4.199"})})]}),(0,a.jsx)("path",{fill:"url(#midscene-logo_svg__d)",d:"M5.773 18.412h43.601v24.223H5.773z"}),(0,a.jsx)("path",{fill:"url(#midscene-logo_svg__e)",d:"M5.773 18.473h43.086v24.454H5.773z"}),(0,a.jsx)("path",{fill:"url(#midscene-logo_svg__f)",d:"M5.926 18.075h43.092v24.457H5.926z"}),(0,a.jsx)("foreignObject",{width:27.157,height:19.138,x:21.193,y:36.687,children:(0,a.jsx)("div",{xmlns:"http://www.w3.org/1999/xhtml",style:{backdropFilter:"blur(2.96px)",clipPath:"url(#midscene-logo_svg__g)",height:"100%",width:"100%"}})}),(0,a.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",stroke:"#3A4953",strokeWidth:.514,d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253Zm17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901Z",clipRule:"evenodd","data-figma-bg-blur-radius":5.911}),(0,a.jsxs)("defs",{children:[(0,a.jsx)("pattern",{id:"midscene-logo_svg__d",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,a.jsx)("use",{xlinkHref:"#midscene-logo_svg__h",transform:"scale(.00483 .0087)"})}),(0,a.jsx)("pattern",{id:"midscene-logo_svg__e",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,a.jsx)("use",{xlinkHref:"#midscene-logo_svg__i",transform:"scale(.009 .01587)"})}),(0,a.jsx)("pattern",{id:"midscene-logo_svg__f",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,a.jsx)("use",{xlinkHref:"#midscene-logo_svg__j",transform:"scale(.009 .01587)"})}),(0,a.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__h",width:207,height:115,preserveAspectRatio:"none"}),(0,a.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__i",width:111,height:63,preserveAspectRatio:"none"}),(0,a.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__j",width:111,height:63,preserveAspectRatio:"none"}),(0,a.jsx)("clipPath",{id:"midscene-logo_svg__g",transform:"translate(-21.193 -36.687)",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253m17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901",clipRule:"evenodd"})}),(0,a.jsxs)("filter",{id:"midscene-logo_svg__c",width:27.157,height:19.138,x:21.193,y:36.687,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,a.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,a.jsx)("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),(0,a.jsx)("feGaussianBlur",{result:"effect1_foregroundBlur_8049_134028",stdDeviation:3.212})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function hg(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function hy(){return(0,a.jsx)(hm,{"aria-hidden":"true",className:"session-setup-select-icon"})}let hv="Create Agent";function hb(e){var t,r,n,o;let{form:i,sessionSetup:s,sessionSetupError:l,sessionViewState:c,sessionLoading:A,sessionMutating:u,onCreateSession:d}=e,p=u||A||"blocked"===c.setupState,h=null!=(t=null==s?void 0:s.primaryActionLabel)?t:hv,m=null!=(r=null==s?void 0:s.title)?r:hv,f=null!=(n=null==s?void 0:s.description)?n:"Create a platform session before running actions.";return(0,a.jsx)("div",{className:"session-setup-panel",children:(0,a.jsxs)("div",{className:"session-setup-card",children:[(0,a.jsx)(hf,{"aria-hidden":"true",className:"session-setup-logo"}),(0,a.jsx)("h1",{className:"session-setup-title",children:m}),(0,a.jsx)("p",{className:"session-setup-description",children:f}),"blocked"===c.setupState&&c.setupBlockingReason&&(0,a.jsx)(W.A,{type:"error",showIcon:!0,message:"Setup blocked",description:c.setupBlockingReason,className:"session-setup-alert"}),l?(0,a.jsx)(W.A,{type:"error",showIcon:!0,message:"Failed to load setup",description:l,className:"session-setup-alert"}):null,(null==s?void 0:s.notice)?(0,a.jsx)(W.A,{type:s.notice.type,showIcon:!0,message:s.notice.message,description:s.notice.description,className:"session-setup-alert"}):null,(0,a.jsxs)(ub.A,{form:i,layout:"vertical",className:"session-setup-form",onFinish:()=>{p||d()},children:[(null!=(o=null==s?void 0:s.fields)?o:[]).map(e=>(0,a.jsx)(ub.A.Item,{label:e.label,name:e.key,tooltip:e.description,rules:e.required?[{required:!0,message:`${e.label} is required`}]:void 0,children:function(e,t){if("number"===e.type)return(0,a.jsx)(p$.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let o=hg(t),i=function(e,t){var r;if(hg(t)!==e.key||!(null==t||null==(r=t.platformRegistry)?void 0:r.length))return e.options;let n=t.platformRegistry.map(e=>({label:e.label,value:e.id,description:[e.description,e.unavailableReason].filter(Boolean).join(" \xb7 ")||void 0}));return n.length>0?n:e.options}(e,t);return o===e.key&&(null==t||null==(r=t.platformSelector)?void 0:r.variant)==="cards"?(0,a.jsx)(pz.A.Group,{className:"platform-selector-group",children:(i||[]).map(e=>(0,a.jsxs)(pz.A.Button,{value:e.value,className:"platform-selector-card",children:[(0,a.jsx)("div",{className:"platform-selector-title",children:e.label}),e.description?(0,a.jsx)("div",{className:"platform-selector-description",children:e.description}):null]},String(e.value)))}):(0,a.jsx)(X.A,{placeholder:e.placeholder,suffixIcon:(0,a.jsx)(hy,{}),options:(null!=(n=null!=i?i:e.options)?n:[]).map(e=>({label:e.label,value:e.value,description:e.description})),optionRender:e=>{let t=e.data.description;return t?(0,a.jsxs)("div",{className:"session-select-option",children:[(0,a.jsx)("div",{className:"session-select-option-label",children:e.data.label}),(0,a.jsx)("div",{className:"session-select-option-description",children:t})]}):e.data.label}})}return(0,a.jsx)(J.A,{placeholder:e.placeholder})}(e,s)},e.key)),(0,a.jsx)("button",{type:"submit",className:"session-setup-submit",disabled:p,children:u?"Creating...":h})]})]})})}function hw(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function hE(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function hx(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,o)}function hk(e){var t,r,n,o,i,s;let l,{controller:c,appVersion:A,title:u="Playground",branding:d,playgroundConfig:p,header:h,className:m,playgroundClassName:f,notConnectedFallback:g}=e,{state:y,actions:v}=c,b=hE(hw({},l={showContextPreview:!1,layout:"vertical",showVersionInfo:!1,enableScrollToBottom:!1,serverMode:!0,showEnvConfigReminder:!1,showClearButton:!1,showSystemMessageHeader:!1,promptInputChrome:{variant:"minimal"},executionFlow:{collapsible:!0},deviceType:y.deviceType,executionUx:{hints:y.executionUxHints,countdownSeconds:y.countdownSeconds}},p),{executionFlow:hw({},l.executionFlow,null==p?void 0:p.executionFlow),executionUx:hw({},l.executionUx,null==p?void 0:p.executionUx)}),w=(t=y.runtimeInfo,r=y.deviceType,hE(hw({},d),{title:null!=(n=null==t?void 0:t.title)?n:u,version:A,targetName:null!=(s=null!=(i=null!=(o=null==t?void 0:t.platformId)?o:null==d?void 0:d.targetName)?i:r)?s:"screen"}));return(0,a.jsxs)("div",{className:["playground-conversation-panel",m].filter(Boolean).join(" "),children:[(0,a.jsx)(Q.A,{open:null!==y.countdown,footer:(0,a.jsx)(q.Ay,{onClick:v.finishCountdown,type:"default",children:"Skip countdown"}),closable:!0,maskClosable:!0,onCancel:v.finishCountdown,centered:!0,width:400,styles:{mask:{backgroundColor:"rgba(0, 0, 0, 0.75)"}},children:(0,a.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,a.jsx)("div",{style:{fontSize:"120px",fontWeight:"bold",color:"GO!"===y.countdown?"#52c41a":"#1890ff",marginBottom:"24px",lineHeight:1},children:y.countdown}),(0,a.jsx)("div",{style:{fontSize:"18px",fontWeight:500,marginBottom:"12px"},children:"Automation Starting Soon"}),(0,a.jsxs)("div",{style:{fontSize:"14px",color:"var(--midscene-text-secondary)"},children:["The selected session requested a countdown before execution.",(0,a.jsx)("br",{}),"Please wait until the run starts."]})]})}),h,(0,a.jsx)("div",{className:"playground-conversation-body",children:y.serverOnline?y.sessionViewState.connected?(0,a.jsx)(hh,{playgroundSDK:y.playgroundSDK,config:b,branding:w,className:["playground-container","playground-conversation-skin",f].filter(Boolean).join(" ")}):void 0!==g?(0,a.jsx)(a.Fragment,{children:g}):(0,a.jsx)(hb,{form:y.form,sessionSetup:y.sessionSetup,sessionSetupError:y.sessionSetupError,sessionViewState:y.sessionViewState,sessionLoading:y.sessionLoading,sessionMutating:y.sessionMutating,onCreateSession:()=>{var e;return(e=function*(){yield v.createSession()},function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){hx(i,n,o,a,s,"next",e)}function s(e){hx(i,n,o,a,s,"throw",e)}a(void 0)})})()}}):(0,a.jsx)("div",{className:"playground-conversation-offline",children:(0,a.jsx)(W.A,{type:"warning",showIcon:!0,message:"Playground server offline",description:"Reconnect the runtime to continue using the Android playground."})})})]})}let{Content:hS}=eA.A;function hI(e){var t;let{serverUrl:r,appVersion:n,title:o="Playground",defaultDeviceType:i="web",branding:l,playgroundConfig:A,offlineTitle:u="Midscene Playground",offlineStatusText:d="Server offline...",pollIntervalMs:p=5e3}=e,[h,m]=(0,s.useState)(!1),f=function(e){var t;let{serverUrl:r,defaultDeviceType:n="web",pollIntervalMs:o=5e3,countdownSeconds:i=3,initialFormValues:l,onCountdownFinish:c}=e,{message:A}=ew.A.useApp(),[u]=ub.A.useForm(),d=(0,s.useRef)(l);(0,s.useLayoutEffect)(()=>{let e=d.current;if(e)for(let[t,r]of Object.entries(e))void 0===u.getFieldValue(t)&&u.setFieldsValue({[t]:r})},[u]);let p=null!=(t=ub.A.useWatch([],u))?t:{},[h,m]=(0,s.useState)(null),[f,g]=(0,s.useState)(null),[y,v]=(0,s.useState)(null),[b,w]=(0,s.useState)(!1),[E,x]=(0,s.useState)(!1),k=Z(e=>e.config),S=(0,s.useMemo)(()=>JSON.stringify(Object.entries(k).sort((e,t)=>{let[r]=e,[n]=t;return r.localeCompare(n)})),[k]),I=uz(f),C="string"==typeof I?p[I]:void 0,O=(0,s.useMemo)(()=>new ug({type:"remote-execution",serverUrl:r}),[r]),{serverOnline:R,isUserOperating:j,deviceType:P,runtimeInfo:M,executionUxHints:T,refreshServerState:N}=function(e,t,r){let[n,o]=(0,s.useState)(!1),[i,a]=(0,s.useState)(!1),[l,c]=(0,s.useState)(t),[A,u]=(0,s.useState)(null),[d,p]=(0,s.useState)([]),h=(0,s.useRef)(null),m=(0,s.useRef)(!0);(0,s.useEffect)(()=>(m.current=!0,()=>{m.current=!1}),[]),(0,s.useEffect)(()=>{h.current=A},[A]),(0,s.useEffect)(()=>{e.onProgressUpdate(e=>{a(!!e)})},[e]);let f=(0,s.useCallback)(()=>{var r;return(r=function*(){try{let a=yield e.checkStatus();if(!m.current)return;if(o(a),!a){h.current=null,u(null),p([]);return}try{let r=yield e.getRuntimeInfo();if(!m.current)return;if(r){h.current=r,u(r),c(eU(r,t)),p(eK(r));return}}catch(e){console.warn("Failed to get runtime info:",e)}try{var r,n,i;let o=yield e.getInterfaceInfo();if(!m.current||!(null==o?void 0:o.type))return;let a=(r=h.current,n=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},r),i=i={interface:o,preview:(null==r?void 0:r.preview)||{kind:"none",capabilities:[]},executionUxHints:(null==r?void 0:r.executionUxHints)||[],metadata:(null==r?void 0:r.metadata)||{}},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(i)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(i)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(i,e))}),n);h.current=a,u(a),c(eU(a,t)),p(eK(a))}catch(e){console.warn("Failed to get interface info:",e)}}catch(e){if(!m.current)return;console.error("Failed to check server status:",e),o(!1)}},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){ux(i,n,o,a,s,"next",e)}function s(e){ux(i,n,o,a,s,"throw",e)}a(void 0)})})()},[t,e]);return(0,s.useEffect)(()=>{f();let e=window.setInterval(()=>{f()},r);return()=>{window.clearInterval(e)}},[r,f]),{serverOnline:n,isUserOperating:i,deviceType:l,runtimeInfo:A,executionUxHints:d,refreshServerState:f}}(O,n,o),D=(0,s.useMemo)(()=>{let e,t;return t=(e=(null==M?void 0:M.metadata)||{}).setupState,{connected:!!e.sessionConnected,displayName:"string"==typeof e.sessionDisplayName?e.sessionDisplayName:void 0,setupState:"blocked"===t||"ready"===t||"required"===t?t:"ready",setupBlockingReason:"string"==typeof e.setupBlockingReason?e.setupBlockingReason:void 0}},[M]),z=(0,s.useRef)(null),B=(0,s.useRef)(null),F=(0,s.useRef)(!0),L=(0,s.useRef)(void 0),U=(0,s.useRef)(null),K=(0,s.useRef)(null),J=(0,s.useRef)(!1),Q=(0,s.useRef)(null),q=(0,s.useRef)(null),X=(0,s.useRef)(null),W=(0,s.useCallback)(()=>uN(function*(){if(!uS(k))return Q.current=null,X.current=null,!0;if(Q.current===S)return!0;let e=X.current;if((null==e?void 0:e.signature)===S)return e.promise;let t={promise:Promise.resolve(!0),signature:S},r=uN(function*(){try{var e;return yield(e=function*(){return!!uS(k)&&(yield O.overrideConfig(k),!0)},function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){uk(i,n,o,a,s,"next",e)}function s(e){uk(i,n,o,a,s,"throw",e)}a(void 0)})})(),Q.current=S,!0}catch(e){return uv(e,{title:"Failed to apply AI configuration"}),!1}finally{X.current===t&&(X.current=null)}})();return t.promise=r,X.current=t,r})(),[k,S,O]),H=(0,s.useCallback)(()=>{let e=null!==z.current;null!==z.current&&(window.clearInterval(z.current),z.current=null);let t=B.current;B.current=null,F.current&&m(null),null==t||t(),e&&F.current&&(null==c||c())},[c]),Y=(0,s.useCallback)(()=>uN(function*(){if(!(i<=0))return H(),new Promise(e=>{B.current=e;let t=i;F.current&&m(t),z.current=window.setInterval(()=>{if((t-=1)>0){F.current&&m(t);return}if(0===t){F.current&&m("GO!");return}H()},1e3)})})(),[i,H]);(0,s.useEffect)(()=>(F.current=!0,()=>{F.current=!1,H()}),[H]),(0,s.useEffect)(()=>T.includes("countdown-before-run")?(O.setBeforeActionHook(()=>uN(function*(){yield Y()})()),()=>{O.setBeforeActionHook(void 0)}):void O.setBeforeActionHook(void 0),[T,O,Y]);let G=(0,s.useCallback)(e=>uN(function*(){let t=uD({},u.getFieldsValue(!0),e||{});w(!0);try{let r=yield O.getSessionSetup(e);g(r),v(null);let n=uz(r);L.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(uw(r,t))}catch(e){console.error("Failed to load session setup:",e),v(e instanceof Error?e.message:"Failed to load session setup")}finally{w(!1)}})(),[u,O]),V=(0,s.useCallback)((e,t)=>uN(function*(){if(q.current)return q.current;let r=uN(function*(){var r;let n;try{if(J.current=!0,x(!0),!(yield W()))return!1;let r=null!=e?e:yield u.validateFields();return n=r,yield O.createSession(r),(null==t?void 0:t.silent)||(K.current=null),(null==t?void 0:t.silent)||A.success("Agent created"),yield N(),!0}catch(e){if(e.errorFields)return!1;if(null==t?void 0:t.silent)return K.current=uI(n),!1;return uv(e,null!=(r=function(e){let t;if(t=uj(e).toLowerCase(),uR.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,a.jsx)(uM,{error:e}),duration:0,title:"Failed to create Agent"}}(e))?r:{title:"Failed to create Agent"}),!1}finally{J.current=!1,x(!1)}})(),n={promise:null};return n.promise=r.finally(()=>{q.current===n.promise&&(q.current=null)}),q.current=n.promise,n.promise})(),[W,u,A,O,N]),$=(0,s.useCallback)(()=>uN(function*(){try{K.current=uI(uE(f,u.getFieldsValue(!0))),J.current=!0,x(!0),yield O.destroySession(),A.success("Session disconnected"),yield N(),yield G()}catch(e){uv(e,{title:"Failed to disconnect session"})}finally{J.current=!1,x(!1)}})(),[u,A,O,N,G,f]);return(0,s.useEffect)(()=>{R&&W()},[W,R]),(0,s.useEffect)(()=>{if(!R||D.connected)return;let e=!1,t=!1,r=()=>uN(function*(){if(!e&&!t){t=!0;try{yield G(u.getFieldsValue(!0))}finally{t=!1}}})();r();let n=window.setInterval(()=>{r()},o);return()=>{e=!0,window.clearInterval(n)}},[u,o,G,R,D.connected]),(0,s.useEffect)(()=>{if(!R||D.connected||!C)return;let e=uz(f);if(e&&L.current!==C){var t,r;G((t=uD({},u.getFieldsValue(!0)),r=r={[e]:C},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))}},[u,G,C,R,f,D.connected]),(0,s.useEffect)(()=>{if(D.connected){U.current=null;return}if(!R||b||E||J.current||y)return;let e=uE(f,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,o=uI(t);return o?{signature:o,shouldCreate:o!==r&&o!==n}:{signature:null,shouldCreate:!1}}({autoCreateInput:e,lastAttemptedSignature:U.current,blockedSignature:K.current});if(!r||!t){t||(U.current=null);return}U.current=t,uN(function*(){(yield V(null!=e?e:void 0,{silent:!0}))||(U.current=null)})()},[V,u,R,b,E,f,y,D.connected]),{state:{playgroundSDK:O,form:u,formValues:p,serverOnline:R,isUserOperating:j,deviceType:P,runtimeInfo:M,executionUxHints:T,sessionViewState:D,sessionSetup:f,sessionSetupError:y,sessionLoading:b,sessionMutating:E,countdown:h,countdownSeconds:i},actions:{refreshServerState:N,refreshSessionSetup:G,createSession:V,destroySession:$,finishCountdown:H}}}({serverUrl:r,defaultDeviceType:i,countdownSeconds:null==A||null==(t=A.executionUx)?void 0:t.countdownSeconds,pollIntervalMs:p});return((0,s.useEffect)(()=>{let e=()=>{m(window.innerWidth<=1024)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),f.state.serverOnline)?(0,a.jsx)(eW,{children:(0,a.jsx)(eA.A,{className:"app-container playground-container",children:(0,a.jsx)(hS,{className:"app-content",children:(0,a.jsxs)(eu.YZ,{autoSaveId:"playground-layout",direction:h?"vertical":"horizontal",children:[(0,a.jsx)(eu.Zk,{defaultSize:h?67:32,maxSize:h?85:60,minSize:h?67:25,className:"app-panel left-panel",children:(0,a.jsxs)("div",{className:"panel-content left-panel-content",children:[(0,a.jsx)("div",{className:"playground-panel-header",children:(0,a.jsxs)("div",{className:"header-row",children:[(0,a.jsx)(c,{}),(0,a.jsx)(ec,{showTooltipWhenEmpty:!1,showModelName:!1,playgroundSDK:f.state.playgroundSDK})]})}),(0,a.jsx)("div",{className:"playground-panel-playground",children:(0,a.jsx)(hk,{controller:f,appVersion:n,branding:l,playgroundConfig:A,title:o})})]})}),(0,a.jsx)(eu.TW,{className:"panel-resize-handle"}),(0,a.jsx)(eu.Zk,{defaultSize:h?33:68,minSize:h?15:40,className:"app-panel right-panel",children:(0,a.jsx)("div",{className:"panel-content right-panel-content",children:f.state.sessionViewState.connected?(0,a.jsx)(eq,{playgroundSDK:f.state.playgroundSDK,runtimeInfo:f.state.runtimeInfo,serverUrl:r,serverOnline:f.state.serverOnline,isUserOperating:f.state.isUserOperating}):(0,a.jsx)(ep,{})})})]})})})}):(0,a.jsx)(eW,{children:(0,a.jsx)("div",{className:"server-offline-container",children:(0,a.jsxs)("div",{className:"server-offline-message",children:[(0,a.jsx)(c,{}),(0,a.jsxs)("div",{className:"server-offline-content",children:[(0,a.jsxs)("div",{className:"server-offline-icon",children:[(0,a.jsx)(uB,{className:"icon-background"}),(0,a.jsx)(uF,{className:"icon-foreground"})]}),(0,a.jsx)("h1",{children:u}),(0,a.jsx)("p",{className:"connection-status",children:d})]})]})})})}let hC=document.getElementById("root");if(!hC)throw Error("Root element not found");(0,l.createRoot)(hC).render((0,a.jsx)(s.StrictMode,{children:(0,a.jsx)(function(){return(0,a.jsx)(hI,{serverUrl:"",appVersion:"1.16.1",title:"Playground",offlineTitle:"Midscene Playground"})},{})}))},33675(e,t,r){"use strict";r.d(t,{l:()=>a});let n=["intent","slot","model_name","response_model_name","model_description","prompt_tokens","cached_input","completion_tokens","total_tokens","time_cost","request_id"];function o(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function i(e,t){return Math.max(0,o(e[t])??0)}function a(e){let t,r,a,s,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||!Array.isArray(e.executions))throw Error("collectReportSummary: report.executions must be an array");let c=0,A=0,u=new Map,d=e=>{let n=o(e);void 0!==n&&(t=void 0===t?n:Math.min(t,n),r=void 0===r?n:Math.max(r,n))},p=e=>{let t;if(!(e&&n.some(t=>void 0!==e[t]&&null!==e[t])))return;let r=e.model_name||e.response_model_name||e.model_description||e.intent||"Unknown",a=u.get(r)??{modelName:r,callCount:0,promptTokens:0,cachedInputTokens:0,completionTokens:0,totalTokens:0,modelCallTimeMs:0},s=i(e,"time_cost");u.set(r,{modelName:r,callCount:a.callCount+1,promptTokens:a.promptTokens+i(e,"prompt_tokens"),cachedInputTokens:a.cachedInputTokens+i(e,"cached_input"),completionTokens:a.completionTokens+i(e,"completion_tokens"),totalTokens:a.totalTokens+(void 0!==(t=o(e.total_tokens))&&t>0?t:i(e,"prompt_tokens")+i(e,"completion_tokens")),modelCallTimeMs:a.modelCallTimeMs+s}),c+=1,A+=s};for(let t of e.executions)for(let e of t.tasks){var h,m;d(null==(h=e.timing)?void 0:h.start),d(null==(m=e.timing)?void 0:m.end),p(e.usage),p(e.searchAreaUsage)}let f=Array.from(u.values()),g=f.reduce((e,t)=>({promptTokens:e.promptTokens+t.promptTokens,cachedInputTokens:e.cachedInputTokens+t.cachedInputTokens,completionTokens:e.completionTokens+t.completionTokens,totalTokens:e.totalTokens+t.totalTokens}),{promptTokens:0,cachedInputTokens:0,completionTokens:0,totalTokens:0}),y=o(l.wallTimeFallbackMs);return void 0!==t&&void 0!==r?(a=Math.max(0,r-t),s="task-timestamps"):void 0!==y&&y>=0?(a=y,s="fallback"):s="unavailable",{timing:{wallTimeMs:a,wallTimeStart:"task-timestamps"===s?t:void 0,wallTimeEnd:"task-timestamps"===s?r:void 0,wallTimeSource:s,modelCallTimeMs:A,modelCallCount:c},tokens:g,models:f}}},68629(e,t,r){"use strict";r(58188),r(20875),r(28492)},27430(e,t,r){"use strict";r.d(t,{U:()=>p});var n=r(64565),o=r(19152),i=r(584),a=r(73840),s=r(4130),l=r(43545),c=r(27533),A=r(21749),u=r(47339),d=r(69087);function p(e,t){var r,p;let h,m,f=(null==(r=t.createDocumentRunId)?void 0:r.call(t))??(0,o.uR)(),g=t.plan??(0,a.V)(e,{defaultTimeoutMs:t.defaultTimeoutMs,retry:{scope:"case",count:(null==(p=t.project)?void 0:p.retry)??0}}),y=new Date,v=[],b=[],w={beforeAll:e.lifecycle.beforeAll.map(e=>t.resolveNode(e.node)),afterAll:e.lifecycle.afterAll.map(e=>t.resolveNode(e.node))},E=t.project??Object.freeze({projectId:e.projectId,name:e.projectId,retry:0}),x=t.projectContext,k=(0,c.d5)(t.signal),S=k.signal;(0,c.Wl)(S,{scopeId:f});let I=[],C=!0,O=!1,R=new Set,j=[],P=new Map,M=[],T=[],N=!1,D=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=new Date,o=(0,c.Jo)(S),i=(0,c.CK)(S),a={beforeAll:(0,A.V)(e.lifecycle.beforeAll.length,v),afterAll:(0,A.V)(e.lifecycle.afterAll.length,b)};return{plan:g,documentId:e.documentId,documentRunId:f,...void 0===t.documentAttemptIndex?{}:{attemptIndex:t.documentAttemptIndex},projectId:e.projectId,projectName:E.name,sourcePath:e.sourcePath,status:M.length>0||T.length>0||v.some(e=>"success"!==e.status)||b.some(e=>"success"!==e.status)||"pending"===o.status||"failed"===o.status||i.length>0||r.length>0?"failed":"success",executionStatus:Object.values(a).some(e=>"failed"===e.status)?"failed":Object.values(a).some(e=>"not-run"===e.status)||T.some(e=>{let{phase:t}=e;return"setup"===t})||S.aborted&&!v.length&&!b.length?"not-run":"success",phases:a,cleanup:o,...i.length?{pendingOperations:i}:{},startedAt:y.toISOString(),endedAt:n.toISOString(),durationMs:Math.max(0,n.getTime()-y.getTime()),beforeAll:[...v],afterAll:[...b],...M.length?{executionErrors:M.filter(e=>!T.some(t=>t.error===e)).map(l.rN)}:{},...T.length?{hostErrors:[...T]}:{},...r.length>0?{teardownErrors:[...r]}:{},...R.size>0?{reportPaths:[...R]}:{},...P.size||j.length?{reportSources:[...P.values(),...j]}:{}}},z=async function(r,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:S;for(let[u,d]of e.lifecycle[r].entries()){var a,l,A;let p=u>0?await (0,c.$G)(o):0,h={documentId:e.documentId,documentRunId:f,projectId:e.projectId,projectName:E.name,sourcePath:e.sourcePath,phase:r,stepIndex:u},m={scope:"document",node:d.node,stepCount:e.lifecycle[r].length,document:h};await (null==(a=t.onStepStart)?void 0:a.call(t,m));let g=await (0,s.I)(d,w[r][u],{scope:"document",document:h},x,{signal:o,defaultTimeoutMs:t.defaultTimeoutMs,onTeardown(t,r){if(!C)throw new i.Uu("Node teardown can only be registered while a workflow document is running.",{documentId:e.documentId,documentRunId:f,node:t});if("function"!=typeof r)throw new i.Uu("Node onTeardown() requires a teardown function.",{documentId:e.documentId,documentRunId:f,node:t});I.push({registrationIndex:I.length,node:t,teardown:r})}});for(let e of(p>0&&(g.waitForPreviousOperationMs=p),n.push(g),(null==(l=g.report)?void 0:l.sources)??[]))P.set(`${e.sourcePath}\u0000${e.dumpPath??""}`,e);if(await (null==(A=t.onStepResult)?void 0:A.call(t,m,g)),"success"!==g.status&&!g.continuedAfterError)break}};return{signal:S,get context(){return x},get canRunCases(){return O&&0===M.length&&0===T.length&&!S.aborted&&!v.some(e=>"success"!==e.status)},async start(){if(O)throw new i.Uu("Workflow document runtime has already started.",{documentId:e.documentId,documentRunId:f});if(O=!0,!S.aborted&&t.documentSetup){N=!0;try{await (0,d.q)(async()=>{try{x=await t.documentSetup.setup({project:E,projectContext:t.projectContext,document:{documentId:e.documentId,documentRunId:f,sourcePath:e.sourcePath,attemptIndex:t.documentAttemptIndex??0},signal:S,onTeardown(r){if(!N||"function"!=typeof r)throw new i.Uu("Document setup onTeardown() requires a function registered during setup.",{documentId:e.documentId,documentRunId:f});I.push({registrationIndex:I.length,node:t.documentSetup.name,teardown:r,host:!0})}})}finally{N=!1}},S,k.abort,t.setupTimeoutMs)}catch(e){T.push({phase:"setup",error:(0,l.rN)(e)})}}try{S.aborted||T.length||await z("beforeAll",v)}catch(e){throw M.push(e),new l.CW(D(),[...M])}return D()},async finish(){if(m)return m;if(!O)throw new i.Uu("Workflow document runtime must start before it can finish.",{documentId:e.documentId,documentRunId:f});return m=(async()=>{var r,o;let a=[],s=[],A=!1,d=async()=>{let e=a.length;for(let{registrationIndex:e,node:t,teardown:r,host:n}of(C=!1,I.reverse()))try{let e=await r();for(let t of(j.push(...(null==e?void 0:e.reportSources)??[]),(0,u.H)(e)))R.add(t)}catch(r){if(n){let e=(0,l.rN)(r);T.push({phase:"cleanup",error:e}),M.push(e),s.push(r);continue}a.push(new i.Lu(r,{scope:"document",scopeId:f,node:t,registrationIndex:e}))}{let t=[...s,...a.slice(e)];if(t.length)throw AggregateError(t,"Document cleanup failed")}};try{e.lifecycle.afterAll.length||I.length||void 0!==t.setupTimeoutMs&&(0,c.CK)(S).length?await (0,c.Cv)(S,d,{totalTimeoutMs:null==(r=t.teardownTimeoutMs)?void 0:r.call(t),beforeCleanup:async e=>{try{T.some(e=>"setup"===e.phase)||await z("afterAll",b,e)}catch(e){M.push(e),s.push(e)}},onDeferredError:e=>(0,n.aZ)("runner:cleanup",{console:!0})(`Deferred document cleanup failed: ${String(e)}`)}):C=!1}catch(e){(A=e instanceof c.Gv)||(C=!1),A||a.length||s.length||a.push(new i.Lu(e,{scope:"document",scopeId:f,node:"resource-drain",registrationIndex:-1}))}h=D(a);try{await (null==(o=t.onResult)?void 0:o.call(t,h))}catch(e){M.push(e),h=D(a)}if(k.dispose(),M.length)throw new l.CW(h,[...M]);return h})()}}}},4130(e,t,r){"use strict";r.d(t,{I:()=>c});var n=r(584),o=r(27533);function i(e,t){if(void 0!==e){if("object"!=typeof e||null===e||Array.isArray(e))throw new n.h2(t,TypeError("Node output must be an object or undefined."));if("summary"in e&&void 0!==e.summary&&"string"!=typeof e.summary)throw new n.h2(t,TypeError("Node output summary must be a string."));return e}}function a(e,t,r,n){let o=new Date;return{node:e.node,phase:r,stepIndex:n,input:e.input,meta:e.meta,startedAt:t.toISOString(),endedAt:o.toISOString(),durationMs:Math.max(0,o.getTime()-t.getTime())}}async function s(e,t,r,s,l){let c,A,u,d=new Date,p=new AbortController,h=l.parentSignal;(0,o.XT)(p.signal,h),(0,o.Wl)(p.signal,l.identity);let m=(0,o.Px)(p.signal,l.onEvent),f=()=>p.abort(null==h?void 0:h.reason);(null==h?void 0:h.aborted)?f():null==h||h.addEventListener("abort",f,{once:!0});let g=e.meta.timeoutMs??l.defaultTimeoutMs,y=Promise.resolve().then(()=>(p.signal.throwIfAborted(),t(p.signal))),v=(0,o.rf)(y,p.signal,"node");(0,o.DL)({},y,p.signal,"node",v);let b="failed",w=new Promise((e,t)=>{u=()=>{A=setTimeout(()=>{t(p.signal.reason)},0)},p.signal.aborted?u():p.signal.addEventListener("abort",u,{once:!0})}),E=void 0===g?void 0:new Promise((t,r)=>{c=setTimeout(()=>{if(p.signal.aborted)return void r(p.signal.reason);let t=new n.o1(g,e.node);p.abort(t),r(t)},g)}),x=Promise.race([y,w,...void 0===E?[]:[E]]);try{let t=i(await x,e.node);return b="success",{...a(e,d,r,s),status:"success",continuedAfterError:!1,...void 0===t?{}:{output:t}}}catch(c){let t;if((0,o.kr)(c))return b="not-run",{node:e.node,phase:r,stepIndex:s,input:e.input,meta:e.meta,status:"not-run",notRunReason:c.message,...c.blockedBy?{blockedBy:c.blockedBy}:{},continuedAfterError:e.meta.continueOnError,error:c};let l=c;if(c instanceof n.h2&&void 0!==c.output)try{t=i(c.output,e.node)}catch(e){l=e}return{...a(e,d,r,s),status:"failed",continuedAfterError:e.meta.continueOnError,error:(0,n.au)(l,e.node),...void 0===t?{}:{output:t}}}finally{v.runnerReturned(b),m(),void 0!==c&&clearTimeout(c),void 0!==A&&clearTimeout(A),void 0!==u&&p.signal.removeEventListener("abort",u),null==h||h.removeEventListener("abort",f)}}async function l(e,t){if(!e.inputSchema)return t;let r=await e.inputSchema.safeParseAsync(t);if(!r.success)throw n.OL.fromZod(e.name,r.error);return r.data}async function c(e,t,r,o){var i,a,c;let A,u,d,p,h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},m="case"===r.scope?r.case.phase:r.document.phase,f="case"===r.scope?r.case.stepIndex:r.document.stepIndex,g=(i=e.node,A=new Map,u=[],d=!0,{collector:Object.freeze({onSnapshot(e){if(!d||"function"!=typeof e)throw new n.s8("A report snapshot callback must be registered while the Step is running.",{code:"REPORT_SNAPSHOT_REGISTRATION"});u.push(e)},addTrace(e){if(!d)throw new n.h2(i,Error("Report traces can only be added while the current Step is running."));if(!e||"object"!=typeof e||"midscene-execution"!==e.type)throw new n.h2(i,TypeError('Report trace type must be "midscene-execution".'));if("string"!=typeof e.executionId||0===e.executionId.trim().length)throw new n.h2(i,TypeError("Report trace executionId must be non-empty."));let t=Object.freeze({type:"midscene-execution",executionId:e.executionId,...e.metrics?{metrics:structuredClone(e.metrics)}:{}});A.set(`${t.type}:${t.executionId}`,t)}}),async close(){let e;d=!1;let t=Object.freeze([...A.values()]);if(!u.length)return Object.freeze({traces:t});let r=new AbortController,o=new Promise((t,o)=>{e=setTimeout(()=>{let e=new n.s8("Agent report snapshot collection timed out.",{code:"REPORT_SNAPSHOT_TIMEOUT",details:{timeoutMs:5e3}});r.abort(e),o(e)},5e3)}),i=await Promise.all(u.map(async e=>{try{var i,a;let n=await Promise.race([Promise.resolve().then(()=>e(r.signal,t)),o]);if(!n||"string"!=typeof n.sourcePath||!n.sourcePath.trim()||void 0!==n.dumpPath&&("string"!=typeof n.dumpPath||!n.dumpPath.trim()))throw Error("Agent report capture must return sourcePath and a valid optional dumpPath.");let s=n.dumpPath?n:{...n,collection:{status:"partial",capturedAt:(null==(i=n.collection)?void 0:i.capturedAt)??new Date().toISOString(),reason:(null==(a=n.collection)?void 0:a.reason)??"HTML report captures do not guarantee an immutable cutoff."}};return{source:Object.freeze({...s,...s.collection?{collection:Object.freeze({...s.collection})}:{}})}}catch(e){return{error:e instanceof n.s8?e:new n.s8(`Agent report snapshot collection failed: ${String(e)}`,{code:"REPORT_SNAPSHOT_FAILED",cause:e})}}}));void 0!==e&&clearTimeout(e);let a=i.flatMap(e=>e.source?[e.source]:[]),s=i.flatMap(e=>e.error?[e.error]:[]);return Object.freeze({traces:t,...a.length?{sources:Object.freeze(a)}:{},...s.length?{collectionErrors:Object.freeze(s)}:{}})}}),y=[],v="case"===r.scope?r.case.runId:r.document.documentRunId;try{p=await s(e,async i=>{let a=await l(t,e.input);i.throwIfAborted();let s={input:a,$:e.meta,signal:i,context:o,report:g.collector,onTeardown:t=>{if(!h.onTeardown)throw new n.h2(e.node,Error("The current execution scope cannot register teardown."));h.onTeardown(e.node,t)}};return"case"===r.scope?t.execute({...s,scope:"case",case:r.case}):t.execute({...s,scope:"document",document:r.document})},m,f,{parentSignal:h.signal,defaultTimeoutMs:h.defaultTimeoutMs,identity:{scopeId:v,stepId:`${v}:${m}:${f}`,node:e.node},onEvent:e=>y.push(e)})}finally{let e=await g.close();p&&(p={...p,operations:Object.freeze({capturedAt:new Date().toISOString(),events:Object.freeze([...y])})}),(e.traces.length||(null==(a=e.sources)?void 0:a.length)||(null==(c=e.collectionErrors)?void 0:c.length))&&p&&(p={...p,report:e})}if(!p)throw new n.h2(e.node,Error("Step execution completed without a result."));return p}},43545(e,t,r){"use strict";r.d(t,{CW:()=>a,gX:()=>s,rN:()=>l});var n=r(584);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let i=e=>e&&"object"==typeof e&&"message"in e&&"string"==typeof e.message?e.message:String(e);class a extends n.s8{constructor(e,t){super(t.map(i).join("; "),{code:"WORKFLOW_EXECUTION_FAILURE",cause:t[0]}),o(this,"result",void 0),o(this,"errors",void 0),this.result=e,this.errors=t}}class s extends n.s8{constructor(e,t,r){super(`Failed to ${e} at ${t}: ${r instanceof Error?r.message:String(r)}`,{code:"WORKFLOW_PUBLICATION_FAILED",details:{operation:e,path:t},cause:r})}}let l=e=>e instanceof n.s8?e:new n.s8(i(e),{code:"WORKFLOW_EXECUTION_FAILURE",cause:e})},92298(e,t,r){"use strict";r.d(t,{admitResourceOperation:()=>i.lJ,runWorkflowDocument:()=>n.o,trackResourceOperation:()=>i.DL,waitForResourceIdle:()=>i.TH}),r(68629),r(27430),r(20875),r(28492);var n=r(2909),o=r(25725);r.o(o,"waitForResourceIdle")&&r.d(t,{waitForResourceIdle:function(){return o.waitForResourceIdle}}),r.o(o,"defineNode")&&r.d(t,{defineNode:function(){return o.defineNode}}),r.o(o,"admitResourceOperation")&&r.d(t,{admitResourceOperation:function(){return o.admitResourceOperation}}),r.o(o,"trackResourceOperation")&&r.d(t,{trackResourceOperation:function(){return o.trackResourceOperation}}),r(58666),r(4130),r(47339),r(43545);var i=r(27533)},58666(e,t,r){"use strict";r(584),r(27533),r(69087),r(85409)},20875(e,t,r){"use strict";r(584),r(38042)},27533(e,t,r){"use strict";r.d(t,{$G:()=>D,CK:()=>b,Cv:()=>L,DL:()=>T,Gv:()=>z,Jo:()=>v,Px:()=>S,TH:()=>N,Wl:()=>I,XT:()=>E,d5:()=>k,kr:()=>j,lJ:()=>P,ni:()=>w,oL:()=>F,rf:()=>O});var n=r(64565),o=r(19152),i=r(584),a=r(57073);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let l=Symbol.for("@midscene/core/resource-admission-error"),c=Symbol.for("@midscene/core/resource-operations/v4"),A=globalThis;A[c]??(A[c]={resources:new WeakMap,scopes:new WeakMap,parents:new WeakMap,cleanupOwners:new WeakMap,identities:new WeakMap,listeners:new WeakMap});let{resources:u,scopes:d,parents:p,cleanupOwners:h,identities:m,listeners:f}=A[c],g=e=>{let t=u.get(e);return t||(t={operations:new Map,retiring:new Set},u.set(e,t)),t};function y(e){let t=new Map,r=new Set,n=e=>{if(!r.has(e))for(let o of(r.add(e),e.settled||t.set(e.operationId,{operationId:e.operationId,...e.identity}),e.blockers??[]))n(o)};for(let t of e)n(t);return[...t.values()]}function v(e){var t;let r=null==(t=u.get(e))?void 0:t.cleanupState;return C({capturedAt:new Date().toISOString(),status:(null==r?void 0:r.status)??"not-required",...(null==r?void 0:r.operationId)?{operationId:r.operationId}:{},...(null==r?void 0:r.status)==="pending"?{blockingOperations:y(r.blockers)}:{},...(null==r?void 0:r.error)===void 0?{}:{error:(0,a.EQ)(r.error)}})}function b(e){var t;return C(y([...(null==(t=d.get(e))?void 0:t.operations.keys())??[]].flatMap(e=>{var t;return[...(null==(t=u.get(e))?void 0:t.operations.values())??[]]})))}let w=e=>{var t;return((null==(t=u.get(e))?void 0:t.operations.size)??0)>0};function E(e,t){t&&t!==e&&p.set(e,t)}function*x(e){let t=new Set;for(let r=e;r&&!t.has(r);r=p.get(r))t.add(r),yield r}function k(e){let t=new AbortController,r={operations:new Map,resources:new Set};d.set(t.signal,r),E(t.signal,e);let n=()=>t.abort(null==e?void 0:e.reason);return(null==e?void 0:e.aborted)?n():null==e||e.addEventListener("abort",n,{once:!0}),{signal:t.signal,abort(e){t.abort(e)},dispose(){null==e||e.removeEventListener("abort",n),r.resources=void 0,r.operations.size||d.delete(t.signal)}}}function S(e,t){let r=f.get(e)??new Set;return f.set(e,r),r.add(t),()=>{r.delete(t),r.size||f.delete(e)}}function I(e,t){m.set(e,Object.freeze({...t}))}function C(e){if("object"==typeof e&&null!==e&&!Object.isFrozen(e)){for(let t of Object.values(e))C(t);Object.freeze(e)}return e}function O(e,t,r){let i=[...x(t)],s=i.map(e=>m.get(e)).find(Boolean),l={signal:t,operationId:(0,o.uR)(),identity:s},c=new Set(i.flatMap(e=>[...f.get(e)??[]])),A=!1,u=e=>{let t=C({...s,operationId:l.operationId,operationKind:r,at:new Date().toISOString(),...e});for(let e of c)try{e(t)}catch(e){(0,n.aZ)("runner:operations",{console:!0})(`Operation observer failed: ${String(e)}`)}},d=()=>u({kind:"cancel-requested",error:(0,a.EQ)(t.reason)});u({kind:"started"}),t.aborted?d():t.addEventListener("abort",d,{once:!0});let p=(e,r)=>{A=!0,l.settled=!0,t.removeEventListener("abort",d),u({kind:"settled",status:e,..."success"!==e?{error:(0,a.EQ)(r)}:{}})};return e.then(()=>p("success"),e=>p(j(e)?"not-run":"failed",e)),{record:l,runnerReturned(e){u({kind:"runner-returned",status:e,pending:!A})},cleanupDeferred(e){u({kind:"cleanup-deferred",blockingOperations:y(e)})}}}class R extends i.s8{constructor(e,t){var r,n;super("The Agent is occupied by an unfinished operation or pending cleanup; this action was not started.",{code:e,details:{blockingOperations:t.map(e=>{let{operationId:t,identity:r}=e;return{operationId:t,...r}})}}),s(this,"blockedBy",void 0),s(this,l,!0),this.blockedBy=null==(n=t.find(e=>{var t;return null==(t=e.identity)?void 0:t.stepId}))||null==(r=n.identity)?void 0:r.stepId}}function j(e){return"object"==typeof e&&null!==e&&!0===e[l]}function P(e,t){let r,n=!(arguments.length>2)||void 0===arguments[2]||arguments[2];try{r=function(e){var t,r;let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2?arguments[2]:void 0,a=null==(t=u.get(e))?void 0:t.retiring,s=[...x(o)].some(e=>{let t=h.get(e);return void 0!==t&&(null==a?void 0:a.has(t))});if((null==a?void 0:a.size)&&!s)throw new i.s8("A resource cannot execute overlapping Runner operations while its cleanup is pending.",{code:"RESOURCE_CLEANUP_PENDING"});let l=null==(r=u.get(e))?void 0:r.operations;if(n&&(null==l?void 0:l.size))throw new i.s8("The same Agent instance cannot execute overlapping Runner operations.",{code:"RESOURCE_OPERATION_PENDING"});if(l&&[...l.values()].some(e=>e.signal.aborted))throw new i.s8("Cannot reuse an Agent while an aborted YAML action or Runner operation is still running.",{code:"RESOURCE_OPERATION_PENDING"});return s}(e,n,t)}catch(t){var o,a;if(t instanceof i.s8&&["RESOURCE_OPERATION_PENDING","RESOURCE_CLEANUP_PENDING"].includes(t.code))throw new R(t.code,[...(null==(o=u.get(e))?void 0:o.operations.values())??[],...[...(null==(a=u.get(e))?void 0:a.retiring)??[]].flatMap(e=>[...e.blockers])]);throw t}return r}let M=(e,t)=>{e.resources.add(t);let r=g(t);for(let t of r.operations.values())e.blockers.add(t);r.retiring.add(e)};function T(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"resource",o=arguments.length>4?arguments[4]:void 0,i=o??O(t,r,n),a=g(e).operations;a.set(t,i.record);let s=[],l=!1;for(let t of x(r)){let r=d.get(t)??{operations:new Map};d.set(t,r),r.operations.set(e,(r.operations.get(e)??0)+1),s.push([t,r]),!l&&r.resources&&(r.resources.add(e),l=!0);let n=h.get(t);n&&(n.blockers.add(i.record),M(n,e))}let c=()=>{for(let[r,n]of(a.delete(t),s)){let t=n.operations.get(e)-1;t?n.operations.set(e,t):n.operations.delete(e),n.operations.size||n.resources||d.delete(r)}};return t.then(c,c),t}async function N(e){for(var t,r;null==(r=u.get(e))||null==(t=r.operations)?void 0:t.size;)await Promise.allSettled([...u.get(e).operations.keys()])}async function D(e){let t,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3e4;e.throwIfAborted();let o=Date.now(),a=()=>{var t,r;let n=[];for(let o of(null==(t=d.get(e))?void 0:t.operations.keys())??[])for(let[t,i]of(null==(r=u.get(o))?void 0:r.operations)??[]){let r=i.signal;r.aborted&&[...x(r)].includes(e)&&n.push({operation:t,signal:r,resource:o,record:i})}return n},s=a();if(!s.length)return 0;let l=new Promise((a,l)=>{r=()=>l(e.reason),e.addEventListener("abort",r,{once:!0}),t=setTimeout(()=>{var e,t;let r=y(s.map(e=>{let{record:t}=e;return t})),a=r.every(e=>{var t;let{stepId:n}=e;return n===(null==(t=r[0])?void 0:t.stepId)})?null==(e=r[0])?void 0:e.stepId:void 0;l(new i.s8(`The previous operation was still running after ${n/1e3} s. Later steps were not started.`,{code:"RESOURCE_RECOVERY_TIMEOUT",details:{graceMs:n,waitedMs:Date.now()-o,resourceCount:new Set(s.map(e=>{let{resource:t}=e;return t})).size,blockingOperations:r,blockedByStepId:a},cause:null==(t=s[0])?void 0:t.signal.reason}))},n)});try{for(;s.length;)await Promise.race([Promise.allSettled(s.map(e=>{let{operation:t}=e;return t})),l]),e.throwIfAborted(),s=a();return Date.now()-o}finally{clearTimeout(t),e.removeEventListener("abort",r)}}class z extends i.s8{constructor(e,t,r=[]){super(`Resource cleanup did not finish within ${e}ms. Resources remain quarantined until cleanup settles.`,{code:"RESOURCE_CLEANUP_DEFERRED",details:{graceMs:e,resourceCount:t,blockingOperations:r.map(e=>{let{operationId:t,identity:r}=e;return{operationId:t,...r}})}})}}async function B(e,t,r,n){let o,a,s={resources:new Set,blockers:new Set,signal:null==n?void 0:n.signal};for(let t of e)M(s,t);s.signal&&h.set(s.signal,s);let l=r.signal?d.get(r.signal):void 0;l&&(l.cleanupOwner=s);let c=new Promise(e=>{o=()=>{void 0!==r.totalTimeoutMs&&(null==n||n.abort(new i.s8(`Resource cleanup timed out after ${r.totalTimeoutMs}ms.`,{code:"TEARDOWN_TIMEOUT",details:{timeoutMs:r.totalTimeoutMs}}))),e({deferred:!0})}}),A=r.totalTimeoutMs??r.graceMs??1e3,u=async()=>{void 0===r.totalTimeoutMs&&(a=setTimeout(o,A));try{for(;;){let e=[...s.resources].filter(e=>g(e).operations.size);if(!e.length)return;await Promise.all(e.map(N))}}finally{void 0===r.totalTimeoutMs&&clearTimeout(a)}},p=(async()=>{void 0!==r.totalTimeoutMs&&(a=setTimeout(o,Math.max(0,r.totalTimeoutMs)));try{return n&&await n.run(n.signal),await u(),void 0===r.totalTimeoutMs&&(A=r.graceMs??1e4,a=setTimeout(o,A)),await t()}finally{for(let e of(clearTimeout(a),s.signal&&h.delete(s.signal),(null==l?void 0:l.cleanupOwner)===s&&(l.cleanupOwner=void 0),s.resources))g(e).retiring.delete(s)}})(),m=r.signal?O(p,r.signal,"cleanup"):void 0,f=r.owner??(null==n?void 0:n.signal)??e[0],y={status:"pending",operationId:null==m?void 0:m.record.operationId,blockers:s.blockers};m&&(m.record.blockers=s.blockers),f&&(g(f).cleanup=p,g(f).cleanupState=y),p.then(()=>{y.status="completed"},e=>{y.status="failed",y.error=e});let v=await Promise.race([p.then(e=>({value:e})),c]);if("deferred"in v)throw null==m||m.cleanupDeferred(s.blockers),p.catch(e=>{try{r.onDeferredError(e)}catch{}}),r.signal&&T({},p,r.signal,"cleanup",m),new z(A,s.resources.size,[...s.blockers]);return v.value}function F(e,t,r){return B(e,t,r)}async function L(e,t,r){let n=new AbortController,o=n.signal;E(o,e);let i=d.get(e);return B([...(null==i?void 0:i.resources)??[],...(null==i?void 0:i.operations.keys())??[]],t,{...r,owner:e,signal:e},r.beforeCleanup?{signal:o,abort:e=>n.abort(e),run:r.beforeCleanup}:void 0)}},21749(e,t,r){"use strict";function n(e,t){let r=t.filter(e=>"not-run"!==e.status).length;return{plannedStepCount:e,executedStepCount:r,status:0===e?"not-required":t.some(e=>"failed"===e.status)?"failed":r<e?"not-run":"success"}}function o(e){let t=e.infrastructureError?"infrastructure-error":e.cleanupPending?"cleanup-pending":e.cleanupFailed?"cleanup-failed":e.operationPending?"operation-pending":e.fatalError?"fatal-error":e.interrupted?"interrupted":e.shouldStop?"bail":"success"===e.status?"passed":e.attemptIndex>=e.retryCount?"budget-exhausted":"attempt-failed";return{scope:e.scope,retryCount:e.retryCount,attemptIndex:e.attemptIndex,decision:"attempt-failed"===t?"retry":"stop",reason:t}}r.d(t,{V:()=>n,t:()=>o})},28492(e,t,r){"use strict";r.d(t,{V:()=>u});var n=r(64565),o=r(19152),i=r(584),a=r(4130),s=r(43545),l=r(27533),c=r(21749),A=r(47339);async function u(e,t){var r,u,d;let p={beforeEach:t.beforeEach??[],steps:e.definition.steps,afterEach:t.afterEach??[]},h={beforeEach:p.beforeEach.map(e=>t.resolveNode(e.node)),steps:p.steps.map(e=>t.resolveNode(e.node)),afterEach:p.afterEach.map(e=>t.resolveNode(e.node))},m=(0,l.d5)(t.signal),f=m.signal,g=(null==(r=t.createRunId)?void 0:r.call(t))??(0,o.uR)(),y=new Date;(0,l.Wl)(f,{scopeId:g});let v=[],b=[],w=[],E=new Map,x=[],k=!0,S=(e,t)=>{if(!k)throw new i.Uu("Node teardown can only be registered while a case attempt is running.",{runId:g,node:e});if("function"!=typeof t)throw new i.Uu("Node onTeardown() requires a teardown function.",{runId:g,node:e});x.push({registrationIndex:x.length,node:e,teardown:t})},I=async function(r,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;for(let[A,u]of p[r].entries()){var i,s,c;let d=A>0?await (0,l.$G)(o):0,m={caseId:e.caseId,runId:g,projectName:t.projectName??e.projectId,attemptIndex:t.attemptIndex??0,name:e.definition.name,sourcePath:e.sourcePath,caseIndex:e.caseIndex,phase:r,stepIndex:A},f={scope:"case",node:u.node,stepCount:p[r].length,case:m};await (null==(i=t.onStepStart)?void 0:i.call(t,f));let y=await (0,a.I)(u,h[r][A],{scope:"case",case:m},t.context,{signal:o,defaultTimeoutMs:t.defaultTimeoutMs,onTeardown:S});for(let e of(d>0&&(y.waitForPreviousOperationMs=d),n.push(y),(null==(s=y.report)?void 0:s.sources)??[]))E.set(`${e.sourcePath}\u0000${e.dumpPath??""}`,e);if(await (null==(c=t.onStepResult)?void 0:c.call(t,f,y)),"success"!==y.status&&!y.continuedAfterError)break}},C=[];try{await I("beforeEach",v),v.some(e=>"success"!==e.status)||await I("steps",b)}catch(e){C.push(e)}let O=[],R=new Set,j=[],P=[],M=!1,T=async()=>{let e=O.length;for(let{registrationIndex:e,node:t,teardown:r}of(k=!1,x.reverse()))try{let e=await r();for(let t of(j.push(...(null==e?void 0:e.reportSources)??[]),(0,A.H)(e)))R.add(t)}catch(r){O.push(new i.Lu(r,{scope:"case",scopeId:g,node:t,registrationIndex:e}))}{let t=[...P,...O.slice(e)];if(t.length)throw AggregateError(t,"Case cleanup failed")}};try{p.afterEach.length||x.length?await (0,l.Cv)(f,T,{totalTimeoutMs:null==(u=t.teardownTimeoutMs)?void 0:u.call(t),beforeCleanup:async e=>{try{await I("afterEach",w,e)}catch(e){C.push(e),P.push(e)}},onDeferredError:e=>(0,n.aZ)("runner:cleanup",{console:!0})(`Deferred Case cleanup failed: ${String(e)}`)}):k=!1}catch(e){(M=e instanceof l.Gv)||(k=!1),M||O.length||P.length||O.push(new i.Lu(e,{scope:"case",scopeId:g,node:"resource-drain",registrationIndex:-1}))}let N=new Date,D=(0,l.Jo)(f),z=(0,l.CK)(f),B={beforeEach:(0,c.V)(p.beforeEach.length,v),steps:(0,c.V)(p.steps.length,b),afterEach:(0,c.V)(p.afterEach.length,w)},F={caseId:e.caseId,runId:g,projectName:t.projectName??e.projectId,attemptIndex:t.attemptIndex??0,name:e.definition.name,sourcePath:e.sourcePath,caseIndex:e.caseIndex,status:C.length>0||v.some(e=>"success"!==e.status)||b.some(e=>"success"!==e.status)||w.some(e=>"success"!==e.status)||"pending"===D.status||"failed"===D.status||z.length>0||O.length>0?"failed":"success",beforeEach:[...v],steps:[...b],afterEach:[...w],executionStatus:Object.values(B).some(e=>"failed"===e.status)?"failed":Object.values(B).some(e=>"not-run"===e.status)?"not-run":"success",phases:B,cleanup:D,...z.length?{pendingOperations:z}:{},...C.length?{executionErrors:C.map(s.rN)}:{},...O.length>0?{teardownErrors:[...O]}:{},...R.size>0?{reportPaths:[...R]}:{},...E.size||j.length?{reportSources:[...E.values(),...j]}:{},...t.reportScopeId?{reportScopeId:t.reportScopeId}:{},startedAt:y.toISOString(),endedAt:N.toISOString(),durationMs:Math.max(0,N.getTime()-y.getTime())};try{await (null==(d=t.onResult)?void 0:d.call(t,F))}catch(e){C.push(e),F.status="failed",F.executionErrors=C.map(s.rN)}if(m.dispose(),C.length)throw new s.CW(F,C);return F}},2909(e,t,r){"use strict";r.d(t,{o:()=>A});var n=r(584),o=r(73840),i=r(27430),a=r(43545),s=r(21749),l=r(28492);let c=(e,t,r)=>({caseId:e.caseId,projectName:t,name:e.definition.name,sourcePath:e.sourcePath,caseIndex:e.caseIndex,...e.definition.onFailure?{onFailure:e.definition.onFailure}:{},status:"not-run",notRunReason:r});async function A(e,t){var r,A,u,d,p,h,m,f,g,y,v,b,w,E,x,k,S,I;let C,O,R=t.signal??new AbortController().signal,j=t.createDocumentRunId,P=t.createCaseRunId,M=(null==(r=t.project)?void 0:r.name)??e.projectId,T=t.retry??(null==(A=t.project)?void 0:A.retry)??0;if(!Number.isInteger(T)||T<0)throw TypeError("Workflow document retry must be a non-negative integer.");let N=(0,i.U)(e,{plan:t.plan??(0,o.V)(e,{defaultTimeoutMs:t.defaultTimeoutMs,retry:{scope:"case",count:T}}),documentSetup:t.documentSetup,setupTimeoutMs:t.setupTimeoutMs,teardownTimeoutMs:t.teardownTimeoutMs,documentAttemptIndex:t.documentAttemptIndex,resolveNode:t.resolveNode,project:t.project,projectContext:t.projectContext,signal:R,defaultTimeoutMs:t.defaultTimeoutMs,onStepStart:t.onStepStart,onStepResult:t.onStepResult,onResult:async e=>{var r,n,o;await (null==(n=t.documentSetup)||null==(r=n.onDocumentResult)?void 0:r.call(n,e,N.context)),await (null==(o=t.onDocumentResult)?void 0:o.call(t,e))},createDocumentRunId:j?()=>j(e):void 0}),D=[],z=!1,B=[],F=!1;try{z=!0;let r=await N.start();if(N.canRunCases)for(let o of e.cases){if(O||F||R.aborted||(null==(u=t.shouldStop)?void 0:u.call(t))){let e=c(o,M,R.aborted?(null==(m=t.stopReason)?void 0:m.call(t))??"interrupted":F?"fatal-error":O??(null==(f=t.stopReason)?void 0:f.call(t))??"interrupted");D.push(e),await (null==(g=t.onCaseOutcome)?void 0:g.call(t,e));continue}await (null==(d=t.onCaseStart)?void 0:d.call(t,o));let i=[];for(let c=0;c<=T;c+=1){let A,u=!1,d=await (0,l.V)(o,{resolveNode:t.resolveNode,beforeEach:e.lifecycle.beforeEach,afterEach:e.lifecycle.afterEach,context:N.context,projectName:M,attemptIndex:c,signal:N.signal,defaultTimeoutMs:t.defaultTimeoutMs,teardownTimeoutMs:t.teardownTimeoutMs,onStepStart:t.onStepStart,onStepResult:t.onStepResult,onResult:async e=>{var r,o,i,a,l,A,d,p;u=(null==(r=t.isFatalError)?void 0:r.call(t,e))??!1,e.retryDecision=(0,s.t)({scope:"case",retryCount:T,attemptIndex:c,status:e.status,cleanupPending:(null==(o=e.cleanup)?void 0:o.status)==="pending",operationPending:!!(null==(i=e.pendingOperations)?void 0:i.length),cleanupFailed:(null==(a=e.cleanup)?void 0:a.status)==="failed"||!!(null==(l=e.teardownErrors)?void 0:l.length),infrastructureError:null==(A=e.executionErrors)?void 0:A.some(e=>!(0,n.iK)(e)),fatalError:u,interrupted:R.aborted,shouldStop:null==(d=t.shouldStop)?void 0:d.call(t)}),await (null==(p=t.onCaseResult)?void 0:p.call(t,e))},reportScopeId:null==(y=t.resolveCaseReportScopeId)?void 0:y.call(t,o,c,r.documentRunId),createRunId:P?()=>P(o,c):void 0}).catch(e=>{if(!(e instanceof a.CW))throw e;return(A=e).result});if(i.push(d),A&&!A.errors.every(n.iK))throw d.retryDecision=(0,s.t)({scope:"case",retryCount:T,attemptIndex:c,status:d.status,infrastructureError:!0}),D.push({caseId:o.caseId,projectName:M,name:o.definition.name,sourcePath:o.sourcePath,caseIndex:o.caseIndex,...o.definition.onFailure?{onFailure:o.definition.onFailure}:{},status:"failed",run:d,attempts:i}),A;if(F=u,d.retryDecision=(0,s.t)({scope:"case",retryCount:T,attemptIndex:c,status:d.status,cleanupPending:(null==(v=d.cleanup)?void 0:v.status)==="pending",cleanupFailed:(null==(b=d.cleanup)?void 0:b.status)==="failed"||!!(null==(w=d.teardownErrors)?void 0:w.length),operationPending:!!(null==(E=d.pendingOperations)?void 0:E.length),fatalError:F||!!(null==(x=d.executionErrors)?void 0:x.some(n.iK)),interrupted:R.aborted,shouldStop:null==(k=t.shouldStop)?void 0:k.call(t)}),(null==(S=d.retryDecision)?void 0:S.decision)!=="retry")break}let A=i.at(-1),I={caseId:o.caseId,projectName:M,name:o.definition.name,sourcePath:o.sourcePath,caseIndex:o.caseIndex,...o.definition.onFailure?{onFailure:o.definition.onFailure}:{},status:A.status,run:A,attempts:i};D.push(I);let C=null==(p=A.retryDecision)?void 0:p.reason;O="cleanup-pending"===C||"cleanup-failed"===C||"operation-pending"===C||"fatal-error"===C?C:"failed"===I.status&&"stop-document"===o.definition.onFailure?"bail":void 0,await (null==(h=t.onCaseOutcome)?void 0:h.call(t,I))}else{let r=R.aborted?(null==(I=t.stopReason)?void 0:I.call(t))??"interrupted":"document-start-failed";D.push(...e.cases.map(e=>c(e,M,r)))}}catch(e){B.push(...e instanceof a.CW?e.errors:[e])}finally{if(z)try{C=await N.finish()}catch(e){if(e instanceof a.CW)for(let t of(C=e.result,e.errors))B.includes(t)||B.push(t);else B.push(e)}}if(!C){if(B.length)throw AggregateError(B,"Workflow execution did not produce a document result.");throw Error(`Workflow document "${e.sourcePath}" did not produce a result.`)}if(B.length){let t=new Set(D.map(e=>e.caseId));throw D.push(...e.cases.filter(e=>!t.has(e.caseId)).map(e=>c(e,M,B.every(n.iK)?"operation-pending":"interrupted"))),C.status="failed",C.executionErrors=B.filter(e=>{var t;return!(null==(t=C.hostErrors)?void 0:t.some(t=>t.error===e))}).map(a.rN),new a.CW({document:C,cases:D},B)}return{document:C,cases:D}}},47339(e,t,r){"use strict";r.d(t,{H:()=>o});var n=r(13078);let o=e=>{if(void 0===e)return[];if("object"!=typeof e||null===e||Array.isArray(e))throw TypeError("Node teardown result must be an object or undefined.");let t=e.reportPaths;if(void 0===t)return[];if(!Array.isArray(t))throw TypeError("Node teardown reportPaths must be an array.");return t.map((e,t)=>{if("string"!=typeof e||0===e.trim().length)throw TypeError(`Node teardown reportPaths[${t}] must be a non-empty string.`);if(!(0,n.isAbsolute)(e))throw TypeError(`Node teardown reportPaths[${t}] must be an absolute path.`);return e})}},69087(e,t,r){"use strict";r.d(t,{q:()=>i});var n=r(584),o=r(27533);async function i(e,t,r,i){let a,s;if(void 0===i)return e();t.throwIfAborted();let l=Promise.resolve().then(e);(0,o.DL)({},l,t);let c=new Promise((e,o)=>{s=()=>o(t.reason),t.addEventListener("abort",s,{once:!0}),a=setTimeout(()=>{r(new n.s8(`Environment setup timed out after ${i}ms.`,{code:"SETUP_TIMEOUT",details:{timeoutMs:i}}))},i)});try{return await Promise.race([l,c])}finally{clearTimeout(a),t.removeEventListener("abort",s)}}},25725(){},584(e,t,r){"use strict";r.d(t,{Lu:()=>d,OL:()=>l,Uu:()=>u,au:()=>p,h2:()=>A,iK:()=>m,o1:()=>c,s8:()=>a,ww:()=>s});var n=r(57073);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let i=Symbol.for("@midscene/core/workflow-error");class a extends Error{toJSON(){return{...(0,n.EQ)(this)}}constructor(e,t={}){super(e,{cause:t.cause}),o(this,i,!0),o(this,"code",void 0),o(this,"details",void 0),this.name=new.target.name,this.code=t.code??"WORKFLOW_ERROR",this.details=t.details}}class s extends a{constructor(e,t){super(e,{code:"NODE_DEFINITION_ERROR",details:t})}}class l extends a{static fromZod(e,t){let r=t.issues.map(e=>({code:e.code,path:e.path.map(String).join("."),message:e.message})),n=r[0],o=(null==n?void 0:n.path)||"<root>",i=(null==n?void 0:n.message)??"invalid input";return new l(`Node "${e}" input validation failed at "${o}": ${i}`,{node:e,issues:r})}constructor(e,t){super(e,{code:"NODE_INPUT_VALIDATION_ERROR",details:t})}}class c extends a{constructor(e,t){super(t?`Node "${t}" timed out after ${e}ms.`:`Step timed out after ${e}ms.`,{code:"STEP_TIMEOUT",details:{timeoutMs:e,...void 0===t?{}:{node:t}}}),o(this,"timeoutMs",void 0),o(this,"node",void 0),this.timeoutMs=e,this.node=t}}class A extends a{constructor(e,t,r){super(`Node "${e}" failed: ${t instanceof Error?t.message:String(t??"Unknown error")}`,{code:"NODE_EXECUTION_ERROR",details:{node:e},cause:t}),o(this,"output",void 0),o(this,"node",void 0),this.output=r,this.node=e}}class u extends a{constructor(e,t){super(e,{code:"WORKFLOW_LIFECYCLE_ERROR",details:t})}}class d extends a{constructor(e,t){super(`${"case"===t.scope?"Case attempt":"Workflow document"} node teardown failed for "${t.node}": ${e instanceof Error?e.message:String(e??"Unknown error")}`,{code:"NODE_SCOPE_TEARDOWN_ERROR",details:t,cause:e})}}function p(e,t){return h(e)?e:new A(t,e)}function h(e){return"object"==typeof e&&null!==e&&!0===e[i]}let m=e=>h(e)&&"RESOURCE_RECOVERY_TIMEOUT"===e.code},70875(e,t,r){"use strict";r.d(t,{admitResourceOperation:()=>n.admitResourceOperation,defineNode:()=>o.defineNode,runWorkflowDocument:()=>n.runWorkflowDocument,trackResourceOperation:()=>n.trackResourceOperation,waitForResourceIdle:()=>n.waitForResourceIdle});var n=r(92298);r.o(n,"defineNode")&&r.d(t,{defineNode:function(){return n.defineNode}}),r(584);var o=r(10852);r(58188),r(38015)},38042(e,t,r){"use strict";r.d(t,{E:()=>a});var n=r(64564),o=r(584);let i=(e,t,r)=>{if(void 0!==e&&("string"!=typeof e||0===e.trim().length))throw new o.ww(`Node "${r}" ${t} must be a non-empty string.`,{node:r,field:t})};function a(e){if(!e||"object"!=typeof e)throw new o.ww("Node definition must be an object.");if("string"!=typeof e.name||0===e.name.trim().length)throw new o.ww("Node name must be a non-empty string.");if(i(e.title,"title",e.name),i(e.description,"description",e.name),void 0!==e.stringInputKey&&!1!==e.stringInputKey&&("string"!=typeof e.stringInputKey||0===e.stringInputKey.trim().length))throw new o.ww(`Node "${e.name}" stringInputKey must be a non-empty string or false.`,{node:e.name,field:"stringInputKey"});var t=e.inputSchema,r=e.name;if(void 0!==t){if(!(t instanceof n.bv))throw new o.ww(`Node "${r}" inputSchema must be a Zod object schema.`,{node:r,field:"inputSchema"});if("$"in t.shape)throw new o.ww(`Node "${r}" inputSchema must not declare "$" as an input property.`,{node:r,field:"inputSchema.$"})}if("string"==typeof e.stringInputKey&&e.inputSchema instanceof n.bv&&!(e.stringInputKey in e.inputSchema.shape))throw new o.ww(`Node "${e.name}" stringInputKey must reference a field in inputSchema.`,{node:e.name,field:"stringInputKey"});if("function"!=typeof e.execute)throw new o.ww(`Node "${e.name}" must provide an execute function.`,{node:e.name});return e}},10852(e,t,r){"use strict";r.d(t,{defineNode:()=>n.E});var n=r(38042)},58188(e,t,r){"use strict";r(584)},56339(e,t,r){"use strict";r.d(t,{Y:()=>i,p:()=>o});var n=r(33675);function o(e){let t=(0,n.l)(e),r=e.executions.flatMap(e=>e.tasks),o=e=>!!e&&Object.values(e).some(e=>null!=e),i=r.flatMap(e=>[e.usage,e.searchAreaUsage].filter(o)),a=r.some(e=>{var t;return(null==(t=e.timing)?void 0:t.callAiStart)!==void 0&&("pending"===e.status||"running"===e.status)}),s=r.some(e=>{var t;return(null==(t=e.timing)?void 0:t.callAiStart)!==void 0&&!o(e.usage)}),l=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0,c=i.filter(e=>l(e.time_cost)).length,A=i.filter(e=>l(e.total_tokens)||l(e.prompt_tokens)&&l(e.completion_tokens)).length,u=[];a&&u.push("A model request was still running when usage was captured."),s&&u.push("A model request started but its usage was not recorded."),c<i.length&&u.push("Some model usage records do not include request duration."),A<i.length&&u.push("Some model usage records do not include token counts.");let d=(e,t)=>t?e>0?"partial":"unknown":"complete",p={modelCallCount:d(t.timing.modelCallCount,a||s),modelTimeMs:d(c,a||s||c<i.length),totalTokens:d(A,a||s||A<i.length)};return{modelCallCount:t.timing.modelCallCount,modelTimeMs:t.timing.modelCallTimeMs,...t.tokens,collection:{status:u.length?t.timing.modelCallCount>0?"partial":"unknown":"complete",expectedExecutionCount:0,capturedExecutionCount:0,reasons:u,fields:p}}}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={modelCallCount:0,modelTimeMs:0,promptTokens:0,cachedInputTokens:0,completionTokens:0,totalTokens:0};for(let t of e)for(let e of Object.keys(r))"collection"!==e&&(r[e]+=t[e]);let n=Object.fromEntries(["modelCallCount","modelTimeMs","totalTokens"].map(r=>{let n=e.map(e=>{var t,n,o;return(null==(n=e.collection)||null==(t=n.fields)?void 0:t[r])??(null==(o=e.collection)?void 0:o.status)??"complete"});return t.length&&n.push("unknown"),[r,n.every(e=>"complete"===e)?"complete":n.every(e=>"unknown"===e)?"unknown":"partial"]}));return r.collection={status:Object.values(n).every(e=>"complete"===e)?"complete":Object.values(n).every(e=>"unknown"===e)?"unknown":"partial",fields:n,expectedExecutionCount:0,capturedExecutionCount:0,reasons:[...new Set([...e.flatMap(e=>{var t;return(null==(t=e.collection)?void 0:t.reasons)??[]}),...t])]},r}},57073(e,t,r){"use strict";r.d(t,{EQ:()=>c,pA:()=>l,pT:()=>s});let n=["password","passwd","secret","token","authorization","cookie","apikey"],o=e=>{let t=e.toLowerCase().replace(/[^a-z0-9]/g,"");return n.some(e=>t.includes(e))},i=(e,t)=>/^[A-Za-z_$][\w$]*$/.test(t)?`${e}.${t}`:`${e}[${JSON.stringify(t)}]`,a=e=>new TextEncoder().encode(e).byteLength;function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3;return e.length<=t?e:`${e.slice(0,t)}… [truncated]`}function l(e){let t=new Set,r=new Set,n=new WeakSet,s=65536,l=(e,r)=>(s-=a(r))>=0||(t.add(e),!1),c=(e,a,A)=>{if(s<=0)return t.add(a),"[Truncated: size limit]";if(null===e||"boolean"==typeof e)return l(a,String(e)),e;if("string"==typeof e){if(e.length>2e3){t.add(a);let r=`${e.slice(0,2e3)}… [truncated]`;return l(a,r),r}return l(a,e),e}if("number"==typeof e)return Number.isFinite(e)?(l(a,String(e)),e):(t.add(a),`[Unsupported number: ${String(e)}]`);if("bigint"==typeof e)return t.add(a),`[Unsupported bigint: ${String(e)}]`;if(void 0===e||"function"==typeof e||"symbol"==typeof e)return t.add(a),`[Unsupported ${typeof e}]`;if(A>=6)return t.add(a),"[Truncated: maximum depth]";if(e instanceof Date){let t=Number.isNaN(e.getTime())?"[Invalid Date]":e.toISOString();return l(a,t),t}if(n.has(e))return t.add(a),"[Unsupported circular value]";if(Array.isArray(e)){n.add(e);let r=[],o=Math.min(e.length,50);for(let t=0;t<o&&!(s<=0);t+=1)r.push(c(e[t],`${a}[${t}]`,A+1));return e.length>r.length&&t.add(a),n.delete(e),r}let u=Object.getPrototypeOf(e);if(u!==Object.prototype&&null!==u){var d;t.add(a);let r=(null==(d=e.constructor)?void 0:d.name)??"object";return`[Unsupported object: ${r}]`}n.add(e);let p={},h=Object.keys(e);for(let t of h.slice(0,50)){let n=i(a,t);if(!l(n,t)||(o(t)?(p[t]="[REDACTED]",r.add(n)):p[t]=c(e[t],n,A+1),s<=0))break}return h.length>Object.keys(p).length&&t.add(a),n.delete(e),p},A=c(e,"$",0),u=JSON.stringify(A);return void 0===u||a(u)>65536?{value:"[Truncated: display value exceeded 64 KiB]",truncatedPaths:["$"]}:{value:A,...t.size>0?{truncatedPaths:[...t]}:{},...r.size>0?{redactedPaths:[...r]}:{}}}function c(e){let t=e=>e.replace(/\bBearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer [REDACTED]").replace(/(https?:\/\/)[^\s/@]+:[^\s/@]+@/gi,"$1[REDACTED]@").replace(/(["']?\b(?:password|passwd|secret|token|authorization|cookie|api[_-]?key)\b["']?\s*[:=]\s*)(?:\[REDACTED\]|"[^"]*"|'[^']*'|[^\s,;}\]]+)/gi,"$1[REDACTED]"),r=new WeakSet,n=64512,o=0,i=()=>({format:"midscene-error",name:"Error",message:"[Truncated: error cause chain]",truncated:!0}),c=(e,A)=>{if(A>=6||o++>=25||n<4096)return i();if("object"!=typeof e||null===e)return{format:"midscene-error",name:"Error",message:s(t(String(e)))};if(r.has(e))return i();r.add(e);let u={format:"midscene-error",...!0===e.truncated?{truncated:!0}:{},name:"string"==typeof e.name?s(e.name,200):"Error",message:s(t("string"==typeof e.message?e.message:String(e))),..."string"==typeof e.code?{code:s(e.code,200)}:{}};if(n-=a(JSON.stringify(u))+128,void 0!==e.details){let t="midscene-error"===e.format&&"object"==typeof e.details&&null!==e.details&&"value"in e.details?e.details:void 0,r=l(t?t.value:e.details);for(let e of["redactedPaths","truncatedPaths"]){let n=null==t?void 0:t[e];Array.isArray(n)&&(r[e]=[...new Set([...r[e]??[],...n.filter(e=>"string"==typeof e).slice(0,50).map(e=>s(e))])])}let o=a(JSON.stringify(r));o<n-4096?(u.details=r,n-=o):(u.details={value:"[Truncated: error details size limit]",truncatedPaths:["$"]},u.truncated=!0)}if(void 0!==e.cause&&(u.cause=c(e.cause,A+1)),Array.isArray(e.errors)){for(let t of(u.errors=[],e.errors.slice(0,10))){if(o>=25||n<4096){u.truncated=!0;break}u.errors.push(c(t,A+1))}u.errors.length<e.errors.length&&(u.truncated=!0)}if("string"==typeof e.stack&&e.stack){let r=t(e.stack),o=Math.max(0,n-128);if(a(JSON.stringify(r))>o){let e="\n… [truncated: stack trace size limit]",t=0,n=r.length;for(;t<n;){let i=Math.ceil((t+n)/2);a(JSON.stringify(r.slice(0,i)+e))<=o?t=i:n=i-1}r=t?r.slice(0,t)+e:"",u.truncated=!0}r&&(u.stack=r,n-=a(JSON.stringify(r)))}return r.delete(e),u},A=c(e,0);return 65536>=a(JSON.stringify(A))?A:{format:"midscene-error",name:A.name,message:A.message,...A.code?{code:A.code}:{},truncated:!0,cause:{format:"midscene-error",name:"Error",message:"[Truncated: serialized error exceeded 64 KiB]",truncated:!0}}}},73840(e,t,r){"use strict";r.d(t,{V:()=>o});var n=r(57073);function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new Set(t.selectedCaseIds??e.cases.map(e=>e.caseId)),o=(r,o,i)=>r.map((r,a)=>{let s=r.templateInput??r.input,l=s.prompt??s.script??s.scenario??s.title,c="string"==typeof l?l:l&&"object"==typeof l&&"prompt"in l&&"string"==typeof l.prompt?l.prompt:void 0;return{id:`${e.documentId}:${i}:${o}:${a}`,phase:o,stepIndex:a,node:r.node,...c?{title:(0,n.pT)(c,240)}:{},input:(0,n.pA)(s),inputMode:r.templateInput?"template":"resolved",...(r.meta.timeoutMs??t.defaultTimeoutMs)===void 0?{}:{timeoutMs:r.meta.timeoutMs??t.defaultTimeoutMs},continueOnError:r.meta.continueOnError}}),i=e.cases.map(t=>({caseId:t.caseId,name:t.definition.name,caseIndex:t.caseIndex,selected:r.has(t.caseId),tags:[...t.definition.tags??[]],...t.definition.onFailure?{onFailure:t.definition.onFailure}:{},beforeEach:o(e.lifecycle.beforeEach,"beforeEach",t.caseId),steps:o(t.definition.steps,"steps",t.caseId),afterEach:o(e.lifecycle.afterEach,"afterEach",t.caseId)}));return{documentId:e.documentId,sourcePath:e.sourcePath,...e.sourceYaml?{sourceYaml:structuredClone(e.sourceYaml)}:{},retry:t.retry??{scope:"case",count:0},beforeAll:o(e.lifecycle.beforeAll,"beforeAll","document"),cases:i,afterAll:o(e.lifecycle.afterAll,"afterAll","document")}}},38015(e,t,r){"use strict";r.d(t,{O:()=>u});var n=r(56339),o=r(57073);let i=new Set(["aiAct","aiAssert","recordToReport"]),a=(e,t)=>`${e}\u0000${t}`,s=(e,t)=>e.sourcesByScope.get(t)??[],l=(e,t)=>{e.diagnostics.push(t)},c=(e,t,r,c,A)=>{var u,d,p,h,m,f;let g,y=`${c}:${e.phase}:${e.stepIndex}`;if("not-run"===e.status)return{id:y,...A?{planStepId:A.id,title:A.title}:{},phase:e.phase,stepIndex:e.stepIndex,node:e.node,status:"not-run",notRunReason:(0,o.pT)(e.notRunReason),...e.blockedBy?{blockedBy:e.blockedBy}:{},continuedAfterError:e.continuedAfterError,...e.waitForPreviousOperationMs?{waitForPreviousOperationMs:e.waitForPreviousOperationMs}:{},input:(0,o.pA)(e.input),...e.error?{error:(0,o.EQ)(e.error)}:{},...e.operations?{operations:{...e.operations,events:[...e.operations.events]}}:{}};let v=[],b=[],w=[],E=[];for(let n of(null==(u=e.report)?void 0:u.traces)??[]){r.tracedScopes.add(t);let e=r.executionMetrics.get(n.executionId)??n.metrics;e&&(r.executionMetrics.set(n.executionId,e),w.push(e)),r.expectedExecutions.add(a(t,n.executionId));let o=r.tracedScopeByExecution.get(n.executionId);if(o&&o!==t)throw Error(`Agent execution ${n.executionId} was traced by multiple test scopes (${o}, ${t}).`);r.tracedScopeByExecution.set(n.executionId,t);let i=r.detailsByScopeAndExecution.get(a(t,n.executionId));if(i)v.push(i),r.capturedExecutions.add(a(t,n.executionId));else if(b.push(n.executionId),!e){let e=`Model usage is unavailable for execution ${n.executionId}.`;E.push(e),r.missingMetrics.add(e)}}if(b.length>0){g=`Agent detail could not be resolved for ${b.join(", ")}.`;let e=s(r,t);for(let n of b)l(r,{level:"warning",code:"agent-detail-unresolved",message:`Agent detail could not be resolved for execution ${n} in test scope ${t}.`,scopeId:t,executionId:n,stepId:y,...e.length>0?{sourcePaths:e.map(e=>e.sourcePath)}:{}})}else 0===v.length&&i.has(e.node)&&(g="This Agent did not expose a stable execution reference for the Step.",l(r,{level:"warning",code:"agent-detail-unavailable",message:`No stable Agent execution reference was captured for ${e.node} in test scope ${t}.`,scopeId:t,stepId:y,...s(r,t).length>0?{sourcePaths:s(r,t).map(e=>e.sourcePath)}:{}}));let x=(null==(p=e.report)||null==(d=p.collectionErrors)?void 0:d.map(o.EQ))??[];for(let n of x)l(r,{level:"warning",code:"agent-source-unavailable",scopeId:t,stepId:y,error:n,message:`Report collection for ${e.node}: ${n.message}`});let k=(null==(m=e.report)||null==(h=m.sources)?void 0:h.flatMap(e=>e.collection?[e.collection]:[]))??[],S=k.length||x.length||v.length||b.length?{status:x.length||b.length||k.some(e=>"partial"===e.status)?v.length?"partial":"unknown":"complete",...k.length?{capturedAt:k.map(e=>e.capturedAt).sort().at(-1)}:{},...x.length?{errors:x}:{}}:void 0;if(!(null==(f=e.report)?void 0:f.traces.length)&&x.length&&!v.length){let e=`Model usage could not be collected for step ${y}.`;E.push(e),r.missingMetrics.add(e)}let I=e.input,C=(null==I?void 0:I.prompt)??(null==I?void 0:I.script)??(null==I?void 0:I.scenario)??(null==I?void 0:I.title),O="string"==typeof C?C:"object"==typeof C&&null!==C&&"prompt"in C&&"string"==typeof C.prompt?C.prompt:void 0;return{id:y,...A?{planStepId:A.id}:{},phase:e.phase,stepIndex:e.stepIndex,node:e.node,...O?{title:(0,o.pT)(O,240)}:{},status:e.status,continuedAfterError:e.continuedAfterError,...e.waitForPreviousOperationMs?{waitForPreviousOperationMs:e.waitForPreviousOperationMs}:{},startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,...e.operations?{operations:{...e.operations,events:[...e.operations.events]}}:{},input:(0,o.pA)(e.input),...e.output?{output:{...void 0===e.output.summary?{}:{summary:(0,o.pT)(e.output.summary)},...void 0===e.output.data?{}:{data:(0,o.pA)(e.output.data)}}}:{},...e.error?{error:(0,o.EQ)(e.error)}:{},...v.length>0?{agentDetails:v}:{},...g?{agentDetailDiagnostic:g}:{},...w.length||E.length?{metrics:(0,n.Y)(w,E)}:{},...S?{evidenceCollection:{...S,...E.length?{modelUsageUnavailable:!0}:{}}}:{}}},A=(e,t,r,n,i)=>{var a,l,A,u;i??(i=null==t?void 0:t.plan);let d=(null==t?void 0:t.sourcePath)??(null==(a=r[0])?void 0:a.sourcePath)??"<unknown>",p=(null==t?void 0:t.status)??(r.some(e=>"success"!==e.status)?"failed":"success"),h=t?t.reportScopeId??t.documentRunId:void 0;return{documentId:e,...i?{plan:i}:{},...t?{logicalDocumentId:t.documentId,documentRunId:t.documentRunId,...void 0===t.attemptIndex?{}:{attemptIndex:t.attemptIndex}}:{},sourcePath:d,status:p,...(null==t?void 0:t.executionStatus)?{executionStatus:t.executionStatus}:{},...(null==t?void 0:t.phases)?{phases:t.phases}:{},...(null==t?void 0:t.cleanup)?{cleanup:t.cleanup}:{},...(null==t?void 0:t.pendingOperations)?{pendingOperations:t.pendingOperations}:{},...(null==t?void 0:t.retryDecision)?{retryDecision:t.retryDecision}:{},...t?{startedAt:t.startedAt,endedAt:t.endedAt,durationMs:t.durationMs}:{},beforeAll:((null==t?void 0:t.beforeAll)??[]).map(e=>c(e,h,n,t.documentRunId,null==i?void 0:i.beforeAll[e.stepIndex])),cases:r.map(e=>{let t;return{...(t=null==i?void 0:i.cases.find(t=>t.caseId===e.caseId))?{plan:t}:{},caseId:e.caseId,name:e.name,caseIndex:e.caseIndex,status:e.status,...e.notRunReason?{notRunReason:e.notRunReason}:{},attempts:(e.attempts??(e.run?[e.run]:[])).map(e=>{var r,i;let a;return a=e.reportScopeId??e.runId,{attemptId:e.runId,attemptIndex:e.attemptIndex,status:e.status,...e.executionStatus?{executionStatus:e.executionStatus}:{},...e.phases?{phases:e.phases}:{},...e.cleanup?{cleanup:e.cleanup}:{},...e.pendingOperations?{pendingOperations:e.pendingOperations}:{},...e.retryDecision?{retryDecision:e.retryDecision}:{},startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,beforeEach:e.beforeEach.map(r=>c(r,a,n,e.runId,null==t?void 0:t.beforeEach[r.stepIndex])),steps:e.steps.map(r=>c(r,a,n,e.runId,null==t?void 0:t.steps[r.stepIndex])),afterEach:e.afterEach.map(r=>c(r,a,n,e.runId,null==t?void 0:t.afterEach[r.stepIndex])),...(null==(r=e.executionErrors)?void 0:r.length)?{hostErrors:e.executionErrors.map(e=>({phase:"execution",error:(0,o.EQ)(e)}))}:{},...(null==(i=e.teardownErrors)?void 0:i.length)?{teardownErrors:e.teardownErrors.map(o.EQ)}:{},...s(n,a).length>0?{scopeReportIds:s(n,a).map(e=>e.reportId)}:{}}})}}),afterAll:((null==t?void 0:t.afterAll)??[]).map(e=>c(e,h,n,t.documentRunId,null==i?void 0:i.afterAll[e.stepIndex])),...(null==t||null==(l=t.hostErrors)?void 0:l.length)||(null==t||null==(A=t.executionErrors)?void 0:A.length)?{hostErrors:[...(null==t?void 0:t.hostErrors)??[],...((null==t?void 0:t.executionErrors)??[]).map(e=>({phase:"execution",error:e}))].map(e=>{let{phase:t,error:r}=e;return{phase:t,error:(0,o.EQ)(r)}})}:{},...(null==t||null==(u=t.teardownErrors)?void 0:u.length)?{teardownErrors:t.teardownErrors.map(o.EQ)}:{},...h&&s(n,h).length>0?{scopeReportIds:s(n,h).map(e=>e.reportId)}:{}}};function u(e,t){let r=new Map,i=new Map;for(let e of t.sources){let t=r.get(e.scopeId)??[];for(let n of(t.push(e),r.set(e.scopeId,t),e.executionIds))i.set(a(e.scopeId,n),{reportId:e.reportId,executionId:n})}let s={diagnostics:(t.diagnostics??[]).map(e=>({...e,message:(0,o.pT)(e.message)})),sourcesByScope:r,detailsByScopeAndExecution:i,tracedScopeByExecution:new Map,expectedExecutions:new Set,capturedExecutions:new Set,executionMetrics:new Map(Object.entries(t.executionMetrics??{})),missingMetrics:new Set,tracedScopes:new Set};for(let t of e.errors??[])l(s,{level:"error",code:"run-infrastructure-error",message:(0,o.EQ)(t).message,error:(0,o.EQ)(t)});for(let e of t.sources)0===e.executionIds.length&&l(s,{level:"warning",code:"source-without-executions",message:`Agent report contains no executions: ${e.sourcePath}`,scopeId:e.scopeId,sourcePaths:[e.sourcePath]});let c=e.projects.map(e=>((e,t)=>{var r,n,i;let a=new Map;for(let t of e.documents)a.set(t.documentId,(a.get(t.documentId)??0)+1);for(let t of e.cases)if((a.get(t.documentId)??0)>1&&!t.documentRunId)throw Error(`Case ${t.caseId} must identify its documentRunId when a document has multiple attempts.`);let s=[],l=new Map;for(let t of e.documents){let e=l.get(t.documentId);e&&t.attemptIndex||(e=[],s.push(e),l.set(t.documentId,e)),e.push(t)}let c=s.map(r=>{var n;let o=r[0],i=r.at(-1),a=s.filter(e=>e[0].documentId===o.documentId).length>1?`${o.documentId}:${o.documentRunId}`:o.documentId,l=new Map;for(let t of r)for(let r of e.cases.filter(e=>e.documentId===t.documentId&&(!e.documentRunId||e.documentRunId===t.documentRunId))){let e=l.get(r.caseId);l.set(r.caseId,{...r,attempts:[...(null==e?void 0:e.attempts)??[],...(r.attempts??(r.run?[r.run]:[])).map(e=>({...e,attemptIndex:t.attemptIndex??e.attemptIndex}))]})}let c=A(a,i,[...l.values()],t,null==(n=e.plans)?void 0:n.find(e=>e.documentId===i.documentId));return r.length>1&&(c.startedAt=o.startedAt,c.durationMs=Math.max(0,Date.parse(i.endedAt)-Date.parse(o.startedAt)),c.attempts=r.map(r=>{var n;let{cases:o,...i}=A(a,r,[],t,null==(n=e.plans)?void 0:n.find(e=>e.documentId===r.documentId));return i})),c});for(let n of new Set(e.cases.map(e=>e.documentId)))a.has(n)||c.push(A(n,void 0,e.cases.filter(e=>e.documentId===n),t,null==(r=e.plans)?void 0:r.find(e=>e.documentId===n)));return{...e.plans?{plans:e.plans}:{},projectId:e.projectId,name:e.name,...(null==(n=e.platform)?void 0:n.trim())?{platform:e.platform.trim()}:{},status:e.status,retry:e.retry,...e.lifecycle?{lifecycle:{status:e.lifecycle.status,startedAt:e.lifecycle.startedAt,endedAt:e.lifecycle.endedAt,durationMs:e.lifecycle.durationMs,...e.lifecycle.cleanup?{cleanup:e.lifecycle.cleanup}:{},...e.lifecycle.pendingOperations?{pendingOperations:e.lifecycle.pendingOperations}:{},...e.lifecycle.setupError?{setupError:(0,o.EQ)(e.lifecycle.setupError)}:{},...(null==(i=e.lifecycle.teardownErrors)?void 0:i.length)?{teardownErrors:e.lifecycle.teardownErrors.map(o.EQ)}:{}}}:{},documents:c,collectionErrors:e.collectionErrors.map(e=>({sourcePath:e.sourcePath,error:(0,o.EQ)(e.error)}))}})(e,s));for(let e of t.diagnostics??[])"agent-source-unavailable"!==e.code||e.scopeId&&s.tracedScopes.has(e.scopeId)||s.missingMetrics.add(e.message);let u=(0,n.Y)([...t.sources.length||!t.executionMetrics&&(t.metrics.modelCallCount||t.metrics.collection)?[t.capturedMetrics??t.metrics]:[],...[...s.executionMetrics.entries()].filter(e=>{var r;let[n]=e;return!(null==(r=t.executionMetrics)?void 0:r[n])}).map(e=>{let[,t]=e;return t})],[...s.missingMetrics]);return{schemaVersion:1,kind:"test-runner",runId:e.runId,...e.operationLog?{operationLogs:[{...e.operationLog}]}:{},status:e.status,startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,summary:{...e.summary},metrics:{...u,collection:{...u.collection,expectedExecutionCount:s.expectedExecutions.size,capturedExecutionCount:s.capturedExecutions.size}},...t.executionMetrics||s.executionMetrics.size?{executionMetrics:Object.fromEntries(s.executionMetrics)}:{},projects:c,...s.diagnostics.length>0?{diagnostics:s.diagnostics}:{}}}},83198(e,t,r){"use strict";let n;r.d(t,{ZH:()=>h,y9:()=>p});var o=r(53244),i=r(35207),a=r(13078),s=r.n(a),l=r(50217),c=r(29368),A=r(19152),u=r(85409);let d="midscene_run",p=()=>{if(!A.$9)return"";let e=s().resolve(u.cwd(),A.$9?n??(0,l.j)(c.Tr)??d:"");if(!(0,o.existsSync)(e))try{(0,o.mkdirSync)(e,{recursive:!0})}catch(t){e=s().join((0,i.tmpdir)(),d),(0,o.mkdirSync)(e,{recursive:!0})}return e},h=e=>{if(!A.$9)return"";let t=p(),r=s().join(t,e);return(0,o.existsSync)(r)||(0,o.mkdirSync)(r,{recursive:!0}),r}},50217(e,t,r){"use strict";r.d(t,{j:()=>i});var n=r(29368),o=r(85409);let i=e=>{if(!n.Wh.includes(e))throw Error(`getBasicEnvValue with key ${e} is not supported.`);return o.env[e]}},29368(e,t,r){"use strict";r.d(t,{$:()=>M,$H:()=>h,$L:()=>A,$l:()=>s,AU:()=>w,AW:()=>ep,CA:()=>P,CR:()=>E,Cn:()=>eD,DL:()=>eW,EH:()=>eI,El:()=>Z,FU:()=>d,G0:()=>o,Gl:()=>k,HR:()=>i,I2:()=>n,IQ:()=>p,JM:()=>N,Jm:()=>ew,Jq:()=>O,Js:()=>eS,Km:()=>g,Lg:()=>eY,Lh:()=>V,M1:()=>b,NF:()=>z,OK:()=>eP,OY:()=>eF,Od:()=>T,Pm:()=>_,Qu:()=>eE,R9:()=>S,S7:()=>ed,SP:()=>eA,Sk:()=>L,T4:()=>H,T8:()=>eb,TN:()=>Q,Tf:()=>ef,Tr:()=>q,UH:()=>e0,V7:()=>et,VM:()=>v,VY:()=>ex,Vb:()=>eL,W4:()=>f,WH:()=>eT,Wh:()=>eq,XE:()=>eG,Xx:()=>ek,YK:()=>J,Yf:()=>Y,Yg:()=>ee,Z$:()=>eN,Z7:()=>$,ZX:()=>c,_E:()=>X,_j:()=>e$,_q:()=>W,a0:()=>eg,aK:()=>y,aO:()=>eK,ag:()=>eM,b6:()=>j,c$:()=>eX,cD:()=>I,d8:()=>K,fF:()=>ey,fS:()=>es,fh:()=>C,hC:()=>em,ho:()=>U,iw:()=>u,jG:()=>R,j_:()=>F,ju:()=>el,k8:()=>ec,kX:()=>G,kb:()=>eZ,l8:()=>eu,lV:()=>eJ,lp:()=>eh,mZ:()=>eO,mk:()=>ev,n0:()=>l,nc:()=>ea,pG:()=>x,pp:()=>B,rd:()=>eH,sg:()=>ez,tk:()=>eV,u1:()=>eU,v:()=>eo,v4:()=>a,vC:()=>er,wu:()=>eB,xP:()=>eC,xg:()=>en,y2:()=>ei,yR:()=>eQ,yb:()=>D,zD:()=>m,zG:()=>ej,zQ:()=>eR});let n="MIDSCENE_MODEL_INIT_CONFIG_JSON",o="MIDSCENE_MODEL_EXTRA_BODY_JSON",i="MIDSCENE_MODEL_NAME",a="MIDSCENE_DEBUG_MODEL_PROFILE",s="MIDSCENE_DEBUG_MODEL_RESPONSE",l="MIDSCENE_DEBUG_MODE",c="MIDSCENE_LANGSMITH_DEBUG",A="MIDSCENE_LANGFUSE_DEBUG",u="MIDSCENE_MODEL_SOCKS_PROXY",d="MIDSCENE_MODEL_HTTP_PROXY",p="MIDSCENE_MODEL_API_KEY",h="MIDSCENE_MODEL_BASE_URL",m="MIDSCENE_MODEL_TIMEOUT",f="MIDSCENE_MODEL_TEMPERATURE",g="MIDSCENE_MODEL_RETRY_COUNT",y="MIDSCENE_MODEL_RETRY_INTERVAL",v="MIDSCENE_MODEL_REASONING_EFFORT",b="MIDSCENE_MODEL_REASONING_ENABLED",w="MIDSCENE_MODEL_REASONING_BUDGET",E="MIDSCENE_MODEL_PROTOCOL",x="MIDSCENE_LOCATE_MODEL_STREAM_MODE",k="MIDSCENE_PLANNING_MODEL_STREAM_MODE",S="MIDSCENE_INSIGHT_MODEL_STREAM_MODE",I="MIDSCENE_MODEL_STREAM_MODE",C="MIDSCENE_MODEL_RESPONSE_FORMAT",O="OPENAI_API_KEY",R="OPENAI_BASE_URL",j="MIDSCENE_OPENAI_INIT_CONFIG_JSON",P="MIDSCENE_OPENAI_HTTP_PROXY",M="MIDSCENE_OPENAI_SOCKS_PROXY",T="MIDSCENE_CACHE",N="MIDSCENE_USE_VLM_UI_TARS",D="MIDSCENE_USE_QWEN_VL",z="MIDSCENE_USE_QWEN3_VL",B="MIDSCENE_USE_DOUBAO_VISION",F="MIDSCENE_USE_GEMINI",L="MATCH_BY_POSITION",U="MIDSCENE_REPORT_TAG_NAME",K="MIDSCENE_REPORT_QUIET",Z="MIDSCENE_PREFERRED_LANGUAGE",J="MIDSCENE_CACHE_MAX_FILENAME_LENGTH",Q="MIDSCENE_REPLANNING_CYCLE_LIMIT",q="MIDSCENE_RUN_DIR",X="MIDSCENE_RECORD_MODEL_CALL",W="MIDSCENE_INSIGHT_MODEL_NAME",H="MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY",Y="MIDSCENE_INSIGHT_MODEL_HTTP_PROXY",G="MIDSCENE_INSIGHT_MODEL_BASE_URL",V="MIDSCENE_INSIGHT_MODEL_API_KEY",$="MIDSCENE_INSIGHT_MODEL_INIT_CONFIG_JSON",_="MIDSCENE_INSIGHT_MODEL_EXTRA_BODY_JSON",ee="MIDSCENE_INSIGHT_MODEL_TIMEOUT",et="MIDSCENE_INSIGHT_MODEL_TEMPERATURE",er="MIDSCENE_INSIGHT_MODEL_RETRY_COUNT",en="MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL",eo="MIDSCENE_INSIGHT_MODEL_FAMILY",ei="MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT",ea="MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED",es="MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET",el="MIDSCENE_INSIGHT_MODEL_PROTOCOL",ec="MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT",eA="MIDSCENE_LOCATE_MODEL_NAME",eu="MIDSCENE_LOCATE_MODEL_SOCKS_PROXY",ed="MIDSCENE_LOCATE_MODEL_HTTP_PROXY",ep="MIDSCENE_LOCATE_MODEL_BASE_URL",eh="MIDSCENE_LOCATE_MODEL_API_KEY",em="MIDSCENE_LOCATE_MODEL_INIT_CONFIG_JSON",ef="MIDSCENE_LOCATE_MODEL_EXTRA_BODY_JSON",eg="MIDSCENE_LOCATE_MODEL_TIMEOUT",ey="MIDSCENE_LOCATE_MODEL_TEMPERATURE",ev="MIDSCENE_LOCATE_MODEL_RETRY_COUNT",eb="MIDSCENE_LOCATE_MODEL_RETRY_INTERVAL",ew="MIDSCENE_LOCATE_MODEL_FAMILY",eE="MIDSCENE_LOCATE_MODEL_REASONING_EFFORT",ex="MIDSCENE_LOCATE_MODEL_REASONING_ENABLED",ek="MIDSCENE_LOCATE_MODEL_REASONING_BUDGET",eS="MIDSCENE_LOCATE_MODEL_PROTOCOL",eI="MIDSCENE_LOCATE_MODEL_RESPONSE_FORMAT",eC="MIDSCENE_PLANNING_MODEL_NAME",eO="MIDSCENE_PLANNING_MODEL_SOCKS_PROXY",eR="MIDSCENE_PLANNING_MODEL_HTTP_PROXY",ej="MIDSCENE_PLANNING_MODEL_BASE_URL",eP="MIDSCENE_PLANNING_MODEL_API_KEY",eM="MIDSCENE_PLANNING_MODEL_INIT_CONFIG_JSON",eT="MIDSCENE_PLANNING_MODEL_EXTRA_BODY_JSON",eN="MIDSCENE_PLANNING_MODEL_TIMEOUT",eD="MIDSCENE_PLANNING_MODEL_TEMPERATURE",ez="MIDSCENE_PLANNING_MODEL_RETRY_COUNT",eB="MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL",eF="MIDSCENE_PLANNING_MODEL_FAMILY",eL="MIDSCENE_PLANNING_MODEL_REASONING_EFFORT",eU="MIDSCENE_PLANNING_MODEL_REASONING_ENABLED",eK="MIDSCENE_PLANNING_MODEL_REASONING_BUDGET",eZ="MIDSCENE_PLANNING_MODEL_PROTOCOL",eJ="MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT",eQ="MIDSCENE_MODEL_FAMILY",eq=[l,a,s,q,X],eX=[T,c,A,K],eW=[J,Q],eH=["MIDSCENE_ADB_PATH","MIDSCENE_ADB_REMOTE_HOST","MIDSCENE_ADB_REMOTE_PORT","MIDSCENE_ANDROID_IME_STRATEGY","MIDSCENE_ANDROID_SCREENSHOT_STRATEGY","MIDSCENE_IOS_DEVICE_UDID","MIDSCENE_IOS_SIMULATOR_UDID",U,Z,L,"MIDSCENE_CHROME_PATH","MIDSCENE_MCP_CHROME_PATH","DOCKER_CONTAINER"],eY=[...eX,...eW,...eH],eG=[S,k,x,I,i,n,o,p,h,u,d,m,f,g,y,v,b,w,E,C,N,D,z,B,F,"MIDSCENE_USE_VL_MODEL",O,R,j,P,M,W,H,Y,G,V,$,_,ee,et,er,en,eo,ei,ea,es,el,ec,eA,eu,ed,ep,eh,em,ef,eg,ey,ev,eb,ew,eE,ex,ek,eS,eI,eC,eO,eR,ej,eP,eM,eT,eN,eD,ez,eB,eF,eL,eU,eK,eZ,eJ,eQ],eV=["MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",...eq,...eY,...eG],e$=["jev","doubao-vision","doubao-seed","gemini","qwen2.5-vl","qwen3-vl","qwen3","qwen3.5","qwen3.6","vlm-ui-tars","vlm-ui-tars-doubao","vlm-ui-tars-doubao-1.5","glm-v","auto-glm","auto-glm-multilingual","gpt-5","gpt-6","deepseek","kimi","kimi3","xiaomi-mimo"];var e_,e0=((e_={}).V1_0="1.0",e_.V1_5="1.5",e_.DOUBAO_1_5_15B="doubao-1.5-15B",e_.DOUBAO_1_5_20B="doubao-1.5-20B",e_)},64565(e,t,r){"use strict";let n;r.d(t,{Nw:()=>b,aZ:()=>function e(t,r){let o=`${h}:${t}`,a=(null==r?void 0:r.console)??!1,l=a?`${o}:withConsole`:o;if(!v.has(l))if(a){let r=e(t);v.set(l,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r(...t);try{console.warn("[Midscene]",...t)}catch{}})}else{let e=u()(o);v.set(l,function(){for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];p.$9&&function(e,t){if(!p.$9)return;let r=e.replace(/:/g,"-");if(g.has(r))return;let o=function(e){let t=e.replace(/:/g,"-");if(y.has(t))return null;let r=s().join((null==n?void 0:n())??(0,d.ZH)("log"),`${t}.log`),o=m.get(t);if(o&&f.get(t)!==r&&(o.end(),m.delete(t),f.delete(t)),!m.has(t)){let e=i().createWriteStream(r,{flags:"a"});e.on("error",()=>{y.add(t),g.delete(t),m.get(t)===e&&(m.delete(t),f.delete(t))}),m.set(t,e),f.set(t,r)}return m.get(t)??null}(e);if(!o)return;let a=new Date,l=a.toLocaleDateString("sv-SE"),c=a.toLocaleTimeString("sv-SE"),A=a.getMilliseconds().toString().padStart(3,"0"),u=a.getTimezoneOffset(),h=Math.floor(Math.abs(u)/60).toString().padStart(2,"0"),v=(Math.abs(u)%60).toString().padStart(2,"0"),b=`${u<=0?"+":"-"}${h}:${v}`,w=`${l}T${c}.${A}${b}`;try{o.write(`[${w}] ${t}
875
+ `)||(g.add(r),o.once("drain",()=>{g.delete(r)}))}catch{y.add(r),g.delete(r)}}(t,c().format(...o)),e(...o)})}return v.get(l)}});var o=r(53244),i=r.n(o),a=r(13078),s=r.n(a),l=r(1344),c=r.n(l),A=r(27617),u=r.n(A),d=r(83198),p=r(19152);let h="midscene",m=new Map,f=new Map,g=new Set,y=new Set,v=new Map;function b(e){p.$9||u().enable(`${h}:${e}`)}},19152(e,t,r){"use strict";r.d(t,{$9:()=>c,NB:()=>v,Qd:()=>E,gQ:()=>h,gV:()=>w,ht:()=>s,rS:()=>l,tD:()=>d,uR:()=>A,vA:()=>p,x3:()=>b});var n,o=r(87086),i=r(63961),a=r(85409);let s="undefined"!=typeof window,l="undefined"!=typeof WorkerGlobalScope,c=void 0!==a&&(null==(n=a.versions)?void 0:n.node);function A(){return(0,i.A)()}let u={};function d(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=JSON.stringify({content:t,rect:e}),n=5,i="",a=o.sha256.create().update(r).hex().split("").map(e=>String.fromCharCode(97+Number.parseInt(e,16)%26)).join("");for(;n<a.length-1;){if(u[i=a.slice(0,n)]&&u[i]!==r){n++;continue}u[i]=r;break}return i}function p(e,t){if(!e)throw Error(t||"Assertion failed")}function h(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];console.log(...t)}let m=/</g,f=/>/g,g="__midscene_lt__",y="__midscene_gt__",v=e=>e.replace(m,g).replace(f,y),b=e=>{let t=RegExp(g,"g"),r=RegExp(y,"g");return e.replace(t,"<").replace(r,">")};function w(e){return e.replace(/[:*?"<>|# ]/g,"-")}function E(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}},82297(e){"use strict";if("undefined"==typeof sharp){var t=Error("Cannot find module 'sharp'");throw t.code="MODULE_NOT_FOUND",t}e.exports=sharp},8908(){},10329(){},79476(){},26122(){},17407(){},20200(){},21460(){},50902(){},3710(){},9140(){},58973(){},94504(){},13009(){},52801(){},16390(){},76970(){},83147(){},80757(){},57012(){},53244(){},25592(){}},l={};function c(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={id:e,loaded:!1,exports:{}};return s[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=s,c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(r,n){if(1&n&&(r=this(r)),8&n||"object"==typeof r&&r&&(4&n&&r.__esModule||16&n&&"function"==typeof r.then))return r;var o=Object.create(null);c.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&n&&r;("object"==typeof a||"function"==typeof a)&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach(e=>{i[e]=()=>r[e]});return i.default=()=>r,c.d(o,i),o},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"static/js/async/"+e+"."+({195:"beaced02",236:"a5d2c1b1",749:"921ee4fd"})[e]+".js",c.miniCssF=e=>""+e+".css",c.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c.l=function(e,t,n,o){if(r[e])return void r[e].push(t);if(void 0!==n)for(var i,a,s=document.getElementsByTagName("script"),l=0;l<s.length;l++){var A=s[l];if(A.getAttribute("src")==e||A.getAttribute("data-rspack")=="playground:"+n){i=A;break}}i||(a=!0,(i=document.createElement("script")).timeout=120,c.nc&&i.setAttribute("nonce",c.nc),i.setAttribute("data-rspack","playground:"+n),i.src=e),r[e]=[t];var u=function(t,n){i.onerror=i.onload=null,clearTimeout(d);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},d=setTimeout(u.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=u.bind(null,i.onerror),i.onload=u.bind(null,i.onload),a&&document.head.appendChild(i)},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n=[],c.O=(e,t,r,o)=>{if(t){o=o||0;for(var i=n.length;i>0&&n[i-1][2]>o;i--)n[i]=n[i-1];n[i]=[t,r,o];return}for(var a=1/0,i=0;i<n.length;i++){for(var[t,r,o]=n[i],s=!0,l=0;l<t.length;l++)(!1&o||a>=o)&&Object.keys(c.O).every(e=>c.O[e](t[l]))?t.splice(l--,1):(s=!1,o<a&&(a=o));if(s){n.splice(i--,1);var A=r();void 0!==A&&(e=A)}}return e},c.p="/",c.b=document.baseURI||self.location.href,o={410:0},c.f.j=function(e,t){var r=c.o(o,e)?o[e]:void 0;if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((t,n)=>r=o[e]=[t,n]);t.push(r[2]=n);var i=c.p+c.u(e),a=Error();c.l(i,function(t){if(c.o(o,e)&&(0!==(r=o[e])&&(o[e]=void 0),r)){var n=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+n+": "+i+")",a.name="ChunkLoadError",a.type=n,a.request=i,r[1](a)}},"chunk-"+e,e)}},c.O.j=e=>0===o[e],i=(e,t)=>{var r,n,[i,a,s]=t,l=0;if(i.some(e=>0!==o[e])){for(r in a)c.o(a,r)&&(c.m[r]=a[r]);if(s)var A=s(c)}for(e&&e(t);l<i.length;l++)n=i[l],c.o(o,n)&&o[n]&&o[n][0](),o[n]=0;return c.O(A)},(a=self.webpackChunkplayground=self.webpackChunkplayground||[]).forEach(i.bind(null,0)),a.push=i.bind(null,a.push.bind(a));var A=c.O(void 0,["783","652"],()=>c(73657));A=c.O(A)})();
876
+ //# sourceMappingURL=index.b3706c8e.js.map