@midscene/ios 1.10.4 → 1.10.5-beta-20260714101501.0

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.
@@ -1,960 +0,0 @@
1
- /*! For license information please see index.babddf12.js.LICENSE.txt */
2
- (()=>{var e,t,r,n,i,o,a,s={5902(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=5902,e.exports=t},5845(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=5845,e.exports=t},5737(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=5737,e.exports=t},8541(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=8541,e.exports=t},9998(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=9998,e.exports=t},3348(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=3348,e.exports=t},8817(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=8817,e.exports=t},1560(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=1560,e.exports=t},7250(e,t,r){"use strict";let n;var i,o=r(5723),a=r(2155),s=r(8997);let l=e=>{let{hideLogo:t=!1}=e,{isDarkMode:r}=function(){let[e,t]=(0,a.useState)(!1);return(0,a.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,o.jsx)("div",{className:"logo",children:(0,o.jsx)("a",{href:"https://midscenejs.com/",target:"_blank",rel:"noreferrer",children:(0,o.jsx)("img",{alt:"Midscene_logo",src:r?"https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/midscene_with_text_dark.png":"https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/midscene_with_text_light.png"})})})};var A=r(4177),c=r(6766),u=r(6419),d=r(8594),p=r(2651),h=r(9488),f=r(8928),g=r(5584),m=r(4174),y=r(6620),v=r(8926),b={};b.d=(e,t)=>{for(var r in t)b.o(t,r)&&!b.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},b.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var w={};b.r(w),b.d(w,{create:()=>v.vt});let{create:E}=w,x="midscene-auto-zoom",k="midscene-background-visible",S="midscene-elements-visible",C="midscene-model-call-details",I="midscene-dark-mode",j="midscene-playback-speed",O="midscene-subtitle-enabled",P=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},R=E(e=>{let t="false"!==localStorage.getItem(x),r="false"!==localStorage.getItem(k),n="false"!==localStorage.getItem(S),i="true"===localStorage.getItem(C),o="true"===localStorage.getItem(I),a=Number.parseFloat(localStorage.getItem(j)||"1"),s=Number.isNaN(a)?1:a,l="false"!==localStorage.getItem(O),A=P("focusOnCursor"),c=P("showElementMarkers"),u=P("darkMode"),d=void 0===u?o:u;return void 0!==u&&localStorage.setItem(I,d.toString()),{backgroundVisible:r,elementsVisible:void 0===c?n:c,autoZoom:void 0===A?t:A,modelCallDetailsEnabled:i,darkModeEnabled:d,playbackSpeed:[.5,1,1.5,2].includes(s)?s:1,setBackgroundVisible:t=>{e({backgroundVisible:t}),localStorage.setItem(k,t.toString())},setElementsVisible:t=>{e({elementsVisible:t}),localStorage.setItem(S,t.toString())},setAutoZoom:t=>{e({autoZoom:t}),localStorage.setItem(x,t.toString())},setModelCallDetailsEnabled:t=>{e({modelCallDetailsEnabled:t}),localStorage.setItem(C,t.toString())},setDarkModeEnabled:t=>{e({darkModeEnabled:t}),localStorage.setItem(I,t.toString())},setPlaybackSpeed:t=>{e({playbackSpeed:t}),localStorage.setItem(j,t.toString())},subtitleEnabled:l,setSubtitleEnabled:t=>{e({subtitleEnabled:t}),localStorage.setItem(O,t.toString())}}}),M="midscene-env-config",T="midscene-service-mode",N="midscene-tracking-active-tab",D="midscene-deep-locate",B="midscene-deep-think",z="midscene-screenshot-included",L="midscene-dom-included",F="midscene-ime-strategy",K="midscene-auto-dismiss-keyboard",U="midscene-keyboard-dismiss-strategy",Q="midscene-always-refresh-screen-info",Z=()=>localStorage.getItem(M)||"",J=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,i=t.trim();(i.startsWith("'")&&i.endsWith("'")||i.startsWith('"')&&i.endsWith('"'))&&(i=i.slice(1,-1)),r[e]=i}}),r},X=E((e,t)=>{let r=Z(),n=J(r),i=window.location.href.startsWith("chrome-extension"),o=localStorage.getItem(T),a="false"!==localStorage.getItem(N),s="true"===localStorage.getItem(D),l=localStorage.getItem(B),A="false"!==localStorage.getItem(z),c=localStorage.getItem(L)||"false";return{serviceMode:i?"In-Browser-Extension":o||"Server",setServiceMode:t=>{if(i)throw Error("serviceMode cannot be set in extension");e({serviceMode:t}),localStorage.setItem(T,t)},config:n,configString:r,setConfig:t=>e({config:t}),loadConfig:t=>{e({config:J(t),configString:t}),localStorage.setItem(M,t)},syncFromStorage:()=>{let t=Z();e({config:J(t),configString:t})},forceSameTabNavigation:a,setForceSameTabNavigation:t=>{e({forceSameTabNavigation:t}),localStorage.setItem(N,t.toString())},deepLocate:s,setDeepLocate:t=>{e({deepLocate:t}),localStorage.setItem(D,t.toString())},deepThink:"true"===l||"false"!==l&&"unset",setDeepThink:t=>{e({deepThink:t}),localStorage.setItem(B,t.toString())},screenshotIncluded:A,setScreenshotIncluded:t=>{e({screenshotIncluded:t}),localStorage.setItem(z,t.toString())},domIncluded:"visible-only"===c?"visible-only":"true"===c,setDomIncluded:t=>{e({domIncluded:t}),localStorage.setItem(L,t.toString())},popupTab:"playground",setPopupTab:t=>{e({popupTab:t})},imeStrategy:localStorage.getItem(F)||"yadb-for-non-ascii",setImeStrategy:t=>{e({imeStrategy:t}),localStorage.setItem(F,t)},autoDismissKeyboard:"false"!==localStorage.getItem(K),setAutoDismissKeyboard:t=>{e({autoDismissKeyboard:t}),localStorage.setItem(K,t.toString())},keyboardDismissStrategy:localStorage.getItem(U)||"esc-first",setKeyboardDismissStrategy:t=>{e({keyboardDismissStrategy:t}),localStorage.setItem(U,t)},alwaysRefreshScreenInfo:"true"===localStorage.getItem(Q),setAlwaysRefreshScreenInfo:t=>{e({alwaysRefreshScreenInfo:t}),localStorage.setItem(Q,t.toString())}}});var H=r(3819);function q(e){var t,r,n;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};H.Ay.error({message:null!=(t=i.title)?t:"Something went wrong",description:null!=(r=i.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=i.duration)?n:5})}function G(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function V(e){let{showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:i="icon",playgroundSDK:s}=e,{message:l}=p.A.useApp(),{config:A,configString:c,loadConfig:u,syncFromStorage:v}=X(),[b,w]=(0,a.useState)(!1),[E,x]=(0,a.useState)(c),[k,S]=(0,a.useState)(null),[C,I]=(0,a.useState)(!1),j=A.MIDSCENE_MODEL_NAME,O=!!(null==s?void 0:s.runConnectivityTest),P=(0,a.useRef)(null),R=(0,a.useRef)(null),M=()=>{null!==R.current&&(window.clearTimeout(R.current),R.current=null)},T=e=>{v(),M(),w(!0),e.preventDefault(),e.stopPropagation()},N=()=>{M(),w(!1),u(E)};return(0,a.useEffect)(()=>{b&&(x(c),S(null))},[b,c]),(0,a.useEffect)(()=>()=>{M()},[]),(0,o.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px",alignItems:"center",height:"100%",minHeight:"32px"},ref:P,children:[r?j:null,(0,o.jsx)(h.A,{title:"Please set up your environment variables before using.",placement:n,align:{offset:[-10,5]},getPopupContainer:()=>P.current,open:!b&&(t?0===Object.keys(A).length:void 0),children:"icon"===i?(0,o.jsx)(d.A,{onClick:T}):(0,o.jsx)("span",{onClick:T,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,o.jsxs)(f.A,{title:"Model Env Config",open:b,onOk:N,onCancel:()=>{M(),w(!1)},footer:(0,o.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",alignItems:"center",gap:8},children:[O?(0,o.jsx)(g.Ay,{type:"primary",ghost:!0,loading:C,onClick:()=>{var e;return(e=function*(){if(null==s?void 0:s.runConnectivityTest)try{I(!0),S(null);let e=J(E),t=yield s.runConnectivityTest(e);S(t),t.passed?(u(E),l.success("Model verification passed"),M(),R.current=window.setTimeout(()=>{w(!1),R.current=null},2e3)):l.warning("Model verification found issues")}catch(t){let e=t instanceof Error?t.message:String(t);q(t,{title:"Model verification failed"}),S({passed:!1,message:e})}finally{I(!1)}},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){G(o,n,i,a,s,"next",e)}function s(e){G(o,n,i,a,s,"throw",e)}a(void 0)})})()},children:"Verify and Save Model"},"save-and-run"):null,(0,o.jsx)(g.Ay,{type:"primary",onClick:N,children:"Save"},"save")]}),style:{width:"800px",height:"100%",marginTop:"10%"},destroyOnClose:!0,maskClosable:!0,centered:!0,children:[(0,o.jsx)(m.A.TextArea,{rows:7,placeholder:"MIDSCENE_MODEL_API_KEY=sk-...\nMIDSCENE_MODEL_NAME=gpt-4o-2024-08-06\n...",value:E,onChange:e=>x(e.target.value),style:{whiteSpace:"nowrap",wordWrap:"break-word"}}),(0,o.jsxs)("div",{children:[(0,o.jsx)("p",{children:"The format is KEY=VALUE and separated by new lines."}),(0,o.jsxs)("p",{children:["These data will be saved ",(0,o.jsx)("strong",{children:"locally in your browser"}),"."]})]}),k?(0,o.jsx)(y.A,{type:k.passed?"success":"warning",showIcon:!0,message:k.passed?"Model verification passed":"Model verification failed",description:k.passed?void 0:(0,o.jsx)("span",{style:{whiteSpace:"pre-wrap"},children:k.message||"Connectivity test failed without details."}),style:{marginTop:16}}):null]})]})}function W(e){let{showEnvConfig:t=!0,showTooltipWhenEmpty:r=!1,showModelName:n=!1,githubUrl:i="https://github.com/web-infra-dev/midscene",helpUrl:a="https://midscenejs.com/quick-experience.html",className:s="",playgroundSDK:l}=e;return(0,o.jsxs)("div",{className:`nav-actions ${s}`,children:[(0,o.jsx)(u.A.Link,{href:i,target:"_blank",children:(0,o.jsx)(A.A,{className:"nav-icon"})}),(0,o.jsx)(u.A.Link,{href:a,target:"_blank",children:(0,o.jsx)(c.A,{className:"nav-icon"})}),t&&(0,o.jsx)(V,{showTooltipWhenEmpty:r,showModelName:n,playgroundSDK:l})]})}var Y=r(6453),_=r(4458);let $=e=>{var t,r;return(0,o.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,o.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,o.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,o.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 ee(e){let{title:t="Connect to a device"}=e;return(0,o.jsx)("div",{style:{display:"flex",height:"100%",width:"100%",alignItems:"center",justifyContent:"center"},children:(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:4},children:[(0,o.jsx)($,{"aria-hidden":"true",style:{width:24,height:24,objectFit:"contain"}}),(0,o.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 et=r(1352),er=r(955),en=r(6921);function ei(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function eo(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){ei(o,n,i,a,s,"next",e)}function s(e){ei(o,n,i,a,s,"throw",e)}a(void 0)})}}function ea(e){let{getScreenshot:t,getInterfaceInfo:r,serverOnline:n,isUserOperating:i=!1,mjpegUrl:s,mode:l="default",contentRef:A}=e,[c,u]=(0,a.useState)(null),[d,p]=(0,a.useState)(!1),[f,m]=(0,a.useState)(null),[y,v]=(0,a.useState)(0),[b,w]=(0,a.useState)(null),[E,x]=(0,a.useState)(()=>String(Date.now())),k=(0,a.useRef)(null),S=!!(s&&n),C=["screenshot-viewer","screen-only"===l&&"screen-only"].filter(Boolean).join(" "),I=(0,a.useRef)(null),j=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!S)return;let e=window.setTimeout(()=>{let e=k.current;!e||e.naturalWidth>0||e.naturalHeight>0||x(String(Date.now()))},2500);return()=>window.clearTimeout(e)},[S,E,s]);let O=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return eo(function*(){if(n){p(!0),e&&m(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),m(null),v(Date.now())):m("Empty screenshot data received")}else m("No screenshot data in response")}catch(e){console.error("Screenshot fetch error:",e),m(e instanceof Error?e.message:"Failed to fetch screenshot")}finally{p(!1)}}})()},[t,n]),P=(0,a.useCallback)(()=>eo(function*(){if(n&&r)try{let e=yield r();e&&w(e)}catch(e){console.error("Interface info fetch error:",e)}})(),[r,n]),R=(0,a.useCallback)(()=>{I.current&&clearInterval(I.current),console.log("Starting screenshot polling (5s interval)"),I.current=setInterval(()=>{!j.current&&n&&O(!1)},5e3)},[O,n]),M=(0,a.useCallback)(()=>{I.current&&(console.log("Stopping screenshot polling"),clearInterval(I.current),I.current=null)},[]),T=(0,a.useCallback)(()=>{console.log("Pausing screenshot polling"),j.current=!0},[]),N=(0,a.useCallback)(()=>{console.log("Resuming screenshot polling"),j.current=!1},[]),D=(0,a.useCallback)(()=>{O(!0)},[O]);if((0,a.useEffect)(()=>{if(!n){u(null),m(null),w(null),M();return}return(P(),S)?void M():(O(!1),R(),()=>{M()})},[n,S,R,M,O,P]),(0,a.useEffect)(()=>{n&&!S&&(i?T():(N(),O(!1)))},[i,T,N,O,n,S]),(0,a.useEffect)(()=>()=>{M()},[M]),!n)return(0,o.jsx)("div",{className:`${C} offline`,children:(0,o.jsxs)("div",{className:"screenshot-placeholder",children:[(0,o.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,o.jsx)("p",{children:"Start the playground server to see real-time screenshots"})]})});if(!S&&d&&!c)return(0,o.jsxs)("div",{className:`${C} loading`,children:[(0,o.jsx)(en.A,{size:"large"}),(0,o.jsx)("p",{children:"Loading screenshot..."})]});if(!S&&f&&!c)return(0,o.jsx)("div",{className:`${C} error`,children:(0,o.jsxs)("div",{className:"screenshot-placeholder",children:[(0,o.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,o.jsx)("p",{className:"error-message",children:f})]})});let B=(0,o.jsx)("div",{className:"screenshot-content",ref:A,children:S?(0,o.jsx)("img",{ref:k,src:E?`${s}${(null==s?void 0:s.includes("?"))?"&":"?"}_mjpegRetry=${encodeURIComponent(E)}`:s,alt:"Device Live Stream",className:"screenshot-image",onError:()=>{window.setTimeout(()=>x(String(Date.now())),500)}},E||"initial"):c?(0,o.jsx)("img",{src:c.startsWith("data:image/")?c:`data:image/png;base64,${c}`,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:",c.substring(0,100)),m("Failed to load screenshot image")}}):(0,o.jsx)("div",{className:"screenshot-placeholder",children:(0,o.jsx)("p",{children:"No screenshot available"})})});return"screen-only"===l?(0,o.jsx)("div",{className:C,children:B}):(0,o.jsxs)("div",{className:C,children:[(0,o.jsx)("div",{className:"screenshot-header",children:(0,o.jsx)("div",{className:"screenshot-title",children:(0,o.jsx)("h3",{children:(null==b?void 0:b.type)?b.type:"Device Name"})})}),(0,o.jsxs)("div",{className:"screenshot-container",children:[(0,o.jsxs)("div",{className:"screenshot-overlay",children:[(0,o.jsxs)("div",{className:"device-name-overlay",children:["Device Name",(0,o.jsx)(h.A,{title:null==b?void 0:b.description,children:(0,o.jsx)(et.A,{size:16,className:"info-icon"})})]}),!S&&(0,o.jsxs)("div",{className:"screenshot-controls",children:[y>0&&(0,o.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()})(y)]}),(0,o.jsx)(h.A,{title:"Refresh screenshot",children:(0,o.jsx)(g.Ay,{icon:(0,o.jsx)(er.A,{}),onClick:D,loading:d,size:"small"})}),i&&(0,o.jsxs)("span",{className:"operation-indicator",children:[(0,o.jsx)(en.A,{size:"small"})," Operating..."]})]})]}),B]})]})}var es=r(3393),el=r(2397);let eA=new Set(["Backspace","Delete","Enter","Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]),ec=new Set(["Alt","Control","Meta","Shift"]);function eu(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 ed(e){let{enabled:t,deviceSize:r,onTap:n,onSwipe:i,scrollEnabled:s=!1,onWheelScroll:l,keyboardEnabled:A=!1,onTextInput:c,onKeyboardPress:u,contentRef:d,tapMaxDistance:p=8,tapMaxDurationMs:h=250,style:f}=e,g=(0,a.useRef)(null),m=(0,a.useRef)(null),y=(0,a.useRef)(null),v=(0,a.useRef)(!1),b=(0,a.useRef)(!1),w=(0,a.useRef)(0),E=(0,a.useRef)(null),x=(0,a.useRef)(null),k=(0,a.useRef)(null),S=(0,a.useCallback)(()=>{if(A){b.current=!0;let e=m.current;e&&document.activeElement!==e&&e.focus({preventScroll:!0})}},[A]),C=(0,a.useCallback)((e,t)=>{A&&Promise.resolve(t).catch(()=>void 0).then(()=>{window.setTimeout(()=>{b.current&&w.current===e&&S()},0)})},[S,A]),I=(0,a.useCallback)((e,t)=>{let r=g.current,n=m.current;if(!r||!n)return;let i=r.getBoundingClientRect();n.style.left=`${Math.max(0,e-i.left)}px`,n.style.top=`${Math.max(0,t-i.top)}px`},[]),j=(0,a.useCallback)((e,t,n)=>{if(!r)return null;let i=(e-n.left)/n.width,o=(t-n.top)/n.height;return{x:Math.max(0,Math.min(r.width-1,Math.round(i*r.width))),y:Math.max(0,Math.min(r.height-1,Math.round(o*r.height)))}},[r]),O=(0,a.useCallback)(e=>{var n;if(!t||!r||!g.current||0!==e.button&&"mouse"===e.pointerType)return;let i=eu((null!=(n=null==d?void 0:d.current)?n:g.current).getBoundingClientRect(),r);if(e.clientX<i.left||e.clientX>i.left+i.width||e.clientY<i.top||e.clientY>i.top+i.height){b.current=!1;return}I(e.clientX,e.clientY);let o=w.current+1;w.current=o,S();try{g.current.setPointerCapture(e.pointerId)}catch(e){}y.current={startX:e.clientX,startY:e.clientY,startTime:performance.now(),contentRect:i,keyboardFocusRequestId:o},e.preventDefault()},[d,t,r,S,I]),P=(0,a.useCallback)((e,t)=>{let r=y.current;if(y.current=null,!r)return;try{var o;null==(o=g.current)||o.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),A=Math.max(0,performance.now()-r.startTime),c=j(r.startX,r.startY,r.contentRect),u=j(e.clientX,e.clientY,r.contentRect);c&&u&&(E.current=u,l<=p&&A<=h?C(r.keyboardFocusRequestId,null==n?void 0:n(c)):null==i||i(c,u,Math.round(A)))},[n,i,j,C,p,h]),R=(0,a.useCallback)(e=>P(e,!1),[P]),M=(0,a.useCallback)(e=>P(e,!0),[P]),T=(0,a.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,a.useCallback)(e=>{var n;if(!t||!s||!r||!g.current)return;let i=eu((null!=(n=null==d?void 0:d.current)?n:g.current).getBoundingClientRect(),r);if(e.clientX<i.left||e.clientX>i.left+i.width||e.clientY<i.top||e.clientY>i.top+i.height)return;let o=j(e.clientX,e.clientY,i);if(!o)return;e.preventDefault(),e.stopPropagation();let a=x.current;x.current={point:o,deltaX:((null==a?void 0:a.deltaX)||0)+e.deltaX,deltaY:((null==a?void 0:a.deltaY)||0)+e.deltaY},k.current&&clearTimeout(k.current),k.current=setTimeout(T,80)},[d,r,t,T,j,s]),D=(0,a.useCallback)(()=>{var e;(null==(e=m.current)?void 0:e.value)&&(m.current.value="")},[]),B=(0,a.useCallback)(e=>{var t;if(A&&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)}(g.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)&&(eA.has(e.key)||e.altKey||e.ctrlKey||e.metaKey)){let r=function(e){if(ec.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)}}},[A,u]),z=(0,a.useCallback)(e=>{var t;if(!A||!b.current)return;let r=e.clipboardData.getData("text");r&&(e.preventDefault(),e.stopPropagation(),null==c||c(r,null!=(t=E.current)?t:void 0))},[A,c]),L=(0,a.useCallback)(e=>{var t,r,n,i,o;if(!A||!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!=(i=E.current)?i:void 0);return}let s=a.data||(null==(t=m.current)?void 0:t.value)||"";D(),s&&(e.preventDefault(),e.stopPropagation(),null==c||c(s,null!=(o=E.current)?o:void 0))},[D,A,u,c]);return((0,a.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,a.useEffect)(()=>{if(!t||!A){b.current=!1;return}let e=e=>{let t=g.current;t&&e.target instanceof Node&&t.contains(e.target)||(b.current=!1)};return window.addEventListener("keydown",B,!0),window.addEventListener("pointerdown",e,!0),()=>{window.removeEventListener("keydown",B,!0),window.removeEventListener("pointerdown",e,!0)}},[t,B,A]),(0,a.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[]),t&&r)?(0,o.jsx)("div",{ref:g,onPointerDown:O,onPointerUp:R,onPointerCancel:M,onWheel:N,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:A?"default":"crosshair",outline:"none",color:"transparent",caretColor:"transparent",touchAction:"none",userSelect:"none"},f),children:A?(0,o.jsx)("textarea",{ref:m,"data-midscene-keyboard-sink":"true",tabIndex:-1,onPaste:z,onCompositionStart:()=>{b.current=!0,v.current=!0},onCompositionEnd:e=>{var t,r;if(!A||!b.current)return;v.current=!1;let n=e.data||(null==(t=m.current)?void 0:t.value)||"";D(),n&&(null==c||c(n,null!=(r=E.current)?r:void 0))},onInput:L,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 ep=r(4093),eh=r(6418),ef=r(4452),eg=r(2644);function em(){return"Preparing Android device connection…"}function ey(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function ev(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){ey(o,n,i,a,s,"next",e)}function s(e){ey(o,n,i,a,s,"throw",e)}a(void 0)})}}function eb(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:ew}=u.A;function eE(e){let{connectingOverlay:t,deviceId:r,onIntrinsicSize:n,onStatusChange:i,renderErrorOverlay:s,serverUrl:l,metadataTimeoutMs:A=55e3,reconnectInterval:c=3e3,viewportStyle:u,contentRef:d}=e,p=(0,a.useRef)(null),h=(0,a.useRef)(null),f=(0,a.useRef)(null),g=(0,a.useRef)(null),m=(0,a.useRef)(null),v=(0,a.useRef)(!1),[b,w]=(0,a.useState)("connecting"),[E,x]=(0,a.useState)(null),[k,S]=(0,a.useState)(()=>em()),[C,I]=(0,a.useState)(!0),[j,O]=(0,a.useState)(0),P=(0,a.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":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]),R=("error"===b||"disconnected"===b)&&!!s,M=(0,a.useCallback)(()=>{w("connecting"),x(null),S(em()),O(e=>e+1)},[]);(0,a.useEffect)(()=>{null==i||i(b,P)},[i,b,P]);let T=()=>{let e=p.current;e&&e.replaceChildren()},N=()=>{f.current&&(f.current.dispose(),f.current=null)},D=()=>{g.current&&(clearTimeout(g.current),g.current=null)};return(0,a.useEffect)(()=>{if(!l){w("error"),x("scrcpy preview metadata is missing a server URL.");return}if(!es.p.isSupported){I(!1),w("error"),x("Current browser does not support WebCodecs, so live scrcpy preview is unavailable.");return}let e=!1,t=null,i=()=>{t&&(clearTimeout(t),t=null),D(),m.current&&(clearTimeout(m.current),m.current=null),h.current&&(h.current.disconnect(),h.current=null),N(),T(),null==n||n(null)},o=()=>{e||m.current||(m.current=setTimeout(()=>{m.current=null,i(),a()},c))},a=()=>{let t,i,a,s;if(e)return;v.current=!1,w("connecting"),x(null),S(em());let c=(0,eg.io)(l,{withCredentials:!0,reconnection:!1,timeout:1e4,transports:["websocket"]});h.current=c;let u=(i=!1,a=[],s=new TransformStream({transform(e,t){if("configuration"===e.type){i=!0,t.enqueue(e),a.forEach(e=>t.enqueue(e)),a=[];return}"data"!==e.type||i?t.enqueue(e):a.push(e)}}),new ReadableStream({start(e){let r=t=>{try{var r;let n=(r=t.data)instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):new Uint8Array(r.buffer,r.byteOffset,r.byteLength);if("configuration"===t.type)return void e.enqueue({type:"configuration",data:n});e.enqueue({type:"data",data:n,keyframe:t.keyFrame})}catch(t){e.error(t)}},n=()=>e.close(),i=t=>e.error(t);t=()=>{c.off("video-data",r),c.off("disconnect",n),c.off("error",i)},c.on("video-data",r),c.on("disconnect",n),c.on("error",i)},cancel(){null==t||t()}}).pipeThrough(s));c.on("connect",()=>{var t,n;w("waiting-for-stream"),S(em()),D(),g.current=setTimeout(()=>{e||(v.current=!0,w("error"),x(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 metadata.`}(A)),S(em()),c.disconnect(),h.current=null,o())},A),c.emit("connect-device",(t=eb({},"string"==typeof r&&r.trim()?{deviceId:r.trim()}:{}),n=n={maxSize:1024},Object.getOwnPropertyDescriptors?Object.defineProperties(t,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(t,e,Object.getOwnPropertyDescriptor(n,e))}),t))}),c.on("preview-status",t=>{var r;!e&&"object"==typeof(r=t)&&null!==r&&"message"in r&&"string"==typeof r.message&&(w("waiting-for-stream"),S(t.message))}),c.on("video-metadata",t=>ev(function*(){try{D(),N(),S("Starting video decoder…"),"number"==typeof t.width&&t.width>0&&"number"==typeof t.height&&t.height>0&&(null==n||n({width:t.width,height:t.height}));let r=t.codec?t.codec:ep.n.H264,i=yield ev(function*(){var e;let t=eh.p.isSupported?new eh.p:new ef.x,n=t.canvas;return n.style.width="100%",n.style.height="100%",n.style.objectFit="contain",T(),null==(e=p.current)||e.appendChild(n),new es.p({codec:r,renderer:t})})();f.current=i,u.pipeTo(i.writable).catch(t=>{e||(w("error"),x(t.message),o())}),S(em()),w("connected")}catch(t){if(e)return;w("error"),x(t instanceof Error?t.message:"Failed to start decoder."),S(em()),o()}})()),c.on("disconnect",()=>{if(D(),!e){if(v.current){v.current=!1;return}w("disconnected"),x(null),S(em()),o()}}),c.on("connect_error",t=>{D(),e||(w("error"),x(t.message),S(em()),o())}),c.on("error",t=>{D(),e||(w("error"),x(t.message),S(em()),o())})};return t=setTimeout(()=>{t=null,a()},0),()=>{e=!0,i()}},[r,A,c,j,l]),(0,o.jsxs)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:[E&&!R?(0,o.jsx)(y.A,{type:"warning",showIcon:!0,style:{marginBottom:12},message:P,description:E}):null,(0,o.jsxs)("div",{ref:d,style:eb({position:"relative",flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",background:"#111827",borderRadius:8,overflow:"hidden"},u),children:[(0,o.jsx)("div",{ref:p,style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center"}}),"connected"!==b?R&&s?(0,o.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:s({errorMessage:E,retry:M,status:b,statusText:P})}):"error"!==b&&"disconnected"!==b&&t?(0,o.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:t}):(0,o.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,o.jsx)(en.A,{spinning:!0}),(0,o.jsx)(ew,{style:{color:"#fff"},children:P}),"error"===b?(0,o.jsx)(ew,{style:{color:"#d1d5db"},children:"Scrcpy preview will retry automatically."}):null,!C&&(0,o.jsx)(ew,{style:{color:"#d1d5db"},children:"Please use a modern Chromium browser to view the stream."})]}):null]})]})}let ex=["android","ios","web","harmony","computer"],ek=["countdown-before-run"];function eS(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(ex.includes(e))return e}return t}function eC(e){return((null==e?void 0:e.executionUxHints)||[]).filter(e=>ek.includes(e))}function eI(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function ej(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eI(o,n,i,a,s,"next",e)}function s(e){eI(o,n,i,a,s,"throw",e)}a(void 0)})}}function eO(e){var t,r;let{connectingOverlay:n,onDeviceSizeChange:i,onScrcpyStatusChange:s,renderErrorOverlay:l,scrcpyViewportStyle:A,screenshotViewerMode:c,playgroundSDK:u,runtimeInfo:d,serverUrl:h,serverOnline:f,isUserOperating:g}=e,{message:m}=p.A.useApp(),v=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 i,o;let t,a="string"==typeof(null==e||null==(i=e.metadata)?void 0:i.deviceId)?e.metadata.deviceId.trim():void 0;if("string"==typeof a&&/^\d+\.\d+\.\d+\.\d+:\d+$/.test(a))return{type:"screenshot"};let s=Number(null==(o=r.custom)?void 0:o.scrcpyPort),l=Number.isFinite(s)?s:void 0,A=l&&n?((t=new URL(n)).port=String(l),t.pathname="/",t.search="",t.hash="",t.toString()):void 0;return{deviceId:a,type:"scrcpy",scrcpyPort:l,scrcpyUrl:A}}return{type:"screenshot"}}(d,h),[b,w]=(0,a.useState)(null),[E,x]=(0,a.useState)(null),[k,S]=(0,a.useState)(null),[C,I]=(0,a.useState)("connecting"),j=(0,a.useRef)(Promise.resolve()),O=(0,a.useRef)(""),P=(0,a.useRef)(null),R=(0,a.useRef)(null),M=(0,a.useRef)(null),T=(0,a.useRef)(null),N=null!=(t=null==k?void 0:k.includes("Tap"))&&t,D=(null==k?void 0:k.includes("Swipe"))?"Swipe":"DragAndDrop",B=(null==k?void 0:k.includes("KeyboardPress"))||(null==k?void 0:k.includes("Input"))||!1,z=null!=(r=null==k?void 0:k.includes("Scroll"))&&r,L=(0,a.useCallback)(e=>{let t=j.current.then(e,e);return j.current=t.catch(()=>void 0),t},[m]);(0,a.useEffect)(()=>{if(!f){w(null),S(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;w(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;S(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,f]),(0,a.useEffect)(()=>{null==i||i(null!=E?E:b)},[b,i,E]);let F="scrcpy"===v.type&&es.p.isSupported,K="screenshot"===v.type||"scrcpy"===v.type&&!F,U="scrcpy"===v.type&&!es.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}}(),Q="none"!==v.type&&(!F||"connected"===C),Z=(0,a.useCallback)((e,t)=>{m.open({type:"error",content:t||e,key:"manual-control-error"})},[]),J=(0,a.useCallback)(()=>{R.current&&(clearTimeout(R.current),R.current=null)},[]),X=(0,a.useCallback)(()=>{var e,t;J();let r=O.current,n=P.current;if(!r)return null!=(e=M.current)?e:Promise.resolve();O.current="",P.current=null;let i=(null!=(t=M.current)?t:Promise.resolve()).catch(()=>void 0).then(()=>ej(function*(){let e=yield L(()=>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||Z("Input failed",e.error)})()).finally(()=>{M.current===i&&(M.current=null)});return M.current=i,M.current},[J,L,u,Z]),H=(0,a.useCallback)(e=>ej(function*(){yield X();let t=yield L(()=>u.interact({actionType:"Tap",x:e.x,y:e.y}));t.ok||Z("Tap failed",t.error)})(),[L,X,u,Z]),q=(0,a.useCallback)((e,t,r)=>ej(function*(){yield X();let n=yield L(()=>{var n,i,o,a,s,l;let A;return u.interact((n=D,i=e,o=t,a=r,A={actionType:n,x:i.x,y:i.y,endX:o.x,endY:o.y},"DragAndDrop"===n?A:(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}({},A),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||Z(`${D} failed`,n.error)})(),[L,X,D,u,Z]),G=(0,a.useCallback)((e,t)=>{e&&(O.current+=e,t&&(P.current=t),J(),R.current=setTimeout(()=>{X()},120))},[J,X]);(0,a.useEffect)(()=>{f&&Q&&B||(J(),O.current="",P.current=null)},[J,B,Q,f]),(0,a.useEffect)(()=>()=>{f&&Q&&B&&O.current?X():(J(),P.current=null)},[J,X,B,v.type,Q,d,f,h]);let V=(0,a.useCallback)(e=>ej(function*(){if(!e)return;yield X();let t=yield L(()=>u.interact({actionType:"KeyboardPress",keyName:e}));t.ok||Z("Keyboard press failed",t.error)})(),[L,X,u,Z]),W=(0,a.useCallback)((e,t)=>ej(function*(){yield X();let r=yield L(()=>{let r,n,i;return u.interact((n=(r=Math.abs(t.deltaY)>=Math.abs(t.deltaX))?Math.abs(t.deltaY):Math.abs(t.deltaX),i=r?t.deltaY>=0?"down":"up":t.deltaX>=0?"right":"left",{actionType:"Scroll",x:e.x,y:e.y,scrollType:"singleAction",direction:i,distance:Math.max(1,Math.round(n))}))});r.ok||Z("Scroll failed",r.error)})(),[L,X,u,Z]),Y=(0,a.useCallback)((e,t)=>{I(e),null==s||s(e,t)},[s]);return(0,o.jsxs)("div",{style:{flex:1,minHeight:0,height:"100%",position:"relative"},children:[U&&(0,o.jsx)(el.A,{content:(0,o.jsxs)("div",{style:{maxWidth:360},children:[(0,o.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,o.jsx)("p",{style:{margin:"0 0 8px"},children:"Currently using screenshot polling as fallback. To enable scrcpy streaming:"}),(0,o.jsxs)("ol",{style:{margin:0,paddingLeft:18},children:[(0,o.jsxs)("li",{children:["Open"," ",(0,o.jsx)("code",{children:"chrome://flags/#unsafely-treat-insecure-origin-as-secure"})]}),(0,o.jsxs)("li",{children:["Add ",(0,o.jsx)("code",{children:window.location.origin})]}),(0,o.jsxs)("li",{children:["Set to ",(0,o.jsx)("b",{children:"Enabled"})," and relaunch Chrome"]})]})]}),title:"Screenshot polling mode",trigger:"click",placement:"bottomRight",children:(0,o.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,o.jsx)("span",{style:{color:"#fff",fontSize:14,fontWeight:"bold",lineHeight:1},children:"!"})})}),"none"===v.type?(0,o.jsx)(y.A,{type:"warning",showIcon:!0,message:"Preview unavailable",description:"This session did not expose a preview capability in runtime metadata."}):F?(0,o.jsx)(eE,{connectingOverlay:n,deviceId:v.deviceId,onIntrinsicSize:x,onStatusChange:Y,renderErrorOverlay:l,serverUrl:v.scrcpyUrl,viewportStyle:A,contentRef:T}):(0,o.jsx)(ea,{getScreenshot:()=>K?u.getScreenshot():Promise.resolve(null),getInterfaceInfo:()=>u.getInterfaceInfo(),serverOnline:f,isUserOperating:g,mjpegUrl:v.mjpegUrl,mode:null!=c?c:"screen-only",contentRef:T}),(0,o.jsx)(ed,{enabled:N&&f&&Q,deviceSize:b,contentRef:T,onTap:H,onSwipe:q,scrollEnabled:z,onWheelScroll:W,keyboardEnabled:B,onTextInput:G,onKeyboardPress:V})]})}function eP(e){return(0,o.jsx)(eO,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 eR=r(2770);function eM(e){let{children:t}=e;return(0,o.jsx)(eR.Ay,{theme:{token:{colorPrimary:"#2B83FF"},components:{Layout:{headerHeight:60,headerPadding:"0 30px",headerBg:"#FFF",bodyBg:"#FFF"}}},children:(0,o.jsx)(p.A,{component:!1,children:t})})}var eT=r(4565),eN=r(217),eD=r(6987);let eB=()=>{let e=(0,eN.j)(eD.v4),t="";e&&(console.warn("MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),t="ai:profile"),(0,eN.j)(eD.$l)&&(console.warn("MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),t=t?"ai:*":"ai:call"),t&&(0,eT.N)(t)};var ez=r(5409);function eL(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let eF={modelName:eD._q,socksProxy:eD.T4,httpProxy:eD.Yf,openaiBaseURL:eD.kX,openaiApiKey:eD.Lh,openaiExtraConfig:eD.Z7,extraBody:eD.Pm,modelFamily:eD.v,timeout:eD.Yg,temperature:eD.V7,retryCount:eD.vC,retryInterval:eD.xg,reasoningEffort:eD.y2,reasoningEnabled:eD.nc,reasoningBudget:eD.fS},eK={modelName:eD.xP,socksProxy:eD.mZ,httpProxy:eD.zQ,openaiBaseURL:eD.zG,openaiApiKey:eD.OK,openaiExtraConfig:eD.ag,extraBody:eD.WH,modelFamily:eD.OY,timeout:eD.Z$,temperature:eD.Cn,retryCount:eD.sg,retryInterval:eD.wu,reasoningEffort:eD.Vb,reasoningEnabled:eD.u1,reasoningBudget:eD.aO},eU={modelName:eD.HR,socksProxy:eD.iw,httpProxy:eD.FU,openaiBaseURL:eD.$H,openaiApiKey:eD.IQ,openaiExtraConfig:eD.I2,extraBody:eD.G0,modelFamily:eD.yR,timeout:eD.zD,temperature:eD.W4,retryCount:eD.Km,retryInterval:eD.aK,reasoningEffort:eD.VM,reasoningEnabled:eD.M1,reasoningBudget:eD.AU};var eQ=r(9152);let eZ=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),i=e.length-6,o=t.repeat(i);return`${r}${o}${n}`},eJ=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,eZ(r)];if("object"==typeof r){let e=JSON.stringify(r);if(/key/i.test(e))return[t,eZ(e)]}return[t,r]})),eX=(e,t)=>{if(t)try{return JSON.parse(t)}catch(t){throw Error(`Failed to parse ${e} as a JSON. ${t.message}`,{cause:t})}},eH={insight:eF,planning:eK,default:eU},eq=(e,t)=>{let r=(0,eT.a)("ai:config");r("will decideModelConfig base on agent.modelConfig()",e,eJ(t));let n=eH[e];if(!t[n.modelName])return void r("no modelName found for intent",e);let i=(e=>{var t,r,n;let i,{keys:o,provider:a,useLegacyLogic:s=!1}=e;eB(),(0,eT.a)("ai:config")("enter parseOpenaiSdkConfig with keys:",o);let l=s?a[eD.Jq]:void 0,A=s?a[eD.jG]:void 0,c=s?a[eD.$]:void 0,u=s?a[eD.CA]:void 0,d=s?a[eD.b6]:void 0,p=s?(e=>{let t=e[eD.pp],r=e[eD.yb],n=e[eD.NF],i=e[eD.JM],o=e[eD.j_],a=[t&&eD.pp,r&&eD.yb,n&&eD.NF,i&&eD.JM,o&&eD.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(o)return"gemini";if(i)if("1"===i)return"vlm-ui-tars";else if("DOUBAO"===i||"DOUBAO-1.5"===i)return"vlm-ui-tars-doubao-1.5";else return"vlm-ui-tars-doubao"})(a):void 0,h=a[o.modelFamily]||p,f=a[o.openaiApiKey]||l,g=a[o.openaiBaseURL]||A,m=a[o.socksProxy]||c,y=a[o.httpProxy]||u,v=a[o.modelName],b=a[o.openaiExtraConfig],w=eX(o.openaiExtraConfig,b||d),E=a[o.extraBody],x=eX(o.extraBody,E),k=(e=>{if(void 0===e||""===e)return;let t=Number(e);return Number.isFinite(t)?t:void 0})(a[o.temperature]);if(h&&!eD._j.includes(h))throw Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${h}. Current version v1.10.4 accepts the following model families: ${eD._j.join(", ")}. You can also visit https://midscenejs.com/model-common-config.html for the latest configuration information.`);let S="vlm-ui-tars"===h?eD.UH.V1_0:"vlm-ui-tars-doubao"===h||"vlm-ui-tars-doubao-1.5"===h?eD.UH.DOUBAO_1_5_20B:void 0,C=S?`UI-TARS=${S}`:h?`${h} mode`:"";return{socksProxy:m,httpProxy:y,openaiBaseURL:g,openaiApiKey:f,openaiExtraConfig:(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return;let{defaultHeaders:t,extra_headers:r,extraHeaders:n,...i}=e,o=t??r??n;return void 0!==o?{...i,defaultHeaders:o}:i})(w),extraBody:x,modelFamily:h,uiTarsModelVersion:S,modelName:v,modelDescription:C,intent:"-",slot:"-",timeout:a[o.timeout]?Number(a[o.timeout]):void 0,temperature:k,retryCount:(()=>{if(!a[o.retryCount])return 1;let e=Number(a[o.retryCount]);if(!Number.isFinite(e))return 1;if(e<0)throw Error(`${o.retryCount} must be non-negative, got ${e}`);return e})(),retryInterval:(()=>{if(!a[o.retryInterval])return 2e3;let e=Number(a[o.retryInterval]);if(!Number.isFinite(e))return 2e3;if(e<0)throw Error(`${o.retryInterval} must be non-negative, got ${e}`);return e})(),reasoningEffort:(null==(t=a[o.reasoningEffort])?void 0:t.trim())||void 0,reasoningEnabled:"true"===(i=null==(n=a[o.reasoningEnabled])||null==(r=n.trim())?void 0:r.toLowerCase())||"1"===i||"false"!==i&&"0"!==i&&("default"===i?"default":void 0),reasoningBudget:(()=>{var e;let t=null==(e=a[o.reasoningBudget])?void 0:e.trim();if(!t)return;let r=Number(t);return Number.isFinite(r)?r:void 0})()}})({keys:n,provider:t,useLegacyLogic:"default"===e});return i.intent=e,i.slot=e,r("decideModelConfig result by agent.modelConfig() with intent",e,eJ({...i})),(0,eQ.vA)(i.openaiBaseURL,`failed to get base URL of model (intent=${e}). See https://midscenejs.com/model-strategy`),i.modelName||console.warn(`modelName is not set for intent ${e}, this may cause unexpected behavior. See https://midscenejs.com/model-strategy`),i};function eG(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eV{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=eq("default",t);if(!r)throw Error("Model configuration is incomplete: model name (MIDSCENE_MODEL_NAME) is required. See https://midscenejs.com/model-strategy.html");let n=eq("insight",t),i=eq("planning",t);this.modelConfigMap={default:{...r,intent:"default",slot:"default",createOpenAIClient:this.createOpenAIClientFn},insight:{...n||r,intent:"insight",slot:n?"insight":"default",createOpenAIClient:this.createOpenAIClientFn},planning:{...i||r,intent:"planning",slot:i?"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(){if(!this.getModelConfig("default").modelFamily)throw Error("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){eG(this,"modelConfigMap",void 0),eG(this,"isInitialized",!1),eG(this,"isolatedMode",!1),eG(this,"globalConfigManager",void 0),eG(this,"modelConfig",void 0),eG(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let eW=new eV,eY=new class{getAllEnvConfig(){let e=eD.tk.reduce((e,t)=>(e[t]=ez.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===eD.Sk)throw Error("MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead");if(!eD.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(!eD.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(!eD.rd.includes(e)&&!eD.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(![...eD.Lg,...eD.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(){eL(this,"override",void 0),eL(this,"keysHaveBeenRead",{}),eL(this,"globalModelConfigManager",void 0),eB()}};eY.registerModelConfigManager(eW),eW.registerGlobalConfigManager(eY);let e_=()=>{let e=eY.getEnvConfigValue(eD.El);return e?e:"Asia/Shanghai"===Intl.DateTimeFormat().resolvedOptions().timeZone?"Chinese":"English"},e$=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];eY.overrideAIConfig(e,t)};var e0=r(3585),e1=r(5409),e2=r(4201).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,eT.a)("ai:call:codex"),e4=(0,eT.a)("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),i=r.hostname.toLowerCase();if("win32"===t){let e=n.replace(/\//g,"\\").replace(/^\\([A-Za-z]:)/,"$1");if(i&&"localhost"!==i)return`\\\\${r.hostname}${e}`;return e}if(i&&"localhost"!==i)return`//${r.hostname}${n}`;return n}catch{return decodeURIComponent(e.slice(7))}},te=e=>{let t=e.content;return"string"==typeof t?t:Array.isArray(t)?t.map(e=>e&&"object"==typeof e&&("text"===e.type&&"string"==typeof e.text||"input_text"===e.type&&"string"==typeof e.text)?e.text:"").filter(Boolean).join("\n"):""},tt=e=>{let t=e.content;if(!Array.isArray(t))return[];let r=[];for(let e of t){var n;if(!e||"object"!=typeof e)continue;let t=String(e.type||""),i="image_url"===t?e6(null==(n=e.image_url)?void 0:n.url):"input_image"===t?e6(e.image_url||e.url):void 0;if(i){if(i.startsWith("/")||i.startsWith("./")||i.startsWith("../")||i.startsWith("file://")){let e=i.startsWith("file://")?e9(i):i;r.push({type:"localImage",path:e});continue}r.push({type:"image",url:i})}}return r};class tr{static async create(){if(eQ.ht)throw Error("codex app-server provider is not supported in browser runtime");let{spawn:e}=await r(8817)("node:child_process"),t=await r(8541)("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 i=t.createInterface({input:n.stdout,crlfDelay:1/0}),o=new tr(n,i);return o.detachFromEventLoop(),o.attachProcessListeners(),await o.initializeHandshake(),o}isClosed(){return this.closed}async runTurn(e){let t,r,n,i,{messages:o,modelConfig:a,stream:s,onChunk:l,reasoningEnabled:A,abortSignal:c}=e,u=Date.now(),d=a.timeout||6e5,p=Date.now()+d,h=!!(s&&l),{developerInstructions:f,input:g}=(e=>{let t=[],r=[],n=[];for(let i of e){let e=String(i.role||"user"),o=te(i);if("system"===e){o.trim()&&t.push(o.trim());continue}let a=e.toUpperCase();o.trim()?r.push(`[${a}]
3
- ${o.trim()}`):r.push(`[${a}]
4
- (no text content)`),"user"===e&&n.push(...tt(i))}let i=r.join("\n\n"),o=[{type:"text",text:(i.length>262144?i.slice(-262144):i)||"Please answer the latest user request.",text_elements:[]},...n];return{developerInstructions:t.length?t.join("\n\n"):void 0,input:o}})(o),m=(e=>{var t;let{reasoningEnabled:r,modelConfig:n}=e;if(!0===r)return"high";if(!1===r)return"none";if("default"===r)return;let i=null==(t=n.reasoningEffort)?void 0:t.trim().toLowerCase();return"none"===i||"minimal"===i||"low"===i||"medium"===i||"high"===i||"xhigh"===i?i:"none"})({reasoningEnabled:A,modelConfig:a}),y="",v="",b=e=>{let{content:t,reasoning:r,isComplete:n,usage:i}=e;h&&l&&l({content:t,reasoning_content:r,accumulated:y,isComplete:n,usage:i})};try{var w,E,x,k,S,C,I,j;let e,o=await this.request({method:"thread/start",params:{model:a.modelName,cwd:e1.cwd(),approvalPolicy:"never",sandbox:"read-only",ephemeral:!0,experimentalRawEvents:!1,persistExtendedHistory:!1,developerInstructions:f||null},deadlineAt:p,abortSignal:c});if(!(t=null==o||null==(w=o.thread)?void 0:w.id))throw Error("thread/start did not return a thread id");let s=await this.request({method:"turn/start",params:{threadId:t,input:g,effort:m},deadlineAt:p,abortSignal:c});if(!(r=null==s||null==(E=s.turn)?void 0:E.id))throw Error("turn/start did not return a turn id");for(;!e;){let o=await this.nextMessage({deadlineAt:p,abortSignal:c});if(this.isResponseMessage(o))continue;if(this.isRequestMessage(o)){await this.respondToServerRequest(o);continue}let s=o.method,l=o.params||{};if("error"===s){let e=(null==(C=l.error)?void 0:C.message)||l.message||"codex app-server reported turn error";n=String(e);continue}if("item/agentMessage/delta"===s&&l.threadId===t&&l.turnId===r){let e=String(l.delta||"");e&&(y+=e,b({content:e,reasoning:"",isComplete:!1}));continue}if(("item/reasoning/summaryTextDelta"===s||"item/reasoning/textDelta"===s)&&l.threadId===t&&l.turnId===r){let e=String(l.delta||"");e&&(v+=e,b({content:"",reasoning:e,isComplete:!1}));continue}if("item/completed"===s&&l.threadId===t&&l.turnId===r&&(null==(x=l.item)?void 0:x.type)==="agentMessage"&&"string"==typeof(null==(k=l.item)?void 0:k.text)&&!y){y=l.item.text;continue}if("thread/tokenUsage/updated"===s&&l.threadId===t&&l.turnId===r){i=this.mapUsage({usage:l,modelConfig:a,turnId:r,startTime:u});continue}if("turn/completed"===s&&l.threadId===t&&(null==(S=l.turn)?void 0:S.id)===r){e=String(l.turn.status||""),n=(null==(j=l.turn)||null==(I=j.error)?void 0:I.message)||n||void 0;break}}if("completed"!==e)throw Error(n||`codex turn finished with status "${e||"unknown"}"`);return h&&b({content:"",reasoning:"",isComplete:!0,usage:i}),{content:y,reasoning_content:v||void 0,usage:i,isStreamed:h}}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,i,o,a;if(!this.closed){this.closed=!0;try{null==(t=this.lineReader)||null==(e=t.close)||e.call(t)}catch{}try{null==(i=this.child)||null==(n=i.stdin)||null==(r=n.end)||r.call(n)}catch{}try{null==(a=this.child)||null==(o=a.kill)||o.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,i,o,a,s;null==(e=(t=this.child).unref)||e.call(t),null==(n=this.child.stdin)||null==(r=n.unref)||r.call(n),null==(o=this.child.stdout)||null==(i=o.unref)||i.call(o),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{usage:t,modelConfig:r,turnId:n,startTime:i}=e,o=t.tokenUsage,a=(null==o?void 0:o.last)||(null==o?void 0:o.total);if(a)return{...a,prompt_tokens:a.inputTokens??0,completion_tokens:a.outputTokens??0,total_tokens:a.totalTokens??0,cached_input:a.cachedInputTokens??0,time_cost:Date.now()-i,model_name:r.modelName,model_description:r.modelDescription,response_model_name:void 0,slot:r.slot,intent:void 0,request_id:n}}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:i}=e,o=this.nextRequestId++;for(await this.sendMessage({id:o,method:t,params:r});;){let e=await this.nextMessage({deadlineAt:n,abortSignal:i,includePending:!1});if(this.isResponseMessage(e)&&e.id===o){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}
5
- `,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,modelConfig:r,stream:n,onChunk:i,reasoningEnabled:o,abortSignal:a}=e;return this.runner.run(async()=>{let e=await this.getConnection();try{return await e.runTurn({messages:t,modelConfig:r,stream:n,onChunk:i,reasoningEnabled:o,abortSignal:a})}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 ti(e,t,r){if(eQ.ht)throw Error("codex app-server provider is not supported in browser runtime");return tn.runTurn({messages:e,modelConfig:t,stream:null==r?void 0:r.stream,onChunk:null==r?void 0:r.onChunk,reasoningEnabled:null==r?void 0:r.reasoningEnabled,abortSignal:null==r?void 0:r.abortSignal})}let to=(0,eT.a)("ai:call");function ta(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated, ${e.length} chars total]`}function ts(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 tl="AI_CALL_HARD_TIMEOUT";function tA(e){let{timeout:t}=e;return"number"!=typeof t?18e4:t<=0?null:t}function tc(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(()=>{let t=Error(`AI call hard timeout after ${e}ms (full request time exceeded)`);t.code=tl,n.abort(t)},e)).unref&&r.unref();let i=t?()=>n.abort(t.reason):void 0;return t&&i&&t.addEventListener("abort",i,{once:!0}),{signal:n.signal,cleanup:()=>{r&&clearTimeout(r),t&&i&&t.removeEventListener("abort",i)}}}var tu=r(4990);function td(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 tp(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`expected parsed LLM response to be a JSON object, got ${JSON.stringify(e)}`)}function th(e){try{return JSON.parse(e)}catch{return JSON.parse((0,tu.m)(e))}}function tf(e,t){let r,n=td(e),i=(null==t?void 0:t.requireObject)??!0;try{r=th(n),i&&tp(r)}catch(o){let t=n;if(t===n)throw Error(`failed to parse LLM response into JSON. Error - ${String(o)}. Response -
6
- ${e}`);try{r=th(t),i&&tp(r)}catch(t){throw Error(`failed to parse LLM response into JSON. First error - ${String(o)}. Second error - ${String(t)}. Response -
7
- ${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 i={};for(let[o,a]of Object.entries(t)){var n;let t=o.trim(),s=(null==(n=r.preserveStringValueKeys)?void 0:n.includes(t))??!1,l="string"==typeof a?s?a:a.trim():e(a,r);i[t]=l}return i}return"string"==typeof t?t.trim():t}(r,t)}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 tm extends Error{constructor(e,t,r,n){super(e),tg(this,"usage",void 0),tg(this,"rawResponse",void 0),tg(this,"rawChoiceMessage",void 0),this.name="AIResponseParseError",this.rawResponse=t,this.usage=r,this.rawChoiceMessage=n}}let ty="_midscene_call_id",tv=0;function tb(e){var t;return null==(t=e.responseRequestIds)?void 0:t.reduce((e,t)=>t.ok?t.requestId:e,void 0)}async function tw(e){let t,n,i,{modelConfig:o}=e,{socksProxy:a,httpProxy:s,modelName:l,openaiBaseURL:A,openaiApiKey:c,openaiExtraConfig:u,modelDescription:d,modelFamily:p,createOpenAIClient:h,timeout:f}=o,g=(0,eT.a)("ai:call",{console:!0}),m=(0,eT.a)("ai:call:proxy"),y=(0,eT.a)("ai:call:proxy",{console:!0}),v=e=>{try{let t=new URL(e);if(t.username)return t.password="****",t.href;return e}catch{return e}};if(s)if(m("using http proxy",v(s)),eQ.ht)y("HTTP proxy is configured but not supported in browser environment");else{let{ProxyAgent:e}=await r(5737)("undici");i=new e({uri:s})}else if(a)if(m("using socks proxy",v(a)),eQ.ht)y("SOCKS proxy is configured but not supported in browser environment");else try{let{socksDispatcher:e}=await r(3348)("fetch-socks"),t=new URL(a);if(!t.hostname)throw Error("SOCKS proxy URL must include a valid hostname");let n=Number.parseInt(t.port,10);if(!t.port||Number.isNaN(n))throw Error("SOCKS proxy URL must include a valid port");let o=t.protocol.replace(":",""),s="socks4"===o?4:5;i=e({type:s,host:t.hostname,port:n,...t.username?{userId:decodeURIComponent(t.username),password:decodeURIComponent(t.password||"")}:{}}),m("socks proxy configured successfully",{type:s,host:t.hostname,port:n})}catch(e){throw y("Failed to configure SOCKS proxy:",e),Error(`Invalid SOCKS proxy URL: ${a}. Expected format: socks4://host:port, socks5://host:port, or with authentication: socks5://user:pass@host:port`)}let b=tA({timeout:f}),w={},E={baseURL:A,apiKey:c,...i?{fetchOptions:{dispatcher:i}}:{},...u,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")}(),n=0,async(e,r)=>{let i;n+=1;try{i=await t(e,r)}catch(i){let e,t,r=(e=[ts(i)],void 0!==(t=i&&"object"==typeof i?i.cause:void 0)&&e.push(`Cause: ${ts(t)}`),ta(e.join("\n"),4e3));throw to("OpenAI-compatible fetch failed",r),w.fetchErrors??(w.fetchErrors=[]),w.fetchErrors.push({attempt:n,error:r}),i}let o=i.headers.get("x-request-id")??i.headers.get("x-model-request-id");if(o&&(w.responseRequestIds??(w.responseRequestIds=[]),w.responseRequestIds.push({attempt:n,requestId:o,status:i.status,ok:i.ok})),!i.ok){let e=await i.clone().text().catch(()=>void 0);void 0!==e&&(w.rawResponseBodies??(w.rawResponseBodies=[]),w.rawResponseBodies.push({attempt:n,body:e}))}return i}),maxRetries:0,...null!==b?{timeout:b}:{},dangerouslyAllowBrowser:!0},x=new e0.Ay(E),k=x;if(k&&eY.getEnvConfigInBoolean(eD.ZX)){if(eQ.ht)throw Error("langsmith is not supported in browser");g("DEBUGGING MODE: langsmith wrapper enabled");let{wrapOpenAI:e}=await r(1560)("langsmith/wrappers");k=e(k)}if(k&&eY.getEnvConfigInBoolean(eD.$L)){if(eQ.ht)throw Error("langfuse is not supported in browser");g("DEBUGGING MODE: langfuse wrapper enabled");let{observeOpenAI:e}=await r(9998)("@langfuse/openai");k=e(k)}if(h){let e=await h(x,E);e&&(k=e)}return{completion:k.chat.completions,modelName:l,modelDescription:d,modelFamily:p,openAIErrorResponseContext:w}}async function tE(e,t,r){var n,i,o,a,s,l,A,c,u,d;let p,h,f,g,m,y,{config:v,adapter:b}=t,w=(tv+=1,`call_${tv}`);if((n=v.openaiBaseURL)&&n.trim().toLowerCase().startsWith("codex://")){let n=await ti(e,v,{stream:null==r?void 0:r.stream,onChunk:null==r?void 0:r.onChunk,reasoningEnabled:v.reasoningEnabled,abortSignal:null==r?void 0:r.abortSignal});return n.usage&&(n.usage[ty]=w,t.onUsage&&t.onUsage(n.usage)),n}let{completion:E,modelName:x,modelDescription:k,modelFamily:S,openAIErrorResponseContext:C}=await tw({modelConfig:v}),I=tA(v),j=v.extraBody,O=(0,eT.a)("ai:call"),P=(0,eT.a)("ai:call",{console:!0}),R=(0,eT.a)("ai:profile:stats"),M=(0,eT.a)("ai:profile:detail"),T=Date.now(),N=(null==r?void 0:r.stream)&&(null==r?void 0:r.onChunk),D={intent:v.intent,userConfig:{temperature:v.temperature,reasoningEnabled:v.reasoningEnabled,reasoningEffort:v.reasoningEffort,reasoningBudget:v.reasoningBudget},requiresOriginalImageDetail:null==r?void 0:r.requiresOriginalImageDetail},{config:B}=b.chatCompletion.buildChatCompletionParams(D);O(`adapter chat completion params: ${function(e){try{return JSON.stringify(e)}catch(t){return String(e)}}({config:B})}`);let z="",L="",F=!1,K=e=>"string"==typeof e&&e.trim().length>0,U=(e,t)=>!K(e)&&b.chatCompletion.useReasoningAsContentFallback&&K(t)?(P("empty content from AI model, using reasoning content"),t):e,Q=(e,t)=>{var r;if(!e)return;let n=null==e||null==(r=e.prompt_tokens_details)?void 0:r.cached_tokens;return{...e,prompt_tokens:e.prompt_tokens??0,completion_tokens:e.completion_tokens??0,total_tokens:e.total_tokens??0,cached_input:n??0,time_cost:g??0,model_name:x,model_description:k,response_model_name:y,slot:v.slot,intent:void 0,request_id:t??void 0,[ty]:w}},Z={...B,...j??{}},J=Z.temperature,X=b.chatCompletion.resolveImageDetail(D),H=X?e.map(e=>{if(!Array.isArray(e.content))return e;let t=e.content.map(e=>{var t;return e&&"image_url"===e.type&&(null==(t=e.image_url)?void 0:t.url)?{...e,image_url:{...e.image_url,detail:X}}:e});return{...e,content:t}}):e;try{if(O(`sending ${N?"streaming ":""}request to ${x}`),N){let{signal:e,cleanup:n}=tc(I,null==r?void 0:r.abortSignal);try{let n=await E.create({model:x,messages:H,...Z,stream:!0},{stream:!0,signal:e});for await(let e of(m=tb(C)??n._request_id,n)){let n=b.chatCompletion.extractContentAndReasoning(null==(o=e.choices)||null==(i=o[0])?void 0:i.delta),l=n.content||"",A=n.reasoning_content||"";if(e.usage&&(f=e.usage),e.model&&(y=e.model),l||A){z+=l,L+=A;let e={content:l,reasoning_content:A,accumulated:z,isComplete:!1,usage:void 0};r.onChunk(e)}if(null==(s=e.choices)||null==(a=s[0])?void 0:a.finish_reason){if(g=Date.now()-T,!f){let e=Math.max(1,Math.floor(z.length/4));f={prompt_tokens:e,completion_tokens:e,total_tokens:2*e}}z=U(z,L)||"";let e=Q(f,m);e&&t.onUsage&&(t.onUsage(e),F=!0);let n={content:"",accumulated:z,reasoning_content:"",isComplete:!0,usage:e};r.onChunk(n);break}}}finally{n()}p=z,R(`streaming model, ${x}, mode, ${S||"default"}, cost-ms, ${g}, temperature, ${J??""}`)}else{let e,n=(d=v.retryCount,"number"==typeof d&&Number.isFinite(d)?Math.max(0,Math.floor(d)):1),i=v.retryInterval??2e3,o=n+1,a=[];for(let n=1;n<=o;n++){let{signal:s,cleanup:d}=tc(I,null==r?void 0:r.abortSignal);try{let e=await E.create({model:x,messages:H,...Z,stream:!1},{signal:s});if(g=Date.now()-T,m=tb(C)??e._request_id,R(`model, ${x}, mode, ${S||"default"}, prompt-tokens, ${(null==(l=e.usage)?void 0:l.prompt_tokens)||""}, completion-tokens, ${(null==(A=e.usage)?void 0:A.completion_tokens)||""}, total-tokens, ${(null==(c=e.usage)?void 0:c.total_tokens)||""}, cost-ms, ${g}, requestId, ${m||""}, temperature, ${J??""}`),M(`model usage detail: ${JSON.stringify(e.usage)}`),!e.choices)throw Error(`invalid response from LLM service: ${JSON.stringify(e)}`);h=e.choices[0].message;let r=b.chatCompletion.extractContentAndReasoning(e.choices[0].message);if(p=r.content,L=r.reasoning_content,f=e.usage,y=e.model,p=U(p,L),!K(p)){let e=Q(f,m);throw e&&t.onUsage&&t.onUsage(e),new tm("empty content from AI model",p||"",e,h)}break}catch(t){if(e=t instanceof Error?t:Error(String(t)),a.push({attempt:n,error:t}),function(e){if(!e||"object"!=typeof e)return!1;if(e.code===tl)return!0;let t=e.cause;return!!t&&"object"==typeof t&&t.code===tl}(e)&&P(`AI call hit hard timeout (${I}ms, attempt ${n}/${o}, model ${x}, slot ${v.slot})`),null==r||null==(u=r.abortSignal)?void 0:u.aborted)break;n<o&&(P(`AI call failed (attempt ${n}/${o}), retrying in ${i}ms... Error: ${e.message}`),await new Promise(e=>setTimeout(e,i)))}finally{d()}}if(!p)throw(0,eQ.vA)(e,"AI model request failed without recording an attempt error"),function(e,t,r){let n=t.length,i=Math.max(0,n-1),o=e.message,a=t.slice(0,-1);if(e.message=`AI model request failed after ${i} ${1===i?"retry":"retries"} (${n}/${r} attempts). Last error: ${o}`,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}
8
- Previous AI call attempt errors:
9
- ${s}`,e}(e,a,o)}if(O(`response reasoning content: ${L}`),O(`response content: ${p}`),N&&!f){let e=Math.max(1,Math.floor((p||"").length/4));f={prompt_tokens:e,completion_tokens:e,total_tokens:2*e}}let e=Q(f,m);return!F&&e&&t.onUsage&&t.onUsage(e),{content:p||"",reasoning_content:L||void 0,rawChoiceMessage:h,usage:e,isStreamed:!!N}}catch(e){if(P("call AI error",e),e instanceof tm)throw e;throw Error(`failed to call ${N?"streaming ":""}AI model service (${x}): ${e.message}${function(e,t){var r,n,i,o,a;let s=[];if((null==(r=t.rawResponseBodies)?void 0:r.length)===1)s.push(`OpenAI raw error response body: ${ta(t.rawResponseBodies[0].body,4e3)}`);else if(null==(n=t.rawResponseBodies)?void 0:n.length){let e=t.rawResponseBodies.map(e=>{let{attempt:t,body:r}=e;return`Attempt ${t}: ${ta(r,4e3)}`}).join("\n");s.push(`OpenAI raw error response bodies:
10
- ${e}`)}let l=null==(i=t.responseRequestIds)?void 0:i.filter(e=>{let{ok:t}=e;return!t});if((null==l?void 0:l.length)===1){let{attempt:e,requestId:t,status:r}=l[0];s.push(`OpenAI error response request ID (attempt ${e}, status ${r}): ${t}`)}else if(null==l?void 0:l.length){let e=l.map(e=>{let{attempt:t,requestId:r,status:n}=e;return`Attempt ${t} (status ${n}): ${r}`}).join("\n");s.push(`OpenAI error response request IDs:
11
- ${e}`)}if((null==(o=t.fetchErrors)?void 0:o.length)===1)s.push(`OpenAI fetch error (attempt ${t.fetchErrors[0].attempt}): ${t.fetchErrors[0].error}`);else if(null==(a=t.fetchErrors)?void 0:a.length){let e=t.fetchErrors.map(e=>{let{attempt:t,error:r}=e;return`Attempt ${t}: ${r}`}).join("\n");s.push(`OpenAI fetch errors:
12
- ${e}`)}return s.length?`
13
- ${s.join("\n")}`:""}(0,C)}
14
- Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:e})}}async function tx(e,t,r){let n,{config:i,adapter:o}=t,a=await tE(e,t,{abortSignal:null==r?void 0:r.abortSignal});(0,eQ.vA)(a,"empty response");try{n=o.jsonParser(a.content,{source:(null==r?void 0:r.jsonParserSource)??"generic-object"})}catch(e){throw new tm(e instanceof Error?e.message:String(e),a.content,a.usage)}if("object"!=typeof n)throw new tm(`failed to parse json response from model (${i.modelName}): ${a.content}`,a.content,a.usage,a.rawChoiceMessage);return{content:n,contentString:a.content,usage:a.usage,reasoning_content:a.reasoning_content,rawChoiceMessage:a.rawChoiceMessage}}async function tk(e,t,r){let{content:n,usage:i,rawChoiceMessage:o}=await tE(e,t,r);return{content:n,usage:i,rawChoiceMessage:o}}let tS=e=>void 0,tC=e=>{let{midsceneDefaults:t,userConfig:r}=e;return{config:{temperature:r.temperature??t.temperature}}},tI={temperature:0};function tj(e){return Math.max(e-1,0)}function tO(e,t,r){return Math.round(e*tj(r)/t)}function tP(e,t,r){return Math.min(Math.max(e,t),r)}function tR(e,t,r){let{preparedSize:n,contentSize:i}=r,{width:o,height:a}=n;if(4!==e.length||!e.every(e=>"number"==typeof e&&Number.isFinite(e)))throw Error(`invalid locate bbox data: ${JSON.stringify(t)} `);!function(e,t){let[r,n,i,o]=e;if(!(i>=r)||!(o>=n))throw Error(`locate pixel bbox has invalid coordinate order: bbox=${JSON.stringify(t)} pixelBbox=${JSON.stringify(e)}`)}(e,t),function(e,t,r,n){let[i,o,a,s]=e,l=tj(r),A=tj(n);if(i<0||o<0||a>l||s>A)throw Error(`locate pixel bbox is outside the image size: bbox=${JSON.stringify(t)} imageSize=${r}x${n}`)}(e,t,o,a);let s=tj((null==i?void 0:i.width)??o),l=tj((null==i?void 0:i.height)??a),[A,c,u,d]=e;return[tP(A,0,s),tP(c,0,l),tP(u,0,s),tP(d,0,l)]}function tM(e){return Array.isArray(e)&&Array.isArray(e[0])?e[0]:e}function tT(e,t){let r=tM(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 i=n.map(e=>"number"==typeof e?e:Number(e));if(!i.every(e=>Number.isFinite(e)))throw Error(`invalid ${t} data: ${JSON.stringify(e)} `);return i}function tN(e,t){return"point"===e.shape?{coordinates:[t[0],t[1]],coordinatesMeta:e}:{coordinates:[t[0],t[1],t[2],t[3]],coordinatesMeta:e}}let tD=[[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 tB(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"}let tz={primary:{bbox:["bbox","bbox_2d"],point:["point"]},references:{bbox:["references_bbox","references_bbox_2d"],point:["references_point"]}};function tL(e){let t=e.order??"xy";if(void 0!==e.normalizedBy&&e.normalizedBy<=0)throw Error(`locate result coordinates normalizedBy must be positive: ${e.normalizedBy}`);return{shape:e.shape,order:t,normalizedBy:e.normalizedBy}}function tF(e,t,r){let n=tz[r][t.shape];if(!e||"object"!=typeof e)return;let i=n.find(t=>void 0!==e[t]);return i?e[i]:void 0}function tK(e){let t,r,n,i,o,a="custom"===e.kind?e:(t=tL(e.coordinates),r=e.parseRawLocateValue??(e=>(function(e,t){if("point"===e.shape){let r=tT(t,"point");if(r.length<2)throw Error(`invalid point data: ${JSON.stringify(t)} `);return tN(e,r)}let r=tT(t,"bbox");if(4!==r.length)throw Error(`invalid bbox data: ${JSON.stringify(t)} `);return tN(e,r)})(t,e)),n=e.mapLocateResultToPixelBbox??((e,t)=>(function(e,t){var r,n,i,o,a;let{preparedSize:s}=t,{width:l,height:A}=s,c=e.coordinatesMeta,u=c.normalizedBy;!function(e,t,r){let n,i,o=e.coordinatesMeta,a=o.normalizedBy,s=void 0!==(i=(n=e.coordinatesMeta).normalizedBy)?e.coordinates.map(()=>i):"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)=>{let r=s[t];return"number"!=typeof e||!Number.isFinite(e)||e<0||e>r}))return;let l=void 0!==a?`normalized range [0, ${a}]`:`image size [0, ${t}]x[0, ${r}]`,A=void 0!==a?` normalizedBy=${a}`:"";throw Error(`locate result coordinates ${JSON.stringify(e.coordinates)} exceed ${l}. shape=${o.shape} order=${o.order}${A} limits=${JSON.stringify(s)}`)}(e,l,A);let d=function(e,t){if("yx"!==t)return e;if(4===e.length){let[t,r,n,i]=e;return[r,t,i,n]}let[r,n]=e;return[n,r]}(e.coordinates,c.order),p=4===d.length?d:(r=d[0],n=d[1],i=u??tj(l),o=u??tj(A),[Math.max(0,r-(a=void 0===u?10:u/100)),Math.max(0,n-a),Math.min(i,r+a),Math.min(o,n+a)]);return void 0===u?p:function(e,t,r,n){let[i,o,a,s]=e;return[tO(i,t,r),tO(o,t,n),tO(a,t,r),tO(s,t,n)]}(p,u,l,A)})(e,t)),i=(e,t)=>{let i=r(e);if(!i||"object"!=typeof i)throw Error(`invalid parsed locate result: expected object, got ${JSON.stringify(i)}`);let o=i.coordinatesMeta,a=(null==o?void 0:o.shape)==="bbox"?4:2*((null==o?void 0:o.shape)==="point");if(!a)throw Error(`invalid parsed locate result: unsupported coordinatesMeta.shape ${JSON.stringify(null==o?void 0:o.shape)}`);let s=i.coordinates;if(!Array.isArray(s)||s.length!==a||!s.every(e=>"number"==typeof e&&Number.isFinite(e)))throw Error(`invalid parsed locate result: ${o.shape} coordinates must be ${a} finite numbers, got ${JSON.stringify(s)}`);return n(i,t)},o=(e,r)=>i(function(e,t){let r=tF(e,t,"primary");if(void 0===r&&null!==e&&"object"==typeof e&&!Array.isArray(e))throw Error("locate response does not contain a recognizable locate result field");return void 0===r?e:r}(e,t),r),{promptSpec:{resultKey:function(e){let{shape:t}=e;return"point"===t?"point":"bbox"}(t),resultValueSchema:function(e){let{shape:t}=e;return"point"===t?"[number, number]":"[number, number, number, number]"}(t),resultValueDescription:function(e){let{shape:t,order:r,normalizedBy:n}=e,i="point"===t?"point":"2d bounding box",o=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?`${i}, should be ${"yx"===r?"[y, x]":"[x, y]"} ${o}.`:`${i}, should be ${"yx"===r?"[ymin, xmin, ymax, xmax]":"[xmin, ymin, xmax, ymax]"} ${o}.`}(t),resultNoun:tB(t),resultNounPlural:tB(t,{plural:!0}),exampleValues:tD.map(e=>(function(e,t){let[r,n,i,o]=t;if("point"===e.shape){let t=Math.round((r+i)/2),a=Math.round((n+o)/2);return"yx"===e.order?[a,t]:[t,a]}return"yx"===e.order?[n,r,o,i]:t})(t,e))},adaptElementLocateResultToPixelBbox:(e,t)=>o(e,t),adaptSectionLocateResultToPixelBboxGroup:(e,r)=>{var n;let a=o(e,r),s=(null==(n=tF(e,t,"references"))?[]:Array.isArray(n)?n:[n]).map(e=>i(e,r));return{target:a,...s.length>0?{references:s}:{}}},adaptPlanningParamToPixelBbox:(e,t)=>o(e,t)});return{promptSpec:a.promptSpec,adaptElementLocateResultToPixelBbox:(e,t)=>tR(a.adaptElementLocateResultToPixelBbox(e,t),e,t),adaptSectionLocateResultToPixelBboxGroup:(e,t)=>{var r;return r=a.adaptSectionLocateResultToPixelBboxGroup(e,t),{target:tR(r.target,e,t),...r.references?{references:r.references.map(r=>tR(r,e,t))}:{}}},adaptPlanningParamToPixelBbox:(e,t)=>tR(a.adaptPlanningParamToPixelBbox(e,t),e,t)}}var tU=r(6448),tQ=r(6732),tZ=r.n(tQ),tJ=r(4201),tX=r(5592),tH=r(3078),tq=r.n(tH);let tG=(0,eT.a)("img"),tV=null,tW=!1;async function tY(){if(tV&&tW)return tV;let e=eQ.ht?"browser":eQ.rS?"worker":eQ.$9?"node":"unknown";tG(`Loading photon module in ${e} environment`);try{if(eQ.ht||eQ.rS){let e=await r.e("195").then(r.bind(r,3238));"function"==typeof e.default&&await e.default(),tG("Photon loaded: @silvia-odwyer/photon (browser/worker)"),tV=e}else eQ.$9&&(tV=await Promise.all([r.e("271"),r.e("467")]).then(r.t.bind(r,9570,23)),tG("Photon loaded: @silvia-odwyer/photon-node (node)"));if(!(null==tV?void 0:tV.PhotonImage))throw Error("PhotonImage is not available");if(!tV.PhotonImage.new_from_byteslice&&!tV.PhotonImage.new_from_base64)throw Error("PhotonImage.new_from_byteslice or new_from_base64 is not available");return tW=!0,tV}catch(e){if(tG(`Photon load failed: ${e instanceof Error?e.message:String(e)}`),eQ.ht){console.warn(`[midscene:img] Photon WASM failed to load, falling back to Canvas API. Error: ${e instanceof Error?e.message:String(e)}`);try{let{createCanvasFallbackModule:e}=await r.e("985").then(r.bind(r,4168));return tV=e(),tW=!0,tV}catch(e){tG(`Canvas fallback also failed: ${e instanceof Error?e.message:String(e)}`)}}throw Error(`Failed to load photon module: ${e instanceof Error?e.message:String(e)}`)}}async function t_(){if(!eQ.$9)throw Error("Sharp is only available in Node.js environment");try{return(await Promise.resolve().then(r.t.bind(r,4678,23))).default}catch(e){throw Error(`Failed to load sharp module: ${e instanceof Error?e.message:String(e)}`)}}let t$=(0,eT.a)("img");async function t0(e,t,r){if("string"==typeof t)throw Error("inputData is base64, use resizeImgBase64 instead");tZ()(r&&r.width>0&&r.height>0,"newSize must be positive");let n=Date.now();if(t$(`resizeImg start, target size: ${r.width}x${r.height}`),eQ.$9)try{let i=await t_(),{width:o,height:a}=await i(t).metadata();if(!o||!a)throw Error("Undefined width or height from the input image.");if(r.width===o&&r.height===a)return{buffer:t,format:e};let s=await i(t).resize(r.width,r.height).jpeg({quality:90}).toBuffer(),l=Date.now();return t$(`resizeImg done (Sharp), target size: ${r.width}x${r.height}, cost: ${l-n}ms`),{buffer:s,format:"jpeg"}}catch(e){t$("Sharp failed, falling back to Photon:",e)}let{PhotonImage:i,SamplingFilter:o,resize:a}=await tY(),s=new Uint8Array(t),l=i.new_from_byteslice(s),A=l instanceof Promise?await l:l,c=A.get_width(),u=A.get_height();if(!c||!u)throw A.free(),Error("Undefined width or height from the input image.");if(r.width===c&&r.height===u)return A.free(),{buffer:t,format:e};let d=a(A,r.width,r.height,o.CatmullRom),p=d.get_bytes_jpeg(90),h=tJ.Buffer.from(p);A.free(),d.free();let f=Date.now();return t$(`resizeImg done (Photon), target size: ${r.width}x${r.height}, cost: ${f-n}ms`),{buffer:h,format:"jpeg"}}let t1=/^data:image\/(png|jpe?g);base64,([\s\S]*)$/i,t2=/^[A-Za-z0-9+/=\s]+$/,t3=(e,t)=>`data:image/${e};base64,${t.replace(/\s/g,"")}`;async function t5(e,t){let{body:r,mimeType:n}=rn(e),i=tJ.Buffer.from(r,"base64"),{buffer:o,format:a}=await t0(n.split("/")[1],i,t);return t3(a,o.toString("base64"))}async function t4(e){let{PhotonImage:t}=await tY(),{body:r}=rn(e),n=t.new_from_base64(r);return n instanceof Promise?await n:n}async function t7(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28,r=e.get_width(),n=e.get_height(),i=Math.ceil(r/t)*t,o=Math.ceil(n/t)*t;if(i===r&&o===n)return{width:r,height:n,image:e};let{padding_right:a,padding_bottom:s,Rgba:l}=await tY(),A=i-r,c=o-n,u=e;if(A>0&&(u=a(u,A,new l(255,255,255,255))),c>0){let t=new l(255,255,255,255),r=u;u=s(r,c,t),r!==e&&r.free()}return{width:i,height:o,image:u}}async function t8(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28,r=await t4(e);try{let e=await t7(r,t),n={width:e.width,height:e.height,imageBase64:await t9(e.image)};return e.image!==r&&e.image.free(),n}finally{r.free()}}async function t6(e,t){let{crop:r}=await tY(),n=await t4(e),{left:i,top:o,width:a,height:s}=t,l=r(n,i,o,i+a,o+s);n.free();try{return{width:l.get_width(),height:l.get_height(),imageBase64:await t9(l)}}finally{l.free()}}async function t9(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90,r=e.get_bytes_jpeg(t),n=tJ.Buffer.from(r).toString("base64");return`data:image/jpeg;base64,${n}`}let re=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}`);tZ()(r.startsWith("image/"),`The url ${e} is not a image, because of content-type in header is ${r}.`);let n=tJ.Buffer.from(await t.arrayBuffer());return`data:${r};base64,${n.toString("base64")}`},rt=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,tX.readFileSync)(e).toString("base64");if(t)return r;let n=tq().extname(e).slice(1);return`data:image/${"svg"===n?"svg+xml":n||"jpg"};base64,${r}`},rr=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}=rn(e);return`data:${t};base64,${r}`}return e.startsWith("http://")||e.startsWith("https://")?t?await re(e):e:await rt(e)},rn=e=>{try{let r=";base64,",n=e.indexOf(r);if(-1===n){var t;let r=e.replace(/\s/g,""),n=(t=tJ.Buffer.from(r,"base64")).length>=8&&137===t[0]&&80===t[1]&&78===t[2]&&71===t[3]&&13===t[4]&&10===t[5]&&26===t[6]&&10===t[7]?"image/png":t.length>=3&&255===t[0]&&216===t[1]&&255===t[2]?"image/jpeg":t.length>=6&&"GIF"===t.subarray(0,3).toString("ascii")?"image/gif":t.length>=12&&"RIFF"===t.subarray(0,4).toString("ascii")&&"WEBP"===t.subarray(8,12).toString("ascii")?"image/webp":t.length>=2&&66===t[0]&&77===t[1]?"image/bmp":void 0;if(!n)throw Error("Invalid base64 string");return{mimeType:n,body:r}}return{mimeType:e.slice(5,n),body:e.slice(n+r.length).replace(/\s/g,"")}}catch(t){throw Error(`parseBase64 fail because intput is not a valid base64 string: ${e}`,{cause:t})}};async function ri(e,t){if(t<=0)throw Error("Scale factor must be positive");let{body:r}=rn(e),n=tJ.Buffer.from(r,"base64"),i=Date.now();if(t$(`scaleImage start, scale factor: ${t}`),eQ.$9)try{let e=await t_(),r=await e(n).metadata(),o=r.width||0,a=r.height||0;if(0===o||0===a)throw Error("Failed to get image dimensions");let s=Math.round(o*t),l=Math.round(a*t),A=await e(n).resize(s,l,{kernel:"lanczos3",fit:"fill"}).jpeg({quality:90}).toBuffer(),c=Date.now();t$(`scaleImage done (Sharp): ${o}x${a} -> ${s}x${l} (scale=${t}), cost: ${c-i}ms`);let u=`data:image/jpeg;base64,${A.toString("base64")}`;return{width:s,height:l,imageBase64:u}}catch(e){t$("Sharp failed, falling back to Photon:",e)}let{PhotonImage:o,SamplingFilter:a,resize:s}=await tY(),l=new Uint8Array(n),A=o.new_from_byteslice(l),c=A instanceof Promise?await A:A,u=c.get_width(),d=c.get_height();if(!u||!d)throw c.free(),Error("Failed to get image dimensions");let p=Math.round(u*t),h=Math.round(d*t),f=s(c,p,h,a.CatmullRom),g=f.get_bytes_jpeg(90),m=tJ.Buffer.from(g);c.free(),f.free();let y=Date.now();return t$(`scaleImage done (Photon): ${u}x${d} -> ${p}x${h} (scale=${t}), cost: ${y-i}ms`),{width:p,height:h,imageBase64:`data:image/jpeg;base64,${m.toString("base64")}`}}function ro(e,t){let r=Math.max(e.left-100,0),n=Math.max(e.top-100,0),i={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)},o=i.width*i.height;if(o>=16e4)return i;let a=i.left+i.width/2,s=i.top+i.height/2,l=Math.sqrt(16e4/o),A=Math.round(i.width*l),c=Math.round(i.height*l),u=Math.max(Math.round(a-A/2),0),d=Math.max(Math.round(s-c/2),0);return{left:u,top:d,width:Math.min(A,t.width-u),height:Math.min(c,t.height-d)}}function ra(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}let rs=tU.Ik({left:tU.ai(),top:tU.ai()}),rl=tU.Ik({width:tU.ai(),height:tU.ai()});rs.and(rl).and(tU.Ik({zoom:tU.ai().optional()}));let rA=tU.Ik({images:tU.YO(tU.Ik({name:tU.Yj(),url:tU.Yj()})).optional(),convertHttpImage2Base64:tU.zM().optional()}),rc=tU.KC([tU.Yj(),tU.Ik({prompt:tU.Yj()}).and(rA.partial())]),ru=e=>"string"==typeof e?e:e.prompt,rd=e=>{if("string"!=typeof e&&e.images)return{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}},rp=async e=>{var t;let r=[];if(null==e||null==(t=e.images)?void 0:t.length)for(let t of(r.push({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.images)){let n=await rr(t.url,!!e.convertHttpImage2Base64);r.push({role:"user",content:[{type:"text",text:`this is the reference image named '${t.name}'. It is a reference image, not the current screenshot:`}]}),r.push({role:"user",content:[{type:"image_url",image_url:{url:n,detail:"high"}}]})}return r},rh=tU.Ik({prompt:rc,deepLocate:tU.zM().optional(),deepThink:tU.zM().optional().describe("@deprecated Use `deepLocate` instead."),cacheable:tU.zM().optional(),xpath:tU.KC([tU.Yj(),tU.zM()]).optional()}).passthrough(),rf=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},rg=(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 i=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("midscene_location_field_flag"in e||"prompt"in e&&e.prompt)return!0}return!1})(i)&&(!t||(null==(n=i._def)?void 0:n.typeName)!=="ZodOptional")}):[]},rm=(e,t)=>{if(!(0,eQ.Qd)(e))return{};let r=rg(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]=rf(t.prompt))))}return n},ry=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(),i=String(r.getMonth()+1).padStart(2,"0"),o=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"),A=e.replace("YYYY",String(n)).replace("MM",i).replace("DD",o).replace("HH",a).replace("mm",s).replace("ss",l);return`${A} (${e})`};var rv=r(6970),rb=r(2801),rw=r(4201).Buffer,rE={"node:fs"(e){e.exports=rb}},rx={};function rk(e){var t=rx[e];if(void 0!==t)return t.exports;var r=rx[e]={exports:{}};return rE[e](r,r.exports,rk),r.exports}var rS=rk("node:fs");let rC=eQ.NB,rI=eQ.x3;function rj(e){return String(e??"N/A").replace(/\0/g,"").replace(/--/g,"- -")}function rO(e){let t=e.intent||"default",r=e.name||"unknown",n=e.modelDescription?` (${e.modelDescription})`:"";return`${t}: ${r}${n}`}function rP(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),i=(null==(t=e.modelBriefs)?void 0:t.length)?e.modelBriefs.map(rO).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",i=t.model_description?` (${t.model_description})`:"";return`${r}: ${n}${i}`}(r,n);t.set(e,e)}return Array.from(t.values()).join("; ")}(e)||"No model metadata recorded",o=["For Agent Analysis:",`Report: ${rj(e.groupName)}`,`SDK: ${rj(e.sdkVersion)}`,`Device: ${rj(e.deviceType)}`,`Executions: ${r.length}; Tasks: ${n}`,`Models: ${rj(i)}`,'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`
15
- <!--
16
- ${o.join("\n")}
17
- -->
18
- `}function rR(){return"<\/script>"}function rM(e,t,r,n){let i=(0,rS.openSync)(e,"r"),o=(0,rS.statSync)(e).size,a=rw.alloc(65536),s=0,l="",A=!1,c="";try{for(;s<o;){let e=(0,rS.readSync)(i,a,0,65536,s),o=l+a.toString("utf-8",0,e);s+=e;let u=0;for(;u<o.length;)if(A){let e=o.indexOf(r,u);if(-1!==e){if(c+=o.slice(u,e),n(c))return;A=!1,c="",u=e+r.length}else{c+=o.slice(u,-r.length),l=o.slice(-r.length);break}}else{let e=o.indexOf(t,u);if(-1!==e){A=!0;let i=(c=o.slice(e+t.length)).indexOf(r);if(-1!==i){if(n(c.slice(0,i)))return;A=!1,c="",u=e+t.length+i+r.length}else{l=c.slice(-r.length),c=c.slice(0,-r.length);break}}else{l=o.slice(-t.length);break}}}}finally{(0,rS.closeSync)(i)}}function rT(e,t){let r=`<script type="midscene-image" data-id="${t}">`,n=rR(),i=null;return rM(e,r,n,e=>(i=rI(e),!0)),i}function rN(){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)})()'+rR()+"\n"),n}let rD="data-screenshot-mode";function rB(e,t){let r=rR(),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+">"+rC(e)+r}var rz=r(6390),rL=r(4201).Buffer;function rF(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rK(e){return"object"!=typeof e||null===e?null:"midscene_screenshot_ref"===e.type&&"string"==typeof e.id&&"number"==typeof e.capturedAt&&("inline"===e.storage||"file"===e.storage)&&("image/png"===e.mimeType||"image/jpeg"===e.mimeType)?"file"===e.storage&&"string"!=typeof e.path?null:e:null}function rU(e,t){let r=rK(e),n=(null==r?void 0:r.id)??t.fallbackId,i=(null==r?void 0:r.mimeType)??t.fallbackMimeType;if(!n||!i)throw Error("ScreenshotStore: screenshot id and mimeType are required to resolve screenshot");if((null==r?void 0:r.storage)==="file"){let e;if(!r.path)throw Error(`ScreenshotStore: screenshot ref "${r.id}" missing file path`);let o=(e=r.path,(0,tH.isAbsolute)(e)?e:(0,tH.join)((0,tH.dirname)(t.reportPath),e));if((0,rb.existsSync)(o))return{type:"file",id:n,mimeType:i,filePath:o}}let o=rT(t.reportPath,n);if(o)return{type:"data-uri",id:n,mimeType:i,dataUri:o};let a=(0,tH.join)((0,tH.dirname)(t.reportPath),"screenshots",`${n}.${"image/jpeg"===i?"jpeg":"png"}`);if((0,rb.existsSync)(a))return{type:"file",id:n,mimeType:i,filePath:a};throw Error(`ScreenshotStore: cannot resolve screenshot "${n}" from ${t.reportPath}`)}class rQ{async persist(e){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("ScreenshotStore: 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("ScreenshotStore: file persistence is required in directory mode");return t}async persistToSharedFileIfNeeded(e,t){let r=this.screenshotsDir;if(!r)throw Error("ScreenshotStore: screenshotsDir is required when file persistence is enabled");(0,rb.existsSync)(r)||(0,rb.mkdirSync)(r,{recursive:!0});let n=`./screenshots/${e.id}.${e.extension}`,i=(0,tH.join)(r,`${e.id}.${e.extension}`);if(!this.writtenFileIds.has(e.id)){let t=rL.from(e.rawBase64,"base64");await (0,rz.writeFile)(i,t),this.writtenFileIds.add(e.id)}return t.markAsPersisted?e.markPersistedToPath(n,i):e.registerPersistedFileCopy(n,i)}loadBase64(e){let t=rK(e);if(!t)throw Error("ScreenshotStore: invalid screenshot reference");let r=rU(t,{reportPath:this.reportPath});if("data-uri"===r.type)return r.dataUri;let n=(0,rb.readFileSync)(r.filePath);return`data:${r.mimeType};base64,${n.toString("base64")}`}cleanup(){"directory"===this.mode&&this.screenshotsDir&&(0,rb.existsSync)(this.screenshotsDir)&&(0,rb.rmSync)(this.screenshotsDir,{recursive:!0,force:!0}),this.writtenInlineIds.clear(),this.writtenFileIds.clear()}constructor(e){rF(this,"mode",void 0),rF(this,"reportPath",void 0),rF(this,"screenshotsDir",void 0),rF(this,"writeInlineImage",void 0),rF(this,"alsoWriteFileCopy",void 0),rF(this,"writtenInlineIds",new Set),rF(this,"writtenFileIds",new Set),this.mode=e.mode,this.reportPath=e.reportPath,this.screenshotsDir=e.screenshotsDir,this.writeInlineImage=e.writeInlineImage,this.alsoWriteFileCopy=e.alsoWriteFileCopy??e.ensureFileCopy??!1}}function rZ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class rJ{static create(e,t){return new rJ((0,eQ.uR)(),e,t)}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,rv.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=rT(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!==rK(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){rZ(this,"_id",void 0),rZ(this,"_base64",void 0),rZ(this,"_format",void 0),rZ(this,"_capturedAt",void 0),rZ(this,"_serializedRef",null),rZ(this,"_persistedPath",null),rZ(this,"_persistedHtmlPath",null),this._id=e,this._base64=t,this._format=function(e){return e.startsWith("data:image/jpeg")||e.startsWith("data:image/jpg")?"jpeg":"png"}(t),this._capturedAt=r}}function rX(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 rH{resetPendingFeedbackMessageIfExists(){this.pendingFeedbackMessage&&(this.pendingFeedbackMessage="")}append(e){this.messages.push(e)}seed(e){this.reset(),e.forEach(e=>{this.append(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 i=t[n].content;if(Array.isArray(i))for(let t=0;t<i.length;t++)"image_url"===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(){if(0===this.subGoals.length)return"";let e=this.subGoals.map(e=>`${e.index}. ${e.description} (${e.status})`),t=this.subGoals.find(e=>"running"===e.status)||this.subGoals.find(e=>"pending"===e.status),r="";if(t&&(r=`
19
- Current sub-goal is: ${t.description}`,t.logs&&t.logs.length>0)){let e=t.logs.map(e=>`- ${e}`).join("\n");r+=`
20
- Actions performed for current sub-goal:
21
- ${e}`}return`Sub-goals:
22
- ${e.join("\n")}${r}`}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:
23
- ${e}`}appendMemory(e){e&&this.memories.push(e)}getMemories(){return[...this.memories]}memoriesToText(){return 0===this.memories.length?"":`Memories from previous steps:
24
- ---
25
- ${this.memories.join("\n---\n")}
26
- `}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)`},i=this.messages.slice(-t);for(let e of(this.messages.length=0,this.messages.push(n),i))this.messages.push(e);return!0}constructor(e){var t;rX(this,"messages",[]),rX(this,"subGoals",[]),rX(this,"memories",[]),rX(this,"historicalLogs",[]),rX(this,"pendingFeedbackMessage",void 0),(null==e||null==(t=e.initialMessages)?void 0:t.length)&&this.seed(e.initialMessages),this.pendingFeedbackMessage=""}}async function rq(e){let{imageBase64:t,width:r,height:n,policy:i}=e,o=t,a=r,s=n;if(void 0!==i.padBlockSize){let e=await t8(t,i.padBlockSize);o=e.imageBase64,a=e.width,s=e.height}return{imageBase64:o,preparedSize:{width:a,height:s},contentSize:{width:r,height:n}}}let rG=(0,eT.a)("planning");function rV(e,t){let{actionSpace:r,includeLocateInPlanning:n,locateResultAdapter:i,locateResultContext:o}=t;e.forEach(e=>{let t=r.find(t=>t.name===e.type);if(!t)return void rG("skip locate normalization for action outside actionSpace",e);rG("actionInActionSpace matched",t);let a=rg(t.paramSchema);rG("locateFields",a),a.forEach(t=>{var r;let a=null==(r=e.param)?void 0:r[t];if(a){if(!n){"object"==typeof a&&(e.param[t]={prompt:a.prompt});return}(0,eQ.vA)(i,"planning locate normalization requires a locate result adapter"),e.param[t]={...a,locatedPixelBbox:i.adaptPlanningParamToPixelBbox(a,o)}}})})}async function rW(e,t,r){var n,i;let o,a,s,{context:l}=t,A=await rq({imageBase64:l.screenshot.base64,width:l.shotSize.width,height:l.shotSize.height,policy:t.modelRuntime.adapter.imagePreprocess}),c={...t,context:{...l,screenshot:rJ.create(A.imageBase64,l.screenshot.capturedAt),shotSize:A.preparedSize}},u={userInstruction:e,userInstructionText:ru(e),options:c,coordinateSystem:r.coordinateSystem},d=function(e,t){let{options:r,userInstructionText:n}=e,{conversationHistory:i,context:o,actionContext:a}=r,s=t.buildSystemPrompt()+(a?`<high_priority_knowledge>${a}</high_priority_knowledge>
27
- `:""),l=t.buildUserInstruction?t.buildUserInstruction(n):n;return(i.pendingFeedbackMessage&&(i.append({role:"user",content:[{type:"text",text:`${i.pendingFeedbackMessage}. The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.`}]}),i.resetPendingFeedbackMessageIfExists()),i.append({role:"user",content:[{type:"image_url",image_url:{url:o.screenshot.base64}}]}),"system-message"===t.systemPromptPlacement)?[{role:"system",content:s},{role:"user",content:[{type:"text",text:l}]},...r.referenceImageMessages??[],...i.snapshot(t.historyImageLimit)]:[{role:"user",content:`${s}${l}`},...r.referenceImageMessages??[],...i.snapshot(t.historyImageLimit)]}(u,r.messages),{content:p,usage:h,rawChoiceMessage:f}=await tk(d,c.modelRuntime,{abortSignal:c.abortSignal,requiresOriginalImageDetail:c.includeLocateInPlanning});try{o=r.parseResponse(p,u),a=r.transformActions(o,u),rV(a,{actionSpace:c.actionSpace,includeLocateInPlanning:c.includeLocateInPlanning,locateResultAdapter:r.coordinateNormalizer,locateResultContext:{preparedSize:A.preparedSize,contentSize:A.contentSize}}),s=r.shouldContinuePlanning(o,a)}catch(e){throw new tm(`Parse error: ${e instanceof Error?e.message:String(e)}`,JSON.stringify(p,void 0,2),h,f)}let g=null==(n=(i=r.messages).buildAssistantContent)?void 0:n.call(i,o,p,u);return g&&t.conversationHistory.append({role:"assistant",content:g}),{actions:a,log:r.buildResponseLog(o,p),usage:h,shouldContinuePlanning:s,rawResponse:JSON.stringify(p,void 0,2),rawChoiceMessage:f}}let rY=(0,eT.a)("ai:inspect"),r_=[{name:"Tap",description:"Tap the element",paramSchema:tU.Ik({locate:rh}),call:async()=>void 0}];async function r$(e){let{options:t,locateImage:r}=e,{context:n}=t;return{...t,context:{...n,screenshot:rJ.create(r.imageBase64,n.screenshot.capturedAt),shotSize:{width:r.width,height:r.height}},actionSpace:r_,conversationHistory:new rH,includeLocateInPlanning:!0,referenceImageMessages:e.referenceImageMessages}}let r0={coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}};function r1(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class r2{constructor(e,t){var r;r1(this,"jsonParser",void 0),r1(this,"chatCompletion",void 0),r1(this,"imagePreprocess",void 0),r1(this,"planning",void 0),r1(this,"locate",void 0),this.jsonParser=function(e){if(!e||"lenient-json"===e)return tf;if("function"==typeof e)return e;throw Error(`Unknown json parser preset: ${e}`)}(e.jsonParser),this.chatCompletion=function(e){var t,r;let n,i=(null==e?void 0:e.buildChatCompletionParams)??tC,o=(null==e?void 0:e.resolveImageDetail)??tS,a=(null==e?void 0:e.unsupportedUserConfig)??[];return{unsupportedUserConfig:a,buildChatCompletionParams:e=>i({...e,userConfig:e.userConfig??{},midsceneDefaults:tI}),resolveImageDetail:e=>o({...e,userConfig:e.userConfig??{},midsceneDefaults:tI}),extractContentAndReasoning:(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:""}}),useReasoningAsContentFallback:(null==e?void 0:e.useReasoningAsContentFallback)??!1}}(e.chatCompletion),this.imagePreprocess=function(e){return{padBlockSize:null==e?void 0:e.padBlockSize}}(e.imagePreprocess);const n=(null==(r=e.planning)?void 0:r.kind)==="custom"?e.planning.planner:void 0,i=n?function(e){let{coordinates:t,...r}=e,n=tL(t),i=tK({coordinates:t});return{...r,coordinateSystem:n,coordinateNormalizer:i}}(n):void 0;this.planning=function(e,t){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)=>rW(e,r,t)}}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}}(e.planning,i),this.locate=function(e,t){if((null==e?void 0:e.kind)==="custom"){let r=e.locateFn;if(!r){let n,i=e.planningTapLocator;if(!i)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:i.buildSystemPrompt,buildUserInstruction:e=>`Tap: ${e}`}},r=async(e,t,r)=>{let o,a;(0,eQ.vA)(e,"cannot find the target element description");let s=[],l="",A="";try{let t=await r$(r),s=await rW(e,t,n);A=s.rawResponse??"",o=s.rawChoiceMessage,a=s.usage,l=s.log,rY("planning-tap-locator rawResponse:",A);let c=i.getLocatedPixelBbox(s.actions??[]);if(!c)throw Error("No locatedPixelBbox found in planner response");return{locatedPixelBbox:c,rawResponse:A,rawChoiceMessage:o,usage:a,reasoningContent:l}}catch(t){let e=t instanceof Error?t.message:String(t);t instanceof tm&&(A=t.rawResponse,o=t.rawChoiceMessage,a=t.usage),rY("planning-tap-locator parse error:",(s=[e||"Failed to parse planning tap locator response"])[0])}return{rawResponse:A,rawChoiceMessage:o,usage:a,reasoningContent:l,errors:s}}}return{kind:"custom",supportsSearchArea:e.supportsSearchArea??!1,locateFn:r}}return{kind:"standard",supportsSearchArea:(null==e?void 0:e.supportsSearchArea)??!0,resultAdapter:tK((null==e?void 0:e.resultAdapter)??r0)}}(e.locate,i)}}function r3(e){for(let t of e)if("Tap"===t.type)return t.param.locate.locatedPixelBbox}function r5(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][e.getDay()];return`${t}-${r}-${n}, ${i}`}function r4(){let e=new Date,t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),i=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"][e.getDay()];return`${t}年${r}月${n}日 ${i}`}let r7=(0,eT.a)("auto-glm-actions"),r8=["AndroidBackButton","HarmonyBackButton"],r6=["AndroidHomeButton","HarmonyHomeButton"];function r9(e,t,r){if(!e)return r;let n=e.find(e=>t.includes(e.name));return n?n.name:r}let ne=(0,eT.a)("auto-glm-parser"),nt=(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 nr(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?`
28
- The current date: ${r5()}
29
-
30
- # Setup
31
- 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.
32
-
33
- # More details about the code
34
- Your response format must be structured as follows:
35
-
36
- Think first: Use <think>...</think> to analyze the current screen, identify key elements, and determine the most efficient action.
37
- Provide the action: Use <answer>...</answer> to return a single line of pseudo-code representing the operation.
38
-
39
- Your output should STRICTLY follow the format:
40
- <think>
41
- [Your thought]
42
- </think>
43
- <answer>
44
- [Your operation code]
45
- </answer>
46
-
47
- - **Tap**
48
- Perform a tap action on a specified screen area. The element is a list of 2 integers, representing the coordinates of the tap point.
49
- **Example**:
50
- <answer>
51
- do(action="Tap", element=[x,y])
52
- </answer>
53
- - **Type**
54
- Enter text into the currently focused input field.
55
- **Example**:
56
- <answer>
57
- do(action="Type", text="Hello World")
58
- </answer>
59
- - **Swipe**
60
- Perform a swipe action with start point and end point.
61
- **Examples**:
62
- <answer>
63
- do(action="Swipe", start=[x1,y1], end=[x2,y2])
64
- </answer>
65
- - **Long Press**
66
- Perform a long press action on a specified screen area.
67
- 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.
68
- **Example**:
69
- <answer>
70
- do(action="Long Press", element=[x,y])
71
- </answer>
72
- - **Launch**
73
- 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.
74
- **Example**:
75
- <answer>
76
- do(action="Launch", app="Settings")
77
- </answer>
78
- - **Back**
79
- Press the Back button to navigate to the previous screen.
80
- **Example**:
81
- <answer>
82
- do(action="Back")
83
- </answer>
84
- - **Finish**
85
- Terminate the program and optionally print a message.
86
- **Example**:
87
- <answer>
88
- finish(message="Task completed.")
89
- </answer>
90
-
91
-
92
- REMEMBER:
93
- - Think before you act: Always analyze the current UI and the best course of action before executing any step, and output in <think> part.
94
- - Only ONE LINE of action in <answer> part per response: Each step must contain exactly one line of executable code.
95
- - Generate execution code strictly according to format requirements.
96
- `:`
97
- 今天的日期是: ${r4()}
98
-
99
- 你是一个智能体分析专家,可以根据操作历史和当前状态图执行一系列操作来完成任务。
100
- 你必须严格按照要求输出以下格式:
101
- <think>{think}</think>
102
- <answer>{action}</answer>
103
-
104
- 其中:
105
- - {think} 是对你为什么选择这个操作的简短推理说明。
106
- - {action} 是本次执行的具体操作指令,必须严格遵循下方定义的指令格式。
107
-
108
- 操作指令及其作用如下:
109
- - do(action="Launch", app="xxx")
110
- Launch是启动目标app的操作,这比通过主屏幕导航更快。此操作完成后,您将自动收到结果状态的截图。
111
- - do(action="Tap", element=[x,y])
112
- Tap是点击操作,点击屏幕上的特定点。可用此操作点击按钮、选择项目、从主屏幕打开应用程序,或与任何可点击的用户界面元素进行交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
113
- - do(action="Tap", element=[x,y], message="重要操作")
114
- 基本功能同Tap,点击涉及财产、支付、隐私等敏感按钮时触发。
115
- - do(action="Type", text="xxx")
116
- Type是输入操作,在当前聚焦的输入框中输入文本。使用此操作前,请确保输入框已被聚焦(先点击它)。输入的文本将像使用键盘输入一样输入。重要提示:手机可能正在使用 ADB 键盘,该键盘不会像普通键盘那样占用屏幕空间。要确认键盘已激活,请查看屏幕底部是否显示 'ADB Keyboard {ON}' 类似的文本,或者检查输入框是否处于激活/高亮状态。不要仅仅依赖视觉上的键盘显示。自动清除文本:当你使用输入操作时,输入框中现有的任何文本(包括占位符文本和实际输入)都会在输入新文本前自动清除。你无需在输入前手动清除文本——直接使用输入操作输入所需文本即可。操作完成后,你将自动收到结果状态的截图。
117
- - do(action="Type_Name", text="xxx")
118
- Type_Name是输入人名的操作,基本功能同Type。
119
- - do(action="Swipe", start=[x1,y1], end=[x2,y2])
120
- Swipe是滑动操作,通过从起始坐标拖动到结束坐标来执行滑动手势。可用于滚动内容、在屏幕之间导航、下拉通知栏以及项目栏或进行基于手势的导航。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。滑动持续时间会自动调整以实现自然的移动。此操作完成后,您将自动收到结果状态的截图。
121
- - do(action="Long Press", element=[x,y])
122
- Long Pres是长按操作,在屏幕上的特定点长按指定时间。可用于触发上下文菜单、选择文本或激活长按交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的屏幕截图。
123
- - do(action="Double Tap", element=[x,y])
124
- Double Tap在屏幕上的特定点快速连续点按两次。使用此操作可以激活双击交互,如缩放、选择文本或打开项目。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
125
- - do(action="Back")
126
- 导航返回到上一个屏幕或关闭当前对话框。相当于按下 Android 的返回按钮。使用此操作可以从更深的屏幕返回、关闭弹出窗口或退出当前上下文。此操作完成后,您将自动收到结果状态的截图。
127
- - do(action="Home")
128
- Home是回到系统桌面的操作,相当于按下 Android 主屏幕按钮。使用此操作可退出当前应用并返回启动器,或从已知状态启动新任务。此操作完成后,您将自动收到结果状态的截图。
129
- - do(action="Wait", duration="x seconds")
130
- 等待页面加载,x为需要等待多少秒。
131
- - finish(message="xxx")
132
- finish是结束任务的操作,表示准确完整完成任务,message是终止信息。
133
-
134
- 必须遵循的规则:
135
- 0. 严禁调用 Interact、Take_over、Note、Call_API 这四个操作,这些操作暂不支持。
136
- 1. 在执行任何操作前,先检查当前app是否是目标app,如果不是,先执行 Launch。
137
- 2. 如果进入到了无关页面,先执行 Back。如果执行Back后页面没有变化,请点击页面左上角的返回键进行返回,或者右上角的X号关闭。
138
- 3. 如果页面未加载出内容,最多连续 Wait 三次,否则执行 Back重新进入。
139
- 4. 如果页面显示网络问题,需要重新加载,请点击重新加载。
140
- 5. 如果当前页面找不到目标联系人、商品、店铺等信息,可以尝试 Swipe 滑动查找。
141
- 6. 遇到价格区间、时间区间等筛选条件,如果没有完全符合的,可以放宽要求。
142
- 7. 在做小红书总结类任务时一定要筛选图文笔记。
143
- 8. 购物车全选后再点击全选可以把状态设为全不选,在做购物车任务时,如果购物车里已经有商品被选中时,你需要点击全选后再点击取消全选,再去找需要购买或者删除的商品。
144
- 9. 在做外卖任务时,如果相应店铺购物车里已经有其他商品你需要先把购物车清空再去购买用户指定的外卖。
145
- 10. 在做点外卖任务时,如果用户需要点多个外卖,请尽量在同一店铺进行购买,如果无法找到可以下单,并说明某个商品未找到。
146
- 11. 请严格遵循用户意图执行任务,用户的特殊要求可以执行多次搜索,滑动查找。比如(i)用户要求点一杯咖啡,要咸的,你可以直接搜索咸咖啡,或者搜索咖啡后滑动查找咸的咖啡,比如海盐咖啡。(ii)用户要找到XX群,发一条消息,你可以先搜索XX群,找不到结果后,将"群"字去掉,搜索XX重试。(iii)用户要找到宠物友好的餐厅,你可以搜索餐厅,找到筛选,找到设施,选择可带宠物,或者直接搜索可带宠物,必要时可以使用AI搜索。
147
- 12. 在选择日期时,如果原滑动方向与预期日期越来越远,请向反方向滑动查找。
148
- 13. 执行任务过程中如果有多个可选择的项目栏,请逐个查找每个项目栏,直到完成任务,一定不要在同一项目栏多次查找,从而陷入死循环。
149
- 14. 在执行下一步操作前请一定要检查上一步的操作是否生效,如果点击没生效,可能因为app反应较慢,请先稍微等待一下,如果还是不生效请调整一下点击位置重试,如果仍然不生效请跳过这一步继续任务,并在finish message说明点击不生效。
150
- 15. 在执行任务中如果遇到滑动不生效的情况,请调整一下起始点位置,增大滑动距离重试,如果还是不生效,有可能是已经滑到底了,请继续向反方向滑动,直到顶部或底部,如果仍然没有符合要求的结果,请跳过这一步继续任务,并在finish message说明但没找到要求的项目。
151
- 16. 在做游戏任务时如果在战斗页面如果有自动战斗一定要开启自动战斗,如果多轮历史状态相似要检查自动战斗是否开启。
152
- 17. 如果没有合适的搜索结果,可能是因为搜索页面不对,请返回到搜索页面的上一级尝试重新搜索,如果尝试三次返回上一级搜索后仍然没有符合要求的结果,执行 finish(message="原因")。
153
- 18. 在结束任务前请一定要仔细检查任务是否完整准确的完成,如果出现错选、漏选、多选的情况,请返回之前的步骤进行纠正。
154
- `,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){ne("Parsing action:",e);let t="";try{if((t=e.content.trim()).startsWith('do(action="Type"')||t.startsWith('do(action="Type_Name"')){let r=nt(t,'text="');return{_metadata:"do",action:"Type",text:r,think:e.think}}if(t.startsWith("finish(message=")){let r=nt(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],i={_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{...i,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{...i,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{...i,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{...i,action:"Long Press",element:[Number(e[1]),Number(e[2])]}}case"Launch":{let e=nt(t,'app="');return{...i,action:"Launch",app:e}}case"Back":return{...i,action:"Back"};case"Home":return{...i,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{...i,action:"Wait",durationMs:1e3*r}}case"Interact":return{...i,action:"Interact"};case"Call_API":{let e=nt(t,'instruction="');return{...i,action:"Call_API",instruction:e}}case"Take_over":{let e=nt(t,'message="');return{...i,action:"Take_over",message:e}}case"Note":{let e=nt(t,'message="');return{...i,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 ne("autoGLM rawResponse:",e),ne("thinking in response:",t.think),ne("action in response:",t.content),t}(e)),{response:t,action:r}},transformActions:(e,t)=>{var r;let{options:n,coordinateSystem:i}=t;return(0,eQ.vA)(i,"Auto-GLM planning requires coordinate system"),function(e,t){let{actionSpace:r,coordinateDistanceToPixels:n}=t;try{switch(e._metadata){case"finish":return r7("Transform finish action:",e),[{type:"Finished",param:{},thought:e.message}];case"do":switch(e.action){case"Tap":return r7("Transform Tap action:",e),[{type:"Tap",param:{locate:{point:e.element,prompt:""}}}];case"Double Tap":return r7("Transform Double Tap action:",e),[{type:"DoubleClick",param:{locate:{point:e.element,prompt:""}}}];case"Type":return r7("Transform Type action:",e),[{type:"Input",param:{value:e.text}}];case"Swipe":{let t,r;r7("Transform Swipe action:",e);let i=e.end[0]-e.start[0],o=e.end[1]-e.start[1],a=Math.abs(i);return Math.abs(o)>a?(r=n(o,"y"),t=o>0?"up":"down"):(r=n(i,"x"),t=i>0?"left":"right"),r7(`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 r7("Transform Long Press action:",e),[{type:"LongPress",param:{locate:{point:e.element,prompt:""}},thought:e.think||""}];case"Back":return r7("Transform Back action:",e),[{type:r9(r,r8,"AndroidBackButton"),param:{},thought:e.think||""}];case"Home":return r7("Transform Home action:",e),[{type:r9(r,r6,"AndroidHomeButton"),param:{},thought:e.think||""}];case"Wait":return r7("Transform Wait action:",e),[{type:"Sleep",param:{timeMs:e.durationMs},thought:e.think||""}];case"Launch":return r7("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 r7("Transform error:",e),Error(`Failed to transform action: ${e}`)}}(e.action,{actionSpace:n.actionSpace,coordinateDistanceToPixels:(r=n.context.shotSize,(e,t)=>void 0===i.normalizedBy?Math.round(Math.abs(e)):Math.round(Math.abs(e)*("x"===t?r.width:r.height)/i.normalizedBy))})},shouldContinuePlanning:e=>"finish"!==e.action._metadata,buildResponseLog:(e,t)=>t}},locate:{kind:"custom",planningTapLocator:{buildSystemPrompt:()=>e?`
155
- The current date: ${r5()}
156
-
157
- # Setup
158
- 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.
159
-
160
- # More details about the code
161
- Your response format must be structured as follows:
162
-
163
- Think first: Use <think>...</think> to analyze the current screen, identify key elements, and determine the most efficient action.
164
- Provide the action: Use <answer>...</answer> to return a single line of pseudo-code representing the operation.
165
-
166
- Your output should STRICTLY follow the format:
167
- <think>
168
- [Your thought]
169
- </think>
170
- <answer>
171
- [Your operation code]
172
- </answer>
173
-
174
- - **Tap**
175
- Perform a tap action on a specified screen area. The element is a list of 2 integers, representing the coordinates of the tap point.
176
- **Example**:
177
- <answer>
178
- do(action="Tap", element=[x,y])
179
- </answer>
180
-
181
- REMEMBER:
182
- - 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.
183
- `:`
184
- 今天的日期是: ${r4()}
185
-
186
- 你是一个智能体分析专家,可以根据操作历史和当前状态图执行一系列操作来完成任务。
187
- 你必须严格按照要求输出以下格式:
188
- <think>{think}</think>
189
- <answer>{action}</answer>
190
-
191
- 其中:
192
- - {think} 是对你为什么选择这个操作的简短推理说明。
193
- - {action} 是本次执行的具体操作指令,必须严格遵循下方定义的指令格式。
194
-
195
- 操作指令及其作用如下:
196
- - do(action="Tap", element=[x,y])
197
- Tap是点击操作,点击屏幕上的特定点。可用此操作点击按钮、选择项目、从主屏幕打开应用程序,或与任何可点击的用户界面元素进行交互。坐标系统从左上角 (0,0) 开始到右下角(999,999)结束。此操作完成后,您将自动收到结果状态的截图。
198
-
199
- 必须遵循的规则:
200
- - 你的目标是定位并点击用户指定的UI元素(例如按钮、图标、链接等),请不要尝试任何其他的操作。
201
- `,getLocatedPixelBbox:r3}}}}let nn={"auto-glm":nr(!1),"auto-glm-multilingual":nr(!0)},ni={chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],useReasoningAsContentFallback:!0}},no={shape:"bbox",order:"xy",normalizedBy:1e3},na={shape:"point",order:"xy",normalizedBy:1e3};function ns(e){return(e.match(/\d+/g)??[]).map(Number).filter(Number.isFinite)}function nl(e){let t=[];for(let r of e){if("number"==typeof r){t.push(r);continue}if("string"==typeof r){if(/^\s*\d+(?:[\s,;]+\d+)*\s*[,;]?\s*$/.test(r)){t.push(...ns(r));continue}{let e=function(e){let t=e.match(/^\s*(\d+)/);return t?Number(t[1]):void 0}(r);void 0!==e&&t.push(e)}}break}return t.filter(Number.isFinite)}let nA={jsonParser:tf,chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:i}=r,o={};void 0!==r.temperature&&(o.temperature=r.temperature);let a={};return"default"!==n&&(a.thinking={type:n?"enabled":"disabled"},i&&(a.reasoning_effort=i)),{config:{...t,...o,...a}}},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:no,parseRawLocateValue:function(e){let t=tM(e),r=[];if("string"==typeof t){if(4!==(r=ns(t)).length)throw Error(`invalid bbox data string for doubao-vision mode: ${t}`)}else r=Array.isArray(t)?"string"==typeof t[0]&&"bbox"===t[0].trim()?function(e){if(e.length<2)return null;let t=e[1];return"string"==typeof t?ns(t):Array.isArray(t)?nl(t):null}(t)??[]:nl(t):t;if(4===r.length||5===r.length)return tN(no,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return tN(na,[r[0],r[1]]);if(8===r.length)return tN(no,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for doubao-vision mode: ${JSON.stringify(t)} `)}}}},nc=e=>{let{geminiReasoningContent:t,providerReasoningContent:r}=e;return t&&r?`thoughtParts:${t}; reasoning_content:${r}`:t||r||""};function nu(e){return"default"===e}let nd={shape:"point",order:"xy",normalizedBy:1},np={shape:"point",order:"xy"},nh={shape:"bbox",order:"xy"},nf={shape:"point",order:"xy"},ng={chatCompletion:{unsupportedUserConfig:["reasoningEffort"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningBudget:i}=r,o={};void 0!==r.temperature&&(o.temperature=r.temperature);let a={};return"default"!==n&&(a.enable_thinking=n??!1,void 0!==i&&(a.thinking_budget=i)),{config:{...t,...o,...a}}},messageExtraction:{kind:"default",reasoningContentKeys:["reasoning_content","reasoning"]},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}}}};var nm=r(5409);let ny={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}},nv=Object.entries(ny).reduce((e,t)=>{let[r,n]=t,i=r.toLowerCase();return i!==r&&(e[i]=n),e},{}),nb=e=>{let t=e.toLowerCase();return nv[t]?nv[t].key:e},nw="undefined"!=typeof window?/Mac|iPod|iPhone|iPad/.test(window.navigator.platform):"darwin"===nm.platform,nE={return:ny.Enter.key,enter:ny.Enter.key,ctrl:nw?ny.Meta.key:ny.Control.key,shift:ny.Shift.key,alt:ny.Alt.key,space:ny.Space.key,"page down":ny.PageDown.key,pagedown:ny.PageDown.key,"page up":ny.PageUp.key,pageup:ny.PageUp.key},nx=(0,eT.a)("ui-tars-planning"),nk=(0,eT.a)("ui-tars-planning",{console:!0});function nS(e){let[t,r]=JSON.parse(e);return(0,eQ.vA)("number"==typeof t&&Number.isFinite(t)&&"number"==typeof r&&Number.isFinite(r),`invalid point data for ui-tars planning: ${e}`),[t,r]}var nC=r(2788);let nI=(0,eT.a)("ui-tars-planning");function nj(){let e=e_();return`
202
- 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.
203
-
204
- ## Output Format
205
- \`\`\`
206
- Thought: ...
207
- Action: ...
208
- \`\`\`
209
-
210
- ## Action Space
211
-
212
- click(start_box='[x1, y1, x2, y2]')
213
- left_double(start_box='[x1, y1, x2, y2]')
214
- right_single(start_box='[x1, y1, x2, y2]')
215
- drag(start_box='[x1, y1, x2, y2]', end_box='[x3, y3, x4, y4]')
216
- hotkey(key='')
217
- 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.
218
- scroll(start_box='[x1, y1, x2, y2]', direction='down or up or right or left')
219
- wait() #Sleep for 5s and take a screenshot to check for any changes.
220
- finished(content='xxx') # Use escape characters \\', \\", and \\n in content part to ensure we can parse the content in normal python string format.
221
-
222
-
223
- ## Note
224
- - Use ${e} in \`Thought\` part.
225
- - Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part.
226
-
227
- ## User Instruction
228
- `}let nO=e=>e.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),nP={shape:"bbox",order:"xy",normalizedBy:1e3},nR={shape:"point",order:"xy",normalizedBy:1e3};function nM(e){let t=tM(e);if("string"==typeof t){(0,eQ.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 tN(nP,[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 tN(nP,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return tN(nR,[r[0],r[1]]);if(8===t.length)return tN(nP,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for ui-tars mode: ${JSON.stringify(t)} `)}function nT(e){return{jsonParser:tf,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:nj,buildUserInstruction:e=>`<user_instruction>${e}</user_instruction>`,buildAssistantContent:(e,t)=>nO(t)},coordinates:{shape:"point",order:"xy",normalizedBy:1},parseResponse:(t,r)=>{var n;let i,o,{options:a}=r;return n=a.context.shotSize,i=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,i){let o=Number.parseInt(t,10),a=Number.parseInt(r,10),s=Number.parseInt(n,10),l=Number.parseInt(i,10),A=Math.floor((o+s)/2),c=Math.floor((a+l)/2);return`(${A},${c})`}).trim(),o=(0,nC.q)({prediction:i,factor:[1e3,1e3],screenContext:{width:n.width,height:n.height},modelVer:e}),nI("ui-tars modelVer",e,", parsed",JSON.stringify(o.parsed)),{rawResponse:t,actions:o.parsed}},transformActions:e=>(function(e){let t=[],r=[];if(e.actions.forEach(e=>{let n=(e.action_type||"").toLowerCase();if("click"===n){(0,eQ.vA)(e.action_inputs.start_box,"start_box is required");let r={point:nS(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"Tap",param:{locate:r}})}else if("left_double"===n){(0,eQ.vA)(e.action_inputs.start_box,"start_box is required");let r={point:nS(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"DoubleClick",param:{locate:r},thought:e.thought||""})}else if("right_single"===n){(0,eQ.vA)(e.action_inputs.start_box,"start_box is required");let r={point:nS(e.action_inputs.start_box),prompt:e.thought||""};t.push({type:"RightClick",param:{locate:r},thought:e.thought||""})}else if("drag"===n){(0,eQ.vA)(e.action_inputs.start_box,"start_box is required"),(0,eQ.vA)(e.action_inputs.end_box,"end_box is required");let r=nS(e.action_inputs.start_box),n=nS(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 i;let r=nE[(i=e.action_inputs.key).toLowerCase()]?[nb(nE[i.toLowerCase()])]:i.split(" ").map(e=>nb(nE[e.toLowerCase()]||e));t.push({type:"KeyboardPress",param:{keyName:r.join("+")},thought:e.thought||""})}else nk("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||""}),nx("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 nx("transformActions",JSON.stringify(t,null,2)),t})(e),shouldContinuePlanning:(e,t)=>t.every(e=>"Finished"!==e.type),buildResponseLog:(e,t)=>nO(t)}},locate:{resultAdapter:{coordinates:nP,parseRawLocateValue:nM}}}}let nN=nT(eD.UH.DOUBAO_1_5_20B),nD={"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:{resultAdapter:{coordinates:nh,parseRawLocateValue:function(e){let t=tM(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]?tN(nh,[t[0],t[1],t[2],t[3]]):tN(nf,[t[0],t[1]])},mapLocateResultToPixelBbox:function(e){var t,r;if("bbox"===e.coordinatesMeta.shape){let{coordinates:t}=e;return[Math.round(t[0]),Math.round(t[1]),Math.round(t[2]),Math.round(t[3])]}let{coordinates:n}=e;return[Math.round(t=n[0]),Math.round(r=n[1]),Math.round(t+20),Math.round(r+20)]}}}},"qwen3-vl":ng,qwen3:ng,"qwen3.5":ng,"qwen3.6":ng,"doubao-vision":nA,"doubao-seed":nA,gemini:{chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:i}=r,o={};void 0!==r.temperature&&(o.temperature=r.temperature);let a={};return"default"!==n&&(a.extra_body={google:{thinking_config:{include_thoughts:!0,thinking_level:n?i??"medium":"minimal"}}}),{config:{...t,...o,...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:nc({geminiReasoningContent:t.geminiReasoningContent,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}let n="string"==typeof e.content?e.content:"",i=(null==(r=n.match(/<thought>([\s\S]*?)<\/thought>/i))||null==(t=r[1])?void 0:t.trim())||"";return{content:n,reasoning_content:nc({geminiReasoningContent:i,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}}},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"yx",normalizedBy:1e3}}}},...{"vlm-ui-tars":nT(eD.UH.V1_0),"vlm-ui-tars-doubao":nN,"vlm-ui-tars-doubao-1.5":nN},"glm-v":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n}=r,i={};void 0!==r.temperature&&(i.temperature=r.temperature),nu(e.intent)&&(i.response_format={type:"json_object"});let o={};return"default"!==n&&(o.thinking={type:n?"enabled":"disabled"}),{config:{...t,...i,...o}}},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}}}},...nn,"gpt-5":{chatCompletion:{unsupportedUserConfig:["reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n,reasoningEffort:i}=r,o={};return void 0!==r.temperature&&(o.temperature=r.temperature),nu(e.intent)&&(o.response_format={type:"json_object"}),{config:{...t,...o,reasoning_effort:!0===n?i??"medium":"none"}}},resolveImageDetail:e=>nu(e.intent)||e.requiresOriginalImageDetail?"original":void 0},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"xy"}}}},kimi:{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r}=e,{reasoningEnabled:n}=r,i={};return i.temperature=void 0,nu(e.intent)&&(i.response_format={type:"json_object"}),{config:{...t,...i,thinking:{type:n?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:nd,parseRawLocateValue:function(e){let t=tT(e,"point");if(t.length<2)throw Error(`invalid point data: ${JSON.stringify(e)} `);let[r,n]=t;return tN(r<=1&&n<=1?nd:np,[r,n])}}}},"xiaomi-mimo":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{intent:t,midsceneDefaults:r,userConfig:n}=e,{reasoningEnabled:i}=n,o={};return nu(t)&&(o.response_format={type:"json_object"}),void 0!==n.temperature&&(o.temperature=n.temperature),{config:{...r,...o,thinking:{type:i?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0}}},nB=new Map,nz=(0,eT.a)("ai:model-adapter");function nL(e){return{config:e,adapter:function(e){var t;let r=e??"default",n=nB.get(r);if(n)return n;let i=e?nD[e]:ni;if(!i)throw Error(`No model adapter registered for modelFamily: ${e}`);return n=new r2(i,r),nB.set(r,n),0!==(t=n).chatCompletion.unsupportedUserConfig.length&&nz(`model adapter "${r}" unsupportedUserConfig: ${JSON.stringify(t.chatCompletion.unsupportedUserConfig)}`),n}(e.modelFamily)}}let nF="https://midscenejs.com/model-config",nK=`Default model family is required for locate. Configure MIDSCENE_MODEL_FAMILY so Midscene can parse locate coordinates correctly. ${nF}`;function nU(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. ${nF}`:`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. ${nF}`}function nQ(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2];let r=e.left+Math.floor((e.width-1)/2),n=e.top+Math.floor((e.height-1)/2);return{rect:e,center:[r,n],description:t||""}}function nZ(e,t){let r=e.toLowerCase(),n=t.toLowerCase(),i=`</${n}>`,o=`<${n}>`,a=r.lastIndexOf(i);if(-1===a){let t=r.lastIndexOf(o);if(-1===t)return;let n=t+o.length,i=e.substring(n),a=i.indexOf("<");return(-1===a?i:i.substring(0,a)).trim()}let s=r.substring(0,a).lastIndexOf(o);if(-1===s)return;let l=s+o.length;return e.substring(l,a).trim()}function nJ(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}`}function nX(){return`## Important Notes for Locating Elements:
229
- - 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.
230
- - 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.
231
- - 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.
232
- - 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.
233
- - If the target is an icon, arrow, checkbox, radio, or accessory control, return only that glyph/control region. Do not return adjacent owner text.
234
- - 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.
235
- - If the same text appears in multiple regions, obey the described owner region first, such as filter bar vs table header.`}function nH(e){return Array.isArray(e)?`[${e.join(", ")}]`:JSON.stringify(e)}function nq(e){let[t,r,n,i]=e;return{left:t,top:r,width:n-t+1,height:i-r+1}}let nG=(0,eT.a)("ai:inspect"),nV=(0,eT.a)("ai:section");function nW(e,t){if(!e||"object"!=typeof e)return!1;let r=e[t];return Array.isArray(r)?r.length>0:void 0!==r}async function nY(e){let{context:t,baseRect:r}=e,n=ro(r,t.shotSize),i=await t6(t.screenshot.base64,n),o=await ri(i.imageBase64,2);return{sourceRect:n,image:{imageBase64:o.imageBase64,width:o.width,height:o.height},mapping:{offset:{x:n.left,y:n.top},scale:2}}}async function n_(e){var t,r;let{targetElementDescription:n,...i}=e;(0,eQ.vA)(n,"cannot find the target element description");let{context:o}=i,a=(null==(t=i.searchConfig)?void 0:t.image)??{imageBase64:o.screenshot.base64,width:o.shotSize.width,height:o.shotSize.height},s="string"==typeof n?void 0:await rp(rd(n)),l={elementDescriptionText:ru(n),locateImage:a,referenceImageMessages:s,options:i},A=e.modelRuntime.adapter.locate,c="custom"===A.kind?A.locateFn:n$,{locatedPixelBbox:u,rawResponse:d,rawChoiceMessage:p,usage:h,reasoningContent:f,errors:g=[]}=await c(n,i,l),m={rawResponse:d,rawChoiceMessage:p,usage:h,reasoning_content:f};if(!u)return{rect:void 0,parseResult:{element:void 0,errors:g},...m};try{let e=nq(function(e,t){let[r,n,i,o]=e,a=(null==t?void 0:t.offset)??{x:0,y:0},s=(null==t?void 0:t.scale)??1,l=e=>(1!==s?Math.round(e/s):e)+a.x,A=e=>(1!==s?Math.round(e/s):e)+a.y;return[l(r),A(n),l(i),A(o)]}(u,null==(r=i.searchConfig)?void 0:r.mapping));return nG("resRect",e),{rect:e,parseResult:{element:nQ(e,l.elementDescriptionText),errors:[]},...m}}catch(t){let e=t instanceof Error?`Failed to parse locate result: ${t.message}`:"unknown error in locate";return{rect:void 0,parseResult:{element:void 0,errors:g.length>0?[...g,`(${e})`]:[e]},...m}}}async function n$(e,t,r){var n;let i,o,a,s,l,A,c,u=t.modelRuntime,{adapter:d}=u;(0,eQ.vA)("standard"===d.locate.kind,"generic locate requires a standard locate adapter");let p=(a=r.elementDescriptionText,`Find: ${a}`),h=(n=d.locate.resultAdapter.promptSpec,s=e_(),l=n.resultKey,A=nH(n.exampleValues[0]),c=`the ${n.resultNoun} of the element that matches the user's description`,`
236
- ## Role:
237
- You are an AI assistant that helps identify UI elements.
238
-
239
- ## Objective:
240
- - Identify elements in screenshots that match the user's description.
241
- - Provide the coordinates of the element that matches the user's description.
242
-
243
- ${nX()}
244
-
245
- ## Output Format:
246
- \`\`\`json
247
- {
248
- "${l}": ${n.resultValueSchema}, // ${n.resultValueDescription}
249
- "errors"?: string[]
250
- }
251
- \`\`\`
252
-
253
- Fields:
254
- * \`${l}\` is ${c}
255
- * \`errors\` is an optional array of error messages (if any)
256
-
257
- For example, when an element is found:
258
- \`\`\`json
259
- {
260
- "${l}": ${A},
261
- "errors": []
262
- }
263
- \`\`\`
264
-
265
- When no element is found:
266
- \`\`\`json
267
- {
268
- "${l}": [],
269
- "errors": ["I can see ..., but {some element} is not found. Use ${s}."]
270
- }
271
- \`\`\`
272
- `),f=await rq({imageBase64:r.locateImage.imageBase64,width:r.locateImage.width,height:r.locateImage.height,policy:d.imagePreprocess}),g=[{role:"system",content:h},{role:"user",content:[{type:"image_url",image_url:{url:f.imageBase64,detail:"high"}},{type:"text",text:p}]}];r.referenceImageMessages&&g.push(...r.referenceImageMessages);try{i=await tx(g,u,{abortSignal:t.abortSignal,jsonParserSource:"locate"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof tm?n.rawResponse:e,r=n instanceof tm?n.usage:void 0;return{rawResponse:t,rawChoiceMessage:n instanceof tm?n.rawChoiceMessage:void 0,usage:r,errors:[`AI call error: ${e}`]}}let m=i.contentString,y="errors"in i.content?i.content.errors:[],v=d.locate.resultAdapter;if(!nW(i.content,v.promptSpec.resultKey))return{rawResponse:m,rawChoiceMessage:i.rawChoiceMessage,usage:i.usage,reasoningContent:i.reasoning_content,errors:y};try{o=v.adaptElementLocateResultToPixelBbox(i.content,{preparedSize:f.preparedSize,contentSize:f.contentSize})}catch(t){let e=t instanceof Error?`Failed to parse locate result: ${t.message}`:"unknown error in locate";y&&(null==y?void 0:y.length)!==0?y.push(`(${e})`):y=[e]}return{locatedPixelBbox:o,rawResponse:m,rawChoiceMessage:i.rawChoiceMessage,usage:i.usage,reasoningContent:i.reasoning_content,errors:y}}async function n0(e){var t,r;let n,i,o,a,s,l,A,c,u,d,{context:p,sectionDescription:h}=e,f=e.modelRuntime,{adapter:g}=f;(0,eQ.vA)("standard"===g.locate.kind,"section locate requires a standard locate adapter");let m=p.screenshot.base64,y=await rq({imageBase64:m,width:p.shotSize.width,height:p.shotSize.height,policy:g.imagePreprocess}),v=(t=g.locate.resultAdapter.promptSpec,o=e_(),a=t.resultKey,s=nH(t.exampleValues[0]),l=`"${a}": ${t.resultValueSchema}, // ${t.resultValueDescription}`,A=t.resultValueSchema,c=`${t.resultNoun} of the section containing the target element`,u=`Optional array of ${t.resultNounPlural} of reference elements`,`
273
- ## Role:
274
- You are an AI assistant that helps identify UI elements.
275
-
276
- ## Objective:
277
- - Find a section containing the target element
278
- - If the description mentions reference elements, also locate sections containing those references
279
-
280
- ## Output Format:
281
- \`\`\`json
282
- {
283
- ${l}
284
- "references_${a}"?: [
285
- ${A},
286
- ...
287
- ],
288
- "error"?: string
289
- }
290
- \`\`\`
291
-
292
- Fields:
293
- * \`${a}\` - ${c}
294
- * \`references_${a}\` - ${u}
295
- * \`error\` - Optional error message if the section cannot be found. Use ${o}.
296
-
297
- Example:
298
- If the description is "delete button on the second row with title 'Peter'", return:
299
- \`\`\`json
300
- {
301
- "${a}": ${s},
302
- "references_${a}": [${s}]
303
- }
304
- \`\`\`
305
- `),b=(d=ru(h),`Find section containing: ${d}`),w=[{role:"system",content:v},{role:"user",content:[{type:"image_url",image_url:{url:y.imageBase64,detail:"high"}},{type:"text",text:b}]}];if("string"!=typeof h){let e=await rp(rd(h));w.push(...e)}try{n=await tx(w,f,{abortSignal:e.abortSignal,jsonParserSource:"section-locator"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof tm?n.rawResponse:e,r=n instanceof tm?n.usage:void 0;return{searchAreaConfig:void 0,error:`AI call error: ${e}`,rawResponse:t,rawChoiceMessage:n instanceof tm?n.rawChoiceMessage:void 0,usage:r}}let E=n.content.error,x=g.locate.resultAdapter;if(!nW(n.content,x.promptSpec.resultKey))return{searchAreaConfig:void 0,error:E,rawResponse:n.contentString,rawChoiceMessage:n.rawChoiceMessage,usage:n.usage};try{let e,t,o,a=x.adaptSectionLocateResultToPixelBboxGroup(n.content,{preparedSize:y.preparedSize,contentSize:y.contentSize}),s=(r=[a.target,...a.references??[]],e=Math.min(...r.map(e=>{let[t]=e;return t})),t=Math.min(...r.map(e=>{let[,t]=e;return t})),o=Math.max(...r.map(e=>{let[,,t]=e;return t})),nq([e,t,o,Math.max(...r.map(e=>{let[,,,t]=e;return t}))]));nV("mergedRect %j",s);let l=ro(s,p.shotSize),A=l.width,c=l.height;nV("expanded sectionRect %j",l),i=await nY({context:p,baseRect:s}),nV("scaled section image from %dx%d to %dx%d (scale=%d)",A,c,i.image.width,i.image.height,i.mapping.scale)}catch(t){let e=t instanceof Error?`Failed to parse section locate result: ${t.message}`:"unknown error in section locate";E=E?`${E} (${e})`:e}return{searchAreaConfig:i,error:E,rawResponse:n.contentString,rawChoiceMessage:n.rawChoiceMessage,usage:n.usage}}async function n1(e){var t,r;let n,i,{dataQuery:o,context:a,extractOption:s,multimodalPrompt:l,modelRuntime:A}=e,c=function(e){let t=e_(),r=(null==e?void 0:e.screenshotIncluded)??!0,n=(null==e?void 0:e.referenceImagesIncluded)??!1,i=["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(r?i.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."):i.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."),n){let e="Reference images are supporting context only unless <DATA_DEMAND> explicitly asks for comparison, matching, or reasoning about them.";i.push(r?`${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.`)}let o=i.join("\n\n");return`
306
- You are a versatile professional in software UI design and testing. Your outstanding contributions will impact the user experience of billions of users.
307
-
308
- ${o}
309
-
310
- If a key specifies a JSON data type (such as Number, String, Boolean, Object, Array), ensure the returned value strictly matches that data type.
311
-
312
- 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.
313
-
314
-
315
- Return in the following XML format:
316
- <observation>brief evidence observed for the extraction, less than 300 words. Use ${t} in this field.</observation>
317
- <data-json>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.</data-json>
318
- <errors>optional error messages as JSON array, e.g., ["error1", "error2"]</errors>
319
-
320
- # Example 1
321
- For example, if the DATA_DEMAND is:
322
-
323
- <DATA_DEMAND>
324
- {
325
- "name": "name shows on the left panel, string",
326
- "age": "age shows on the right panel, number",
327
- "isAdmin": "if the user is admin, boolean"
328
- }
329
- </DATA_DEMAND>
330
-
331
- By viewing the screenshot and page contents, you can extract the following data:
332
-
333
- <observation>According to the screenshot, i can see ...</observation>
334
- <data-json>
335
- {
336
- "name": "John",
337
- "age": 30,
338
- "isAdmin": true
339
- }
340
- </data-json>
341
-
342
- # Example 2
343
- If the DATA_DEMAND is:
344
-
345
- <DATA_DEMAND>
346
- the todo items list, string[]
347
- </DATA_DEMAND>
348
-
349
- By viewing the screenshot and page contents, you can extract the following data:
350
-
351
- <observation>According to the screenshot, i can see ...</observation>
352
- <data-json>
353
- ["todo 1", "todo 2", "todo 3"]
354
- </data-json>
355
-
356
- # Example 3
357
- If the DATA_DEMAND is:
358
-
359
- <DATA_DEMAND>
360
- the page title, string
361
- </DATA_DEMAND>
362
-
363
- By viewing the screenshot and page contents, you can extract the following data:
364
-
365
- <observation>According to the screenshot, i can see ...</observation>
366
- <data-json>
367
- "todo list"
368
- </data-json>
369
-
370
- # Example 4
371
- If the DATA_DEMAND is:
372
-
373
- <DATA_DEMAND>
374
- {
375
- "StatementIsTruthy": "Boolean, is it currently the SMS page?"
376
- }
377
- </DATA_DEMAND>
378
-
379
- By viewing the screenshot and page contents, you can extract the following data:
380
-
381
- <observation>According to the screenshot, i can see ...</observation>
382
- <data-json>
383
- { "StatementIsTruthy": true }
384
- </data-json>
385
- `}({screenshotIncluded:(null==s?void 0:s.screenshotIncluded)!==!1,referenceImagesIncluded:!!(null==l||null==(t=l.images)?void 0:t.length)}),u=a.screenshot.base64,d=(r=e.pageDescription||"",i="",i="string"==typeof o?o:JSON.stringify(o,null,2),`
386
- <PageDescription>
387
- ${r}
388
- </PageDescription>
389
-
390
- <DATA_DEMAND>
391
- ${i}
392
- </DATA_DEMAND>
393
- `),p=[];if((null==s?void 0:s.screenshotIncluded)!==!1){let e=a.screenshotSequence;e&&e.length>1?(p.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)=>{p.push({type:"text",text:`Frame ${r+1}/${e.length}`}),p.push({type:"image_url",image_url:{url:t.base64,detail:"high"}})})):(p.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."}),p.push({type:"image_url",image_url:{url:u,detail:"high"}}))}p.push({type:"text",text:d});let h=[{role:"system",content:c},{role:"user",content:p}];if(l){let e=await rp(l);h.push(...e)}let{content:f,usage:g,reasoning_content:m,rawChoiceMessage:y}=await tE(h,A,{abortSignal:e.abortSignal});try{n=function(e){let t,r,n=nZ(e,"observation"),i=nZ(e,"data-json"),o=nZ(e,"errors");if(!i)throw Error("Missing required field: data-json");try{t=tf(i,{source:"generic-object",requireObject:!1})}catch(e){throw Error(`Failed to parse data-json: ${e}`)}if(o)try{let e=tf(o,{source:"generic-object",requireObject:!1});Array.isArray(e)&&(r=e)}catch(e){}return{...n?{thought:n}:{},data:t,...r&&r.length>0?{errors:r}:{}}}(f)}catch(t){let e=t instanceof Error?t.message:String(t);throw new tm(`XML parse error: ${e}`,f,g,y)}return{parseResult:n,rawResponse:f,rawChoiceMessage:y,usage:g,reasoning_content:m}}let n2={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"']};class n3 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}}var n5=r(4201).Buffer;function n4(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n7(e,t){var r,n;if("screenshotSequence"!==e)return t&&(null==(r=t.constructor)?void 0:r.name)==="Page"?"[Page object]":t&&(null==(n=t.constructor)?void 0:n.name)==="Browser"?"[Browser object]":t&&"function"==typeof t.toSerializable?t.toSerializable():t}function n8(e,t){return"screenshot"!==e||"object"!=typeof t||null===t||rJ.isSerialized(t),t}class n6{serialize(e){return JSON.stringify(this.toJSON(),n7,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 n6(JSON.parse(e,n8))}static fromJSON(e){return new n6(e)}collectScreenshots(){let e=[];for(let r of this.tasks){var t;if((null==(t=r.uiContext)?void 0:t.screenshot)instanceof rJ&&e.push(r.uiContext.screenshot),r.recorder)for(let t of r.recorder)t.screenshot instanceof rJ&&e.push(t.screenshot)}return e}constructor(e){n4(this,"id",void 0),n4(this,"logTime",void 0),n4(this,"name",void 0),n4(this,"description",void 0),n4(this,"tasks",void 0),n4(this,"aiActContext",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}}class n9{serialize(e){return JSON.stringify(this.toJSON(),n7,e)}serializeWithInlineScreenshots(e){let t=e=>e instanceof rJ?{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 n9(JSON.parse(e,n8))}static fromJSON(e){return new n9(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,rb.existsSync)(t)||(0,rb.mkdirSync)(t,{recursive:!0}),this.collectAllScreenshots())){let r=(0,tH.join)(t,`${e.id}.${e.extension}`);if((0,rb.existsSync)(r))continue;let n=e.rawBase64;(0,rb.writeFileSync)(r,n5.from(n,"base64"))}(0,rb.writeFileSync)(e,this.serialize(),"utf-8")}static fromFilesAsInlineJson(e){let t=(0,rb.readFileSync)(e,"utf-8"),r=`${e}.screenshots`,n=JSON.parse(t),i=new rQ({mode:"directory",reportPath:e});return JSON.stringify(function e(t,r){if("string"==typeof t)return t;if(Array.isArray(t))return t.map(t=>e(t,r));if("object"==typeof t&&null!==t){let n=rK(t);if(n){let e=null;return Object.defineProperties({},{base64:{get:()=>(null===e&&(e=r(n)),e),enumerable:!0},capturedAt:{value:n.capturedAt,enumerable:!0},sourceRef:{value:{...n},enumerable:!0}})}let i={};for(let[n,o]of Object.entries(t))i[n]=e(o,r);return i}return t}(n,e=>{let t=((e,t)=>{let n="image/jpeg"===t?"jpeg":"png",i=(0,tH.join)(r,`${e}.${n}`);if(!(0,rb.existsSync)(i))return"";let o=(0,rb.readFileSync)(i);return`data:image/${n};base64,${o.toString("base64")}`})(e.id,e.mimeType);return t||("inline"===e.storage?"":i.loadBase64(e))}))}static cleanupFiles(e){for(let t of[e,`${e}.screenshots`])try{(0,rb.rmSync)(t,{force:!0,recursive:!0})}catch{}}static getFilePaths(e){return[e,`${e}.screenshots`]}constructor(e){n4(this,"sdkVersion",void 0),n4(this,"groupName",void 0),n4(this,"groupDescription",void 0),n4(this,"modelBriefs",void 0),n4(this,"executions",void 0),n4(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 n6?e:n6.fromJSON(e)),this.deviceType=e.deviceType}}let ie={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 it(e,t,r,n,i,o,a){let s=n.toString(),l=i;for(let n of s)!function(e,t,r,n,i,o,a){let s=ie[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 A=0;A<2;A++){let c=i+2*l+A,u=o+2*n+s;if(c>=0&&c<t&&u>=0&&u<r){let r=(u*t+c)*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,o,a),l+=11}function ir(e){return 11*e.toString().length-1}function ii(e,t,r,n,i){let o=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=o;r<o+s&&r<t;r++){if(r<0||n<0)continue;let o=(n*t+r)*4;e[o+0]=i.r,e[o+1]=i.g,e[o+2]=i.b,e[o+3]=i.a}}function io(e,t,r,n,i,o){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},s=Math.round(n.x),l=Math.round(n.y),A=Math.max(Math.round(i),1),c=Math.max(A-Math.max(Math.round(a.thickness??2),1),0),u=A*A,d=c*c;for(let n=l-A;n<=l+A;n++)for(let i=s-A;i<=s+A;i++){if(i<0||n<0||i>=t||n>=r)continue;let A=(i-s)**2+(n-l)**2;if(!(a.fill?A<=u:A<=u&&A>=d))continue;let c=(n*t+i)*4;e[c+0]=o.r,e[c+1]=o.g,e[c+2]=o.b,e[c+3]=o.a}}function ia(e,t,r,n){let i=new Uint8Array(e.length);for(let r=0;r<e.length;r+=4){let n=t[r+3]/255,o=e[r+3]/255;if(0===n)i[r+0]=e[r+0],i[r+1]=e[r+1],i[r+2]=e[r+2],i[r+3]=e[r+3];else{let a=n+o*(1-n);0===a?(i[r+0]=t[r+0],i[r+1]=t[r+1],i[r+2]=t[r+2],i[r+3]=t[r+3]):(i[r+0]=Math.round((t[r+0]*n+e[r+0]*o*(1-n))/a),i[r+1]=Math.round((t[r+1]*n+e[r+1]*o*(1-n))/a),i[r+2]=Math.round((t[r+2]*n+e[r+2]*o*(1-n))/a),i[r+3]=Math.round(255*a))}}return i}let is=async function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,o=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(o){let e=r-30-20;ii(s,t,r,{x:0,y:e,w:t,h:30},{r:0,g:0,b:0,a:204})}for(let o=0;o<e.length;o++){let A=e[o],c=l[o%l.length],u=Math.max(0,A.rect.left-n),d=Math.max(0,A.rect.top-n),p=Math.min(t-u,A.rect.width+2*n),h=Math.min(r-d,A.rect.height+2*n);!function(e,t,r,n,i,o){let a=Math.floor(n.x),s=Math.floor(n.y),l=Math.floor(n.w),A=Math.floor(n.h);for(let n=s;n<s+A&&n<r;n++)for(let r=a;r<a+l&&r<t;r++){if(r<0||n<0)continue;let c=r>=a&&r<a+o,u=r<=a+l-1&&r>a+l-o-1,d=n>=s&&n<s+o,p=n<=s+A-1&&n>s+A-o-1;if(c||u||d||p){let o=(n*t+r)*4;e[o+0]=i.r,e[o+1]=i.g,e[o+2]=i.b,e[o+3]=i.a}}}(s,t,r,{x:u,y:d,w:p,h:h},c.rect,i),a&&io(s,t,r,{x:A.rect.left+A.rect.width/2,y:A.rect.top+A.rect.height/2},4,c.rect,{fill:!0});let f=A.indexId;if("number"!=typeof f)continue;let g=ir(f),m=g+5,y=u-m,v=d+Math.floor(h/2)-Math.floor(7)-2,b=(t,r)=>e.slice(0,o).some(e=>t<e.rect.left+e.rect.width&&t+m>e.rect.left&&r<e.rect.top+e.rect.height&&r+18>e.rect.top),w=(e,n)=>e>=0&&e+m<=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)),ii(s,t,r,{x:y,y:v,w:m,h:18},c.rect),it(s,t,r,f,y+Math.floor((m-g)/2),v+Math.floor(2),c.text)}return s},il=async e=>{tZ()(e.inputImgBase64,"inputImgBase64 is required");let{PhotonImage:t,SamplingFilter:r,resize:n}=await tY(),i=0,o=0;e.size&&(i=e.size.width,o=e.size.height);let a=await t4(e.inputImgBase64);if(i&&o){let e=a.get_width(),t=a.get_height();if(e!==i||t!==o){let e=n(a,i,o,r.Nearest);a.free(),a=e}}else i=a.get_width(),o=a.get_height();if(!i||!o)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 is(s,i,o,e.annotationPadding,e.borderThickness,l,e.centerPoint),A=ia(r,n,i,o),c=new t(A,i,o),u=await t9(c,90);return c.free(),u}finally{a.free()}},iA=async e=>{tZ()(e.inputImgBase64,"inputImgBase64 is required");let{PhotonImage:t,SamplingFilter:r,resize:n}=await tY(),i=0,o=0;e.size&&(i=e.size.width,o=e.size.height);let a=await t4(e.inputImgBase64);if(i&&o){let e=a.get_width(),t=a.get_height();if(e!==i||t!==o){let e=n(a,i,o,r.Nearest);a.free(),a=e}}else i=a.get_width(),o=a.get_height();if(!i||!o)throw a.free(),Error("Image processing failed because width or height is undefined");try{let r=a.get_raw_pixels(),n=new Uint8Array(i*o*4);!function(e,t,r,n,i){var o;let a,s,l,A,c,u,d,p,h=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1,f=[{r:198,g:35,b:0,a:238},{r:0,g:0,b:255,a:238}],g=f[(h-1)%f.length],m=Math.max(Math.round(i),10);o={callout:g,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),l=Math.max(m+18,30),A=[{x:a+l,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-m>=0&&e.x+m<t&&e.y-m>=0&&e.y+m<r)||{x:Math.min(Math.max(a+l,m),t-m-1),y:Math.min(Math.max(s-l,m),r-m-1)},c=Math.atan2(s-A.y,a-A.x),u={x:A.x+Math.cos(c)*(m+1),y:A.y+Math.sin(c)*(m+1)},d=1/Math.sqrt(Math.cos(c)**2/900+Math.sin(c)**2/225),function(e,t,r,n,i,o){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:2,s=Math.round(n.x),l=Math.round(n.y),A=Math.round(i.x),c=Math.round(i.y),u=Math.max(Math.abs(A-s),Math.abs(c-l),1),d=Math.max(Math.floor(a/2),0);for(let n=0;n<=u;n++){let i=Math.round(s+(A-s)*n/u),a=Math.round(l+(c-l)*n/u);for(let n=-d;n<=d;n++)for(let s=-d;s<=d;s++){let l=i+s,A=a+n;if(l<0||A<0||l>=t||A>=r)continue;let c=(A*t+l)*4;e[c+0]=o.r,e[c+1]=o.g,e[c+2]=o.b,e[c+3]=o.a}}}(e,t,r,u,{x:a-Math.cos(c)*d,y:s-Math.sin(c)*d},o.callout,2),io(e,t,r,A,m+2,o.calloutBorder,{thickness:3}),io(e,t,r,A,m,o.callout,{fill:!0}),function(e,t,r,n,i,o,a){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:2,l=Math.round(n.x),A=Math.round(n.y),c=Math.max(Math.round(i),1),u=Math.max(Math.round(o),1),d=Math.max(c-Math.round(s),0),p=Math.max(u-Math.round(s),0);for(let n=A-u;n<=A+u;n++)for(let i=l-c;i<=l+c;i++){if(i<0||n<0||i>=t||n>=r)continue;let o=i-l,s=n-A,h=o*o/(c*c)+s*s/(u*u),f=0===d||0===p?0:o*o/(d*d)+s*s/(p*p);if(h>1||f<1)continue;let g=(n*t+i)*4;e[g+0]=a.r,e[g+1]=a.g,e[g+2]=a.b,e[g+3]=a.a}}(e,t,r,n,30,15,o.callout,2),p=ir(o.indexId),it(e,t,r,o.indexId,Math.round(A.x-p/2),Math.round(A.y-7),o.calloutText)}(n,i,o,e.point,e.radius??14,e.indexId??1);let s=ia(r,n,i,o),l=new t(s,i,o),A=await t9(l,90);return l.free(),A}finally{a.free()}},ic={resize:{cropMaxLongEdge:1e3,cropUpscaleMaxRatio:2}};function iu(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 id(e){return e.width<=40&&e.height<=40?1:2}function ip(e){let t={logTime:Date.now()};return{logId:(0,eQ.uR)(),...t,...e}}function ih(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ig=(0,eT.a)("ai:service");class im{async locate(e,t,r,n){var i;let o,{config:a}=r,s="string"==typeof e?e:e.prompt;if((0,eQ.vA)(s,"query is required for locate"),(0,eQ.vA)("object"==typeof e,"query should be an object for locate"),!a.modelFamily)throw Error(nK);let l=(null==t?void 0:t.context)||await this.contextRetrieverFn(),A=await this.resolveLocateSearchArea({query:e,queryPrompt:s,opt:t,context:l,modelRuntime:r,abortSignal:n}),c=Date.now(),{parseResult:u,rect:d,rawResponse:p,rawChoiceMessage:h,usage:f,reasoning_content:g}=await n_({context:l,targetElementDescription:s,searchConfig:A.config,modelRuntime:r,abortSignal:n}),m=Date.now()-c,y={...this.taskInfo?this.taskInfo:{},durationMs:m,rawResponse:p,rawChoiceMessage:h,formatResponse:u,usage:f,searchArea:A.trace.sourceRect,searchAreaRawResponse:A.trace.rawResponse,searchAreaRawChoiceMessage:A.trace.rawChoiceMessage,searchAreaUsage:A.trace.usage,reasoning_content:g};(null==(i=u.errors)?void 0:i.length)&&(o=`failed to locate element:
394
- ${u.errors.join("\n")}`);let v={type:"locate",userQuery:{element:s},matchedRect:d,data:null,taskInfo:y,deepLocate:!!A.trace.sourceRect,error:o},b=u.element,w=ip({...v,matchedElement:b?[b]:[]});if(o)throw new n3(o,w);return b?{element:{center:b.center,rect:b.rect,description:b.description},rect:d,dump:w}:{element:null,rect:d,dump:w}}async resolveLocateSearchArea(e){var t,r;let{query:n,queryPrompt:i,opt:o,context:a,modelRuntime:s,abortSignal:l}=e,{adapter:A}=s,c=!!(null==o||null==(t=o.planLocatedElement)?void 0:t.rect);if(!n.deepLocate)return{trace:{}};if(c){let e=await nY({context:a,baseRect:o.planLocatedElement.rect});return{config:e,trace:{sourceRect:e.sourceRect,rawResponse:JSON.stringify({source:"plan-located-element",rect:o.planLocatedElement.rect})}}}if(A.locate.supportsSearchArea){let e=await n0({context:a,sectionDescription:i,modelRuntime:s,abortSignal:l}),{searchAreaConfig:t}=e;return(0,eQ.vA)(t,`cannot find search area for "${i}"${e.error?`: ${e.error}`:""}`),{config:t,trace:{sourceRect:t.sourceRect,rawResponse:e.rawResponse,rawChoiceMessage:e.rawChoiceMessage,usage:e.usage}}}let u=await n_({context:a,targetElementDescription:i,modelRuntime:s,abortSignal:l});(0,eQ.vA)(u.rect,`cannot find search area for "${i}"${(null==(r=u.parseResult.errors)?void 0:r.length)?`: ${u.parseResult.errors.join("\n")}`:""}`);let d=await nY({context:a,baseRect:u.rect});return{config:d,trace:{sourceRect:d.sourceRect,rawResponse:JSON.stringify({source:"deep-locate-first-pass",rect:u.rect,rawResponse:u.rawResponse}),rawChoiceMessage:u.rawChoiceMessage,usage:u.usage}}}async extract(e,t,r,n,i,o,a){var s;let l,A,c,u,d,p;(0,eQ.vA)(o,"context is required for extract"),(0,eQ.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 n1({context:o,dataQuery:e,multimodalPrompt:i,extractOption:r,modelRuntime:t,pageDescription:n,abortSignal:null==a?void 0:a.abortSignal});l=s.parseResult,A=s.rawResponse,c=s.rawChoiceMessage,u=s.usage,d=s.reasoning_content}catch(t){if(t instanceof tm){let r=Date.now()-h,n=ip({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:{...this.taskInfo?this.taskInfo:{},durationMs:r,rawResponse:t.rawResponse,rawChoiceMessage:t.rawChoiceMessage,usage:t.usage},error:t.message});throw new n3(t.message,n)}throw t}let f=Date.now()-h,g={...this.taskInfo?this.taskInfo:{},durationMs:f,rawResponse:A,rawChoiceMessage:c,formatResponse:l,usage:u,reasoning_content:d};(null==(s=l.errors)?void 0:s.length)&&(p=`AI response error:
395
- ${l.errors.join("\n")}`);let{data:m,thought:y}=l||{},v=ip({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:g,error:p,data:m});if(p&&!m)throw new n3(p,v);return{data:m,thought:y,usage:u,reasoning_content:d,dump:v}}async describe(e,t,r){let n,i,o;(0,eQ.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,eQ.vA)(l,"screenshot is required for service.describe");let A=(o=e_(),`
396
- Describe the real page element indicated by the temporary callout.
397
- The callout is an annotation overlay. It is not part of the page or target.
398
- 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.
399
-
400
- IMPORTANT: You MUST write the description in ${o}.
401
-
402
- OBSERVE IN THIS ORDER:
403
- 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.
404
- 2. Primitive: name what that smallest part is before adding surrounding context.
405
- 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.
406
- 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.
407
-
408
- RULES:
409
- - Keep description under 35 words.
410
- - Describe the smallest indicated UI part itself, not the larger container, row, card, sentence, or group that merely contains it.
411
- - Ignore every annotation overlay, including callout number, line, color, marker, border, dot, ring, crosshair, or selection box. Never describe the annotation as the target.
412
- - Do not borrow the text, glyph, direction, purpose, or state from a nearby element outside the callout endpoint/center.
413
- - 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.
414
- - 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.
415
- - 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.
416
- - 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.
417
- - 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.
418
- - 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.
419
- - 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.
420
- - For inline text, links, or substrings, describe only the exact substring/link at the endpoint/center, not the whole line.
421
- - 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.
422
- - 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.
423
- - Use selected, highlighted, hovered, focused, or active state only if the callout endpoint/center is inside that state.
424
- - If the endpoint/center is on blank space, describe the empty region/gap between stable surrounding anchors. Do not invent a nearby control.
425
- - Use actual visible text from the current screenshot when available; do not copy labels from the examples.
426
- - **Write the description in ${o}**
427
-
428
- EXAMPLES:
429
- ${(n2[o]||n2.English).map(e=>`- ${e}`).join("\n")}
430
-
431
- Return JSON:
432
- {
433
- "description": "unique element identifier",
434
- "error"?: "error message if any"
435
- }`),c=Array.isArray(e),u=c?{left:Math.floor(e[0]-15),top:Math.floor(e[1]-15),width:30,height:30}:e,d=c?{x:e[0],y:e[1]}:void 0,p=c?await iA({inputImgBase64:l,size:s,point:d}):await il({inputImgBase64:l,size:s,elementsPositionInfo:[{rect:iu(u)}],borderThickness:id(u),centerPoint:!0});if(null==r?void 0:r.deepDescribe){let e=[{kind:"focused",rect:ro(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",image_url:{url:p,detail:"high"}},...(await Promise.all(e.map(async e=>{var t,r;let n,i;ig("describe: cropping deep context area",e);let o=await t6(l,e.rect),a={width:o.width,height:o.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),i=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-i)),width:n,height:i}),A=c?await iA({inputImgBase64:o.imageBase64,size:a,point:{x:d.x-e.rect.left,y:d.y-e.rect.top}}):await il({inputImgBase64:o.imageBase64,size:a,elementsPositionInfo:[{rect:iu(s)}],borderThickness:id(s),centerPoint:!0}),p=function(e){let t=Math.max(e.width,e.height);if(!t)return;let{resize:r}=ic,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)}}(o);return{kind:e.kind,imageBase64:p?await t5(A,p):A}}))).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",image_url:{url:e.imageBase64,detail:"high"}}])]}else n=[{type:"text",text:"Full screenshot with a temporary callout marking the target:"},{type:"image_url",image_url:{url:p,detail:"high"}}];let h=[{role:"system",content:A},{role:"user",content:n}];try{i=await tx(h,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),i=e instanceof tm?e.rawResponse:null==(t=n.match(/Response -\s*\n\s*([\s\S]*)$/))?void 0:t[1];if(!i||!n.includes("failed to parse LLM response into JSON")&&!(e instanceof tm))return;let o=null==(r=function(e,t){let r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=RegExp(`"${r}"\\s*:\\s*"`).exec(e);if(!n)return;let i=n.index+n[0].length,o=!1,a="";for(;i<e.length;i+=1){let t=e[i];if(o){a+=t,o=!1;continue}if("\\"===t){a+=t,o=!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,i+1);if(","===r||"}"===r||"]"===r||void 0===r)try{return JSON.parse(`"${a}"`)}catch{return a}a+='\\"'}}(td(i),"description"))?void 0:r.trim();if(o)return{description:o}}(t);if(!e)throw t;return ig("describe: recovered malformed description JSON response"),e}let{content:f}=i;return(0,eQ.vA)(!f.error,`describe failed: ${f.error}`),(0,eQ.vA)(f.description,"failed to describe the element"),f}constructor(e,t){ih(this,"contextRetrieverFn",void 0),ih(this,"taskInfo",void 0),(0,eQ.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 iy="data:image/png;base64,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",iv={width:1788,height:500},ib="CONNECTIVITY_OK";function iw(e){return"number"==typeof e&&Number.isFinite(e)}function iE(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,...r}}function ix(e){return nL({...e,retryCount:0})}async function ik(e){let t=Date.now();try{let r=(await tE([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${ib}`}],e)).content.trim(),n=r.includes(ib);return iE("text",e,{passed:n,durationMs:Date.now()-t,message:n?"":`Unexpected response: ${r}`})}catch(r){return iE("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function iS(e){let t=Date.now();try{return await tE([{role:"user",content:[{type:"text",text:"What is the main content of this image ? It is a photo or a form ?"},{type:"image_url",image_url:{url:iy,detail:"high"}}]}],e),iE("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return iE("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function iC(e){let t=Date.now();try{var r,n;let i={screenshot:rJ.create(iy,Date.now()),shotSize:iv,shrunkShotToLogicalRatio:1},o=new im(i),a=await o.locate({prompt:"the main todo input box"},{},e),s=a.rect||(null==(r=a.element)?void 0:r.rect),l=null==(n=a.element)?void 0:n.center,A=!!s&&"object"==typeof s&&iw(s.left)&&iw(s.top)&&iw(s.width)&&iw(s.height)&&Array.isArray(l)&&2===l.length&&iw(l[0])&&iw(l[1]);return iE("aiLocate",e,{passed:A,durationMs:Date.now()-t,message:A?"":`Invalid locate result: ${JSON.stringify({rect:s,center:l})}`})}catch(r){return iE("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function iI(e){let t,r=ix(e.planningModelConfig),n=ix(e.insightModelConfig),i=ix(e.defaultModelConfig),o=await Promise.all([ik(r),iS(n),iC(i)]),a=o.every(e=>e.passed);return{passed:a,message:a?void 0:0===(t=o.filter(e=>!e.passed)).length?"Connectivity test failed, but no failed check details were generated.":t.map(e=>{var t;let r,n,i=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})`}]: ${i}`}).join("\n")}}function ij(e){if(!e._def)return e;let t=e._def.typeName;return"ZodOptional"===t||"ZodNullable"===t||"ZodDefault"===t?ij(e._def.innerType):"ZodEffects"===t&&e._def.schema?ij(e._def.schema):e}function iO(e){var t,r,n;let i=ij(e);if((null==(t=i._def)?void 0:t.typeName)==="ZodObject"){let e=null==(r=(n=i._def).shape)?void 0:r.call(n);if(e&&("midscene_location_field_flag"in e||"prompt"in e&&e.prompt))return!0}return!1}function iP(e,t){var r,n,i,o;let a=ij(e),s=null==(r=a._def)?void 0:r.typeName;if("ZodString"===s)return"string";if("ZodNumber"===s)return"number";if("ZodBoolean"===s)return"boolean";if("ZodArray"===s)return"array";if("ZodObject"===s)return iO(a)&&t||"object";if("ZodEnum"===s){let e=(null==(i=a._def)||null==(n=i.values)?void 0:n.map(e=>String(`'${e}'`)).join(", "))??"enum";return`enum(${e})`}if("ZodUnion"===s){let e=null==(o=a._def)?void 0:o.options;return e&&e.length>0?e.map(e=>iP(e,t)).join(" | "):"union"}return"unknown"}function iR(e){if("description"in e)return e.description||null;let t=ij(e);return"description"in t?t.description||null:iO(t)?"Location information for the target element":null}(0,eT.a)("ai:recorder-markdown",{console:!0});let iM=e=>{let t=e,r=new Set;for(;t&&!r.has(t);){var n,i,o;r.add(t);let e=t;if(!(null==(n=e._def)?void 0:n.typeName))break;if("ZodDefault"===e._def.typeName)return null==(i=(o=e._def).defaultValue)?void 0:i.call(o);if("ZodOptional"===e._def.typeName||"ZodNullable"===e._def.typeName)t=e._def.innerType;else break}},iT=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0,i=[];if(i.push(`- type: "${e.name}"`),e.paramSchema){var o;let r=[],n=e.paramSchema;if((null==(o=n._def)?void 0:o.typeName)==="ZodObject"&&n.shape){for(let[e,i]of Object.entries(n.shape))if(i&&"object"==typeof i){let n="function"==typeof i.isOptional&&i.isOptional()?`${e}?`:e,o=iP(i,t),a=iR(i),s=iM(i),l=void 0!==s,A=`${n}: ${o}`,c=[];if(a&&c.push(a),l){let e="string"==typeof s?`"${s}"`:JSON.stringify(s);c.push(`default: ${e}`)}c.length>0&&(A+=` // ${c.join(", ")}`),r.push(A)}r.length>0&&(i.push("- param:"),r.forEach(e=>{i.push(` - ${e}`)}))}else{let e=iP(n),t=iR(n),r=`- param: ${e}`;t&&(r+=` // ${t}`),r+=" (pass the value directly, not as an object)",i.push(r)}}if(e.sample&&"object"==typeof e.sample){let t=rg(e.paramSchema),o=r&&n?((e,t,r)=>{let n=r.resultKey,i=r.exampleValues,o={...e},a=0;for(let e of t)o[e]&&"object"==typeof o[e]&&o[e].prompt&&(o[e]={...o[e],[n]:i[a%i.length]},a++);return o})(e.sample,t,n):e.sample,a=`- sample:
436
- <action-type>${e.name}</action-type>
437
- <action-param-json>
438
- ${JSON.stringify(o,null,2).replace(/\n/g,`
439
- `)}
440
- </action-param-json>`;i.push(a)}return`- ${e.name}, ${e.description||"No description provided"}
441
- ${i.join(`
442
- `)}
443
- `.trim()};async function iN(e){let{actionSpace:t,locatePromptSpec:r,includeLocateInPlanning:n,includeThought:i,includeSubGoals:o}=e,a=e_();if(n&&!r)throw Error(nU());let s=t.map(e=>{var t;return iT(e,(t=n?r:void 0)?`{${t.resultKey}: ${t.resultValueSchema}, prompt: string } // ${t.resultValueDescription}`:"{ prompt: string /* description of the target element */ }",n,r)}).join("\n"),l=["### Action Guidelines","",...s.includes("RunAdbShell")?["- If the user's task can be completed with the RunAdbShell action, prefer using the RunAdbShell action."]:[],"- 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.","- When editing existing text in a UI field, preserve all existing text by moving the cursor and typing/deleting the minimal necessary characters.",'- 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.'].join("\n"),A=o??!1,c=(e,t)=>{var i,o;return i=n?r:void 0,o=(null==r?void 0:r.exampleValues[t])??(null==r?void 0:r.exampleValues[0]),i?`{
444
- "prompt": ${JSON.stringify(e)},
445
- "${i.resultKey}": ${nH(o??i.exampleValues[0])}
446
- }`:`{
447
- "prompt": ${JSON.stringify(e)}
448
- }`},u=c("Add to cart button for Sauce Labs Backpack",1),d=c("Name input field in the registration form",2),p=c("Email input field in the registration form",3),h='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.',f=A?`REQUIRED: You MUST always output the <planning> tag. Never skip it.
449
-
450
- Include your planning details in the <planning> tag. It should answer: 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? Write it naturally without numbering or section headers.
451
-
452
- ${h}`:`REQUIRED: You MUST always output the <planning> tag. Never skip it.
453
-
454
- Include your planning details in the <planning> tag. It should answer: What is the current state based on the screenshot? What should be the next action? Write it naturally without numbering or section headers.
455
-
456
- ${h}`,g=A?`
457
-
458
- * <update-plan-content> tag
459
-
460
- Use this structure to give or update your plan:
461
-
462
- <update-plan-content>
463
- <sub-goal index="1" status="finished|pending">sub goal description</sub-goal>
464
- <sub-goal index="2" status="finished|pending">sub goal description</sub-goal>
465
- ...
466
- </update-plan-content>
467
-
468
- * <mark-sub-goal-done> tag
469
-
470
- Use this structure to mark a sub-goal as done:
471
-
472
- <mark-sub-goal-done>
473
- <sub-goal index="1" status="finished" />
474
- </mark-sub-goal-done>
475
-
476
- 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.
477
-
478
- * Note
479
-
480
- During execution, you can call <update-plan-content> at any time to update the plan based on the latest screenshot and completed sub-goals.
481
-
482
- ### Example
483
-
484
- 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:
485
-
486
- <planning>...</planning>
487
- <update-plan-content>
488
- <sub-goal index="1" status="pending">Log in to the system</sub-goal>
489
- <sub-goal index="2" status="pending">Complete all to-do items</sub-goal>
490
- <sub-goal index="3" status="pending">Submit the registration form</sub-goal>
491
- </update-plan-content>
492
-
493
- After logging in and seeing the to-do items, you can mark the sub-goal as done:
494
-
495
- <mark-sub-goal-done>
496
- <sub-goal index="1" status="finished" />
497
- </mark-sub-goal-done>
498
-
499
- At this point, the status of all sub-goals is:
500
-
501
- <update-plan-content>
502
- <sub-goal index="1" status="finished" />
503
- <sub-goal index="2" status="pending" />
504
- <sub-goal index="3" status="pending" />
505
- </update-plan-content>
506
-
507
- After some time, when the last sub-goal is also completed, you can mark it as done as well:
508
-
509
- <mark-sub-goal-done>
510
- <sub-goal index="3" status="finished" />
511
- </mark-sub-goal-done>`:"",m=A?3:2,y=A?4:3;return`
512
- 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.
513
-
514
- ${A?"## Step 1: Observe and Plan (related tags: <planning>, <update-plan-content>, <mark-sub-goal-done>)":"## Step 1: Observe (related tags: <planning>)"}
515
-
516
- ${A?"First, observe the current screenshot and previous logs, 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.":"First, observe the current screenshot and previous logs to understand the current state."}
517
- ${A?`
518
- ### Observation Guidelines
519
-
520
- - Treat visible summaries, thumbnails, cropped content, and partially visible lists as potentially incomplete when the task depends on precise details.
521
- - 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.
522
- `:""}
523
- * <planning> tag (REQUIRED)
524
-
525
- ${f}
526
- ${g}
527
- ${A?`
528
- ## Step 2: Memory Data from Current Screenshot (related tags: <memory>)
529
-
530
- 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.
531
-
532
- - Record information completely and exactly as shown. Do not summarize, translate, normalize, or merge values that may matter later.
533
- - 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.
534
- - Keep similar or repeated items as separate memory entries unless their task-relevant details are confirmed to be the same.
535
- - 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.
536
-
537
- Examples:
538
- - 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.
539
- - If you need to compare multiple similar results, record each candidate separately with its exact distinguishing details and visible context.
540
- - 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.
541
-
542
- Don't use this tag if no information needs to be preserved.
543
- `:""}
544
- ## Step ${m}: ${A?"Check if Goal is Accomplished":"Check if the Instruction is Fulfilled"} (related tags: <complete>)
545
-
546
- ${A?"Based on the current screenshot and the status of all sub-goals, determine":"Determine"} if the entire task is completed.
547
-
548
- ### CRITICAL: The User's Instruction is the Supreme Authority
549
-
550
- 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.
551
-
552
- **Explicit instructions vs. High-level goals:**
553
- - 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.
554
- - 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.
555
-
556
- **What "${A?"goal accomplished":"instruction fulfilled"}" means:**
557
- - The ${A?"goal is accomplished":"instruction is fulfilled"} when you have done EXACTLY what the user asked - no extra steps, no assumptions.
558
- - Do NOT perform any action beyond the explicit instruction, even if it seems logical or helpful.
559
-
560
- **Examples - Explicit instructions (execute exactly, no extra steps):**
561
- - "fill out the form" → ${A?"Goal accomplished":"Instruction fulfilled"} when all fields are filled. Do NOT submit the form.
562
- - "click the login button" → ${A?"Goal accomplished":"Instruction fulfilled"} once clicked. Do NOT wait for page load or verify login success.
563
- - "type 'hello' in the search box" → ${A?"Goal accomplished":"Instruction fulfilled"} when 'hello' is typed. Do NOT press Enter or trigger search.
564
- - "select the first item" → ${A?"Goal accomplished":"Instruction fulfilled"} when selected. Do NOT proceed to checkout.
565
-
566
- **Change completion:**
567
- - 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.
568
- - 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.
569
-
570
- **Special case - Scrollable option lists and dropdowns:**
571
- - 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.
572
- - If the target option is visible in the open list, Tap that exact option immediately.
573
- - 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.
574
- - 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.
575
- - While searching within an open dropdown/list, use short scrolls so intermediate options are not skipped.
576
- - 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.
577
-
578
- **Special case - Text hidden by a narrow input field:**
579
- - CRITICAL PRIORITY OVERRIDE - Input verification after an input action:
580
- - This rule overrides the general requirement to verify the exact target text from the screenshot.
581
- - 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.
582
- - 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.
583
- - 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.
584
- - 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.
585
- - 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.
586
- - Retry input only when the input field is clearly still empty, or when the page shows an explicit error message.
587
-
588
- **Special case - Assertion instructions:**
589
- - 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 ${A?"the goal":"it"} as failed (success="false").
590
- - 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.
591
-
592
- ### Completion Criteria for Process-required Instructions
593
-
594
- If the user's instruction includes explicit operation steps, ordering requirements, or action requirements, it is a process-required instruction.
595
-
596
- 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.
597
-
598
- 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.
599
-
600
- 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.
601
- ${!A?`
602
- **Page navigation restriction:**
603
- - 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.
604
- - 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).
605
- - 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.
606
- `:""}
607
- ### Output Rules
608
-
609
- - If the task is NOT complete, skip this section and continue to Step ${y}.
610
- - Use the <complete success="true|false">message</complete> tag to output the result if the goal is accomplished or failed.
611
- - the 'success' attribute is required. ${A?"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 ${A?"expected goal is not accomplished and cannot be accomplished":"instruction is not fulfilled and cannot be fulfilled"}, set success="false".
612
- - the 'message' is the information that will be provided to the user. If the user asks for a specific format, strictly follow that.
613
- - If you output <complete>, do NOT output <action-type> or <action-param-json>. The task ends here.
614
-
615
- ## Step ${y}: Determine Next Action (related tags: <log>, <action-type>, <action-param-json>, <error>)
616
-
617
- ONLY if the task is not complete: Think what the next action is according to the current screenshot${A?" and the plan":""}.
618
-
619
- - 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.
620
- - 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.
621
- - Make sure the previous actions are completed successfully. Otherwise, retry or do something else to recover.
622
- - Give just the next ONE action you should do (if any)
623
- - 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.
624
-
625
- ${l}
626
-
627
- ${n?`${nX()}
628
-
629
- `:""}### Supporting actions list
630
-
631
- ${s}
632
-
633
- ### Log to give user feedback (preamble message)
634
-
635
- 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:
636
-
637
- - **Use ${a}**
638
- - **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).
639
- - **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.
640
- - **Keep your tone light, friendly and curious**: add small touches of personality in preambles feel collaborative and engaging.
641
-
642
- **Examples:**
643
- - <log>Click the login button</log>
644
- - <log>Scroll to find the 'Yes' button in popup</log>
645
- - <log>Previous actions failed to find the 'Yes' button, i will try again</log>
646
- - <log>Go back to find the login button</log>
647
-
648
- ### If there is some action to do ...
649
-
650
- - Use the <action-type> and <action-param-json> tags to output the action to be executed.
651
- - The <action-type> MUST be one of the supporting actions. 'complete' is NOT a valid action-type.
652
- - Parameter names are strict. Use EXACTLY the field names listed for the selected action. Do NOT invent alias fields. If an action has a "sample" in its description, follow that structure.
653
- For example:
654
- <action-type>Tap</action-type>
655
- <action-param-json>
656
- {
657
- "locate": ${u}
658
- }
659
- </action-param-json>
660
-
661
- ### If you think there is an error ...
662
-
663
- - Use the <error> tag to output the error message.
664
-
665
- For example:
666
- <error>Unable to find the required element on the page</error>
667
-
668
- ### If there is no action to do ...
669
-
670
- - Don't output <action-type> or <action-param-json> if there is no action to do.
671
-
672
- ## Return Format
673
-
674
- Return in XML format following this decision flow:
675
-
676
- **Always include (REQUIRED):**
677
- <!-- Step 1: Observe${A?" and Plan":""} -->
678
- <planning>Your planning details here. NEVER skip this tag.</planning>
679
- ${A?`
680
- <!-- required when no update-plan-content is provided in the previous response -->
681
- <update-plan-content>...</update-plan-content>
682
-
683
- <!-- required when any sub-goal is completed -->
684
- <mark-sub-goal-done>
685
- <sub-goal index="1" status="finished" />
686
- </mark-sub-goal-done>
687
- `:""}${A?`
688
- <!-- Step 2: Memory data from current screenshot if needed -->
689
- <memory>...</memory>
690
- `:""}
691
- **Then choose ONE of the following paths:**
692
-
693
- **Path A: If the ${A?"goal is accomplished":"instruction is fulfilled"} or failed (Step ${m})**
694
- <complete success="true|false">...</complete>
695
-
696
- **Path B: If the ${A?"goal is NOT complete":"instruction is NOT fulfilled"} yet (Step ${y})**
697
- <!-- Determine next action -->
698
- <log>...</log>
699
- <action-type>...</action-type>
700
- <action-param-json>...</action-param-json>
701
-
702
- <!-- OR if there's an error -->
703
- <error>...</error>
704
- ${A?`
705
- ## Multi-turn Conversation Example
706
-
707
- 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":
708
-
709
- ### Turn 1 - Initial instruction
710
-
711
- **User message:**
712
- <user_instruction>fill out the registration form with name 'John' and email 'john@example.com', then return the filled email address</user_instruction>
713
-
714
- **Screenshot:** [Shows a registration form with empty Name and Email fields]
715
-
716
- **Your response:**
717
- <planning>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. I'll break this down into sub-goals and start with the Name field. Note: The instruction is to fill the form only (not submit), and return the email at the end.</planning>
718
- <update-plan-content>
719
- <sub-goal index="1" status="pending">Fill in the Name field with 'John'</sub-goal>
720
- <sub-goal index="2" status="pending">Fill in the Email field with 'john@example.com'</sub-goal>
721
- <sub-goal index="3" status="pending">Return the filled email address</sub-goal>
722
- </update-plan-content>
723
- <log>Click on the Name field to start filling the form</log>
724
- <action-type>Tap</action-type>
725
- <action-param-json>
726
- {
727
- "locate": ${d}
728
- }
729
- </action-param-json>
730
-
731
- ### Turn 2 - After clicking Name field
732
-
733
- **User message:**
734
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
735
-
736
- Sub-goals:
737
- 1. Fill in the Name field with 'John' (running)
738
- 2. Fill in the Email field with 'john@example.com' (pending)
739
- 3. Return the filled email address (pending)
740
- Current sub-goal is: Fill in the Name field with 'John'
741
- Actions performed for current sub-goal:
742
- - Click on the Name field to start filling the form
743
-
744
- **Screenshot:** [Shows the form with Name field now focused/active]
745
-
746
- **Your response:**
747
- <planning>The Name field is now focused. I need to type 'John' into this field. Current sub-goal is running, will be completed after input.</planning>
748
- <log>Typing 'John' into the Name field</log>
749
- <action-type>Input</action-type>
750
- <action-param-json>
751
- {
752
- "value": "John"
753
- }
754
- </action-param-json>
755
-
756
- ### Turn 3 - After entering name
757
-
758
- **User message:**
759
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
760
-
761
- Sub-goals:
762
- 1. Fill in the Name field with 'John' (running)
763
- 2. Fill in the Email field with 'john@example.com' (pending)
764
- 3. Return the filled email address (pending)
765
- Current sub-goal is: Fill in the Name field with 'John'
766
- Actions performed for current sub-goal:
767
- - Click on the Name field to start filling the form
768
- - Typing 'John' into the Name field
769
-
770
- **Screenshot:** [Shows the form with Name field containing 'John']
771
-
772
- **Your response:**
773
- <planning>The Name field now shows 'John'. Sub-goal 1 is complete. Next, I need to fill the Email field for sub-goal 2.</planning>
774
- <mark-sub-goal-done>
775
- <sub-goal index="1" status="finished" />
776
- </mark-sub-goal-done>
777
- <memory>Name field has been filled with 'John'</memory>
778
- <log>Moving to the Email field</log>
779
- <action-type>Tap</action-type>
780
- <action-param-json>
781
- {
782
- "locate": ${p}
783
- }
784
- </action-param-json>
785
-
786
- ### Turn 4 - After clicking Email field
787
-
788
- **User message:**
789
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
790
-
791
- Sub-goals:
792
- 1. Fill in the Name field with 'John' (finished)
793
- 2. Fill in the Email field with 'john@example.com' (running)
794
- 3. Return the filled email address (pending)
795
- Current sub-goal is: Fill in the Email field with 'john@example.com'
796
- Actions performed for current sub-goal:
797
- - Moving to the Email field
798
-
799
- **Screenshot:** [Shows the form with Name='John' and Email field focused]
800
-
801
- **Your response:**
802
- <planning>The Email field is now focused. I'll enter 'john@example.com'. After this, sub-goal 2 will be complete and my task will be done.</planning>
803
- <log>Typing email address into the Email field</log>
804
- <action-type>Input</action-type>
805
- <action-param-json>
806
- {
807
- "value": "john@example.com"
808
- }
809
- </action-param-json>
810
-
811
- ### Turn 5 - After entering email (Goal accomplished)
812
-
813
- **User message:**
814
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
815
-
816
- Sub-goals:
817
- 1. Fill in the Name field with 'John' (finished)
818
- 2. Fill in the Email field with 'john@example.com' (running)
819
- 3. Return the filled email address (pending)
820
- Current sub-goal is: Fill in the Email field with 'john@example.com'
821
- Actions performed for current sub-goal:
822
- - Moving to the Email field
823
- - Typing email address into the Email field
824
-
825
- **Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
826
-
827
- **Your response:**
828
- <planning>Both fields are now filled: Name shows 'John' and Email shows 'john@example.com'. 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.</planning>
829
- <mark-sub-goal-done>
830
- <sub-goal index="2" status="finished" />
831
- <sub-goal index="3" status="finished" />
832
- </mark-sub-goal-done>
833
- <complete success="true">john@example.com</complete>
834
- `:`
835
- ## Multi-turn Conversation Example
836
-
837
- 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":
838
-
839
- ### Turn 1 - Initial instruction
840
-
841
- **User message:**
842
- <user_instruction>fill out the registration form with name 'John' and email 'john@example.com', then return the filled email address</user_instruction>
843
-
844
- **Screenshot:** [Shows a registration form with empty Name and Email fields]
845
-
846
- **Your response:**
847
- <planning>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. 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.</planning>
848
- <log>Click on the Name field to start filling the form</log>
849
- <action-type>Tap</action-type>
850
- <action-param-json>
851
- {
852
- "locate": ${d}
853
- }
854
- </action-param-json>
855
-
856
- ### Turn 2 - After clicking Name field
857
-
858
- **User message:**
859
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
860
-
861
- **Screenshot:** [Shows the form with Name field now focused/active]
862
-
863
- **Your response:**
864
- <planning>The Name field is now focused. I need to type 'John' into this field. After this, I'll need to fill the Email field as well.</planning>
865
- <log>Typing 'John' into the Name field</log>
866
- <action-type>Input</action-type>
867
- <action-param-json>
868
- {
869
- "value": "John"
870
- }
871
- </action-param-json>
872
-
873
- ### Turn 3 - After entering name
874
-
875
- **User message:**
876
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
877
-
878
- **Screenshot:** [Shows the form with Name field containing 'John']
879
-
880
- **Your response:**
881
- <planning>The Name field now shows 'John'. Next, I need to fill the Email field with 'john@example.com'. I'll click on the Email field first.</planning>
882
- <log>Moving to the Email field</log>
883
- <action-type>Tap</action-type>
884
- <action-param-json>
885
- {
886
- "locate": ${p}
887
- }
888
- </action-param-json>
889
-
890
- ### Turn 4 - After clicking Email field
891
-
892
- **User message:**
893
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
894
-
895
- **Screenshot:** [Shows the form with Name='John' and Email field focused]
896
-
897
- **Your response:**
898
- <planning>The Email field is now focused. I'll enter 'john@example.com'. After this, both required fields will be filled and my task will be complete.</planning>
899
- <log>Typing email address into the Email field</log>
900
- <action-type>Input</action-type>
901
- <action-param-json>
902
- {
903
- "value": "john@example.com"
904
- }
905
- </action-param-json>
906
-
907
- ### Turn 5 - After entering email (Instruction fulfilled)
908
-
909
- **User message:**
910
- The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
911
-
912
- **Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
913
-
914
- **Your response:**
915
- <planning>Both fields are now filled: Name shows 'John' and Email shows 'john@example.com'. 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.</planning>
916
- <complete success="true">john@example.com</complete>
917
- `}`}let iD=(0,eT.a)("planning"),iB=(0,eT.a)("planning",{console:!0});function iz(e,t){let r,n,i=nZ(e,"planning"),o=nZ(e,"memory"),a=nZ(e,"log")||"",s=nZ(e,"error"),l=nZ(e,"action-type"),A=nZ(e,"action-param-json"),c=e.match(/<complete\s+success="(true|false)">([\s\S]*?)<\/complete>/i);if(c){var u;n="true"===c[1],r=(null==(u=c[2])?void 0:u.trim())||void 0}let d=nZ(e,"update-plan-content"),p=nZ(e,"mark-sub-goal-done"),h=d?function(e){let t,r=[],n=/<sub-goal\s+index="(\d+)"\s+status="(pending|finished)"(?:\s*\/>|>([\s\S]*?)<\/sub-goal>)/gi;for(t=n.exec(e);null!==t;){var i;let o=Number.parseInt(t[1],10),a=t[2],s=(null==(i=t[3])?void 0:i.trim())||"";r.push({index:o,status:a,description:s}),t=n.exec(e)}return r}(d):void 0,f=p?function(e){let t,r=[],n=/<sub-goal\s+index="(\d+)"\s+status="finished"\s*\/>/gi;for(t=n.exec(e);null!==t;)r.push(Number.parseInt(t[1],10)),t=n.exec(e);return r}(p):void 0,g=null;if(l&&"null"!==l.toLowerCase()){let e,r=l.split("<")[0].trim();if(A)try{e=t(A,{source:"planning-action-param",preserveStringValueKeys:"input"===r.toLowerCase()?["value"]:void 0})}catch(e){throw Error(`Failed to parse action-param-json: ${e}`)}g={type:r,...void 0!==e?{param:e}:{}}}return{...i?{thought:i}:{},...o?{memory:o}:{},log:a,...s?{error:s}:{},action:g,...void 0!==r?{finalizeMessage:r}:{},...void 0!==n?{finalizeSuccess:n}:{},...(null==h?void 0:h.length)?{updateSubGoals:h}:{},...(null==f?void 0:f.length)?{markFinishedIndexes:f}:{}}}async function iL(e,t){let r,n,{context:i,conversationHistory:o}=t,a=t.modelRuntime,{adapter:s}=a,{shotSize:l}=i,A=i.screenshot.base64;if(t.includeLocateInPlanning&&!a.config.modelFamily)throw Error(nU(a.config.slot));let c=a.config.modelFamily&&"standard"===s.locate.kind?s.locate.resultAdapter:void 0,u=!0===t.deepThink,d=await iN({actionSpace:t.actionSpace,locatePromptSpec:null==c?void 0:c.promptSpec,includeLocateInPlanning:t.includeLocateInPlanning,includeThought:!0,includeSubGoals:u}),p=await rq({imageBase64:A,width:l.width,height:l.height,policy:s.imagePreprocess}),h=p.imageBase64,f=ru(e),g=t.actionContext?`<high_priority_knowledge>${t.actionContext}</high_priority_knowledge>
918
- `:"",m=[{role:"user",content:[{type:"text",text:`${g}<user_instruction>${f}</user_instruction>`}]},...t.referenceImageMessages??[]],y=u?o.subGoalsToText():o.historicalLogsToText(),v=y?`
919
-
920
- ${y}`:o.pendingFeedbackMessage?"":`
921
-
922
- No previous actions have been executed in this aiAct execution yet. If the instruction asks for actions, choose the first action to execute.`,b=o.memoriesToText(),w=b?`
923
-
924
- ${b}`:"";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.${w}${v}`},{type:"image_url",image_url:{url:h,detail:"high"}}]},o.resetPendingFeedbackMessageIfExists()):r={role:"user",content:[{type:"text",text:`This is the current screenshot.${w}${v}`},{type:"image_url",image_url:{url:h,detail:"high"}}]},o.append(r),o.compressHistory(50,20);let E=[{role:"system",content:d},...m,...o.snapshot(t.imagesIncludeCount)],{content:x,usage:k,reasoning_content:S,rawChoiceMessage:C}=await tE(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});try{try{n=iz(x,s.jsonParser)}catch{let e=await tE(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});x=e.content,k=e.usage,S=e.reasoning_content,C=e.rawChoiceMessage,n=iz(x,s.jsonParser)}n.action&&void 0!==n.finalizeSuccess&&(iB("Planning response included both an action and <complete>; ignoring <complete> output."),n.finalizeMessage=void 0,n.finalizeSuccess=void 0);let e=n.action?[n.action]:[],r=!0;void 0!==n.finalizeSuccess&&(iD("task completed via <complete> tag, stop planning"),r=!1,u&&o.markAllSubGoalsFinished());let i={...n,actions:e,rawResponse:x,rawChoiceMessage:C,usage:k,reasoning_content:S,yamlFlow:function(e,t){let r=[];for(let n of e){let e=n.type,i=ra(e,t),o=i.interfaceAlias||e,a=i.paramSchema?rm(n.param||{},i.paramSchema):{},s="Launch"===i.name||"launch"===i.interfaceAlias||"Terminate"===i.name||"terminate"===i.interfaceAlias?"uri":"RunAdbShell"===i.name||"runAdbShell"===i.interfaceAlias||"RunHdcShell"===i.name||"runHdcShell"===i.interfaceAlias?"command":void 0,l=s?Object.keys(a):[],A=s&&1===l.length&&l[0]===s&&"string"==typeof a[s]?{[o]:a[s]}:{[o]:"",...a};r.push(A)}return r}(e,t.actionSpace),shouldContinuePlanning:r};if((0,eQ.vA)(n,"can't get plans from AI"),rV(e,{actionSpace:t.actionSpace,includeLocateInPlanning:t.includeLocateInPlanning,locateResultAdapter:c,locateResultContext:{preparedSize:p.preparedSize,contentSize:p.contentSize}}),u){var I,j;if((null==(I=n.updateSubGoals)?void 0:I.length)&&o.mergeSubGoals(n.updateSubGoals),null==(j=n.markFinishedIndexes)?void 0:j.length)for(let e of n.markFinishedIndexes)o.markSubGoalFinished(e);n.log&&o.appendSubGoalLog(n.log)}else n.log&&o.appendHistoricalLog(n.log);return n.memory&&o.appendMemory(n.memory),o.append({role:"assistant",content:[{type:"text",text:x}]}),i}catch(t){let e=t instanceof Error?t.message:String(t);throw new tm(`XML parse error: ${e}`,x,k,C)}}r(1182);var iF=r(3612),iK=r(3198),iU=r(9383),iQ=r(5409);let iZ=(0,eT.a)("yaml:utils"),iJ=/^tasks\s*:/,iX=/^[^\s#][^:]*:/,iH=["page","browser","web","target"],iq=["images","convertHttpImage2Base64"];function iG(e){if("object"!=typeof e||null===e)return;let t=iq.map(t=>[t,e[t]]).filter(e=>{let[,t]=e;return void 0!==t});return t.length?Object.fromEntries(t):void 0}function iV(e,t){let r;iZ("will call buildDetailedLocateParam",e,t);let n=e;if("object"==typeof e&&null!==e&&"prompt"in e){let{prompt:t,...r}=e;n=Object.keys(r).length>0?e:t}let i=n||(null==t?void 0:t.prompt)||(null==t?void 0:t.locate),o=!1,a=!0;if("object"==typeof t&&null!==t&&(o=t.deepLocate??t.deepThink??!1,a=t.cacheable??!0,r=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 iZ("no prompt, will return undefined in buildDetailedLocateParam",t);let s=iG(t);return s&&(i="string"==typeof i?{prompt:i,...s}:{...i,...s}),{prompt:i,deepLocate:o,cacheable:a,xpath:r}}var iW=r(5409);function iY(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_=(0,eT.a)("yaml-player"),i$={aiQuery:"aiQuery",aiNumber:"aiNumber",aiString:"aiString",aiBoolean:"aiBoolean",aiAsk:"aiAsk",aiLocate:"aiLocate"},i0=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 tU.kY.ZodString:case tU.kY.ZodEnum:case tU.kY.ZodNativeEnum:return!0;case tU.kY.ZodLiteral:return"string"==typeof t.value;case tU.kY.ZodOptional:case tU.kY.ZodNullable:case tU.kY.ZodDefault:return i0(t.innerType);case tU.kY.ZodEffects:return i0(t.schema);case tU.kY.ZodPipeline:return i0(t.out);case tU.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>i0(e))}default:return!1}};class i1{setResult(e,t){let r=e||this.unnamedResultIndex++;return this.result[r]&&console.warn(`result key ${r} already exists, will overwrite`),this.result[r]=t,this.flushResult()}setPlayerStatus(e,t){this.status=e,this.errorInSetup=t}notifyCurrentTaskStatusChange(e){let t="number"==typeof e?e:this.currentTaskIndex;if("number"!=typeof t)return;let r=this.taskStatusList[t];this.onTaskStatusChange&&this.onTaskStatusChange(r)}async setTaskStatus(e,t,r){this.taskStatusList[e].status=t,r&&(this.taskStatusList[e].error=r),this.notifyCurrentTaskStatusChange(e)}setTaskIndex(e){this.currentTaskIndex=e}flushResult(){if(this.output){let e=(0,tH.resolve)(iW.cwd(),this.output),t=(0,tH.dirname)(e);(0,iF.existsSync)(t)||(0,iF.mkdirSync)(t,{recursive:!0}),(0,iF.writeFileSync)(e,JSON.stringify(this.result||{},void 0,2))}}flushUnstableLogContent(){if(this.unstableLogContent){var e;let t=null==(e=this.interfaceAgent)?void 0:e._unstableLogContent(),r=(0,tH.resolve)(iW.cwd(),this.unstableLogContent),n=(0,tH.dirname)(r);(0,iF.existsSync)(n)||(0,iF.mkdirSync)(n,{recursive:!0}),(0,iF.writeFileSync)(r,JSON.stringify(t,null,2))}}async playTask(e,t){let{flow:r}=e;for(let o in(0,eQ.vA)(r,"missing flow in task"),r){var n,i;e.currentStep=Number.parseInt(o,10);let a=r[o],s=(null==(i=t.dump)||null==(n=i.executions)?void 0:n.length)??0;this.failedReportExecutionInCurrentStep=!1;try{await this.playFlowItem(t,a,a,o)}catch(e){throw this.failedReportExecutionInCurrentStep=this.hasFailedReportExecutionSince(t,s),e}}this.reportFile=t.reportFile,await this.flushUnstableLogContent()}hasFailedReportExecutionSince(e,t){var r;return((null==(r=e.dump)?void 0:r.executions)??[]).slice(t).some(e=>e.tasks.some(e=>"failed"===e.status||!!(e.error||e.errorMessage)))}async playFlowItem(e,t,r,n){if("Finalize"in r)return;i_(`playing step ${n}, flowItem=${JSON.stringify(t)}`);let i=Object.keys(i$).find(e=>Object.prototype.hasOwnProperty.call(r,e));if("aiAct"in t||"aiAction"in t||"ai"in t){let r,{aiAct:n,aiAction:i,ai:o,instruction:a,...s}=t,l=n??i??o;"string"==typeof a&&a||a&&"object"==typeof a&&"string"==typeof a.prompt&&a.prompt?r=a:l&&"object"==typeof l&&"string"==typeof l.prompt&&l.prompt?r=l:"string"==typeof l&&l&&(r=l),(0,eQ.vA)(r,"missing prompt for ai (aiAct)"),await e.aiAct(r,s)}else if("runGherkinScenario"in t){let{runGherkinScenario:r}=t;(0,eQ.vA)(r,"missing scenario for runGherkinScenario"),await e.runGherkinScenario(r,{cacheable:!1})}else if("aiAssert"in t){let{aiAssert:r,errorMessage:n,name:i,...o}=t;(0,eQ.vA)(r,"missing prompt for aiAssert"),(0,eQ.vA)(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML aiAssert. Use agent.startObserving() from code instead.");let a=await e.aiAssert(r,n,{...o,keepRawResponse:!0}),s=null==a?void 0:a.pass,l=null==a?void 0:a.thought,A=null==a?void 0:a.message;if(this.setResult(i,{pass:s,thought:l,message:A}),!s)throw Error(A)}else if(i){let{[i]:r,name:n,...o}=t;(0,eQ.vA)(r,`missing prompt for ${i}`),(0,eQ.vA)(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML flow items. Use agent.startObserving() from code instead.");let a=e[i$[i]];(0,eQ.vA)("function"==typeof a,`missing agent method for ${i}`);let s=await a.call(e,r,o);this.setResult(n,s)}else if("aiWaitFor"in t){let{aiWaitFor:r,timeout:n,...i}=t;(0,eQ.vA)(r,"missing prompt for aiWaitFor");let o={...i,...void 0!==n?{timeout:n,timeoutMs:n}:{}};await e.aiWaitFor(r,o)}else if("sleep"in t){let e=t.sleep,r=e;"string"==typeof e&&(r=Number.parseInt(e,10)),(0,eQ.vA)(r&&r>0,`ms for sleep must be greater than 0, but got ${e}`),await new Promise(e=>setTimeout(e,r))}else if("javascript"in t){let r=await e.evaluateJavaScript(t.javascript);this.setResult(t.name,r)}else if("logScreenshot"in t||"recordToReport"in t){let r=t.recordToReport??t.logScreenshot??"untitled",n=t.content||"";await e.recordToReport(r,{content:n})}else if("aiInput"in t){let r,n,{aiInput:i,value:o,...a}=t;a.locate?(n=i||o,r=a.locate):(r=i||"",n=o),await e.callActionInActionSpace("Input",{...a,...void 0!==n?{value:String(n)}:{},...r?{locate:iV(r,a)}:{}})}else if("aiKeyboardPress"in t){let r,n,{aiKeyboardPress:i,...o}=t;o.locate?(n=i,r=o.locate):o.keyName?(n=o.keyName,r=i):n=i,await e.callActionInActionSpace("KeyboardPress",{...o,...n?{keyName:n}:{},...r?{locate:iV(r,o)}:{}})}else if("aiScroll"in t){let{aiScroll:r,...n}=t,{locate:i,...o}=n;await e.aiScroll(i??r??void 0,o)}else if("aiTap"in t){let r,{aiTap:n,prompt:i,locate:o,...a}=t,s=a,l=o??("object"==typeof n&&null!==n?n.locate:void 0);if("string"==typeof n&&n)r=n;else if("object"==typeof l&&(null==l?void 0:l.prompt)){let{prompt:e,...t}=l;r=e,s={...t,...a}}else r=(null==n?void 0:n.prompt)||i||l;(0,eQ.vA)(r,"missing prompt for aiTap"),await e.aiTap(r,s)}else{var o,a,s;let r,n,i,l=this.actionSpace.find(e=>{let i=e.interfaceAlias;if(i&&Object.prototype.hasOwnProperty.call(t,i))return"string"==typeof(n=t[i])&&(r=n),!0;let o=e.name;return!!Object.prototype.hasOwnProperty.call(t,o)&&("string"==typeof(n=t[o])&&(r=n),!0)});(0,eQ.vA)(l,`unknown flowItem in yaml: ${JSON.stringify(t)}`);let A=i0(l.paramSchema),c=t.name,u=t.timeout;if(Object.prototype.hasOwnProperty.call(t,"runAdbShell")&&"string"==typeof n&&"number"==typeof u&&"function"==typeof e.runAdbShell){let t=await e.runAdbShell(n,{timeout:u});void 0!==t&&this.setResult(c,t);return}let d="string"==typeof n?(o=l.name,a=l.interfaceAlias,s=n,"Launch"===o||"launch"===a||"Terminate"===o||"terminate"===a?{uri:s}:"RunAdbShell"===o||"runAdbShell"===a||"RunHdcShell"===o||"runHdcShell"===a?{command:s}:void 0):void 0;if(d){i_(`matchedAction: ${l.name}`,`flowParams: ${JSON.stringify(d)}`);let t=await e.callActionInActionSpace(l.name,d);void 0!==t&&this.setResult(c,t)}else if("string"==typeof n&&A){if(l.paramSchema){let e=l.paramSchema.safeParse(n);e.success&&"string"==typeof e.data?i=e.data:e.success||(i_(`parse failed for action ${l.name} with string param`,e.error),i=n)}else i=n;if(void 0!==i){i_(`matchedAction: ${l.name}`,`flowParams: ${JSON.stringify(i)}`);let r=await e.callActionInActionSpace(l.name,i),n=t.name;void 0!==r&&this.setResult(n,r)}}else{let i=r&&"string"==typeof n?{...t,prompt:r}:"object"==typeof n&&null!==n?n:t,{locateParam:o,restParams:a}=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=iG(t),i=iV(e,t),o={};if("object"==typeof t&&null!==t){let e=Object.keys(t),a=Object.keys(i||{}),s="object"==typeof(null==i?void 0:i.prompt)&&(null==i?void 0:i.prompt)!==null?Object.keys(n||{}):[];for(let n of e)a.includes(n)||s.includes(n)||r.includes(n)||"locate"===n||(o[n]=t[n])}return{locateParam:i,restParams:o}}(r||"",i,[l.name,l.interfaceAlias||"_never_mind_"]),s={...a,locate:o};i_(`matchedAction: ${l.name}`,`flowParams: ${JSON.stringify(s,null,2)}`);let A=await e.callActionInActionSpace(l.name,s),c=t.name;void 0!==A&&this.setResult(c,A)}}}async run(){let{target:e,web:t,android:r,ios:n,harmony:i,computer:o,tasks:a}=this.script;this.setPlayerStatus("running");let s=null,l=[];try{let{agent:a,freeFn:A}=await this.setupAgent(t||e||r||n||i||o);this.actionSpace=await a.getActionSpace();let c=(s=a).onTaskStartTip;s.onTaskStartTip=e=>{"running"===this.status&&(this.agentStatusTip=e),null==c||c(e)},l=[...A||[],{name:"restore-agent-onTaskStartTip",fn:()=>{s&&(s.onTaskStartTip=c)}}]}catch(e){this.setPlayerStatus("error",e);return}this.interfaceAgent=s;let A=0;this.setPlayerStatus("running");let c=!1;for(;A<a.length;){let e=this.taskStatusList[A];this.setTaskStatus(A,"running"),this.setTaskIndex(A),this.failedReportExecutionInCurrentStep=!1;try{await this.playTask(e,this.interfaceAgent),this.setTaskStatus(A,"done")}catch(r){this.setTaskStatus(A,"error",r);let t=s.recordErrorToReport;if(!this.failedReportExecutionInCurrentStep&&"function"==typeof t)try{await t.call(s,`YAML task failed - ${e.name}`,{error:r,content:`Step ${e.currentStep??0} failed while running YAML task "${e.name}".`})}catch(e){i_("failed to record yaml error to report",e)}if(e.continueOnError);else{this.reportFile=s.reportFile,c=!0;break}}this.reportFile=null==s?void 0:s.reportFile,A++}for(let e of(c?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",l))try{await e.fn()}catch(e){}}constructor(e,t,r,n){var i,o,a,s,l;iY(this,"script",void 0),iY(this,"setupAgent",void 0),iY(this,"onTaskStatusChange",void 0),iY(this,"currentTaskIndex",void 0),iY(this,"taskStatusList",void 0),iY(this,"status",void 0),iY(this,"reportFile",void 0),iY(this,"result",void 0),iY(this,"unnamedResultIndex",void 0),iY(this,"output",void 0),iY(this,"unstableLogContent",void 0),iY(this,"errorInSetup",void 0),iY(this,"interfaceAgent",void 0),iY(this,"agentStatusTip",void 0),iY(this,"target",void 0),iY(this,"actionSpace",void 0),iY(this,"scriptPath",void 0),iY(this,"failedReportExecutionInCurrentStep",void 0),this.script=e,this.setupAgent=t,this.onTaskStatusChange=r,this.taskStatusList=[],this.status="init",this.unnamedResultIndex=0,this.interfaceAgent=null,this.actionSpace=[],this.failedReportExecutionInCurrentStep=!1,this.scriptPath=n,this.result={};const A=(null==(i=e.agent)?void 0:i.aiActContext)??(null==(o=e.agent)?void 0:o.aiActionContext);if(void 0!==A&&e.agent&&(void 0===e.agent.aiActContext&&void 0!==e.agent.aiActionContext&&console.warn("agent.aiActionContext is deprecated, please use agent.aiActContext instead. The legacy name is still accepted for backward compatibility."),e.agent.aiActContext=A),this.target=e.target||e.web||e.android||e.ios||e.computer||e.config,eQ.ht||eQ.rS)this.output=void 0,i_("output is undefined in browser or worker");else if(null==(a=this.target)?void 0:a.output)this.output=(0,tH.resolve)(iW.cwd(),this.target.output),i_("setting output by config.output",this.output);else{const e=this.scriptPath?(0,tH.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,tH.join)((0,iK.ZH)("output"),`${e}-${Date.now()}.json`),i_("setting output by script path",this.output)}eQ.ht||eQ.rS?this.unstableLogContent=void 0:"string"==typeof(null==(s=this.target)?void 0:s.unstableLogContent)?this.unstableLogContent=(0,tH.resolve)(iW.cwd(),this.target.unstableLogContent):(null==(l=this.target)?void 0:l.unstableLogContent)===!0&&(this.unstableLogContent=(0,tH.join)((0,iK.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 i2=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert","aiWaitFor"],i3=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function i5(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,i=n&&"shape"in n?Object.keys(n.shape):[],{deviceOptions:o,...a}=r,s={...a,...r.deviceOptions||{}};return i.forEach(e=>{void 0!==t[e]&&null!==t[e]&&""!==t[e]&&(s[e]=t[e])}),n&&rg(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=iV(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(s[e]=t)}}),[s]}async function i4(e,t,r,n,i){"aiAct"!==t&&"runMarkdown"!==t&&void 0!==i.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:i.requestId,options:i});let o=null==r?void 0:r.find(e=>e.interfaceAlias===t||e.name===t);if(o&&"function"==typeof e.callActionInActionSpace)if(n.params){let t=await i5(o,n.params,i);return await e.callActionInActionSpace(o.name,t[0])}else{let t=n.prompt?iV(n.prompt,{deepLocate:i.deepLocate,cacheable:!0}):void 0,{deviceOptions:r,reportDisplay:a,...s}=i,l={locate:t,...s,...i.deviceOptions||{}};return await e.callActionInActionSpace(o.name,l)}{let r=n.prompt;if("aiAssert"===t){var a;let{reportDisplay:t,...n}=i,{pass:o,thought:s}=await (null==e||null==(a=e.aiAssert)?void 0:a.call(e,r||"",void 0,{keepRawResponse:!0,...n}))||{};return{pass:o||!1,thought:s||""}}let o=function(e,t){if(!i3.has(t))return;let r=e[t];if("function"==typeof r)return async(t,n)=>r.call(e,t||"",n)}(e,t);if(o){let{reportDisplay:e,...t}=i,n=e?{...t,_internalReportDisplay:e}:t;return await o(r,n)}throw Error(`Unknown action type: ${t}`)}}let i7=(0,eT.a)("task-timing");function i8(e,t){if(!e)return void i7(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?i7(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}function i6(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let i9=(0,eT.a)("task-runner");class oe{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;let n=Date.now();if(!(null==e?void 0:e.forceRefresh)&&this.lastUiContext&&n-this.lastUiContext.capturedAt<=300&&(null==(t=this.lastUiContext)?void 0:t.context))return i9(`reuse cached uiContext captured ${n-this.lastUiContext.capturedAt}ms ago`),null==(r=this.lastUiContext)?void 0:r.context;try{let e=await this.uiContextBuilder();return 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,eQ.uR)(),status:"pending",...e}}normalizeStatusFromError(e,t){var r,n;"error"===this.status&&((0,eQ.vA)(null==e?void 0:e.allowWhenError,t||`task runner is in error state, cannot proceed
925
- error=${null==(r=this.latestErrorTask())?void 0:r.error}
926
- ${null==(n=this.latestErrorTask())?void 0:n.errorStack}`),this.status=this.tasks.length>0?"pending":"init")}async append(e,t){var r,n;this.normalizeStatusFromError(t,`task runner is in error state, cannot append task
927
- error=${null==(r=this.latestErrorTask())?void 0:r.error}
928
- ${null==(n=this.latestErrorTask())?void 0:n.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){let t,r;"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,eQ.vA)("running"!==this.status,"task runner is already running"),(0,eQ.vA)("completed"!==this.status,"task runner is already completed");let n=this.tasks.findIndex(e=>"pending"===e.status);if(n<0)return;this.status="running",await this.emitSnapshotChange();let i=n,o=!0;for(;i<this.tasks.length;){let e=this.tasks[i];(0,eQ.vA)("pending"===e.status,`task status should be pending, but got: ${e.status}`),e.timing={start:Date.now()};try{let r;e.status="running",await this.emitSnapshotChange(),await this.emitTaskEvent("start",e);try{this.onTaskStart&&await this.onTaskStart(e)}catch(e){console.error("error in onTaskStart",e)}(0,eQ.vA)(["Insight","Action Space","Planning"].indexOf(e.type)>=0,`unsupported task type: ${e.type}`);let{executor:n,param:o}=e;(0,eQ.vA)(n,`executor is required for task type: ${e.type}`);let a="Insight"===e.type;i8(e.timing,"getUiContextStart");let s=await this.getUiContext({forceRefresh:a});i8(e.timing,"getUiContextEnd"),e.uiContext=s;let l={task:e,element:null==t?void 0:t.element,uiContext:s};if("Insight"===e.type?((0,eQ.vA)("Query"===e.subType||"Assert"===e.subType||"WaitFor"===e.subType||"Boolean"===e.subType||"Number"===e.subType||"String"===e.subType,`unsupported service subType: ${e.subType}`),r=await e.executor(o,l)):"Planning"===e.type?(r=await e.executor(o,l),"Locate"===e.subType&&(t=null==r?void 0:r.output)):("Action Space"===e.type||console.warn(`unsupported task type: ${e.type}, will try to execute it directly`),r=await e.executor(o,l)),i===this.tasks.length-1){i8(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();this.attachRecorderItem(e,t,"after-calling"),i8(e.timing,"captureAfterCallingSnapshotEnd")}Object.assign(e,r),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),i++}catch(t){o=!1,e.error=t,e.errorMessage=(null==t?void 0:t.message)||("string"==typeof t?t:"error-without-message"),e.errorStack=t.stack,e.status="failed",e.timing.end=Date.now(),e.timing.cost=e.timing.end-e.timing.start,await this.emitSnapshotChange(),await this.emitTaskEvent("error",e);break}}let a=[];for(let e=i+1;e<this.tasks.length;e++)this.tasks[e].status="cancelled",a.push(this.tasks[e]);if(a.length>0)for(let e of(await this.emitSnapshotChange(),a))await this.emitTaskEvent("cancel",e);if(o)this.status="completed",await this.emitSnapshotChange();else{this.status="error";let e=this.latestErrorTask(),t=(null==e?void 0:e.errorMessage)||((null==e?void 0:e.error)?String(e.error):"Task execution failed"),n=null==e?void 0:e.errorStack;r=new ot(n?`${t}
929
- ${n}`:t,this,e,{cause:null==e?void 0:e.error}),await this.emitSnapshotChange(r)}if(r)throw r;if(this.tasks.length){let e=Math.min(i,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 n6({id:this.id,logTime:this.executionLogTime,name:this.name,tasks:this.tasks})}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){i6(this,"id",void 0),i6(this,"name",void 0),i6(this,"tasks",void 0),i6(this,"status",void 0),i6(this,"onTaskStart",void 0),i6(this,"uiContextBuilder",void 0),i6(this,"onSnapshotChange",void 0),i6(this,"onTaskEvent",void 0),i6(this,"executionLogTime",void 0),i6(this,"lastUiContext",void 0),this.id=(0,eQ.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.onSnapshotChange=null==r?void 0:r.onSnapshotChange,this.onTaskEvent=null==r?void 0:r.onTaskEvent,this.executionLogTime=Date.now()}}class ot extends Error{constructor(e,t,r,n){super(e,n),i6(this,"runner",void 0),i6(this,"errorTask",void 0),this.runner=t,this.errorTask=r}}var or=r(3009);r(5207);var on=r(1344),oi=r(4201).Buffer,oo=r(5409);let oa=new Map,os=new Map;function ol(){return"REPLACE_ME_WITH_REPORT_HTML"}function oA(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
930
- ${e.slice(r)}`}function oc(e,t,r){let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],i="";if(n&&!(i=ol()))return console.warn("reportTpl is not set, will not write report"),"";let o=t&&!eQ.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,eQ.uR)();let e=os.get(t);if(e)return e;let n=(0,eQ.uR)();return os.set(t,n),n})())+'">\n'+(0,eQ.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,eQ.NB)(t)+"\n"+s}return o?(r?(oa.get(t)||((0,rv.writeFileSync)(t,i,{flag:"w"}),oa.set(t,!0)),!function(e,t){let r="</html>",n=(0,rv.statSync)(e),i=Math.min(n.size,4096),o=Math.max(0,n.size-i),a=oi.alloc(n.size-o),s=(0,rv.openSync)(e,"r");(0,rv.readSync)(s,a,0,a.length,o),(0,rv.closeSync)(s);let l=a.toString("utf8"),A=l.lastIndexOf(r);if(-1===A)throw Error(`No </html> found in file:${e}`);let c=l.slice(0,A),u=o+oi.byteLength(c,"utf8");(0,rv.truncateSync)(e,u),(0,rv.appendFileSync)(e,`${t}
931
- ${r}
932
- `)}(t,a)):(0,rv.writeFileSync)(t,oA(i,a),{flag:"w"}),t):oA(i,a)}async function ou(e){return new Promise(t=>setTimeout(t,e))}function od(){return"1.10.4"}function op(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];oo.env[eD.n0]&&console.log("[Midscene]",...t)}let oh=null,of="";async function og(e){let{testUrl:t,serverUrl:r}=e;if(!r)return;let{repoUrl:n,userEmail:i}=await function(){if(oh)return oh;let e=(0,on.promisify)(or.execFile);return oh=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!==of:t)&&(op("Uploading test info to server",{serverUrl:r,repoUrl:n,testUrl:t,userEmail:i}),fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo_url:n,test_url:t,user_email:i})}).then(e=>e.json()).then(e=>{op("Successfully uploaded test info to server:",e)}).catch(e=>op("Failed to upload test info to server:",e)),of=n)}var om=r(3147);function oy(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={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0};function ob(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class ow{static create(e,t){var r;if(ob(t),function(e){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: : * ? " < > |')}(e),!1===t.generateReport||eQ.ht)return ov;let n=(0,iK.ZH)("report"),i=(0,tH.join)(n,e);return new ow({reportPath:"html-and-external-assets"===t.outputFormat?(0,tH.join)(i,"index.html"):(0,tH.join)(n,(r=e).endsWith(".html")?r:`${r}.html`),screenshotMode:"html-and-external-assets"===t.outputFormat?"directory":"inline",persistExecutionDump:t.persistExecutionDump,autoPrint:t.autoPrintReportMsg,reuseExistingReport:t.reuseExistingReport})}onExecutionUpdate(e,t,r){this.lastExecution=e,this.lastReportMeta=t,this.executionsByKey.set(this.getExecutionCommentKey(e),e),this.mergeReportAttributes(r),this.writeQueue=this.writeQueue.then(async()=>{this.destroyed||await this.doWriteExecution(e,t)})}async flush(){await this.writeQueue}async finalize(){if(this.lastExecution&&this.lastReportMeta&&this.onExecutionUpdate(this.lastExecution,this.lastReportMeta),await this.flush(),this.destroyed=!0,this.initialized)return await this.appendAgentReportComment(),this.reportPath}getReportPath(){return this.reportPath}printReportPath(){this.autoPrint&&this.reportPath&&(eY.getEnvConfigInBoolean(eD.d8)||("directory"===this.screenshotMode?(0,eQ.gQ)(`Midscene - report file updated: npx serve ${(0,tH.dirname)(this.reportPath)}`):(0,eQ.gQ)(`Midscene - report file updated: ${this.reportPath}`)))}async doWriteExecution(e,t){let r=this.wrapAsReportDump(e,t);"inline"===this.screenshotMode?await this.writeInlineExecution(e,r):await this.writeDirectoryExecution(e,r),this.shouldPersistExecutionDump&&await this.persistExecutionDumpToFile(e,r),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,rv.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump))return;let e=(0,tH.dirname)(this.reportPath),t=(0,rv.readdirSync)(e).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));t.length>0&&(this.executionLogIndex=Math.max(...t))}getDumpScriptAttributes(){return{"data-group-id":this.reportStreamId,[rD]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new n9({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeInlineExecution(e,t){let r=(0,tH.dirname)(this.reportPath);for(let t of((0,rv.existsSync)(r)||(0,rv.mkdirSync)(r,{recursive:!0}),this.initialized||(await (0,om.writeFile)(this.reportPath,ol()),this.initialized=!0),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();await (0,om.appendFile)(this.reportPath,`
933
- ${rB(n,this.getDumpScriptAttributes())}`)}async writeDirectoryExecution(e,t){let r=(0,tH.dirname)(this.reportPath);for(let t of((0,rv.existsSync)(r)||(0,rv.mkdirSync)(r,{recursive:!0}),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();this.initialized||(await (0,om.writeFile)(this.reportPath,`${ol()}${rN()}`),this.initialized=!0),await (0,om.appendFile)(this.reportPath,`
934
- ${rB(n,this.getDumpScriptAttributes())}`)}async appendAgentReportComment(){if(this.agentCommentWritten||!this.lastReportMeta||0===this.executionsByKey.size)return;let e=new n9({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,om.appendFile)(this.reportPath,`
935
- ${rP(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}async persistExecutionDumpToFile(e,t){let r=(0,tH.dirname)(this.reportPath);(0,rv.existsSync)(r)||(0,rv.mkdirSync)(r,{recursive:!0});let n=this.getExecutionLogKey(e),i=this.executionLogFileIndexByExecutionKey.get(n);i||(this.executionLogIndex+=1,i=this.executionLogIndex,this.executionLogFileIndexByExecutionKey.set(n,i));let o=`${i}.execution.json`,a=(0,tH.join)((0,tH.dirname)(this.reportPath),o);await (0,om.writeFile)(a,t.serialize(2),"utf-8")}constructor(e){oy(this,"reportPath",void 0),oy(this,"screenshotMode",void 0),oy(this,"shouldPersistExecutionDump",void 0),oy(this,"autoPrint",void 0),oy(this,"firstWriteDone",!1),oy(this,"executionLogIndex",0),oy(this,"executionLogFileIndexByExecutionKey",new Map),oy(this,"reportStreamId",void 0),oy(this,"screenshotStore",void 0),oy(this,"initialized",!1),oy(this,"lastExecution",void 0),oy(this,"lastReportMeta",void 0),oy(this,"executionsByKey",new Map),oy(this,"executionCommentKeyByObject",new WeakMap),oy(this,"executionCommentKeyIndex",0),oy(this,"reportAttributes",{}),oy(this,"agentCommentWritten",!1),oy(this,"writeQueue",Promise.resolve()),oy(this,"destroyed",!1),this.reportPath=e.reportPath,this.screenshotMode=e.screenshotMode,this.shouldPersistExecutionDump=e.persistExecutionDump??!1,this.autoPrint=e.autoPrint??!0,this.reportStreamId=(0,eQ.uR)(),this.screenshotStore=new rQ({mode:"inline"===this.screenshotMode?"inline":"directory",reportPath:this.reportPath,screenshotsDir:(0,tH.join)((0,tH.dirname)(this.reportPath),"screenshots"),writeInlineImage:async(e,t)=>{let r;await (0,om.appendFile)(this.reportPath,`
936
- ${(r=rR(),'<script type="midscene-image" data-id="'+e+'">'+rC(t)+r)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}var oE=r(8973);tU.Ik({locate:rh.describe("The element to be tapped")}),tU.Ik({locate:rh.describe("The element to be right clicked")}),tU.Ik({locate:rh.describe("The element to be double clicked")}),tU.Ik({locate:rh.describe("The element to be hovered")}),tU.Ik({value:tU.KC([tU.Yj(),tU.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:rh.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:tU.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:tU.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:tU.ai().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.")}),tU.Ik({locate:rh.describe("The element to be clicked before pressing the key").optional(),keyName:tU.Yj().describe("The key to be pressed. Use '+' for key combinations, e.g., 'Control+A', 'Shift+Enter'")}),tU.Ik({scrollType:tU.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:tU.k5(["down","up","right","left"]).default("down").describe('The direction to scroll. Only effective when scrollType is "singleAction".'),distance:tU.ai().nullable().optional().describe("The distance in pixels to scroll"),locate:rh.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"')}),tU.Ik({from:rh.describe("The position to be dragged"),to:rh.describe("The position to be dropped")}),tU.Ik({locate:rh.describe("The element to be long pressed"),duration:tU.ai().optional().describe("Long press duration in milliseconds")}),tU.Ik({start:rh.optional().describe("Starting point of the swipe gesture, if not specified, the center of the page will be used"),direction:tU.k5(["up","down","left","right"]).optional().describe("The direction to swipe (required when using distance). The direction means the direction of the finger swipe."),distance:tU.ai().optional().describe("The distance in pixels to swipe (mutually exclusive with end)"),end:rh.optional().describe("Ending point of the swipe gesture (mutually exclusive with distance)"),duration:tU.ai().default(300).describe("Duration of the swipe gesture in milliseconds"),repeat:tU.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)")}),tU.Ik({locate:rh.describe("The input field to be cleared").optional()}),tU.Ik({direction:tU.k5(["left","right"]).describe("The direction to move the cursor"),times:tU.ai().int().min(1).default(1).describe("The number of times to move the cursor in the specified direction")}),tU.Ik({locate:rh.optional().describe("The element to pinch on. If not specified, the center of the screen will be used"),direction:tU.k5(["in","out"]).describe('Pinch direction. "in" = pinch fingers together (zoom out / shrink), "out" = spread fingers apart (zoom in / enlarge).'),distance:tU.ai().positive().optional().describe("How far each finger moves in pixels. Defaults to a quarter of the shorter screen dimension."),duration:tU.ai().default(500).optional().describe("Duration of the pinch gesture in milliseconds")});let ox=tU.Ik({timeMs:tU.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),ok=["read-only","read-write","write-only"],oS=ok.map(e=>`"${e}"`).join(", ");function oC(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let oI=(e,t,r,n,i)=>{e[t]||(e[t]={promptTokens:0,completionTokens:0,totalTokens:0,calls:0});let o=e[t];o.promptTokens+=r,o.completionTokens+=n,o.totalTokens+=i,o.calls+=1};class oj{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,oI(this.byIntent,e.intent??"unknown",t,r,n),oI(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(){oC(this,"totalPromptTokens",0),oC(this,"totalCompletionTokens",0),oC(this,"totalTokens",0),oC(this,"totalCachedInput",0),oC(this,"totalTimeCostMs",0),oC(this,"calls",0),oC(this,"byIntent",{}),oC(this,"byModel",{})}}function oO(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let oP=(0,eT.a)("agent-progress-bus",{console:!0});class oR{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(){oO(this,"listeners",[]),oO(this,"sequence",0),oO(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){oP("error in progress listener",e)}})}}function oM(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function oT(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(oT):oM(e)&&"string"==typeof e.prompt?oT(e.prompt):oM(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,oT(r)]})):String(e)}function oN(e){return e instanceof Error?e.message:String(e)}function oD(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function oB(e,t){let r=e[t];if(!Array.isArray(r)||r.length<4)return;let n=oD(r[0]),i=oD(r[1]),o=oD(r[2]),a=oD(r[3]);if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return[n,i,o,a]}function oz(e){return[Math.floor((e[0]+e[2])/2),Math.floor((e[1]+e[3])/2)]}function oL(e){let t=e.center;if(Array.isArray(t)&&t.length>=2){let e=oD(t[0]),r=oD(t[1]);if(void 0!==e&&void 0!==r)return[e,r]}let r=e.point;if(Array.isArray(r)&&r.length>=2){let e=oD(r[0]),t=oD(r[1]);if(void 0!==e&&void 0!==t)return[e,t]}let n=oB(e,"locatedPixelBbox");if(n)return oz(n);let i=oB(e,"bbox");if(i)return oz(i)}function oF(e){let t=oB(e,"locatedPixelBbox");if(t)return t;let r=oB(e,"bbox");if(r)return r;if(!oM(e.rect))return;let n=oD(e.rect.left),i=oD(e.rect.top),o=oD(e.rect.width),a=oD(e.rect.height);if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return[n,i,n+o,i+a]}function oK(e){return!!oM(e)&&("center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let oU=["locate","from","to","start","end"],oQ=(e,t)=>{let r=null==t?void 0:t.trim();if(!r)return e;let n="string"==typeof e?e:e.prompt,i=`Context for this request:
937
- ${r}
938
-
939
- ${n}`;return"string"==typeof e?i:{...e,prompt:i}},oZ=/^(Given|When|Then|And|But)\s+(.+)$/i,oJ=/^(Scenario):\s*(.*)$/i,oX=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,oH=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},oq=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},oG=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,oV=(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})`},oW=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",oY=async(e,t,r)=>{let n=(e=>{let t,r,n=e.split(/\r?\n/),i=[],o=[],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(oX.test(l))throw Error(`runGherkinScenario does not support "${l}" at line ${n}.`);let A=l.match(oJ);if(A){a+=1,t=A[2].trim()||void 0,s="scenario";continue}let c=l.match(oZ);if(c){let e={keyword:oH(c[1]),text:c[2].trim(),lineNumber:n};"scenario"===s?i.push(e):o.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&&o.length>0)throw Error("runGherkinScenario cannot mix anonymous steps with a Scenario block.");let l=1===a?i:o;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),i={...r,cacheable:!1};for(let t of n.steps){oq(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",o=oG(t);try{"aiAct"===n?await e.aiAct(o,i):(null==r?void 0:r.context)||(null==r?void 0:r.abortSignal)?await e.aiAssert(o,void 0,{context:r.context,abortSignal:r.abortSignal}):await e.aiAssert(o)}catch(e){throw Error(`runGherkinScenario failed while ${oV(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${oW(e)}`,{cause:e})}}},o_=e=>e?` in ${e}`:"",o$=async(e,t)=>{let n,i,{fromMarkdown:o}=await r(5902)("mdast-util-from-markdown"),{toMarkdown:a}=await r(5845)("mdast-util-to-markdown"),s=o(e),l=(n=[],(i=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}"${o_(t)}. Use direct image syntax instead.`)}if("image"===e.type){var r;let i,o=(i=n.length,`参考图片-${String(i+1).padStart(3,"0")}`);if(!e.url)throw Error(`Markdown image ${o}${o_(t)} is missing a URL.`);if(n.push({name:o,url:(r=e.url,!t||/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(r)||(0,tH.isAbsolute)(r)?r:(0,tH.resolve)((0,tH.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${o_(t)}.`);return{type:"text",value:o}}return i(e),e}))})(s),n);return 0===l.length?{prompt:e,imageCount:0}:{prompt:{prompt:a(s),images:l,convertHttpImage2Base64:!0},imageCount:l.length}};var o0=r(9140),o1=r(8586),o2=r.n(o1);async function o3(e){let t,{PhotonImage:r}=await tY(),n=e.replace(/^data:image\/\w+;base64,/,"").replace(/\s/g,"");tZ()(n,"Invalid image: empty base64 data"),tZ()(/^[A-Za-z0-9+/]+={0,2}$/.test(n)&&n.length%4!=1,"Invalid image: malformed base64 data");let i=tJ.Buffer.from(n,"base64");tZ()(function(e){return!!e&&!(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]||!!e&&!(e.length<3)&&255===e[0]&&216===e[1]&&255===e[2]}(i),"Invalid image: unsupported format");try{t=r.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 o=t instanceof Promise?await t:t,a=o.get_width(),s=o.get_height();return o.free(),tZ()(a&&s,"Invalid image: cannot get width or height"),{width:a,height:s}}var o5=r(9300),o4=r.n(o5),o7=r(5409);(0,eT.a)("agent");let o8={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function o6(e,t){var r;let n=(0,eT.a)("commonContextParser");(0,eQ.vA)(e,"interfaceInstance is required"),n("Getting interface description");let i=(null==(r=e.describe)?void 0:r.call(e))||"";n("Interface description end"),n("Uploading test info to server"),og({testUrl:i,serverUrl:t.uploadServerUrl}),n("UploadTestInfoToServer end"),n("will get size");let o=await e.size(),{width:a,height:s}=o;if(o.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(),A=Date.now();(0,eQ.vA)(l,"screenshotBase64 is required"),n("will get screenshot dimensions");let{width:c,height:u}=await o3(l);if(!Number.isFinite(c)||!Number.isFinite(u))throw Error(`Invalid screenshot dimensions: width and height must be finite numbers. Received width: ${c}, height: ${u}`);if(c<=0||u<=0)throw Error(`Invalid screenshot dimensions: width and height must be positive numbers. Received width: ${c}, height: ${u}`);n("screenshot dimensions",c,"x",u);let d=a<s,p=c<u,h=a;d!==p&&(n(`Orientation mismatch detected: logical size ${a}x${s} (${d?"portrait":"landscape"}) vs screenshot ${c}x${u} (${p?"portrait":"landscape"}). Swapping logical dimensions.`),h=s);let f=t.screenshotShrinkFactor??1;if(!Number.isFinite(f)||f<1)throw Error(`Invalid screenshotShrinkFactor: must be a finite number >= 1. Received: ${f}`);let g=c/h;n("calculated dpr:",g);let m=g/f;if(n("shrunkShotToLogicalRatio",m),1!==f){let e=Math.round(c/f),t=Math.round(u/f);n(`Applying screenshot shrink factor: ${f} (physical: ${c}x${u} -> target: ${e}x${t})`);let r=await t5(l,{width:e,height:t});return{shotSize:{width:e,height:t},deprecatedDpr:g,screenshot:rJ.create(r,A),shrunkShotToLogicalRatio:m}}return{shotSize:{width:c,height:u},deprecatedDpr:g,screenshot:rJ.create(l,A),shrunkShotToLogicalRatio:m}}function o9(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=eY.getEnvConfigValue(eD.ho),r=o4()().format("YYYY-MM-DD_HH-mm-ss"),n=(0,eQ.uR)().substring(0,8);return`${t||e}-${r}-${n}`}function ae(e){var t;return Array.isArray(t=e.locatedPixelBbox)&&4===t.length&&t.every(e=>"number"==typeof e&&Number.isFinite(e))}async function at(e,t,r,n){var i;if(t){if(!1===n)return void ao("cache disabled for prompt: %s",r);if(null==(i=e.taskCache)?void 0:i.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void ao("interface does not implement rectMatchesCacheFeature, skip cache");try{let n=await e.interfaceInstance.rectMatchesCacheFeature(t),i={center:[Math.round(n.left+n.width/2),Math.round(n.top+n.height/2)],rect:n,description:"string"==typeof r?r:r.prompt||""};return ao("cache hit, prompt: %s",r),i}catch(e){ao("rectMatchesCacheFeature error: %s",e);return}}}}let ar=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0};var an=r(4201).Buffer;function ai(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ao=(0,eT.a)("cache"),aa=(0,eT.a)("cache",{console:!0}),as=".cache.yaml";class al{matchCache(e,t){if(!this.isCacheResultUsed)return;let r=this.promptKey(e);for(let n=0;n<this.cacheOriginalLength;n++){let i=this.cache.caches[n],o=`${t}:${r}:${n}`;if(i.type===t&&(0,on.isDeepStrictEqual)(i.prompt,e)&&!this.matchedCacheIndices.has(o)){"locate"===i.type&&(!i.cache&&Array.isArray(i.xpaths)&&(i.cache={xpaths:i.xpaths}),"xpaths"in i&&(i.xpaths=void 0)),this.matchedCacheIndices.add(o);let a=`${t}:${r}`,s=this.consumedCacheIndices.get(a)??[];return s.push(n),this.consumedCacheIndices.set(a,s),ao("cache found and marked as used, type: %s, prompt: %s, index: %d",t,e,n),{cacheContent:i,cacheUsable:!0,updateFn:r=>{(ao("will call updateFn to update cache, type: %s, prompt: %s, index: %d",t,e,n),r(i),this.readOnlyMode)?ao("read-only mode, cache updated in memory but not flushed to file"):(ao("cache updated, will flush to file, type: %s, prompt: %s, index: %d",t,e,n),this.flushCacheToFile())}}}}ao("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 ao("plan cache matched but yamlWorkflow is empty, treat as cache miss"),{...t,cacheUsable:!1};try{var n;let e=iU.Ay.load(r);if(!(null==e||null==(n=e.tasks)?void 0:n.some(e=>Array.isArray(e.flow)&&e.flow.length>0)))return ao("plan cache matched but flow is empty, treat as cache miss"),{...t,cacheUsable:!1}}catch{return ao("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){(ao("will append cache",e),this.cache.caches.push(e),this.readOnlyMode)?ao("read-only mode, cache appended to memory but not flushed to file"):this.flushCacheToFile()}loadCacheFromFile(){let e=this.cacheFilePath;if(tZ()(e,"cache file path is required"),!(0,o0.existsSync)(e))return void ao("no cache file found, path: %s",e);let t=e.replace(as,".json");if((0,o0.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,o0.readFileSync)(e,"utf8"),r=iU.Ay.load(t);if(o2().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.
940
- Please delete the existing cache and rebuild it. Sorry for the inconvenience.
941
- cache file: ${e}`);return ao("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion="1.10.4",r}catch(t){ao("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!this.cacheFilePath)return void ao("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),i=r>=this.cacheOriginalLength;return n||i});let r=e-this.cache.caches.length;r>0?ao("cleaned %d unused cache record(s)",r):ao("no unused cache to clean")}else ao("skip cleaning: cache is not used for reading");try{let e=(0,tH.dirname)(this.cacheFilePath);(0,o0.existsSync)(e)||((0,o0.mkdirSync)(e,{recursive:!0}),ao("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=iU.Ay.dump(r,{lineWidth:-1});(0,o0.writeFileSync)(this.cacheFilePath,n),ao("cache flushed to file: %s",this.cacheFilePath)}catch(e){aa(`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]?(ao("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 i=this.staleCacheIndices.get(r)??[];i.push(n),this.staleCacheIndices.set(r,i),ao("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(tZ()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?ao("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var i;let o;if(ai(this,"cacheId",void 0),ai(this,"cacheFilePath",void 0),ai(this,"cache",void 0),ai(this,"isCacheResultUsed",void 0),ai(this,"cacheOriginalLength",void 0),ai(this,"readOnlyMode",void 0),ai(this,"writeOnlyMode",void 0),ai(this,"matchedCacheIndices",new Set),ai(this,"consumedCacheIndices",new Map),ai(this,"staleCacheIndices",new Map),tZ()(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==(i=n.cacheDir)?void 0:i.trim();let s=(0,eQ.gV)(e);const l=eY.getEnvConfigValueAsNumber(eD.YK)??200;if(an.byteLength(s,"utf8")>l){const e=s.slice(0,32),t=(0,eQ.tD)(void 0,s);s=`${e}-${t}`}this.cacheId=s,this.cacheFilePath=eQ.ht||eQ.rS?void 0:r||(0,tH.join)(a||(0,iK.ZH)("cache"),`${this.cacheId}${as}`);const A=!!(null==n?void 0:n.readOnly),c=!!(null==n?void 0:n.writeOnly);if(A&&c)throw Error("TaskCache cannot be both read-only and write-only");this.isCacheResultUsed=!c&&t,this.readOnlyMode=A,this.writeOnlyMode=c,this.cacheFilePath&&!this.writeOnlyMode&&(o=this.loadCacheFromFile()),o||(o={midsceneVersion:"1.10.4",cacheId:this.cacheId,caches:[]}),this.cache=o,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}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 oe(e,t,r)}}let ac=(0,eT.a)("agent:usage-intent",{console:!0});function au(e,t){if(e)return e.intent?(ac(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}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 ap=(0,eT.a)("agent:task-builder");function ah(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function af(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 ag(e){return{type:"Locate",param:af(e),thought:""}}class am{async build(e,t,r,n){let i=[],o={tasks:i,planningModel:t,defaultModel:r,cacheable:null==n?void 0:n.cacheable,deepLocate:null==n?void 0:n.deepLocate,abortSignal:null==n?void 0:n.abortSignal},a=new Map([["Locate",e=>this.handleLocatePlan(e,o)],["Finished",e=>this.handleFinishedPlan(e,o)]]),s=e=>this.handleActionPlan(e,o);for(let t of e){let e=a.get(t.type)??s;await e(t)}return{tasks:i}}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=ra(r,this.actionSpace),i=e.param,o=rg(n.paramSchema),a=rg(n.paramSchema,!0);o.forEach(e=>{if(i[e]){let n=ag(i[e]);ap("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(i[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelBbox=${ae(i[e])}`);let o=this.createLocateTask(n,i[e],t,t=>{i[e]=t});t.tasks.push(o)}else(0,eQ.vA)(!a.includes(e),`Required locate field '${e}' is not provided for action ${r}`),ap(`field '${e}' is not provided for action ${r}`)});let s={type:"Action Space",subType:r,thought:e.thought,param:e.param,executor:async(e,t)=>{var i;let o=t.task.timing;ap("executing action",r,e,`taskContext.element.center: ${null==(i=t.element)?void 0:i.center}`);let s=t.uiContext;(0,eQ.vA)(s,"uiContext is required for Action task"),a.forEach(t=>{(0,eQ.vA)(e[t],`field '${t}' is required for action ${r} but not provided. Cannot execute action ${r}.`)}),i8(o,"beforeInvokeActionHookStart");let l=n.delayBeforeRunner??200;try{await Promise.all([(async()=>{this.interface.beforeInvokeAction&&(ap(`will call "beforeInvokeAction" for interface with action name ${n.name}`),await this.interface.beforeInvokeAction(n.name,e),ap(`called "beforeInvokeAction" for interface with action name ${n.name}`))})(),l>0?ou(l):Promise.resolve()])}catch(t){let e=(null==t?void 0:t.message)||String(t);throw Error(`error in running beforeInvokeAction for ${n.name}: ${e}`,{cause:t})}i8(o,"beforeInvokeActionHookEnd");let{shrunkShotToLogicalRatio:A}=s;if(void 0===A)throw Error("shrunkShotToLogicalRatio is not defined in Action task");if(n.paramSchema)try{e=((e,t,r)=>{if(!t)return;let n=e??{},i=rg(t);if(0===i.length)return t.parse(n);let o={};for(let e of i)e in n&&(o[e]=n[e]);let a={};for(let e in n)i.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 o){let t=o[e];void 0!==l&&1!==l&&t&&"object"==typeof t&&t.center&&t.rect&&(t={...t,center:[Math.round(t.center[0]/l),Math.round(t.center[1]/l)],rect:{...t.rect,left:Math.round(t.rect.left/l),top:Math.round(t.rect.top/l),width:Math.round(t.rect.width/l),height:Math.round(t.rect.height/l)}}),s[e]=t}return s})(e,n.paramSchema,{shrunkShotToLogicalRatio:A})}catch(t){throw Error(`Invalid parameters for action ${n.name}: ${t.message}
942
- Parameters: ${JSON.stringify(e)}`,{cause:t})}i8(o,"callActionStart"),ap("calling action",n.name);let c=n.call.bind(this.interface),u=await c(e,t);i8(o,"callActionEnd"),ap("called action",n.name,"result:",u),i8(o,"afterInvokeActionHookStart");let d=n.delayAfterRunner??this.waitAfterAction??300;d>0&&await ou(d);try{this.interface.afterInvokeAction&&(ap(`will call "afterInvokeAction" for interface with action name ${n.name}`),await this.interface.afterInvokeAction(n.name,e),ap(`called "afterInvokeAction" for interface with action name ${n.name}`))}catch(t){let e=(null==t?void 0:t.message)||String(t);throw Error(`error in running afterInvokeAction for ${n.name}: ${e}`,{cause:t})}return i8(o,"afterInvokeActionHookEnd"),{output:u}}};t.tasks.push(s)}createLocateTask(e,t,r,n){let{cacheable:i,defaultModel:o,deepLocate:a,abortSignal:s}=r,l=af(t);return void 0!==i&&(l={...l,cacheable:i}),a&&!l.deepLocate&&(l={...l,deepLocate:!0}),{type:"Planning",subType:"Locate",param:l,thought:e.thought,executor:async(e,t)=>{var r,i,a,l,A,c,u,d,p,h,f,g;let m,y,v,b,w,E,{task:x}=t,{uiContext:k}=t,S=ae(e)?e:void 0;(0,eQ.vA)((null==e?void 0:e.prompt)||S,`No prompt or id or position or locatedPixelBbox to locate, param=${JSON.stringify(e)}`),k||(k=await this.service.contextRetrieverFn()),(0,eQ.vA)(k,"uiContext is required for Service task");let{shrunkShotToLogicalRatio:C}=k;if(void 0===C)throw Error("shrunkShotToLogicalRatio is not defined in locate task");let I=e=>{var t,r,n,i,o,a,s;e&&(m=e,x.log={dump:e,rawResponse:null==(t=e.taskInfo)?void 0:t.rawResponse,rawChoiceMessage:null==(r=e.taskInfo)?void 0:r.rawChoiceMessage,searchAreaRawChoiceMessage:null==(n=e.taskInfo)?void 0:n.searchAreaRawChoiceMessage},x.usage=au(null==(i=e.taskInfo)?void 0:i.usage,"default"),x.searchArea=null==(o=e.taskInfo)?void 0:o.searchArea,(null==(a=e.taskInfo)?void 0:a.searchAreaUsage)&&(x.searchAreaUsage=au(e.taskInfo.searchAreaUsage,"default")),(null==(s=e.taskInfo)?void 0:s.reasoning_content)&&(x.reasoning_content=e.taskInfo.reasoning_content))},j=S?function(e){var t;if(e)return nQ(nq(e.locatedPixelBbox),"string"==typeof e.prompt?e.prompt:(null==(t=e.prompt)?void 0:t.prompt)||"")}(S):void 0,O=e.deepLocate?void 0:j,P=!!O;if(!P&&e.xpath&&this.interface.rectMatchesCacheFeature)try{v=await this.interface.rectMatchesCacheFeature({xpaths:[e.xpath]})}catch{}let R=v?nQ((c=v,1===C?c:{...c,left:Math.round(c.left*C),top:Math.round(c.top*C),width:Math.round(c.width*C),height:Math.round(c.height*C)}),"string"==typeof e.prompt?e.prompt:(null==(r=e.prompt)?void 0:r.prompt)||""):void 0,M=!!R,T=e.prompt,N=null==(i=this.taskCache)?void 0:i.matchLocateCache(T),D=null==N||null==(a=N.cacheContent)?void 0:a.cache,B=P||M?null:await at({taskCache:this.taskCache,interfaceInstance:this.interface},D,T,e.cacheable),z=B?1===C?B:{...B,center:[Math.round(B.center[0]*C),Math.round(B.center[1]*C)],rect:{...B.rect,left:Math.round(B.rect.left*C),top:Math.round(B.rect.top*C),width:Math.round(B.rect.width*C),height:Math.round(B.rect.height*C)}}:void 0,L=!!z,F=t.task.timing;if(!M&&!L&&!P)try{i8(F,"callAiStart"),y=await this.service.locate(e,{context:k,planLocatedElement:j},o,s),I(y.dump),b=y.element}catch(e){throw e instanceof n3&&I(e.dump),e}finally{i8(F,"callAiEnd")}let K=O||R||z||b;if(K){let e=[null==(u=K.center)?void 0:u[0],null==(d=K.center)?void 0:d[1],null==(p=K.rect)?void 0:p.left,null==(h=K.rect)?void 0:h.top,null==(f=K.rect)?void 0:f.width,null==(g=K.rect)?void 0:g.height].some(e=>"number"!=typeof e||!Number.isFinite(e))?`Invalid locate result coordinates: ${JSON.stringify(K)}`:K.rect.width<=0||K.rect.height<=0?`Invalid locate result rect size: ${JSON.stringify(K)}`:void 0;if(e){if(m)throw new n3(e,m);throw Error(e)}}let U=ah(null==N||null==(l=N.cacheContent)?void 0:l.cache);if(K&&this.taskCache&&!L&&(!P||!U)&&(null==e?void 0:e.cacheable)!==!1)if(this.interface.cacheFeatureForPoint)try{let t=K.center;1!==C&&(t=[Math.round(K.center[0]/C),Math.round(K.center[1]/C)],ap("Transformed coordinates for cacheFeatureForPoint: %o -> %o",K.center,t));let r=await this.interface.cacheFeatureForPoint(t,{targetDescription:"string"==typeof e.prompt?e.prompt:null==(A=e.prompt)?void 0:A.prompt,modelRuntime:o});ah(r)?(ap("update cache, prompt: %s, cache: %o",T,r),w=r,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:T,cache:r},N)):ap("no cache data returned, skip cache update, prompt: %s",T)}catch(e){ap("cacheFeatureForPoint failed: %s",e)}else ap("cacheFeatureForPoint is not supported, skip cache update");if(!K){if(m)throw new n3(`Element not found : ${e.prompt}`,m);throw Error(`Element not found: ${e.prompt}`)}return P&&S?E={from:"Plan",context:{locatedPixelBbox:S.locatedPixelBbox}}:M?E={from:"User expected path",context:{xpath:e.xpath}}:L&&(E={from:"Cache",context:{cacheEntry:D,cacheToSave:w}}),null==n||n(K),{output:{element:{...K,dpr:k.deprecatedDpr}},hitBy:E}}}}constructor({interfaceInstance:e,service:t,taskCache:r,actionSpace:n,waitAfterAction:i}){ad(this,"interface",void 0),ad(this,"service",void 0),ad(this,"taskCache",void 0),ad(this,"actionSpace",void 0),ad(this,"waitAfterAction",void 0),this.interface=e,this.service=t,this.taskCache=r,this.actionSpace=n,this.waitAfterAction=i}}function ay(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 av(e){return e.subType||e.type}function ab(e){if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e){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 aw(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 aE(e,t){return t?`${e} - ${t}`:e}function ax(e){var t,r,n,i,o,a,s,l,A,c,u;let d;if("Planning"===e.type&&(d="Locate"===e.subType?ab(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)?ru(e.param.userInstruction):void 0)),"Insight"===e.type&&(d=aw(null==e?void 0:e.param).content),"Action Space"===e.type){let t=null==e||null==(i=e.param)?void 0:i.locate,r=t?ab(t):"";(d=e.thought||"","number"==typeof(null==e||null==(o=e.param)?void 0:o.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==(A=e.param)?void 0:A.value)?d=null==e||null==(c=e.param)?void 0:c.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=ab(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 ak(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let aS=(0,eT.a)("device-task-executor"),aC=(0,eT.a)("device-task-executor",{console:!0});class aI{get page(){return this.interface}createExecutionSession(e,t){return new aA(e,()=>(null==t?void 0:t.uiContext)?Promise.resolve(t.uiContext):Promise.resolve(this.service.contextRetrieverFn()),{onTaskStart:this.onTaskStartCallback,tasks:null==t?void 0:t.tasks,onSnapshotChange:async(e,r)=>{var n,i,o;await (null==(i=this.hooks)||null==(n=i.onSnapshotChange)?void 0:n.call(i,e,r)),await (null==t||null==(o=t.onSnapshotChange)?void 0:o.call(t,e,r))},...(null==t?void 0:t.onTaskEvent)?{onTaskEvent:t.onTaskEvent}:{}})}getActionSpace(){return this.providedActionSpace}async emitProgress(e,t,r){var n,i;await (null==(i=this.hooks)||null==(n=i.onProgress)?void 0:n.call(i,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}=e;return t?[t.length<=500?t:`${t.slice(0,500)}
943
- ...[truncated, ${t.length-500} more characters]`]:[]});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){aC(`Failed to get device time string, falling back to runtime time: ${e}`)}else aC("useDeviceTime is enabled but getDeviceLocalTimeString is not implemented, falling back to runtime time.");return ry(e)}async convertPlanToExecutable(e,t,r,n){return this.taskBuilder.build(e,t,r,n)}async loadYamlFlowAsPlanning(e,t,r){let n=this.createExecutionSession(aE((null==r?void 0:r.type)||"Act",(null==r?void 0:r.prompt)||ru(e))),i={type:"Planning",subType:"LoadYaml",param:{userInstruction:e,...(null==r?void 0:r.prompt)?{userInstructionDisplay:r.prompt}:{}},executor:async(e,r)=>{let{uiContext:n}=r;return(0,eQ.vA)(n,"uiContext is required for Planning task"),{output:{actions:[],shouldContinuePlanning:!1,log:"",yamlString:t},cache:{hit:!0},hitBy:{from:"Cache",context:{yamlString:t}}}}},o=n.getRunner();return await n.appendAndRun(i),{runner:o}}async runPlans(e,t,r,n,i){let o=this.createExecutionSession(e,i),{tasks:a}=await this.convertPlanToExecutable(t,r,n),s=o.getRunner(),{output:l}=await o.appendAndRun(a)??{};return{output:l,runner:s}}async action(e,t,r,n,i,o,a,s,l,A,c,u,d){return aj(this.interface,A,async()=>this.runAction(e,t,r,n,i,o,a,s,l,c,u,d))}invalidateFailedCacheHitLocates(e,t){if(this.taskCache)for(let i=t;i<e.tasks.length;i++){var r,n;let t=e.tasks[i];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,i,o,a,s,l,A,c,u){let d,p,h,f=new rH,g=(null==u?void 0:u.prompt)||ru(e),m=this.createExecutionSession(aE((null==u?void 0:u.type)||"Act",g),{onTaskEvent:async e=>{await (null==d?void 0:d(e))}}),y=m.getRunner(),v=0,b=[],w=a??this.replanningCycleLimit;if(void 0===w)throw Error("replanningCycleLimit is required for TaskExecutor.action");await this.emitAiActProgress("start",{prompt:g,planLimit:w});let E=async(e,t)=>(await this.emitAiActProgress("failed",{...t?{planIndex:t}:{},planLimit:w,error:e}),m.appendErrorPlan(e)),x=0,k=0;if(null==c?void 0:c.aborted)return E(`Task aborted: ${c.reason||"abort signal received"}`);let S=await rp(rd(e));for(;;){let a,g=v+1;if(k=g,null==c?void 0:c.aborted)return E(`Task aborted: ${c.reason||"abort signal received"}`,g);let C=f.subGoalsToText()||void 0,I=f.memoriesToText()||void 0,j=await m.appendAndRun({type:"Planning",subType:"Plan",param:{userInstruction:e,...(null==u?void 0:u.prompt)?{userInstructionDisplay:u.prompt}:{},replanningCycleLimit:w,aiActContext:i,imagesIncludeCount:s,deepThink:l,...C?{subGoalStatus:C}:{},...I?{memoriesStatus:I}:{}},executor:async(e,r)=>{let i,{uiContext:o}=r;(0,eQ.vA)(o,"uiContext is required for Planning task");let a=r.task.timing;await this.emitAiActProgress("plan_thinking",{planIndex:g,planLimit:w,screenshot:o.screenshot});let A=this.getActionSpace();aS("actionSpace for this interface is:",A.map(e=>e.name).join(", ")),(0,eQ.vA)(Array.isArray(A),"actionSpace must be an array"),0===A.length&&console.warn(`ActionSpace for ${this.interface.interfaceType} is empty. This may lead to unexpected behavior.`);let u="custom"===t.adapter.planning.kind?t.adapter.planning.planFn:iL;try{i8(a,"callAiStart"),i=await u(e.userInstruction,{context:o,actionContext:e.aiActContext,actionSpace:A,modelRuntime:t,conversationHistory:f,includeLocateInPlanning:n,imagesIncludeCount:s,deepThink:l,referenceImageMessages:S,abortSignal:c})}catch(e){throw e instanceof tm&&(r.task.usage=au(e.usage,"planning"),r.task.log={...r.task.log||{},rawResponse:e.rawResponse,rawChoiceMessage:e.rawChoiceMessage}),await this.emitAiActProgress("plan_failed",{planIndex:g,planLimit:w,error:oN(e)}),e}finally{i8(a,"callAiEnd")}aS("planResult",JSON.stringify(i,null,2));let{actions:d,thought:h,log:m,memory:y,error:v,usage:b,rawResponse:E,rawChoiceMessage:x,reasoning_content:k,finalizeSuccess:C,finalizeMessage:I,updateSubGoals:j,markFinishedIndexes:O}=i;if(p=I,r.task.log={...r.task.log||{},rawResponse:E,rawChoiceMessage:x},r.task.usage=au(b,"planning"),r.task.reasoning_content=k,r.task.output={actions:d||[],log:m,thought:h,memory:y,yamlFlow:i.yamlFlow,output:I,shouldContinuePlanning:i.shouldContinuePlanning,updateSubGoals:j,markFinishedIndexes:O},r.uiContext=o,(m||h)&&await this.emitAiActProgress("plan_planned",{planIndex:g,planLimit:w,...m?{log:m}:{},...h?{thought:h}:{}}),v){let e=`Failed to continue: ${v}
944
- ${m||""}`;await this.emitAiActProgress("plan_failed",{planIndex:g,planLimit:w,error:e})}if((0,eQ.vA)(!v,`Failed to continue: ${v}
945
- ${m||""}`),!1===C){let e=`Task failed: ${I||"No error message provided"}
946
- ${m||""}`;await this.emitAiActProgress("plan_failed",{planIndex:g,planLimit:w,error:e}),(0,eQ.vA)(!1,e)}return{cache:{hit:!1}}}},{allowWhenError:!0}),O=null==j?void 0:j.output;h=O;let P=(null==O?void 0:O.actions)||[];b.push(...(null==O?void 0:O.yamlFlow)||[]);try{a=await this.convertPlanToExecutable(P,t,r,{cacheable:o,deepLocate:A,abortSignal:c})}catch(e){return E(`Error converting plans to executable tasks: ${oN(e)}, plans: ${JSON.stringify(P)}`,g)}f.pendingFeedbackMessage&&console.warn("unconsumed pending feedback message detected, this may lead to unexpected planning result:",f.pendingFeedbackMessage);let R=await this.getTimeString(),M=y.tasks.length;d=function(e,t,r){return async n=>{var i;let o=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",i=function(e){if(oM(e)){for(let t of oU){let r=e[t];if(oK(r))return r}return Object.values(e).find(oK)}}(e.param);if(i){let e=oL(i);if(e){let t=oF(i),r="string"==typeof i.description?i.description:"string"==typeof i.prompt?i.prompt:"";return{name:n,...r?{target:r}:{},point:e,...t?{bbox:t}:{}}}}if(oM(t=e.param)&&Object.entries(t).some(e=>{let[t,r]=e;return!!oU.includes(t)&&"string"==typeof r||oK(r)&&!oL(r)&&!oF(r)}))return;let o=(r=e.param)&&"object"==typeof r?"string"==typeof r.prompt?oT(r.prompt):r.locate&&"object"==typeof r.locate&&null!==r.locate?{locate:oT(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,oT(r)]}))}:oT(r):oT(r);return{name:n,...void 0!==o&&""!==o?{param:o}:{}}}(n.task);if(!o)return;let a={planIndex:e,planLimit:t,action:o},s=null==(i=n.task.timing)?void 0:i.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})}}}(g,w,(e,t)=>this.emitAiActProgress(e,t));try{await m.appendAndRun(a.tasks),this.setPendingFeedbackMessage(f,R,this.collectPlanningFeedback(y.tasks.slice(M)))}catch(t){x++;let e=await this.getTimeString();this.setPendingFeedbackMessage(f,e,`Error executing running tasks: ${(null==t?void 0:t.message)||String(t)}`),aS("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:",x)}finally{d=void 0}if(x>5)return E("Too many errors in one planning loop",g);if(null==c?void 0:c.aborted)return E(`Task aborted: ${c.reason||"abort signal received"}`,g);if(!(null==O?void 0:O.shouldContinuePlanning))break;if(this.invalidateFailedCacheHitLocates(y,M),++v>w)return E(`Replanned ${w} times, exceeding the limit. Please configure a larger value for replanningCycleLimit (or use MIDSCENE_REPLANNING_CYCLE_LIMIT) to handle more complex tasks.`,g);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:k,planLimit:w,...p??(null==h?void 0:h.output)?{output:p??(null==h?void 0:h.output)}:{},...(null==h?void 0:h.log)?{log:h.log}:{},...(null==h?void 0:h.thought)?{thought:h.thought}:{}}),{output:{yamlFlow:b,output:p},runner:y}}createTypeQueryTask(e,t,r,n,i,o){return{type:"Insight",subType:e,param:{domIncluded:null==n?void 0:n.domIncluded,dataDemand:i?{demand:t,multimodalPrompt:i}:t},executor:async(a,s)=>{let l,A,{task:c}=s,u=e=>{var t,r,n,i,o;l=e,c.log={dump:e,rawResponse:null==(t=e.taskInfo)?void 0:t.rawResponse,rawChoiceMessage:null==(r=e.taskInfo)?void 0:r.rawChoiceMessage,searchAreaRawChoiceMessage:null==(n=e.taskInfo)?void 0:n.searchAreaRawChoiceMessage},c.usage=au(null==(i=e.taskInfo)?void 0:i.usage,"insight"),(null==(o=e.taskInfo)?void 0:o.reasoning_content)&&(c.reasoning_content=e.taskInfo.reasoning_content)},d=s.uiContext;(0,eQ.vA)(d,"uiContext is required for Query task");let p="Query"!==e,h=t,f="result";p&&("Assert"===e||"WaitFor"===e)?h={[f="StatementIsTruthy"]:nJ(e,t)}:p&&(h={[f=e]:nJ(e,t)});let g="";if((null==n?void 0:n.domIncluded)&&this.interface.getElementsNodeTree){aS("appending tree info for page");let e=await this.interface.getElementsNodeTree();g=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],i=e=>Object.entries(e).map(e=>{let[r,n]=e;return`${r}="${ay(n,t)}"`}).join(" ");return(function e(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=!(arguments.length>2)||void 0===arguments[2]||arguments[2],s="",l="",A="",c=!0,u=" ".repeat(o),d="";for(let t=0;t<(n.children||[]).length;t++){let r=e(n.children[t],o+1,a);r&&(d+=`
947
- ${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;c=!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}" ${i((h=n.node.attributes||{},Object.keys(h).reduce((e,r)=>{let n=h[r];return"style"===r||"htmlTagName"===r||"nodeType"===r||(e[r]=ay(n,t)),e},{})))} ${i(r)}>`;let o=ay(n.node.content,t);l=o?`
948
- ${u} ${o}`:"",A=`</${e}>`}else r||d.trim().startsWith("<>")||(s="<>",l="",A="</>");if(c&&!d.trim())return"";let f=`${u}${s}${l}${d}
949
- ${u}${A}`;return f.trim()?f:""})(e,0,n).replace(/^\s*\n/gm,"")}(e,200,!1,(null==n?void 0:n.domIncluded)==="visible-only")}try{A=await this.service.extract(h,r,n,g,i,d,o)}catch(e){throw e instanceof n3&&u(e.dump),e}finally{var m=c,y=d;let e=null==y?void 0:y.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"})}m.recorder=m.recorder?[...t,...m.recorder]:t}(null==y?void 0:y.screenshotSequence)&&(y.screenshotSequence=void 0)}let{data:v,thought:b,dump:w}=A;u(w);let E=v;if(p&&("string"==typeof v?E=v:"WaitFor"===e?E=null!=v&&v[f]:null==v?E=null:(null==v?void 0:v[f])!==void 0?E=v[f]:(null==v?void 0:v.result)!==void 0?E=v.result:(0,eQ.vA)(!1,"No result in query data")),"Assert"===e&&!E)throw c.thought=b,Error(`Assertion failed: ${b}`);return{output:E,log:l,thought:b}}}}async createTypeQueryExecution(e,t,r,n,i,o){let a=this.createExecutionSession(aE(e,"string"==typeof t?t:JSON.stringify(t)),(null==o?void 0:o.uiContext)?{uiContext:o.uiContext}:void 0),s=await this.createTypeQueryTask(e,t,r,n,i,o),l=a.getRunner(),A=await a.appendAndRun(s);if(!A)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:c,thought:u}=A;return{output:c,thought:u,runner:l}}async waitFor(e,t,r){let{textPrompt:n,multimodalPrompt:i}=ar(e),o=`waitFor: ${n}`,a=this.createExecutionSession(aE("WaitFor",o)),s=a.getRunner(),{timeoutMs:l,checkIntervalMs:A,domIncluded:c,screenshotIncluded:u,...d}=t,p={domIncluded:c,screenshotIncluded:u,...d};(0,eQ.vA)(e,"No assertion for waitFor"),(0,eQ.vA)(l,"No timeoutMs for waitFor"),(0,eQ.vA)(A,"No checkIntervalMs for waitFor"),(0,eQ.vA)(A<=l,`wrong config for waitFor: checkIntervalMs must be less than timeoutMs, config: {checkIntervalMs: ${A}, timeoutMs: ${l}}`);let h=Date.now(),f=h,g="";for(;f-h<=l;){let e=Date.now();f=e;let t=await this.createTypeQueryTask("WaitFor",n,r,p,i),o=await a.appendAndRun(t);if(null==o?void 0:o.output)return{output:void 0,runner:s};g=(null==o?void 0:o.thought)||!o&&`No result from assertion: ${n}`||`unknown error when waiting for assertion: ${n}`;let l=Date.now();if(l-e<A){let t=l-e,n=A-t,i=`Check interval is ${A}ms, ${t}ms elapsed since last check, sleeping for ${n}ms`,{tasks:o}=await this.convertPlanToExecutable([{type:"Sleep",param:{timeMs:n},thought:i}],r,r);o[0]&&await a.appendAndRun(o[0])}}return a.appendErrorPlan(`waitFor timeout: ${g}`)}constructor(e,t,r){ak(this,"interface",void 0),ak(this,"service",void 0),ak(this,"taskCache",void 0),ak(this,"providedActionSpace",void 0),ak(this,"taskBuilder",void 0),ak(this,"onTaskStartCallback",void 0),ak(this,"hooks",void 0),ak(this,"replanningCycleLimit",void 0),ak(this,"waitAfterAction",void 0),ak(this,"useDeviceTime",void 0),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.providedActionSpace=r.actionSpace,this.taskBuilder=new am({interfaceInstance:e,service:t,taskCache:r.taskCache,actionSpace:this.getActionSpace(),waitAfterAction:r.waitAfterAction})}}async function aj(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:i,getError:o}=await e.registerFileChooserListener(n);try{let e=await r(),t=await o();if(t)throw t;return e}finally{i()}}function aO(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let aP=(0,eT.a)("ui-observer"),aR=(0,eT.a)("ui-observer",{console:!0});class aM{get frameCount(){return this.frames.length}async start(){(0,eQ.vA)(!this.loopPromise&&!this.stopped,"observer has already started");try{this.source=await this.deps.openFrameSource()??null}catch(e){aP(`frame source unavailable, using screenshot fallback: ${e}`),this.source=null}if(this.usingFallback=!this.source,this.usingFallback)aP("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()||aP("no first frame within 3000ms; starting anyway")}await this.captureOnce(),this.loopPromise=this.runLoop(),this.watchdogMs>0&&(this.watchdogTimer=setTimeout(()=>{aR(`UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`),aP(`watchdog fired after ${this.watchdogMs}ms, auto-stopping`),this.stop().catch(()=>{})},this.watchdogMs),"function"==typeof this.watchdogTimer.unref&&this.watchdogTimer.unref())}async stop(){if(!this.stopped){this.stopped=!0,this.watchdogTimer&&(clearTimeout(this.watchdogTimer),this.watchdogTimer=null),await this.loopPromise;try{if(this.source&&this.frames.length>0){let e=this.dedupeRefs(this.frames);this.preDecodePromise=this.source.decode(e).then(async t=>{let r=await this.shrinkAllIfNeeded(t);e.forEach((e,t)=>{this.decodedCache.set(e.ref,r[t])}),aP(`pre-decoded ${e.length} frames`)}).catch(e=>{aP(`pre-decode failed, will retry at assert time: ${e}`)})}let e=this.deps.captureRepresentative(),[,t]=await Promise.all([this.preDecodePromise,e]);if(this.source&&this.frames.length>0){let e=this.frames[this.frames.length-1],r=this.decodedCache.get(e.ref);r&&(t.screenshot=rJ.create(r,e.capturedAt),aP("representative screenshot aligned with last sampled frame"))}this.representative=t}finally{var e,t;if(this.source)try{await this.source.stop()}catch(e){aP(`error stopping frame source: ${e}`)}aP(`observation stopped with ${this.frames.length} buffered frames (+1 representative)`),null==(e=(t=this.deps).onStopped)||e.call(t)}}}async aiAssert(e,t,r){let n=await this.buildObservedUIContext();return this.deps.runAssert(e,n,t,r)}async aiBoolean(e,t){let r=await this.buildObservedUIContext();return this.deps.runBoolean(e,r,t)}async buildObservedUIContext(){(0,eQ.vA)(this.stopped&&this.representative,"call observer.stop() before asserting on the observed window");let e=this.representative;this.preDecodePromise&&(await this.preDecodePromise,this.preDecodePromise=null);let t=this.frames,r=this.dedupeRefs(t),n=r.filter(e=>!this.decodedCache.has(e.ref));if(n.length>0){let e=this.source?await this.shrinkAllIfNeeded(await this.source.decode(n)):n.map(e=>e.ref);(0,eQ.vA)(e.length===n.length,"frame source decode() must return one image per frame handle"),n.forEach((t,r)=>{this.decodedCache.set(t.ref,e[r])}),aP(`decoded ${n.length} new frames (${r.length-n.length} from cache)`)}let i=new Map;r.forEach((e,t)=>i.set(e.ref,t));let o=t.map(e=>rJ.create(this.decodedCache.get(e.ref),e.capturedAt)),a=o.length+1;return a>50&&aR(`WARNING: sending ${a} frames to the model (soft limit 50). Consider increasing intervalMs or decreasing maxFrames to reduce token cost.`),aP(`observed context: ${o.length}+1 frames (buffered: ${this.frames.length}, unique: ${r.length}, newly decoded: ${n.length})`),{...e,screenshotSequence:[...o,e.screenshot]}}async captureOnce(){try{if(this.source){let e=this.source.latest();e&&this.pushFrame(e);return}let e=await this.deps.screenshot();if(this.screenshotShrinkFactor>1){let{width:t,height:r}=await o3(e);e=await t5(e,{width:Math.round(t/this.screenshotShrinkFactor),height:Math.round(r/this.screenshotShrinkFactor)})}this.pushFrame({ref:e,capturedAt:Date.now()})}catch(e){aP(`frame capture failed, skipping tick: ${e}`)}}async shrinkAllIfNeeded(e){if(this.screenshotShrinkFactor<=1)return e;let t=this.screenshotShrinkFactor;return Promise.all(e.map(async e=>{let{width:r,height:n}=await o3(e);return t5(e,{width:Math.round(r/t),height:Math.round(n/t)})}))}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.length>=this.maxFrames&&(this.frames=this.thinBuffer(this.frames),aP(`frame buffer thinned to ${this.frames.length} frames`)),this.frames.push(e)}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 i=0;i<e.length;i++)t[i]?(r.push(e[i]),n=0):(n%2==0&&r.push(e[i]),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],aP(`hard cap: uniformly sampled ${this.maxFrames} frames from ${r.length} change-point frames`),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){aO(this,"deps",void 0),aO(this,"frames",void 0),aO(this,"source",void 0),aO(this,"usingFallback",void 0),aO(this,"stopped",void 0),aO(this,"loopPromise",void 0),aO(this,"representative",void 0),aO(this,"watchdogTimer",void 0),aO(this,"decodedCache",void 0),aO(this,"preDecodePromise",void 0),aO(this,"intervalMs",void 0),aO(this,"maxFrames",void 0),aO(this,"watchdogMs",void 0),aO(this,"screenshotShrinkFactor",void 0),this.deps=e,this.frames=[],this.source=null,this.usingFallback=!1,this.stopped=!1,this.loopPromise=null,this.representative=null,this.watchdogTimer=null,this.decodedCache=new Map,this.preDecodePromise=null,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}}function aT(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,eT.a)("agent"),aD=(0,eT.a)("agent",{console:!0}),aB={domIncluded:!1,screenshotIncluded:!0};class az{get onDumpUpdate(){return this.dumpUpdateListeners[0]}set onDumpUpdate(e){this.dumpUpdateListeners=[],e&&this.dumpUpdateListeners.push(e)}get aiActContext(){return this.opts.aiActContext??this.opts.aiActionContext}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??eY.getEnvConfigValueAsNumber(eD.TN)??e.adapter.planning.defaultReplanningCycleLimit}resolveModelRuntime(e){return{...nL(this.modelConfigManager.getModelConfig(e)),onUsage:e=>{this.usageCallCounter+=1;let t=e.intent?e:{...e,intent:e.slot};this.consumeUsage(t,`callai:${e.request_id??this.usageCallCounter}`)}}}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return aN("Using frozen page context for action:",e),this.frozenUIContext;let t=az.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await o6(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){aN(`retryable context error (attempt ${e+1}/${t}), retrying in ${az.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,az.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}async startObserving(e){(0,eQ.vA)(!this.frozenUIContext,"startObserving() cannot be used while the UI context is frozen (call unfreezePageContext() first)"),(0,eQ.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 aM({openFrameSource:async()=>{var e,t;return await (null==(e=(t=this.interface).openFrameSource)?void 0:e.call(t))??void 0},screenshot:()=>this.interface.screenshotBase64(),captureRepresentative:()=>this.getUIContext("assert"),runAssert:(e,t,r,n)=>this.aiAssertWithContext(e,t,r,n),runBoolean:(e,t,r)=>this.aiBooleanWithContext(e,t,r),onStopped:()=>{this.activeObserver=null},screenshotShrinkFactor:this.opts.screenshotShrinkFactor},e);this.activeObserver=t;try{await t.start()}catch(e){throw this.activeObserver=null,e}return t}async setAIActionContext(e){await this.setAIActContext(e)}async setAIActContext(e){this.aiActContext&&console.warn("aiActContext is already set, and it is called again, will override the previous setting"),this.opts.aiActContext=e,this.opts.aiActionContext=e}resetDump(){return this.dump=new n9({sdkVersion:od(),groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[],modelBriefs:[],deviceType:this.interface.interfaceType}),this.executionDumpIndexByRunner=new WeakMap,this.dump}appendExecutionDump(e,t){let r=this.dump;if(t){let n=this.executionDumpIndexByRunner.get(t);if(void 0!==n){r.executions[n]=e;return}r.executions.push(e),this.executionDumpIndexByRunner.set(t,r.executions.length-1);return}r.executions.push(e)}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[ty]?`int:${e[ty]}`:t,!this.countedUsageKeys.has(r)&&(this.countedUsageKeys.add(r),this.metricsCollector.add(e),this.opts.onLLMUsage)))try{this.opts.onLLMUsage(e)}catch(e){aD(`onLLMUsage listener threw, ignoring: ${e}`)}}get metrics(){return this.metricsCollector.snapshot()}dumpDataString(e){return(this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,eQ.ht||(null==e?void 0:e.inlineScreenshots))?this.dump.serializeWithInlineScreenshots():this.dump.serialize()}reportHTMLString(e){return oc(this.dumpDataString(e))}writeOutActionDumps(e){let t=e||this.lastExecutionDump;t&&(this.lastExecutionDump=t,this.reportGenerator.onExecutionUpdate(t,this.getReportMeta(),this.opts.reportAttributes)),this.reportFile=this.reportGenerator.getReportPath()}getReportMeta(){return{groupName:this.dump.groupName,groupDescription:this.dump.groupDescription,sdkVersion:this.dump.sdkVersion,modelBriefs:this.dump.modelBriefs,deviceType:this.dump.deviceType}}async callbackOnTaskStartTip(e){let t=ax(e),r=t?`${av(e)} - ${t}`:av(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t){aN("callActionInActionSpace",e,",",t);let r={type:e,param:t||{},thought:""};aN("actionPlan",r);let n=[r].filter(Boolean),i=aE(e,ab((null==t?void 0:t.locate)||{})),o=this.resolveModelRuntime("default"),a=this.resolveModelRuntime("planning"),{output:s}=await this.taskExecutor.runPlans(i,n,a,o);return s}async aiTap(e,t){(0,eQ.vA)(e,"missing locate prompt for tap");let r=iV(e,t),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await aj(this.interface,n,async()=>{await this.callActionInActionSpace("Tap",{locate:r})})}async aiRightClick(e,t){(0,eQ.vA)(e,"missing locate prompt for right click");let r=iV(e,t);await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){(0,eQ.vA)(e,"missing locate prompt for double click");let r=iV(e,t);await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){(0,eQ.vA)(e,"missing locate prompt for hover");let r=iV(e,t);await this.callActionInActionSpace("Hover",{locate:r})}async aiInput(e,t,r){let n,i,o;"object"==typeof t&&null!==t&&"value"in t?(i=e,n=t.value,o=t):(n=e,i=t,o={...r,value:n}),(0,eQ.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,eQ.vA)(i,"missing locate prompt for input");let a=iV(i,o),s="number"==typeof n?String(n):n,l=(null==o?void 0:o.mode)==="append"?"typeOnly":null==o?void 0:o.mode;await this.callActionInActionSpace("Input",{...o||{},value:s,locate:a,mode:l})}async aiKeyboardPress(e,t,r){let n,i;"object"==typeof t&&null!==t&&"keyName"in t?(n=e,i=t):(n=t,i={...r||{},keyName:e}),(0,eQ.vA)(null==i?void 0:i.keyName,"missing keyName for keyboard press");let o=n?iV(n,i):void 0;await this.callActionInActionSpace("KeyboardPress",{...i||{},locate:o})}async aiScroll(e,t,r){let n,i;if(("string"==typeof e||null==e||"object"==typeof e&&null!==e&&"prompt"in e)&&"object"==typeof t&&null!==t?(n=e,i=t):(n=t,i={...r||{},...e||{}}),i){let e=(e=>{if(e)return e in o8?o8[e]:e})(i.scrollType);e!==i.scrollType&&(i={...i||{},scrollType:e})}let o=iV(n||"",i);await this.callActionInActionSpace("Scroll",{...i||{},locate:o})}async aiPinch(e,t){let r=iV(e||"",t);await this.callActionInActionSpace("Pinch",{...t,locate:r})}async aiLongPress(e,t){(0,eQ.vA)(e,"missing locate prompt for long press");let r=iV(e,t);await this.callActionInActionSpace("LongPress",{...t||{},locate:r})}async aiClearInput(e,t){(0,eQ.vA)(e,"missing locate prompt for clear input");let r=iV(e,t);await this.callActionInActionSpace("ClearInput",{locate:r})}async aiAct(e,t){let r=null==t?void 0:t._internalReportDisplay,n="string"==typeof e?e:e.prompt,i=(null==r?void 0:r.prompt)||n,o=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0,a=null==t?void 0:t.abortSignal;if(null==a?void 0:a.aborted)throw Error(`aiAct aborted: ${a.reason||"signal already aborted"}`);let s=async()=>{var n,s,l,A;let c=this.resolveModelRuntime("planning"),u=this.resolveModelRuntime("default"),d=(null==t?void 0:t.context)!==void 0?t.context:this.aiActContext,p=oQ(e,d),h=(null==t?void 0:t.deepThink)===!0;h&&"custom"===c.adapter.planning.kind&&(aD(`The "deepThink" option is not supported for aiAct with custom planning adapters (modelFamily: ${c.config.modelFamily??"unknown"}). It will be ignored.`),h=!1);let f=null==t?void 0:t.deepLocate;f&&!c.adapter.planning.supportsActionDeepLocate&&(aD(`The "deepLocate" option is not supported for aiAct with the current planning adapter (modelFamily: ${c.config.modelFamily??"unknown"}). It will be ignored.`),f=!1);let g="default"===c.config.slot,m=!h&&g;aN("setting includeLocateInPlanning to",m,{deepThink:h,noIndividualLocateModel:g});let y=null==t?void 0:t.cacheable,v=this.resolveReplanningCycleLimit(c),b=c.adapter.planning.cacheEnabled&&!1!==y?null==(n=this.taskCache)?void 0:n.matchPlanCache(p):void 0,w=!1;if((null==b?void 0:b.cacheUsable)&&(null==(s=this.taskCache)?void 0:s.isCacheResultUsed)&&(null==(A=b.cacheContent)||null==(l=A.yamlWorkflow)?void 0:l.trim())){let t=b.cacheContent.yamlWorkflow;try{await this.taskExecutor.loadYamlFlowAsPlanning(e,t,r),aN("matched cache, will call .runYaml to run the action"),await this.runYaml(t);return}catch(e){w=!0,aD(`cached aiAct plan failed, will replan and disable the stale cache: ${e instanceof Error?e.message:String(e)}`)}}let E=h?2:1,{output:x}=await this.taskExecutor.action(e,c,u,m,d,y,v,E,h,o,f,a,r);if(this.taskCache&&!1!==y){let e=w?[]:null==x?void 0:x.yamlFlow;if(!w&&!(null==e?void 0:e.length))return null==x?void 0:x.output;let t=e??[],r=iU.Ay.dump({tasks:[{name:i,flow:t}]});this.taskCache.updateOrAppendCacheRecord({type:"plan",prompt:p,yamlWorkflow:r},b)}return null==x?void 0:x.output};return await s()}async runMarkdown(e,t){let r=await (0,oE.readFile)(e,"utf-8"),{prompt:n}=await o$(r,e);return this.aiAct(n,{...t,_internalReportDisplay:{type:"Markdown",prompt:(0,tH.basename)(e)}})}async runGherkinScenario(e,t){return oY(this,e,t)}async aiAction(e,t){return this.aiAct(e,t)}async aiQuery(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB,r=this.resolveModelRuntime("insight"),{output:n}=await this.taskExecutor.createTypeQueryExecution("Query",e,r,t);return n}async aiBoolean(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB;return this.aiBooleanWithContext(e,void 0,t)}async aiBooleanWithContext(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:aB,n=this.resolveModelRuntime("insight"),{textPrompt:i,multimodalPrompt:o}=ar(e),{output:a}=await this.taskExecutor.createTypeQueryExecution("Boolean",i,n,r,o,t?{uiContext:t}:void 0);return a}async aiNumber(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=ar(e),{output:o}=await this.taskExecutor.createTypeQueryExecution("Number",n,r,t,i);return o}async aiString(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=ar(e),{output:o}=await this.taskExecutor.createTypeQueryExecution("String",n,r,t,i);return o}async aiAsk(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB;return this.aiString(e,t)}async aiLocate(e,t){let r=iV(e,t);(0,eQ.vA)(r,"cannot get locate param for aiLocate");let n=ag(r),i=this.resolveModelRuntime("default"),o=this.resolveModelRuntime("planning"),{output:a}=await this.taskExecutor.runPlans(aE("Locate",ab(r)),[n],o,i,(null==t?void 0:t.uiContext)?{uiContext:t.uiContext}:void 0),{element:s}=a;return{rect:null==s?void 0:s.rect,center:null==s?void 0:s.center,dpr:null==s?void 0:s.dpr}}async aiAssert(e,t,r){return this.aiAssertWithContext(e,void 0,t,r)}async aiAssertWithContext(e,t,r,n){let i=this.resolveModelRuntime("insight"),o={domIncluded:(null==n?void 0:n.domIncluded)??aB.domIncluded,screenshotIncluded:(null==n?void 0:n.screenshotIncluded)??aB.screenshotIncluded},{textPrompt:a,multimodalPrompt:s}=ar(oQ(e,null==n?void 0:n.context)),l="string"==typeof e?e:e.prompt,A={abortSignal:null==n?void 0:n.abortSignal,...t?{uiContext:t}:{}};try{let{output:e,thought:t}=await this.taskExecutor.createTypeQueryExecution("Assert",a,i,o,s,A),c=!!e,u=c?void 0:`Assertion failed: ${r||l}
950
- Reason: ${t||"(no_reason)"}`;if(null==n?void 0:n.keepRawResponse)return{pass:c,thought:t,message:u};if(!c)throw Error(u)}catch(e){if(e instanceof ot){let t=e.errorTask,i=null==t?void 0:t.thought,o=null==t?void 0:t.error,a=(null==t?void 0:t.errorMessage)||(o instanceof Error?o.message:o?String(o):void 0),s=`Assertion failed: ${r||l}
951
- Reason: ${i||a||"(no_reason)"}`;if(null==n?void 0:n.keepRawResponse)return{pass:!1,thought:i,message:s};throw Error(s,{cause:o??e})}throw e}}async aiWaitFor(e,t){let r=this.resolveModelRuntime("insight");await this.taskExecutor.waitFor(e,{...t,timeoutMs:(null==t?void 0:t.timeoutMs)||15e3,checkIntervalMs:(null==t?void 0:t.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){let t=new i1(function(e,t){let r,n=e;if(-1!==e.indexOf("android")&&e.match(/deviceId:\s*(\d+)/)){let t;n=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=(r=!1,n.split("\n").map(e=>{let t=e.trimStart();if(!t||t.startsWith("#"))return e;if(0==e.length-t.length){if(iJ.test(t))return r=!0,e;iX.test(t)&&(r=!1)}return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r="",n=0,i=0;for(;i<e.length;){let o=e.indexOf("${",i);if(-1===o)break;let a=e.indexOf("}",o+2);if(-1===a)break;let s=e.slice(o+2,a);if(!s){i=a+1;continue}r+=e.slice(n,o);let l=s.trim(),A=iQ.env[l];if(void 0===A)if(t)r+=e.slice(o,a+1);else throw Error(`Environment variable "${l}" is not defined`);else r+=A;n=a+1,i=a+1}return r+e.slice(n)}(e,r)}).join("\n")),o=iU.Ay.load(i,{schema:iU.Ay.JSON_SCHEMA}),a=t?`, failed to load ${t}`:"";return!function(e){let t=iH.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],i=n.mode;if(void 0!==i&&"page"!==i&&"browser"!==i)throw Error(`[midscene] web target mode must be either "page" or "browser", but got "${i}".`);if("page"===r&&"browser"===i)throw Error("[midscene] page target cannot use mode: browser. Use browser: instead.");if("browser"===r&&"page"===i)throw Error("[midscene] browser target cannot use mode: page. Use page: instead.");let o="page"===r?"page":"browser"===r?"browser":i??"page";if("page"===o&&n.autoFollowNewPage)throw Error("[midscene] autoFollowNewPage requires browser mode. Use browser: or web.mode: browser.");if("browser"===o&&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.");({...n,mode:o})}(o),(0,eQ.vA)(o.tasks,`property "tasks" is required in yaml script ${a}`),(0,eQ.vA)(Array.isArray(o.tasks),`property "tasks" must be an array in yaml script, but got ${o.tasks}`),o}(e,"yaml"),async()=>({agent:this,freeFn:[]}));if(await t.run(),"error"===t.status){let e=t.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:
952
- ${e}`)}return{result:t.result}}async evaluateJavaScript(e){return(0,eQ.vA)(this.interface.evaluateJavaScript,"evaluateJavaScript is not supported in current agent"),this.interface.evaluateJavaScript(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=[]}addProgressListener(e){return this.progressBus.subscribe(e)}removeProgressListener(e){this.progressBus.unsubscribe(e)}clearProgressListeners(){this.progressBus.clear()}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)}}async destroy(){let e;if(this.destroyed)return;if(this.destroyed=!0,this.activeObserver){try{await this.activeObserver.stop()}catch(e){aN(`error stopping active observer during destroy: ${e}`)}this.activeObserver=null}try{var t,r;await (null==(t=(r=this.interface).destroy)?void 0:t.call(r))}catch(t){e=t}await this.reportGenerator.flush();let n=await this.reportGenerator.finalize();if(this.reportFile=n,this.resetDump(),e)throw e}async recordToReport(e,t){let r=Date.now(),n=null==t?void 0:t.screenshots,i=null==t?void 0:t.screenshotBase64,o=void 0!==n,a=void 0!==i;if(o&&!Array.isArray(n))throw Error("recordToReport: screenshots must be an array");if(a&&"string"!=typeof i)throw Error("recordToReport: screenshotBase64 must be a string");if(o&&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=o?n:void 0;if(s&&0===s.length)throw Error("recordToReport: screenshots cannot be empty");let l=(s??(a?[{base64:i}]:[{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 i=n.match(t1);if(i){let e="jpg"===i[1].toLowerCase()?"jpeg":i[1].toLowerCase(),t=i[2];if(!t.replace(/\s/g,""))throw Error(`${r} cannot be empty`);return t3(e,t)}if(n.startsWith("data:")||!t2.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return t3("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),i=r+t;return{type:"screenshot",ts:i,screenshot:rJ.create(n.base64,i),description:n.description}}),A={taskId:(0,eQ.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()=>{}},c=new n6({id:(0,eQ.uR)(),logTime:r,name:`Log - ${e||"untitled"}`,description:(null==t?void 0:t.content)||"",tasks:[A]});this.appendExecutionDump(c),this.writeOutActionDumps(c),await this.reportGenerator.flush(),this.notifyDumpUpdateListeners(c)}async recordErrorToReport(e,t){let r=Date.now(),n=[],i=t.screenshotBase64??await this.interface.screenshotBase64();i&&n.push({type:"screenshot",ts:r,screenshot:rJ.create(i,r)});let o={taskId:(0,eQ.uR)(),type:"Log",subType:"Error",status:"failed",recorder:n,timing:{start:r,end:r,cost:0},param:{content:t.content||""},error:t.error,errorMessage:t.error.message,errorStack:t.error.stack,executor:async()=>{}},a=new n6({id:(0,eQ.uR)(),logTime:r,name:e,description:t.content||t.error.message,tasks:[o]});this.appendExecutionDump(a),this.writeOutActionDumps(a),await this.reportGenerator.flush(),this.notifyDumpUpdateListeners(a)}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(){aN("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,aN("Page context frozen successfully")}async unfreezePageContext(){aN("Unfreezing page context"),this.frozenUIContext=void 0,aN("Page context unfrozen successfully")}processCacheConfig(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&&!ok.some(e=>e===t))throw Error(`cache.strategy must be one of ${oS}, 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(eY.getEnvConfigInBoolean(eD.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",i="write-only"===n;return{id:e,enabled:!i,readOnly:"read-only"===n,writeOnly:i,cacheDir:null==(r=t.cacheDir)?void 0:r.trim()}}return null}normalizeFileInput(e){return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fileExists:r=o0.existsSync,isInBrowser:n=eQ.ht,resolvePath:i=tH.resolve,wslDistroName:o=o7.env.WSL_DISTRO_NAME,cwd:a=o7.cwd()}=t;if(n)throw Error("File chooser is not supported in browser environment");return e.map(e=>{let t=i(e);if(!r(t))throw Error(`File not found: ${e}. Resolved to: ${t}. Current working directory: ${a}`);if(!o)return t;let n=t.match(/^\/mnt\/([a-z])\//);return n?`${n[1].toUpperCase()}:\\${t.slice(7).replace(/\//g,"\\")}`:`\\\\wsl$\\${o}${t.replace(/\//g,"\\")}`})}(Array.isArray(e)?e:[e])}async flushCache(e){if(!this.taskCache)throw Error("Cache is not configured");this.taskCache.flushCacheToFile(e)}constructor(e,t){var r,n;aT(this,"interface",void 0),aT(this,"service",void 0),aT(this,"dump",void 0),aT(this,"reportFile",void 0),aT(this,"reportFileName",void 0),aT(this,"taskExecutor",void 0),aT(this,"opts",void 0),aT(this,"dryMode",!1),aT(this,"onTaskStartTip",void 0),aT(this,"taskCache",void 0),aT(this,"metricsCollector",new oj),aT(this,"usageCallCounter",0),aT(this,"countedUsageKeys",new Set),aT(this,"dumpUpdateListeners",[]),aT(this,"progressBus",new oR),aT(this,"destroyed",!1),aT(this,"modelConfigManager",void 0),aT(this,"frozenUIContext",void 0),aT(this,"activeObserver",null),aT(this,"executionDumpIndexByRunner",new WeakMap),aT(this,"fullActionSpace",void 0),aT(this,"reportGenerator",void 0),aT(this,"lastExecutionDump",void 0),this.interface=e,this.opts=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},t||{}),ob(this.opts);const i=this.opts.aiActContext??this.opts.aiActionContext;if(void 0!==i&&(this.opts.aiActContext=i,(n=this.opts).aiActionContext??(n.aiActionContext=i)),(null==t?void 0:t.modelConfig)&&("object"!=typeof(null==t?void 0:t.modelConfig)||Array.isArray(t.modelConfig)))throw Error(`opts.modelConfig must be a plain object map of env keys to values, but got ${typeof(null==t?void 0:t.modelConfig)}`);const o=(null==t?void 0:t.modelConfig)||(null==t?void 0:t.createOpenAIClient);this.modelConfigManager=o?new eV(null==t?void 0:t.modelConfig,null==t?void 0:t.createOpenAIClient):eW,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new im(async()=>this.getUIContext());const a=this.processCacheConfig(t||{});a&&(this.taskCache=new al(a.id,a.enabled,void 0,{readOnly:a.readOnly,writeOnly:a.writeOnly,cacheDir:a.cacheDir}));const s=this.interface.actionSpace();this.fullActionSpace=[...s,{name:"Sleep",description:"Wait for a specified duration before continuing. Defaults to 1 second (1000ms) if not specified.",paramSchema:ox,sample:{timeMs:2e3},call:async e=>{let t=(null==e?void 0:e.timeMs)??1e3;(0,eT.a)("device:common-action")(`Sleeping for ${t}ms`),await new Promise(e=>setTimeout(e,t))}}],this.taskExecutor=new aI(this.interface,this.service,{taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this),replanningCycleLimit:this.opts.replanningCycleLimit,waitAfterAction:this.opts.waitAfterAction,useDeviceTime:this.opts.useDeviceTime,actionSpace:this.fullActionSpace,hooks:{onSnapshotChange:async e=>{let t=e.dump();this.appendExecutionDump(t,e),this.collectUsageMetrics(t),this.writeOutActionDumps(t),await this.reportGenerator.flush();let r=this.dumpDataString();for(let e of this.dumpUpdateListeners)try{e(r,t)}catch(e){console.error("Error in onDumpUpdate listener",e)}},onProgress:this.progressBus.publish}}),this.dump=this.resetDump(),this.reportFileName=(null==t?void 0:t.reportFileName)??o9((null==t?void 0:t.testId)||this.interface.interfaceType||"web"),this.reportGenerator=ow.create(this.reportFileName,{generateReport:this.opts.generateReport,persistExecutionDump:this.opts.persistExecutionDump,outputFormat:this.opts.outputFormat,autoPrintReportMsg:this.opts.autoPrintReportMsg,reuseExistingReport:(null==(r=this.opts.reportAttributes)?void 0:r["data-group-id"])===this.reportFileName})}}aT(az,"CONTEXT_RETRY_MAX",3),aT(az,"CONTEXT_RETRY_DELAY_MS",1500),r(4201).Buffer;RegExp(`${rD}="(inline|directory)"`);r(4201).Buffer;tU.k5(["split","to-markdown","merge-html"]).optional().describe("Report action to run. Supports: split, to-markdown, merge-html. Defaults to split."),tU.Yj().optional().describe("Input report HTML path (e.g. ./report/index.html). Used by split and to-markdown."),tU.KC([tU.Yj(),tU.YO(tU.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)."),tU.Yj().optional().describe("Output directory for generated report artifacts. For merge, defaults to the Midscene report directory."),tU.Yj().optional().describe("Output report file/directory name (without .html) for the merge action. Defaults to an auto-generated name."),tU.KC([tU.zM(),tU.Yj()]).optional().describe("Overwrite the existing merged report file if present (merge action only).");class aL{async getActionSpace(e){return[]}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&&rg(t.paramSchema).forEach(e=>{"string"==typeof r[e]&&(r[e]={midscene_location_field_flag:!0,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")&&!t.includes("midscene_location_field_flag")}).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 i=rg(n);return Object.keys(n.shape).forEach(t=>{let n=e[t];if(this.isValidParamValue(n)){let e=this.capitalizeFirstLetter(t),o=this.formatParamValue(t,n,i.includes(t));r.push(`${e}: ${o}`)}}),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 aF(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class aK extends aL{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 i5(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-experience.html#faq":this.formatBasicErrorMessage(e)}async getActionSpace(e){var t;if(!this.agent&&this.agentFactory)try{this.agent=await this.agentFactory()}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){e$(e),console.log("Config updated. Agent will be recreated on next execution.")}async runConnectivityTest(e){let t=new eV(e);return iI({defaultModelConfig:t.getModelConfig("default"),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,i,o;let a;if(this.agentFactory){if(this.agent){console.log("Destroying old agent before execution...");try{await (null==(n=(i=this.agent).destroy)?void 0:n.call(i))}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();try{null==(o=s.resetDump)||o.call(s)}catch(e){console.warn("Failed to reset dump before execution:",e)}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,i=null;try{n=await i4(s,e,l,t,r)}catch(e){i=e}let o={result:n,dump:null,reportHTML:null,error:i?i instanceof Error?i.message:String(i):null};try{if(s.dumpDataString){let e=s.dumpDataString();e&&(o.dump=n9.fromSerializedString(e))}}catch(e){console.warn("Failed to get dump from agent:",e)}try{s.reportHTMLString&&(o.reportHTML=s.reportHTMLString()||null)}catch(e){}try{s.writeOutActionDumps&&s.writeOutActionDumps()}catch(e){}return o}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(),console.log("Agent created successfully")}catch(e){throw console.error("Failed to create agent:",e),e}}async cancelTask(e){if(!this.agent)return{error:"No active agent found for this requestId"};let t=null,r=null;try{if("function"==typeof this.agent.dumpDataString){let e=this.agent.dumpDataString();e&&(t=n9.fromSerializedString(e))}}catch(e){console.warn("[LocalExecutionAdapter] Failed to get dump data before cancel:",e)}try{if("function"==typeof this.agent.reportHTMLString){let e=this.agent.reportHTMLString();e&&"string"==typeof e&&!e.includes("REPLACE_ME_WITH_REPORT_HTML")&&(r=e)}}catch(e){console.warn("[LocalExecutionAdapter] reportHTMLString not available in this environment")}try{var n,i;return await (null==(n=(i=this.agent).destroy)?void 0:n.call(i)),this.agent=null,{success:!0,dump:t,reportHTML:r}}catch(n){let e=n instanceof Error?n.message:"Unknown error";return console.error(`[LocalExecutionAdapter] Failed to cancel agent: ${e}`),{error:`Failed to cancel: ${e}`,dump:t,reportHTML:r}}}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=n9.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,i="function"==typeof this.agent.interface.size?await this.agent.interface.size():void 0,o="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,...i?{size:i}:{},...o?{actionTypes:o}:{}}}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(),aF(this,"agent",void 0),aF(this,"agentFactory",void 0),aF(this,"dumpUpdateCallback",void 0),aF(this,"progressCallback",void 0),aF(this,"_id",void 0),aF(this,"currentRequestId",void 0),this.agent=e??null,this.agentFactory=t,this._id=(0,eQ.uR)()}}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}class aQ extends aL{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,i;let o=t[r];return!((null==o?void 0:o.isOptional)||(null==o||null==(n=o._def)?void 0:n.innerType)||(null==o||null==(i=o._def)?void 0:i.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 i5(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}`)}return await e.json()}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{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))}`);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 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(),aU(this,"serverUrl",void 0),aU(this,"_id",void 0),aU(this,"dumpUpdateCallback",void 0),aU(this,"pollingIntervalId",void 0),this.serverUrl=e}}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}class aJ{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 aK(r,n);case"remote-execution":return new aQ(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 aK||this.adapter instanceof aQ?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 aQ||this.adapter instanceof aK)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof aQ)||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 aQ?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof aQ?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof aK?this.adapter.onDumpUpdate(e):this.adapter instanceof aQ&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof aK&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof aQ){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null}}else if(this.adapter instanceof aK){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null}}return null}async getCurrentExecutionData(){return this.adapter instanceof aK&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof aQ?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof aQ?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof aQ?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof aQ?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof aQ?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof aQ?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof aQ?this.adapter.describeRecorderEventAtPoint(e):{ok:!1,error:"Recorder aiDescribe requires remote execution"}}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 aQ?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof aQ?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof aQ?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof aQ)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof aQ)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof aK?"In-Browser-Extension":"Server"}constructor(e){aZ(this,"adapter",void 0),aZ(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var aX=r(5810);function aH(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,i,o,a;return null!=t&&""!==t?t:"select"===e.type?null!=(o=null!=(i=e.defaultValue)?i:null==(n=e.options)||null==(r=n[0])?void 0:r.value)?o:"":null!=(a=null!=t?t:e.defaultValue)?a:""}(e,t[e.key])])):{}}function aq(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=aH(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}function aG(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function aV(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function aW(e){return Object.keys(e).length>0}function aY(e){return e?JSON.stringify(e):null}let a_="npx puppeteer browsers install chrome",a$="https://pptr.dev/guides/configuration",a0=/could not find (?:google )?chrome/;function a1(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 a2(){if("undefined"!=typeof navigator)try{var e;null==(e=navigator.clipboard)||e.writeText(a_).catch(()=>void 0)}catch(e){}}function a3(){return(0,o.jsxs)("span",{"aria-hidden":!0,style:{display:"block",height:16,position:"relative",width:16},children:[(0,o.jsx)("span",{style:{border:"1.5px solid currentColor",borderRadius:3,height:10,left:5,position:"absolute",top:3,width:8}}),(0,o.jsx)("span",{style:{background:"#f6f8fa",border:"1.5px solid currentColor",borderRadius:3,height:10,left:2,position:"absolute",top:0,width:8}})]})}function a5(e){let{error:t}=e,r=a1(t),[n,i]=(0,a.useState)(!1);return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(0,o.jsx)("div",{children:"Studio could not find the Chrome browser required to create a Web Agent."}),(0,o.jsx)("div",{children:"Run this command, then try again:"}),(0,o.jsxs)("div",{onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),style:{background:"#f6f8fa",border:"1px solid #d9d9d9",borderRadius:6,boxSizing:"border-box",maxWidth:"100%",minHeight:46,position:"relative"},children:[(0,o.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:a_}),(0,o.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>i(!1),onClick:a2,onFocus:()=>i(!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,o.jsx)(a3,{})})]}),(0,o.jsxs)("div",{children:["Guide:"," ",(0,o.jsx)("a",{href:a$,rel:"noreferrer",target:"_blank",children:a$})]}),(0,o.jsx)(h.A,{getPopupContainer:()=>document.body,overlayInnerStyle:{width:"min(680px, calc(100vw - 48px))"},overlayStyle:{maxWidth:"min(680px, calc(100vw - 48px))"},placement:"topRight",title:(0,o.jsx)("pre",{style:{margin:0,maxHeight:280,overflow:"auto",whiteSpace:"pre-wrap",width:"100%"},children:r}),zIndex:1e4,children:(0,o.jsx)("button",{style:{alignSelf:"flex-start",background:"transparent",border:0,color:"inherit",cursor:"help",padding:0,textDecoration:"underline"},type:"button",children:"Original error"})})]})}function a4(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function a7(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){a4(o,n,i,a,s,"next",e)}function s(e){a4(o,n,i,a,s,"throw",e)}a(void 0)})}}function a8(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 a6(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let a9=e=>{var t,r;return(0,o.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,o.jsx)("path",{fill:"url(#server-offline-background_svg__a)",fillOpacity:.7,d:"M0 283h283v400H0z",transform:"rotate(-90 0 283)"}),(0,o.jsx)("path",{fill:"url(#server-offline-background_svg__b)",d:"M0 0h400v283H0z"}),(0,o.jsxs)("defs",{children:[(0,o.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,o.jsx)("stop",{stopColor:"#F2F4F7",stopOpacity:0}),(0,o.jsx)("stop",{offset:1,stopColor:"#F2F4F7"})]}),(0,o.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,o.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))},se=e=>{var t,r;return(0,o.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,o.jsx)("g",{filter:"url(#server-offline-foreground_svg__a)",children:(0,o.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,o.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,o.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,o.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,o.jsxs)("defs",{children:[(0,o.jsxs)("linearGradient",{id:"server-offline-foreground_svg__b",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,o.jsx)("stop",{stopColor:"#D9D9D9"}),(0,o.jsx)("stop",{offset:1,stopColor:"#E9E9EB"})]}),(0,o.jsxs)("linearGradient",{id:"server-offline-foreground_svg__c",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,o.jsx)("stop",{stopColor:"#7D7E80"}),(0,o.jsx)("stop",{offset:1,stopColor:"#C7C9CC"})]}),(0,o.jsxs)("linearGradient",{id:"server-offline-foreground_svg__d",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,o.jsx)("stop",{stopColor:"#fff"}),(0,o.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.2})]}),(0,o.jsxs)("linearGradient",{id:"server-offline-foreground_svg__e",x1:72.75,x2:90.111,y1:33.874,y2:63.944,gradientUnits:"userSpaceOnUse",children:[(0,o.jsx)("stop",{stopColor:"#fff"}),(0,o.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.5})]}),(0,o.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,o.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,o.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,o.jsx)("feOffset",{dy:4}),(0,o.jsx)("feGaussianBlur",{stdDeviation:10}),(0,o.jsx)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,o.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,o.jsx)("feBlend",{in2:"BackgroundImageFix",result:"effect1_dropShadow_4624_2901"}),(0,o.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 st=r(4707),sr=r(6820),sn=r(9870),si=r(9877),so=r(5528),sa=r(638);let ss="Auto dismiss keyboard",sl={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"}},sA=["aiAct","aiTap","aiQuery","aiAssert"],sc=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
953
- Welcome to Midscene.js Playground!
954
-
955
- 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.
956
-
957
- Please enter your instructions in the input box below to start experiencing.
958
- `,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};sc();let su={result:void 0,dump:null,reportHTML:null,error:null},sd="data:image/png;base64,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",sp="data:image/png;base64,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";function sh(e){return"object"==typeof e&&null!==e}let sf=e=>{let t=Math.round(e.center[0]),r=Math.round(e.center[1]),n=Math.ceil(4)-1;return{left:Math.max(t-n,0),top:Math.max(r-n,0),width:8,height:8}};function sg(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 sm=(e,t,r)=>{let n,i=(n=e.width/e.height>=t/r?e.width:e.height/r*t)>400?.1:n>50?.2:.3,o=Math.min(t,n+t*i*2),a=Math.min(e.left-t*i,t-o);a=Math.max(a,0);let s=Math.min(e.top-r*i,r-r/t*o);return{left:Math.round(a),top:Math.round(s=Math.max(s,0)),width:Math.round(o)}},sy=(e,t)=>sm({left:0,top:0,width:e,height:t},e,t),sv=(e,t,r)=>{var n;let i=null==e||null==(n=e.uiContext)?void 0:n.shotSize;return{width:(null==i?void 0:i.width)||t,height:(null==i?void 0:i.height)||r}},sb=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}),sw=e=>{var t,r;let n,i,o,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=(o=s.sdkVersion,a=[],(sb((null==(r=s.executions)?void 0:r.filter(Boolean))||[]).forEach(e=>{e.tasks.forEach(e=>{var t,r;let o=null==(t=e.uiContext)?void 0:t.shotSize;if(o){let e=o.width,t=o.height;n||(n=e,i=t)}if(e.usage){let{model_name:t,model_description:n,intent:i}=e.usage;r={intent:i,name:t,modelDescription:n},a.some(e=>e.intent===r.intent&&e.name===r.name&&e.modelDescription===r.modelDescription)||a.push(r)}})}),n&&i)?{width:n,height:i,sdkVersion:o,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:A,height:c}=l,u=[],d=sb((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=sE(d[e],-1,A,c,e);t&&u.push(...t)}return{scripts:u.filter((e,t)=>t===u.length-1||"Done"!==e.title),width:A,height:c,sdkVersion:l.sdkVersion,modelBriefs:l.modelBriefs,deviceType:l.deviceType}},sE=function(e,t,r,n){let i,o;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=sg({},e),n=null;return Object.defineProperty(r,"img",{get:()=>(null===n&&(n=t.base64),n),enumerable:!0}),r},l=[],A=!1,c="";a.forEach((e,t)=>{var u,d,p,h,f,g,m,y,v,b;let w=null==(b=a[t])?void 0:b.taskId;if(o=w,0===t&&(c=ax(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 o=av(e),a=ax(e),c=e.uiContext,h=null==c?void 0:c.screenshot;if(c&&h){let{width:u,height:d}=sv(e,r,n);l.push(s({type:"img",duration:300,title:o,subTitle:a,imageWidth:u,imageHeight:d,taskId:w},h)),t.forEach(t=>{var r,n,p,f,g,m,y;let v,b=(r=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}({},t),n=n={center:[Math.round(t.center[0]),Math.round(t.center[1])],rect:sf(t)},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))}),r);p=sg({},sm(sf(b),u,d)),f=f={pointerLeft:b.center[0],pointerTop:b.center[1]},Object.getOwnPropertyDescriptors?Object.defineProperties(p,Object.getOwnPropertyDescriptors(f)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(f)).forEach(function(e){Object.defineProperty(p,e,Object.getOwnPropertyDescriptor(f,e))}),i=p,l.push(s({type:"insight",context:c,camera:i,highlightElement:b,searchArea:(null==e?void 0:e.searchArea)??(null==(m=sh(v=null==e?void 0:e.log)&&sh(y=v.dump)&&"string"==typeof y.type&&sh(y.taskInfo)?v.dump:null)||null==(g=m.taskInfo)?void 0:g.searchArea),duration:400,insightCameraDuration:800,title:o,subTitle:b.description||a,imageWidth:u,imageHeight:d,taskId:w},h)),A=!0})}if(e.recorder&&e.recorder.length>0){let t=null==(p=e.recorder[0])?void 0:p.screenshot,{width:i,height:o}=sv(e,r,n);l.push(s({type:"img",duration:900,title:av(e),subTitle:ax(e),imageWidth:i,imageHeight:o,taskId:w},t))}}else if("Action Space"===e.type){let t=av(e),i=ax(e);l.push({type:"spinning-pointer",duration:300,title:t,subTitle:i,taskId:w}),A&&(l.push({type:"clear-insight",duration:200,title:t,subTitle:i,taskId:w}),A=!1),l.push({type:"pointer",img:sd,duration:0,title:t,subTitle:i,taskId:w});let o=null==(f=e.recorder)||null==(h=f[0])?void 0:h.screenshot,{width:a,height:c}=sv(e,r,n);l.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?sy(a,c):void 0,title:t,subTitle:i,imageWidth:a,imageHeight:c,taskId:w},o))}else{let t=av(e),i=ax(e),o=null==(m=e.recorder)||null==(g=m[e.recorder.length-1])?void 0:g.screenshot;if(o){let{width:a,height:A}=sv(e,r,n);l.push(s({type:"img",duration:900,camera:sy(a,A),title:t,subTitle:i,imageWidth:a,imageHeight:A,taskId:w},o))}}if("finished"!==e.status){let t=av(e),i=e.errorMessage||"unknown error",o=i.indexOf("NOT_IMPLEMENTED_AS_DESIGNED")>0?"Further actions cannot be performed in the current environment":i,a=null==(v=e.recorder)||null==(y=v[e.recorder.length-1])?void 0:y.screenshot,{width:A,height:c}=sv(e,r,n);l.push(s({type:"img",camera:sy(A,c),duration:900,title:t,subTitle:o,imageWidth:A,imageHeight:c,taskId:w},a))}}),A&&(l.push({type:"clear-insight",duration:200,title:"",subTitle:"",taskId:o}),A=!1);let u=a.length>0?sv(a[a.length-1],r,n):{width:r,height:n};return l.push({title:"End",subTitle:c,type:"img",duration:200,camera:sy(u.width,u.height),taskId:void 0}),l};function sx(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function sk(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sx(o,n,i,a,s,"next",e)}function s(e){sx(o,n,i,a,s,"throw",e)}a(void 0)})}}function sS(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 sC(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 sI(e){var t;if(!e)return"";if("string"==typeof e)return e;if(null==e||null==(t=e.dump)?void 0:t.error)return e.dump.error;if(e.message)return String(e.message);try{return JSON.stringify(e)}catch(t){return String(e)}}function sj(e,t){return e?Array.isArray(null==e?void 0:e.executions)?sw(e):e.tasks&&Array.isArray(e.tasks)?sw({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function sO(e){return"aiAct"===e||"runMarkdown"===e}function sP(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class sR{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){sP(this,"dbPromise",void 0),sP(this,"dbName",void 0),sP(this,"version",void 0),sP(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let sM=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}},sT=(e,t,r)=>async()=>{try{let n=await e.getAll(t);if(n.length>r){let i=n.sort((e,t)=>e.timestamp-t.timestamp).slice(0,n.length-r);await Promise.all(i.map(r=>e.delete(t,r.id)))}}catch(e){console.error(`Failed to cleanup ${t}:`,e)}};function sN(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function sD(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sN(o,n,i,a,s,"next",e)}function s(e){sN(o,n,i,a,s,"throw",e)}a(void 0)})}}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}function sz(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){sB(e,t,r[t])})}return e}function sL(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 sF="playground_messages",sK="playground_results";class sU{saveMessages(e){return sD(function*(){yield sM(()=>sD(function*(){yield this.dbManager.clear(sF);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=sL(sz({},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(sF,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return sD(function*(){return(yield sM(()=>sD(function*(){let e=yield this.dbManager.getAll(sF,!0);return 0===e.length?[]:Promise.all(e.map(e=>sD(function*(){let t=e.data,r=sL(sz({},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 sD(function*(){yield sM(()=>sD(function*(){yield Promise.all([this.dbManager.clear(sF),this.dbManager.clear(sK)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return sD(function*(){yield sM(()=>sD(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(sK,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return sD(function*(){return(yield sM(()=>sD(function*(){let t=yield this.dbManager.get(sK,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)?sL(sz({},e),{result:sL(sz({},t),{dump:sL(sz({},r),{executions:r.executions.map(e=>sL(sz({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?sL(sz({},e),{result:sL(sz({},t),{dump:sL(sz({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return sL(sz({},e),{uiContext:e.uiContext?sL(sz({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>sL(sz({},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 sD(function*(){return(yield sM(()=>sD(function*(){let[e,t]=yield Promise.all([this.dbManager.count(sF),this.dbManager.count(sK)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return sD(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){sB(this,"dbManager",void 0),sB(this,"namespace",void 0),sB(this,"messagesCleanup",void 0),sB(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new sR(`midscene_playground_${e}`,1,[{name:sF,keyPath:"id"},{name:sK,keyPath:"id"}]),this.messagesCleanup=sT(this.dbManager,sF,100),this.resultsCleanup=sT(this.dbManager,sK,50)}}function sQ(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function sZ(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sQ(o,n,i,a,s,"next",e)}function s(e){sQ(o,n,i,a,s,"throw",e)}a(void 0)})}}function sJ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function sX(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){sJ(e,t,r[t])})}return e}function sH(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 sq{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 sZ(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>sH(sX({},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=>sH(sX({},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 sZ(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>sZ(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 sX({},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 sZ(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 sZ(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 sZ(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"){sJ(this,"messagesKey",void 0),sJ(this,"resultsKey",void 0),sJ(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class sG{saveMessages(e){return sZ(function*(){this.messages=[...e]}).call(this)}loadMessages(){return sZ(function*(){return[...this.messages]}).call(this)}clearMessages(){return sZ(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return sZ(function*(){this.results.set(e,t)}).call(this)}constructor(){sJ(this,"messages",[]),sJ(this,"results",new Map)}}class sV{saveMessages(e){return sZ(function*(){})()}loadMessages(){return sZ(function*(){return[]})()}clearMessages(){return sZ(function*(){})()}saveResult(e,t){return sZ(function*(){})()}}function sW(){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 sU(t);return console.warn("IndexedDB not available, falling back to localStorage"),sW("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new sq(t);return console.warn("localStorage not available, falling back to memory storage"),sW("memory",t);case"memory":return new sG;case"none":return new sV;default:throw Error(`Unknown storage type: ${e}`)}}function sY(){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 s_(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function s$(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){s_(o,n,i,a,s,"next",e)}function s(e){s_(o,n,i,a,s,"throw",e)}a(void 0)})}}function s0(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 s1(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 s2=e=>{var t;let r=e.highlightElements||[],n=e.highlightRect,i=null==(t=e.uiContext)?void 0:t.shotSize;if(!i)return(0,o.jsx)("div",{className:"blackboard",children:(0,o.jsx)("div",{className:"blackboard-main-content",style:{padding:"20px"},children:"No UI context available"})});let s=e.uiContext,l=i.width,A=i.height,c=a.useMemo(()=>(function(e){if(!(null==e?void 0:e.length))return[];let t=new Map;return e.forEach((e,r)=>{var n,i;if(!(null==e?void 0:e.rect)||!(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,a=["id"in e?e.id:"",o||"",(n=e.center,`${n[0]}:${n[1]}`),(i=e.rect,`${i.left}:${i.top}:${i.width}:${i.height}`)].join("|");t.has(a)||t.set(a,{key:"id"in e&&e.id||`${a||"highlight"}-${r}`,label:o,center:e.center,rect:e.rect})}),Array.from(t.values())})(r),[r]),u=a.useMemo(()=>{var e;return(null==s||null==(e=s.screenshot)?void 0:e.base64)||""},[s]),d=c.map(e=>sf(e)),p=null;return 1===d.length?p=(0,o.jsx)("div",{className:"bottom-tip",children:(0,o.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d[0])]})}):d.length>1&&(p=(0,o.jsx)("div",{className:"bottom-tip",children:(0,o.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d)]})})),(0,o.jsxs)("div",{className:"blackboard",children:[(0,o.jsxs)("div",{className:"blackboard-main-content",style:{width:"fit-content",maxWidth:"100%",position:"relative"},children:[u&&(0,o.jsx)("img",{src:u,alt:"screenshot",className:"blackboard-screenshot",draggable:!1}),(0,o.jsxs)("div",{className:"blackboard-overlay",style:{aspectRatio:`${l}/${A}`,"--ui-scale":Math.max(1,Math.sqrt(l/1920))},children:[n&&(0,o.jsx)("div",{className:"blackboard-rect blackboard-rect-search",style:{left:`${n.left/l*100}%`,top:`${n.top/A*100}%`,width:`${n.width/l*100}%`,height:`${n.height/A*100}%`},children:(0,o.jsx)("span",{className:"blackboard-rect-label",children:"Search Area"})}),c.map(e=>{let t=sf(e);return(0,o.jsx)("div",{className:"blackboard-rect blackboard-rect-highlight",style:{left:`${t.left/l*100}%`,top:`${t.top/A*100}%`,width:`${t.width/l*100}%`,height:`${t.height/A*100}%`}},`${e.key}-rect`)})]})]}),(0,o.jsx)("div",{className:"bottom-tip",style:{display:e.hideController?"none":"block"},children:p})]})};var s3=r(9783),s5=r(7294),s4=r(4985),s7=r(1090),s8=r(2946),s6=r(90),s9=r(3776);let le=e=>{let{text:t,disabled:r=!1,speed:n=5,className:i="",colorTheme:a="blue"}=e,s={"--animation-duration":`${n}s`},l=`theme-${a}`;return(0,o.jsx)("div",{className:`shiny-text ${l} ${r?"disabled":""} ${i}`,style:s,children:t})},lt=(0,o.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,o.jsx)("br",{}),"Please run one of the commands under the midscene project directory:",(0,o.jsx)("br",{}),"a. ",(0,o.jsx)("strong",{children:"npx midscene-playground"}),(0,o.jsx)("br",{}),"b. ",(0,o.jsx)("strong",{children:"npx --yes @midscene/web"})]}),lr=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lt;return(0,o.jsx)("div",{className:"server-tip",children:(0,o.jsx)(y.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},ln=(0,o.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,o.jsx)(le,{disabled:!0,text:"The result will be shown here"})});var li=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/dO3WmYmAgh48eZWbYfC7F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RERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMREREROSBKVq0KI8/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+/tRp0ZyExEREREREREREROTvxTxx2pQZiIiIiDwst218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AFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAP5ve3BAAgAAgAAo+j+6H6ECFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwYYkQHKd0AqxtAAAAAElFTkSuQmCC","url":"https://www.saucedemo.com/"}');let lo=e=>{let{uiContextPreview:t,setUiContextPreview:r,showContextPreview:n}=e;return n?(0,o.jsxs)("div",{className:"form-part context-panel",children:[(0,o.jsx)("h3",{children:"UI Context"}),t?(0,o.jsx)(s2,{uiContext:t,hideController:!0}):(0,o.jsxs)("div",{children:[(e=>{switch(e){case"finished":case"passed":case"success":case"connected":return(0,o.jsx)("span",{style:{color:"#00AD4B"},children:(0,o.jsx)(s3.A,{})});case"finishedWithWarning":return(0,o.jsx)("span",{style:{color:"#f7bb05"},children:(0,o.jsx)(s5.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,o.jsx)("span",{style:{color:"#FF0A0A"},children:(0,o.jsx)(s4.A,{})});case"pending":return(0,o.jsx)(s7.A,{});case"cancelled":case"skipped":return(0,o.jsx)("span",{style:{color:"#8c8c8c"},children:(0,o.jsx)(s8.A,{})});case"running":return(0,o.jsx)(s6.A,{});default:return(0,o.jsx)(s9.A,{})}})("failed")," No UI context",(0,o.jsx)(g.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(li)},children:"Load Demo"}),(0,o.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 la=r(4291);let ls=e=>{let{className:t=""}=e,{config:r}=X();return Object.keys(r||{}).length>=1?null:(0,o.jsxs)("div",{className:`env-config-reminder ${t}`,children:[(0,o.jsx)(la.A,{className:"reminder-icon"}),(0,o.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,o.jsx)(V,{mode:"text",showTooltipWhenEmpty:!1})]})};var ll=r(7062),lA=r(6130),lc=r(2297),lu=r(5862),ld=r(7615),lp=r(2107),lh=r(4544),lf=r(3616),lg=r(1879),lm=r(9876),ly=r(1269);let lv=e=>{var t,r;return(0,o.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,o.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))},lb=e=>{var t,r;return(0,o.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,o.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,o.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 lw(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function lE(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 lx(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function lk(e,t,r,n){if(!t.img)return;e.img&&t.img!==e.img&&(e.prevImg=e.img,e.imageChanged=!0);let i=t.imageWidth||r,o=t.imageHeight||n,a=e.imgW!==i||e.imgH!==o;if(e.img=t.img,e.imgW=i,e.imgH=o,a){let t=lx(i,o);e.camera=lE({},t),e.prevCamera=lE({},t),e.pointerMoved=!1}}function lS(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function lC(e,t,r,n,i){let o=Math.round(n/2),a=Math.round(i/2);return e||Math.abs(t.pointerLeft-o)>1||Math.abs(t.pointerTop-a)>1||Math.abs(r.pointerLeft-o)>1||Math.abs(r.pointerTop-a)>1}function lI(e,t,r,n,i){let o=lx(r,n),a={img:"",imgW:r,imgH:n,camera:lE({},o),prevCamera:lE({},o),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:sd,pointerVisible:!1,title:"",subTitle:"",taskId:void 0,frameInScript:0,scriptIndex:0,imageChanged:!1,pointerMoved:!1,rawProgress:0};for(let o=0;o<e.length;o++){var s,l;let A=e[o],c=A.startFrame+A.durationInFrames;if(0===A.durationInFrames){A.startFrame<=t&&("pointer"===A.type&&A.pointerImg&&(a.pointerImg=A.pointerImg,a.pointerVisible=!0),a.title=A.title||a.title,a.subTitle=A.subTitle||a.subTitle,a.taskId=null!=(s=A.taskId)?s:a.taskId,a.scriptIndex=o);continue}if(t<A.startFrame)break;switch(a.title=A.title||a.title,a.subTitle=A.subTitle||a.subTitle,a.taskId=null!=(l=A.taskId)?l:a.taskId,a.scriptIndex=o,a.frameInScript=t-A.startFrame,a.rawProgress=Math.min(a.frameInScript/A.durationInFrames,1),A.type){case"img":!function(e,t,r,n,i){lk(e,t,n,i);let o=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=lE({},e.camera),e.camera=lE({},t.cameraTarget),e.pointerMoved=lS(e.prevCamera,e.camera)):r>=o&&(e.pointerMoved=!1,e.imageChanged=!1),e.spinning=!1}(a,A,t,r,n);break;case"insight":!function(e,t,r,n,i){if(lk(e,t,n,i),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=lE({},e.camera),e.camera=lE({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=lS(e.prevCamera,e.camera))}e.spinning=!1}(a,A,t,r,n);break;case"clear-insight":!function(e,t,r){let n=t.startFrame+t.durationInFrames,i=1-e.rawProgress;e.insights=e.insights.map(e=>{var t,r;return t=lE({},e),r=r={alpha:i},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,A,t);break;case"spinning-pointer":a.spinning=!0,a.spinningElapsedMs=a.frameInScript/i*1e3;break;case"sleep":a.spinning=!1}t>=c&&("clear-insight"!==A.type&&(a.imageChanged=!1),a.pointerMoved=!1,a.rawProgress=1,A.cameraTarget&&(a.prevCamera=lE({},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 lj(e,t,r,n){let i=Math.min(e/r,t/n),o=r*i,a=n*i;return{offsetX:(e-o)/2,offsetY:(t-a)/2,contentWidth:o,contentHeight:a}}function lO(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function lP(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 lR(e){return lO(e,"imageWidth"),lP(Math.max(1,Math.sqrt(e/1920)))}function lM(e){let t=e.height;return{size:t,centerOffset:t/2}}let lT=e=>{let{frameMap:t,autoZoom:r,frame:n,width:i,height:s,fps:l}=e,{scriptFrames:A,imageWidth:c,imageHeight:u}=t,d=(0,a.useMemo)(()=>lI(A,n,c,u,l),[A,n,c,u,l]);if(!d.img)return null;let{img:p,imageWidth:h,imageHeight:f,prevImg:g,camera:m,prevCamera:y,insights:v,spinning:b,spinningElapsedMs:w,currentPointerImg:E,pointerVisible:x,title:k,subTitle:S,frameInScript:C,imageChanged:I,pointerMoved:j,rawProgress:O}=d,P=r?j?Math.min(O/.375,1):O:1,R=j?O<=.375?0:Math.min((O-.375)/.625,1):O,M=y.pointerLeft+(m.pointerLeft-y.pointerLeft)*P,T=y.pointerTop+(m.pointerTop-y.pointerTop)*P,N=r?y.left+(m.left-y.left)*R:0,D=r?y.top+(m.top-y.top)*R:0,B=r?y.width+(m.width-y.width)*R:h,{offsetX:z,offsetY:L,contentWidth:F,contentHeight:K}=lj(i,s,h,f),U=h/B,Q=-(F/h*N),Z=-(K/f*D),J=`scale(${U}) translate(${Q}px, ${Z}px)`,X=f/h*B,H=(M-N)/B*F,q=(T-D)/X*K,G=lC(x,m,y,h,f),V=lR(h),W=lM(V),Y=V.scale,_=I?Math.min(C/10,1):1,$=b?(Math.sin(w/500-Math.PI/2)+1)/2*Math.PI*2:0;return(0,o.jsx)("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"#000"},children:(0,o.jsx)("div",{style:{position:"absolute",left:z,top:L,width:F,height:K,overflow:"hidden"},children:(0,o.jsxs)("div",{style:{width:F,height:K,position:"relative",overflow:"hidden"},children:[I&&g&&_<1&&(0,o.jsx)("div",{style:{position:"absolute",width:F,height:K,overflow:"hidden",opacity:1-_},children:(0,o.jsx)("img",{alt:"",src:g,style:{width:F,height:K,transformOrigin:"0 0",transform:J}})}),(0,o.jsxs)("div",{style:{position:"absolute",width:F,height:K,overflow:"hidden",opacity:I?_:1},children:[(0,o.jsx)("img",{alt:"",src:p,style:{width:F,height:K,transformOrigin:"0 0",transform:J}}),(0,o.jsx)("div",{style:{position:"absolute",top:0,left:0,width:F,height:K,transformOrigin:"0 0",transform:J,pointerEvents:"none"},children:0===v.length?null:v.map((e,t)=>{let r=[];if(e.highlightElement){let n=sf(e.highlightElement);r.push((0,o.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*Y}px solid #fd5907`,boxShadow:`${2*Y}px ${2*Y}px ${+Y}px rgba(51, 51, 51, 0.3)`,opacity:e.alpha,pointerEvents:"none"}},`highlight-${t}`))}if(e.searchArea){let n=e.searchArea;r.push((0,o.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*Y}px solid #028391`,boxShadow:`${2*Y}px ${2*Y}px ${+Y}px rgba(51, 51, 51, 0.3)`,opacity:e.alpha,pointerEvents:"none"}},`search-${t}`))}return r})})]}),b&&(0,o.jsx)("img",{alt:"",src:sp,style:{position:"absolute",left:H-W.centerOffset,top:q-W.centerOffset,width:W.size,height:W.size,transform:`rotate(${$}rad)`,transformOrigin:"center center",filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}}),G&&!b&&(0,o.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:H-V.hotspotX,top:q-V.hotspotY,width:V.width,height:V.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};function lN(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function lD(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){lN(o,n,i,a,s,"next",e)}function s(e){lN(o,n,i,a,s,"throw",e)}a(void 0)})}}let lB=!1;function lz(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function lL(e,t,r){let n=r.contentWidth/r.imageWidth,i=r.contentHeight/r.imageHeight;return{left:r.offsetX+(e.left*n+t.tx)*t.zoom,top:r.offsetY+(e.top*i+t.ty)*t.zoom,width:e.width*n*t.zoom,height:e.height*i*t.zoom}}function lF(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function lK(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){lF(o,n,i,a,s,"next",e)}function s(e){lF(o,n,i,a,s,"throw",e)}a(void 0)})}}function lU(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 lQ(e){var t,r,n,i;let s,{message:l}=p.A.useApp(),{autoZoom:A,setAutoZoom:c,playbackSpeed:u,setPlaybackSpeed:d,subtitleEnabled:f,setSubtitleEnabled:m}=R();(0,a.useEffect)(()=>{(null==e?void 0:e.autoZoom)!==void 0&&c(e.autoZoom)},[null==e?void 0:e.autoZoom,c]);let y=null==e?void 0:e.replayScripts,v=(0,a.useMemo)(()=>y&&0!==y.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 i=[],o=0;for(let t of e){var a,s,l,A;let e=t.duration;switch(t.type){case"sleep":{let r=Math.ceil(e/1e3*30);i.push({type:"sleep",startFrame:o,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),o+=r;break}case"img":{let l=Math.max(Math.ceil(e/1e3*30),1),A=t.camera,c=t.imageWidth||r,u=t.imageHeight||n,d={type:"img",startFrame:o,durationInFrames:l,img:t.img,imageWidth:c,imageHeight:u,title:t.title,subTitle:t.subTitle,taskId:t.taskId};A&&(d.cameraTarget={left:A.left,top:A.top,width:A.width,pointerLeft:null!=(a=A.pointerLeft)?a:Math.round(c/2),pointerTop:null!=(s=A.pointerTop)?s:Math.round(u/2)}),i.push(d),o+=l;break}case"insight":{let a=Math.max(Math.ceil(e/1e3*30),1),s=Math.ceil((t.insightCameraDuration||0)/1e3*30),c=a+s,u=t.imageWidth||r,d=t.imageHeight||n,p=t.camera,h={type:"insight",startFrame:o,durationInFrames:c,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!=(A=p.pointerTop)?A:Math.round(d/2)}),i.push(h),o+=c;break}case"clear-insight":{let r=Math.max(Math.ceil(e/1e3*30),1);i.push({type:"clear-insight",startFrame:o,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),o+=r;break}case"spinning-pointer":{let r=Math.max(Math.ceil(e/1e3*30),1);i.push({type:"spinning-pointer",startFrame:o,durationInFrames:r,title:t.title,subTitle:t.subTitle,taskId:t.taskId}),o+=r;break}case"pointer":i.push({type:"pointer",startFrame:o,durationInFrames:0,pointerImg:t.img,title:t.title,subTitle:t.subTitle,taskId:t.taskId})}}let c=Math.max(o,1);return{scriptFrames:i,totalDurationInFrames:c,fps:30,stepsDurationInFrames:c,imageWidth:r,imageHeight:n}}(y,{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,y]),b=(0,a.useRef)(null),w=(0,a.useRef)(null),E=(0,a.useRef)(null),[x,k]=(0,a.useState)({width:0,height:0});(0,a.useEffect)(()=>{let e=w.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;k(t=>t.width===e&&t.height===r?t:{width:e,height:r})}});return t.observe(e),()=>t.disconnect()},[]);let S=function(e){var t,r;let{durationInFrames:n,fps:i,autoPlay:o=!1,loop:s=!1}=e,[l,A]=(0,a.useState)(0),[c,u]=(0,a.useState)(o),d=(0,a.useRef)(c),p=(0,a.useRef)(l),h=(0,a.useRef)(null!=(t=e.playbackRate)?t:1),f=(0,a.useRef)(n),g=(0,a.useRef)(i),m=(0,a.useRef)(s);d.current=c,p.current=l,h.current=null!=(r=e.playbackRate)?r:1,f.current=n,g.current=i,m.current=s,(0,a.useEffect)(()=>{let e;if(!c)return;let t=null,r=0,n=i=>{if(null!==t){let e=(i-t)*h.current;r+=e;let n=1e3/g.current;for(;r>=n;){r-=n;let e=p.current+1;if(e>=f.current)if(m.current)p.current=0,A(0);else{p.current=f.current-1,A(f.current-1),u(!1);return}else p.current=e,A(e)}}t=i,e=requestAnimationFrame(n)};return e=requestAnimationFrame(n),()=>cancelAnimationFrame(e)},[c]);let y=()=>{p.current>=f.current-1&&(p.current=0,A(0))},v=(0,a.useCallback)(()=>{y(),u(!0)},[]),b=(0,a.useCallback)(()=>u(!1),[]);return{currentFrame:l,playing:c,play:v,pause:b,toggle:(0,a.useCallback)(()=>{d.current?u(!1):(y(),u(!0))},[]),seekTo:(0,a.useCallback)(e=>{let t=Math.max(0,Math.min(e,f.current-1));p.current=t,A(t)},[])}}({durationInFrames:Math.max(null!=(t=null==v?void 0:v.totalDurationInFrames)?t:1,1),fps:null!=(r=null==v?void 0:v.fps)?r:30,autoPlay:null==(n=null==e?void 0:e.autoPlay)||n,loop:!1,playbackRate:u}),C=(0,a.useMemo)(()=>{if(!v)return 0;for(let e=v.scriptFrames.length-1;e>=0;e--){let t=v.scriptFrames[e];if(t.taskId)return t.startFrame+t.durationInFrames-1}return Math.max(0,v.totalDurationInFrames-1)},[v]),I=(0,a.useCallback)(()=>{var e;S.playing?S.pause():(e=S.currentFrame,C>0&&e>=C&&S.seekTo(0),S.play())},[C,S.currentFrame,S.pause,S.play,S.playing,S.seekTo]);(0,a.useEffect)(()=>{!v||S.playing||!(S.currentFrame<v.totalDurationInFrames-1)&&C>0&&S.seekTo(C)},[C,v,S.currentFrame,S.playing,S.seekTo]),(0,a.useEffect)(()=>{if(!v||!(null==e?void 0:e.onTaskChange))return;if(!S.playing){null!==E.current&&(E.current=null,e.onTaskChange(null));return}let t=function(e,t){let r=null;for(let o of e){var n,i;if(0===o.durationInFrames){o.startFrame<=t&&(r=null!=(n=o.taskId)?n:r);continue}if(t<o.startFrame)break;r=null!=(i=o.taskId)?i:r}return r}(v.scriptFrames,S.currentFrame);t!==E.current&&(E.current=t,e.onTaskChange(t))},[v,null==e?void 0:e.onTaskChange,S.currentFrame,S.playing]);let j=(0,a.useMemo)(()=>{var e;let t;return v?(e=S.currentFrame,(t=lI(v.scriptFrames,e,v.imageWidth,v.imageHeight,v.fps)).img?t:null):null},[v,S.currentFrame]),O=(0,a.useCallback)(()=>lK(function*(){if(null==e?void 0:e.reportFileContent)try{var t,r;yield(t={content:e.reportFileContent,onDownloadReport:e.onDownloadReport},(r=function*(){let{content:e,defaultFileName:r="midscene_report.html",onDownloadReport:n,documentRef:i,urlRef:o,blobFactory:a,scheduleRevoke:s}=t;if(n)return void(yield n({content:e,defaultFileName:r}));let l=null!=i?i:globalThis.document;if(!l)throw Error("Report download requires a document context.");let A=null!=o?o:globalThis.URL;if(!(null==A?void 0:A.createObjectURL)||!(null==A?void 0:A.revokeObjectURL))throw Error("Report download requires URL.createObjectURL support.");let c=(null!=a?a:(e,t)=>new Blob(e,t))([e],{type:"text/html"}),u=A.createObjectURL(c),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))(()=>{A.revokeObjectURL(u)})}},function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){lw(o,n,i,a,s,"next",e)}function s(e){lw(o,n,i,a,s,"throw",e)}a(void 0)})})())}catch(e){q(e,{title:"Failed to download report"})}})(),[null==e?void 0:e.onDownloadReport,null==e?void 0:e.reportFileContent]),P=(0,a.useMemo)(()=>j&&(j.title||j.subTitle)?{title:j.title,subTitle:j.subTitle}:null,[j]),[M,T]=(0,a.useState)(!1),[N,D]=(0,a.useState)(0),B=(0,a.useRef)(!1),[z,L]=(0,a.useState)(!0),F=(0,a.useRef)(null),K=(0,a.useCallback)(()=>{L(!0),F.current&&clearTimeout(F.current),M||(F.current=setTimeout(()=>L(!1),3e3))},[M]),U=(0,a.useCallback)(()=>{L(!0),F.current&&clearTimeout(F.current)},[]),Q=(0,a.useCallback)(()=>{F.current&&clearTimeout(F.current),M||(F.current=setTimeout(()=>L(!1),1e3))},[M]);(0,a.useEffect)(()=>{M&&(L(!0),F.current&&(clearTimeout(F.current),F.current=null))},[M]),(0,a.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,a.useRef)(null),J=(0,a.useCallback)(e=>{if(!v||!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));S.seekTo(Math.round(n*C))};r(e.clientX);let n=e=>r(e.clientX),i=()=>{t.removeEventListener("pointermove",n),t.removeEventListener("pointerup",i)};t.addEventListener("pointermove",n),t.addEventListener("pointerup",i)},[v,S,C]),[X,H]=(0,a.useState)(!1),G=(0,a.useCallback)(()=>{let e=b.current;e&&(document.fullscreenElement?document.exitFullscreen().then(()=>H(!1)):e.requestFullscreen().then(()=>H(!0)))},[]);(0,a.useEffect)(()=>{let e=()=>H(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let V=(0,a.useCallback)(()=>lK(function*(){if(v&&!B.current){B.current=!0,T(!0),D(0);try{var e,t;yield(e={autoZoom:A},t=e=>D(Math.round(100*e)),lD(function*(){if(lB)throw Error("Video export is already in progress");lB=!0;try{var r,n,i;yield(r=v,n=e,i=t,lD(function*(){var e;let{totalDurationInFrames:t,fps:o}=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=>lD(function*(){try{l.set(e,(yield lz(e)))}catch(e){}})()));let A=new Set([sd]);for(let e of r.scriptFrames)e.pointerImg&&A.add(e.pointerImg);let c=new Map;yield Promise.all([...A].map(e=>lD(function*(){try{c.set(e,(yield lz(e)))}catch(e){}})()));let u=null;try{u=yield lz(sp)}catch(e){}let d=document.createElement("canvas");d.width=960,d.height=540;let p=d.getContext("2d"),h=d.captureStream(o),f=new MediaRecorder(h,{mimeType:"video/webm"}),g=[];return f.ondataavailable=e=>{e.data.size>0&&g.push(e.data)},new Promise((e,n)=>{let s=null,A=!1,d=0,m=performance.now(),y=m,v=null,b=null,w=1e3/o,E=()=>{v&&clearTimeout(v),b&&clearTimeout(b),document.removeEventListener("visibilitychange",k),h.getTracks().forEach(e=>e.stop())},x=e=>{A||s||(s=e,"inactive"!==f.state?f.stop():(E(),A=!0,n(e)))},k=()=>{document.hidden&&x(Error("Video export was interrupted because the report tab was hidden"))};f.onerror=()=>{x(Error("MediaRecorder error"))},f.onstop=()=>{if(E(),A)return;if(A=!0,s)return void n(s);if(0===g.length)return void n(Error("No video data"));let t=new Blob(g,{type:"video/webm"}),r=URL.createObjectURL(t),i=document.createElement("a");i.href=r,i.download="midscene_replay.webm",i.click(),setTimeout(()=>URL.revokeObjectURL(r),1e3),e()},document.addEventListener("visibilitychange",k),f.start();let S=e=>{if(!A&&"inactive"!==f.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,i,o,a){var s,l,A,c,u,d,p,h,f,g,m,y,v,b,w,E,x;let k,{scriptFrames:S,imageWidth:C,imageHeight:I,fps:j}=r,O=lI(S,t,C,I,j);if(!O.img)return;let{img:P,prevImg:R,imageWidth:M,imageHeight:T,camera:N,prevCamera:D,pointerMoved:B,imageChanged:z,rawProgress:L,frameInScript:F,spinning:K,spinningElapsedMs:U,currentPointerImg:Q,pointerVisible:Z,insights:J}=O,X=a?B?Math.min(L/.375,1):L:1,{camLeft:H,camTop:q,camWidth:G}=(h=D,f=N,g=M,m=B?L<=.375?0:Math.min((L-.375)/.625,1):L,a?{camLeft:(y=h.left,v=f.left,y+(v-y)*m),camTop:(b=h.top,w=f.top,b+(w-b)*m),camWidth:(E=h.width,x=f.width,E+(x-E)*m)}:{camLeft:0,camTop:0,camWidth:g}),V=(l=D.pointerLeft,A=N.pointerLeft,l+(A-l)*X),W=(c=D.pointerTop,u=N.pointerTop,c+(u-c)*X),Y=M/G,{offsetX:_,offsetY:$,contentWidth:ee,contentHeight:et}=lj(960,540,M,T),er=-(ee/M*H),en=-(et/T*q),ei=z?Math.min(Math.max(F/10,0),1):1;e.fillStyle="#000",e.fillRect(0,0,960,540);let eo=(t,r)=>{let i=n.get(t);i&&!(r<=0)&&(e.save(),e.globalAlpha=r,e.beginPath(),e.rect(0,0,960,540),e.clip(),e.translate(_+er*Y,$+en*Y),e.scale(Y,Y),e.drawImage(i,0,0,ee,et),e.restore())};z&&R&&ei<1&&eo(R,1-ei),eo(P,z?ei:1),J.length>0&&function(e,t,r,n){for(let i of(e.save(),e.beginPath(),e.rect(n.offsetX,n.offsetY,n.contentWidth,n.contentHeight),e.clip(),t))if(!(i.alpha<=0)){if(e.save(),e.globalAlpha*=i.alpha,i.highlightElement){let t=lL(sf(i.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(i.searchArea){let t=lL(i.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,J,{zoom:Y,tx:er,ty:en},{offsetX:_,offsetY:$,contentWidth:ee,contentHeight:et,imageWidth:M,imageHeight:T});let ea=T/M*G,es=_+(V-H)/G*ee,el=$+(W-q)/ea*et,eA=(lO(ee,"contentWidth"),lP(lR(M).scale*(ee/M))),ec=lM(eA),eu=null!=(s=i.get(Q))?s:i.get(sd),ed=lC(Z,N,D,M,T);K&&o&&(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}({},eA),p=p={width:ec.size,height:ec.size,centerOffsetX:ec.centerOffset,centerOffsetY:ec.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(U/500-Math.PI/2)+1)/2*Math.PI*2,e.save(),e.translate(es,el),e.rotate(k),e.drawImage(o,-d.centerOffsetX,-d.centerOffsetY,d.width,d.height),e.restore()),!K&&ed&&eu&&e.drawImage(eu,es-eA.hotspotX,el-eA.hotspotY,eA.width,eA.height)}(p,d,r,l,c,u,a),null==i||i((d+1)/t),(d+=1)<t?(m+=w,b=setTimeout(()=>{requestAnimationFrame(S)},Math.max(0,m-performance.now()))):v=setTimeout(()=>{"inactive"!==f.state&&f.stop()},2*w)}};requestAnimationFrame(e=>{y=e,m=e,S(e)})})})())}finally{lB=!1}})()),l.success("Video exported")}catch(e){console.error("Export failed:",e),q(e,{title:"Video export failed"})}finally{B.current=!1,T(!1),D(0)}}})(),[A,v]),W=(0,a.useMemo)(()=>{if(!v||C<=0)return[];let e=[];for(let t of v.scriptFrames){if("img"!==t.type&&"insight"!==t.type||0===t.durationInFrames)continue;let r=t.startFrame,n=r/C*100;if(n>1&&n<99){let i=[t.title,t.subTitle].filter(Boolean);e.push({percent:n,title:i.length>0?i.join(": "):`Chapter ${e.length+1}`,frame:r})}}return e},[v,C]),Y=null!=(i=null==e?void 0:e.reportFileContent)?i:null,_=(null==e?void 0:e.canDownloadReport)!==!1;if(!y||0===y.length||!v)return Y&&_?(0,o.jsx)("div",{className:"player-container player-container-empty",children:(0,o.jsxs)("div",{className:"player-empty-state",children:[(0,o.jsx)("span",{className:"player-empty-text",children:"No replay available"}),(0,o.jsx)(g.Ay,{icon:(0,o.jsx)(ll.A,{}),onClick:()=>{O()},children:"Download report"})]})}):null;let $=(null==j?void 0:j.imageWidth)||v.imageWidth,ee=(null==j?void 0:j.imageHeight)||v.imageHeight,et=ee>$,er=C>0?Math.min(100,S.currentFrame/C*100):0;return(0,o.jsx)("div",{className:"player-container","data-fit-mode":null==e?void 0:e.fitMode,children:(0,o.jsxs)("div",{className:"canvas-container",ref:b,onMouseMove:K,onMouseEnter:U,onMouseLeave:Q,children:[(0,o.jsx)("div",{className:"player-wrapper","data-portrait":et?"":void 0,style:{aspectRatio:`${$}/${ee}`},children:(0,o.jsx)("div",{ref:w,style:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",overflow:"hidden"},onClick:I,children:(s=x.width>0&&x.height>0?Math.min(x.width/$,x.height/ee):1,(0,o.jsx)("div",{style:{width:$*s,height:ee*s,flexShrink:0,position:"relative",overflow:"hidden"},children:(0,o.jsx)("div",{style:{width:$,height:ee,transformOrigin:"0 0",transform:`scale(${s})`},children:(0,o.jsx)(lT,{frameMap:v,autoZoom:A&&S.playing,frame:S.currentFrame,width:$,height:ee,fps:v.fps})})}))})}),f&&P&&(0,o.jsxs)("div",{className:"player-subtitle",children:[P.title&&(0,o.jsx)("span",{className:"player-subtitle-badge",children:P.title}),P.subTitle&&(0,o.jsx)("span",{className:"player-subtitle-text",children:P.subTitle})]}),!(null==e?void 0:e.hideControls)&&(0,o.jsxs)("div",{className:`control-bar ${z?"":"hidden"}`,onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("div",{className:"status-icon",onClick:I,children:S.playing?(0,o.jsx)(lA.A,{}):(0,o.jsx)(lc.A,{})}),(0,o.jsxs)("span",{className:"time-display",children:[lU(Math.min(S.currentFrame,C),v.fps)," ","/ ",lU(C+1,v.fps)]}),(0,o.jsxs)("div",{className:"seek-bar-track",ref:Z,onPointerDown:J,children:[(0,o.jsx)("div",{className:"seek-bar-fill",style:{width:`${er}%`}}),(0,o.jsx)("div",{className:"seek-bar-knob",style:{left:`${er}%`}}),W.map(e=>(0,o.jsx)(h.A,{title:e.title,overlayClassName:"chapter-tooltip",children:(0,o.jsx)("div",{className:"chapter-marker",style:{left:`${e.percent}%`},onClick:t=>{t.stopPropagation(),S.seekTo(e.frame)}})},e.percent))]}),(0,o.jsxs)("div",{className:"player-custom-controls",children:[Y&&_?(0,o.jsx)(h.A,{title:"Download Report",children:(0,o.jsx)("div",{className:"status-icon",onClick:()=>{O()},children:(0,o.jsx)(ll.A,{})})}):null,(0,o.jsx)(lg.A,{trigger:["hover","click"],placement:"topRight",overlayStyle:{minWidth:"148px"},dropdownRender:()=>(0,o.jsxs)("div",{className:"player-settings-dropdown",children:[(0,o.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px",borderRadius:"4px",cursor:M?"not-allowed":"pointer",opacity:M?.5:1},onClick:M?void 0:V,children:[(0,o.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:M?(0,o.jsx)(lm.A,{type:"circle",percent:N,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,o.jsx)(lu.A,{style:{width:"16px",height:"16px"}})}),(0,o.jsx)("span",{className:"player-export-label",children:M?`Exporting ${N}%`:"Export video"})]}),(0,o.jsx)("div",{className:"player-settings-divider"}),(0,o.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,o.jsx)(lv,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,o.jsx)(ly.A,{size:"small",checked:A,onChange:e=>c(e)})]}),(0,o.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,o.jsx)(ld.A,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,o.jsx)(ly.A,{size:"small",checked:f,onChange:e=>m(e)})]}),(0,o.jsx)("div",{className:"player-settings-divider"}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px"},children:[(0,o.jsx)(lp.A,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px"},children:"Playback speed"})]}),[.5,1,1.5,2].map(e=>(0,o.jsxs)("div",{onClick:()=>d(e),style:{height:"32px",lineHeight:"32px",padding:"0 8px 0 28px",fontSize:"14px",cursor:"pointer",borderRadius:"4px"},className:`player-speed-option${u===e?" active":""}`,children:[e,"x"]},e))]}),menu:{items:[]},children:(0,o.jsx)("div",{className:"status-icon",children:(0,o.jsx)(lb,{style:{width:"16px",height:"16px"}})})}),(0,o.jsx)("div",{className:"status-icon",onClick:G,children:X?(0,o.jsx)(lh.A,{}):(0,o.jsx)(lf.A,{})})]})]})]})})}let lZ=e=>{let{result:t,loading:r,serverValid:n,serviceMode:i,replayScriptsInfo:a,replayCounter:s,loadingProgressText:l,verticalMode:A=!1,notReadyMessage:c,fitMode:u,autoZoom:d,actionType:p,canDownloadReport:h,onDownloadReport:f}=e,g="result-wrapper";A&&(g+=" vertical-mode-result"),a&&A&&(g+=" result-wrapper-compact");let m=ln,y=p&&i2.includes(p);if(n||"Server"!==i)if(r)m=(0,o.jsxs)("div",{className:"loading-container",children:[(0,o.jsx)(en.A,{spinning:r,indicator:(0,o.jsx)(sn.A,{spin:!0})}),(0,o.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,o.jsx)(le,{text:l,speed:3})})]});else if(null==t?void 0:t.error){let e=(0,o.jsx)("pre",{style:{color:"#ff4d4f",whiteSpace:"pre-wrap"},children:null==t?void 0:t.error});m=t.reportHTML||a?(0,o.jsxs)("div",{className:"combined-result-layout",children:[(0,o.jsxs)("div",{style:{flex:"0 0 auto",maxHeight:"40%",overflow:"auto"},children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Error:"}),e]}),(0,o.jsxs)("div",{className:"combined-result-section",children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,o.jsx)("div",{className:"combined-result-player",children:(0,o.jsx)(lQ,{replayScripts:null==a?void 0:a.scripts,imageWidth:null==a?void 0:a.width,imageHeight:null==a?void 0:a.height,reportFileContent:t.reportHTML||null,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f},s)})]})]}):e}else if(y&&(null==t?void 0:t.result)!==void 0&&a){let e="string"==typeof(null==t?void 0:t.result)?(0,o.jsx)("pre",{children:null==t?void 0:t.result}):(0,o.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}),r=(null==t?void 0:t.reportHTML)||null;m=(0,o.jsxs)("div",{className:"combined-result-layout",children:[(0,o.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,o.jsxs)("div",{className:"combined-result-section",children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,o.jsx)("div",{className:"combined-result-player",children:(0,o.jsx)(lQ,{replayScripts:a.scripts,imageWidth:a.width,imageHeight:a.height,reportFileContent:r,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f},s)})]})]})}else if(a){let e=(null==t?void 0:t.reportHTML)||null;m=(0,o.jsx)(lQ,{replayScripts:a.scripts,imageWidth:a.width,imageHeight:a.height,reportFileContent:e,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f},s)}else if(y&&(null==t?void 0:t.result)!==void 0&&(null==t?void 0:t.reportHTML)){let e="string"==typeof(null==t?void 0:t.result)?(0,o.jsx)("pre",{children:null==t?void 0:t.result}):(0,o.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)});m=(0,o.jsxs)("div",{className:"combined-result-layout",children:[(0,o.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,o.jsxs)("div",{className:"combined-result-section",children:[(0,o.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,o.jsx)("div",{className:"combined-result-player",children:(0,o.jsx)(lQ,{reportFileContent:t.reportHTML,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f},s)})]})]})}else y&&(null==t?void 0:t.result)!==void 0?m="string"==typeof(null==t?void 0:t.result)?(0,o.jsx)("pre",{children:null==t?void 0:t.result}):(0,o.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}):(null==t?void 0:t.reportHTML)?m=(0,o.jsx)(lQ,{reportFileContent:t.reportHTML,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f},s):(null==t?void 0:t.result)!==void 0&&(m="string"==typeof(null==t?void 0:t.result)?(0,o.jsx)("pre",{children:null==t?void 0:t.result}):(0,o.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}));else m=lr(c);return(0,o.jsx)("div",{className:g,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:m})},lJ=e=>{var t,r;return(0,o.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,o.jsx)("rect",{width:20,height:20,fill:"#2B83FF",rx:10}),(0,o.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 lX(){return(0,a.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,a.createElement)("path",{d:"M3 7.99984L6.33333 11.3332L13 4.6665",stroke:"#188F4D",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"}))}let lH="ZodOptional",lq="ZodDefault",lG="ZodNullable",lV="ZodObject",lW="midscene_location_field_flag",lY=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),l_=e=>{var t,r,n;if((null==(t=e._def)?void 0:t.typeName)===lV){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&&lW in 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"string"==typeof t&&t.toLowerCase().includes("input field")}return!1},l$=e=>{var t,r,n,i,o;let a=e,s=!1,l=!1;for(;(null==(t=a._def)?void 0:t.typeName)===lH||(null==(r=a._def)?void 0:r.typeName)===lq||(null==(n=a._def)?void 0:n.typeName)===lG;)(null==(i=a._def)?void 0:i.typeName)===lH&&(s=!0),(null==(o=a._def)?void 0:o.typeName)===lq&&(l=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:l}},l0=(e,t)=>{var r,n;if(!(null==e?void 0:e.length)||!t)return null;let i=e.find(e=>e.interfaceAlias===t||e.name===t);if(!(null==i?void 0:i.paramSchema)||!lY(i.paramSchema))return null;let o=i.paramSchema.shape||{},a=Object.keys(o);if(1!==a.length)return null;let[s]=a,{actualField:l}=l$(o[s]),A=l_(l);if(!("ZodString"===(null==(r=l._def)?void 0:r.typeName)||A))return null;let c=(null==(n=l._def)?void 0:n.description)||l.description||(A?"Describe the element you want to interact with":`Enter ${s}`);return{name:s,placeholder:c}};var l1=r(8460),l2=r(3896),l3=r(3246),l5=r(1631),l4=r(4665);let l7=e=>{var t,r;return(0,o.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,o.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))},l8=e=>{var t,r;return(0,o.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,o.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,o.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 l6={};l6.d=(e,t)=>{for(var r in t)l6.o(t,r)&&!l6.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l6.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l6.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var l9={};function Ae(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}l6.r(l9),l6.d(l9,{create:()=>v.vt});let{create:At}=l9,Ar="midscene-prompt-history-v2",An="midscene-last-selected-type",Ai=At((e,t)=>{let r;return{history:(r=localStorage.getItem(Ar))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(An)||"aiAct",clearHistory:r=>{let n=Ae({},t().history);delete n[r],e({history:n}),localStorage.setItem(Ar,JSON.stringify(n))},addHistory:r=>{var n,i;let{type:o}=r,a=t().history,s=a[o]||[],l=JSON.stringify({prompt:r.prompt,params:r.params}),A=[r,...s.filter(e=>JSON.stringify({prompt:e.prompt,params:e.params})!==l)];A.length>10&&(A.length=10);let c=(n=Ae({},a),i=i={[o]:A},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);e({history:c}),localStorage.setItem(Ar,JSON.stringify(c))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(An,t)}}}),Ao=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 Aa(e){return{supportsImeStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function As(e){return Object.values(Aa(e)).some(Boolean)}var Al=r(6356);let AA=e=>{var t,r;return(0,o.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,o.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))},Ac=e=>{let t,{showDeepLocateOption:r=!1,showDeepThinkOption:n=!1,enableTracking:i=!1,showDataExtractionOptions:a=!1,hideDomAndScreenshotOptions:s=!1,deviceType:l,trigger:A,popupPlacement:c="bottomRight"}=e,u=X(e=>e.forceSameTabNavigation),d=X(e=>e.setForceSameTabNavigation),p=X(e=>e.deepLocate),f=X(e=>e.setDeepLocate),g=X(e=>e.deepThink),m=X(e=>e.setDeepThink),y=X(e=>e.screenshotIncluded),v=X(e=>e.setScreenshotIncluded),b=X(e=>e.domIncluded),w=X(e=>e.setDomIncluded),E=X(e=>e.imeStrategy),x=X(e=>e.setImeStrategy),k=X(e=>e.autoDismissKeyboard),S=X(e=>e.setAutoDismissKeyboard),C=X(e=>e.keyboardDismissStrategy),I=X(e=>e.setKeyboardDismissStrategy),j=X(e=>e.alwaysRefreshScreenInfo),O=X(e=>e.setAlwaysRefreshScreenInfo),P=Aa(l),R=As(l);if(!i&&!r&&!n&&!a&&!R)return null;let M=(t=[],i&&t.push({label:(0,o.jsx)(Al.A,{onChange:e=>d(e.target.checked),checked:u,children:"Limit popup to current tab"}),key:"track-config"}),r&&t.push({label:(0,o.jsx)(Al.A,{onChange:e=>{f(e.target.checked)},checked:p,children:"Deep Locate"}),key:"deep-locate-config"}),n&&t.push({label:(0,o.jsxs)("div",{style:{padding:"4px 0"},children:[(0,o.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Deep Think"}),(0,o.jsxs)(l4.A.Group,{size:"small",value:g,onChange:e=>m(e.target.value),children:[(0,o.jsx)(h.A,{title:"Controlled by MIDSCENE_MODEL_REASONING_ENABLED env variable",children:(0,o.jsx)(l4.A,{value:"unset",children:"Auto"})}),(0,o.jsx)(l4.A,{value:!0,children:"On"}),(0,o.jsx)(l4.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),a&&!s&&(t.push({label:(0,o.jsx)(Al.A,{onChange:e=>{v(e.target.checked)},checked:y,children:"Include screenshot in request"}),key:"screenshot-included-config"}),t.push({label:(0,o.jsxs)("div",{style:{padding:"4px 0"},children:[(0,o.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Include DOM info in request"}),(0,o.jsxs)(l4.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,o.jsx)(l4.A,{value:!1,children:"Off"}),(0,o.jsx)(l4.A,{value:!0,children:"All"}),(0,o.jsx)(l4.A,{value:"visible-only",children:"Visible only"})]})]}),key:"dom-included-config"})),P.supportsImeStrategy&&(t.push({label:(0,o.jsxs)("div",{style:{padding:"4px 0"},children:[(0,o.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"IME strategy"}),(0,o.jsxs)(l4.A.Group,{size:"small",value:E,onChange:e=>x(e.target.value),children:[(0,o.jsx)(l4.A,{value:"always-yadb",children:"Always YADB"}),(0,o.jsx)(l4.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),P.supportsAutoDismissKeyboard&&t.push({label:(0,o.jsx)(Al.A,{onChange:e=>S(e.target.checked),checked:k,children:ss}),key:"auto-dismiss-keyboard-config"}),P.supportsKeyboardDismissStrategy&&t.push({label:(0,o.jsxs)("div",{style:{padding:"4px 0"},children:[(0,o.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Keyboard dismiss strategy"}),(0,o.jsxs)(l4.A.Group,{size:"small",value:C,onChange:e=>I(e.target.value),children:[(0,o.jsx)(l4.A,{value:"esc-first",children:"ESC first"}),(0,o.jsx)(l4.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),P.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,o.jsx)(Al.A,{onChange:e=>O(e.target.checked),checked:j,children:"Always refresh screen info"}),key:"always-refresh-screen-info-config"})),!P.supportsImeStrategy&&P.supportsAutoDismissKeyboard&&t.push({label:(0,o.jsx)(Al.A,{onChange:e=>S(e.target.checked),checked:k,children:ss}),key:"auto-dismiss-keyboard-config"}),t),T=null!=A?A:(0,o.jsx)("button",{"aria-label":"Open run configuration",className:"selector-trigger-button",type:"button",children:(0,o.jsx)(AA,{width:24,height:24})});return(0,o.jsx)("div",{className:"selector-trigger",children:(0,o.jsx)(lg.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:M},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:c,trigger:["click"],children:T})})};var Au=r(7991),Ad=r(2752);let{TextArea:Ap}=m.A,Ah=(e,t)=>`${e}${t?" (Optional)":""}`,Af=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=a||`Enter ${t}`;return(0,o.jsx)(aX.A.Item,{name:["params",t],label:Ah(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(m.A,{placeholder:s})},t)},Ag=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=a||`Describe the ${t}, use natural language`;return(0,o.jsx)(aX.A.Item,{name:["params",t],label:Ah(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(Ap,{rows:2,placeholder:s})},t)},Am=e=>{var t;let{name:r,label:n,fieldSchema:i,isRequired:a,marginBottom:s,placeholder:l}=e,A=((null==(t=i._def)?void 0:t.values)||[]).map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)}));return(0,o.jsx)(aX.A.Item,{name:["params",r],label:n,rules:a?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:s},colon:!1,children:(0,o.jsx)(Au.A,{placeholder:l||`Select ${r}`,options:A})},r)},Ay=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=500*("distance"===t),l=a&&Number(a)||s,A="distance"===t?1e4:void 0;return(0,o.jsx)(aX.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:i},colon:!1,children:(0,o.jsx)(Ad.A,{placeholder:l.toString(),min:0,max:A,step:"distance"===t?10:1,style:{width:"100%"}})},t)},Av=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e;return(0,o.jsx)(aX.A.Item,{name:["params",t],label:Ah(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(Au.A,{placeholder:a||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var Ab=r(316);let Aw=e=>{var t,r;return(0,o.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,o.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))},AE=e=>{var t,r;return(0,o.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,o.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,o.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))},Ax=e=>{var t,r;return(0,o.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,o.jsxs)("g",{stroke:"currentColor",strokeLinejoin:"round",strokeOpacity:.65,strokeWidth:1.5,clipPath:"url(#magnifying-glass_svg__a)",children:[(0,o.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,o.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,o.jsx)("defs",{children:(0,o.jsx)("clipPath",{id:"magnifying-glass_svg__a",children:(0,o.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:Ak}=u.A,AS=e=>{let{onSelect:t,history:r,currentType:n,trigger:i,popupPlacement:s="bottom",title:l="History",showClear:A=!0,onClear:c,searchPlaceholder:u="Search",emptyText:d="No history record",noMatchText:p="No matching history record",renderItemActions:h,renderItemLabel:f,overlayClassName:y,popupWidth:v=320,popupHeight:b=400,portalContainerSelector:w}=e,[E,x]=(0,a.useState)(!1),[k,S]=(0,a.useState)(""),[C,I]=(0,a.useState)(0),j=Ai(e=>e.clearHistory),O=(0,a.useRef)(null),P=(0,a.useRef)(null),[R,M]=(0,a.useState)(null),[T,N]=(0,a.useState)(null),[D,B]=(0,a.useState)(!1),z=(0,a.useMemo)(()=>{let e=Date.now(),t=e-6048e5,n=e-31536e6,i=r.filter(e=>e.prompt.toLowerCase().includes(k.toLowerCase()));return{recent7Days:i.filter(e=>e.timestamp>=t),recent1Year:i.filter(e=>e.timestamp<t&&e.timestamp>=n),older:i.filter(e=>e.timestamp<n)}},[r,k]),L=()=>{x(!1)};(0,a.useEffect)(()=>{if(!E)return;let e=()=>{var e,t;if(!P.current)return;let r=P.current.getBoundingClientRect(),n=w?P.current.closest(w):null,i=null==n?void 0:n.getBoundingClientRect(),o=null!=(e=null==i?void 0:i.width)?e:window.innerWidth,a=null!=(t=null==i?void 0:i.height)?t:window.innerHeight,l=i?r.right-i.left:r.right,A=i?r.top-i.top:r.top,c=i?r.bottom-i.top:r.bottom,u=Math.max(16,o-v-16),d=Math.max(16,a-b-16);M({left:Math.min(Math.max(16,l-v),u),top:Math.min(Math.max(16,"top"===s?A-b-8:c+8),d)}),N(null!=n?n:document.body),B(!!n)},t=e=>{O.current&&!O.current.contains(e.target)&&P.current&&!P.current.contains(e.target)&&x(!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)}},[E,b,s,v,w]);let F=(e,r)=>0===r.length?null:(0,o.jsxs)("div",{className:"history-group",children:[(0,o.jsx)("div",{className:"history-group-title",children:e}),r.map((e,r)=>(0,o.jsxs)("div",{className:"history-item",onClick:()=>{t(e),x(!1)},children:[(0,o.jsx)("span",{className:"history-item-label",children:f?f(e,{close:L}):e.prompt}),h?(0,o.jsx)("span",{className:"history-item-actions",onClick:e=>e.stopPropagation(),children:h(e,{close:L,scrollVersion:C})}):null]},`${e.timestamp}-${r}`))]},e);return(0,o.jsxs)("div",{className:"history-selector-wrapper",children:[(0,o.jsx)("div",{className:"selector-trigger",onClick:()=>x(e=>!e),ref:P,children:null!=i?i:(0,o.jsx)(AE,{width:24,height:24})}),E&&R&&T&&(0,Ab.createPortal)((0,o.jsx)("div",{className:y?`history-modal-overlay ${y}${D?" history-modal-overlay-in-container":""}`:`history-modal-overlay${D?" history-modal-overlay-in-container":""}`,ref:O,style:R,children:(0,o.jsxs)("div",{className:"history-modal-container",children:[(0,o.jsxs)("div",{className:"history-modal-header",children:[(0,o.jsxs)(Ak,{strong:!0,style:{fontSize:"16px"},children:[l," (",r.length,")"]}),(0,o.jsx)(g.Ay,{size:"small",type:"text",icon:(0,o.jsx)(Aw,{width:16,height:16}),onClick:()=>x(!1),className:"close-button"})]}),(0,o.jsx)("div",{className:"history-search-section",children:(0,o.jsxs)("div",{className:"search-input-wrapper",children:[(0,o.jsx)(m.A,{placeholder:u,value:k,onChange:e=>S(e.target.value),prefix:(0,o.jsx)(Ax,{width:18,height:18}),className:"search-input",allowClear:!0}),A?(0,o.jsx)(g.Ay,{type:"link",onClick:()=>{c?c():j(n),S(""),x(!1)},className:"clear-button",disabled:0===r.length,children:"Clear"}):null]})}),(0,o.jsx)("div",{className:"history-content",onScroll:()=>{I(e=>e+1)},children:0===r.length?(0,o.jsx)("div",{className:"no-results",children:(0,o.jsx)(Ak,{type:"secondary",children:d})}):(0,o.jsxs)(o.Fragment,{children:[F("Last 7 days",z.recent7Days),F("Last 1 year",z.recent1Year),F("Earlier",z.older),k&&0===z.recent7Days.length&&0===z.recent1Year.length&&0===z.older.length&&(0,o.jsx)("div",{className:"no-results",children:(0,o.jsx)(Ak,{type:"secondary",children:p})})]})})]})}),T)]})};function AC(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:AI}=m.A,Aj=e=>{var t,r,n,i,s,l,A;let{runButtonEnabled:c,form:u,serviceMode:d,selectedType:p,dryMode:f,stoppable:y,loading:v,onRun:b,onStop:w,clearPromptAfterRun:E=!0,actionSpace:x,hideDomAndScreenshotOptions:k=!1,deviceType:S,chrome:C}=e,[I,j]=(0,a.useState)(!1),[O,P]=(0,a.useState)(""),R="aiQuery"===p?"What do you want to query?":"aiAssert"===p?"What do you want to assert?":"aiTap"===p?"What element do you want to tap?":"aiDoubleClick"===p?"What element do you want to double-click?":"aiHover"===p?"What element do you want to hover over?":"aiInput"===p?"Format: <value> | <element>\nExample: hello world | search box":"aiRightClick"===p?"What element do you want to right-click?":"aiKeyboardPress"===p?"Format: <key> | <element (optional)>\nExample: Enter | text field":"aiScroll"===p?"Format: <direction> <amount> | <element (optional)>\nExample: down 500 | main content":"aiLocate"===p?"What element do you want to locate?":"aiBoolean"===p?"What do you want to check (returns true/false)?":"aiNumber"===p?"What number do you want to extract?":"aiString"===p?"What text do you want to extract?":"aiAsk"===p?"What do you want to ask?":"aiWaitFor"===p?"What condition do you want to wait for?":"What do you want to do?",M=(null==C?void 0:C.variant)==="minimal",T=(null==C?void 0:C.placeholder)||R,N=(A=null==C?void 0:C.primaryActionLabel)?A:Ao(p)||"Action",D=(0,a.useRef)(null),B=(0,a.useRef)(null),z=aX.A.useWatch("params",u),L=(0,a.useRef)(null),F=Ai(e=>e.history),K=Ai(e=>e.lastSelectedType),U=Ai(e=>e.addHistory),Q=Ai(e=>e.setLastSelectedType),Z=(0,a.useMemo)(()=>F[p]||[],[F,p]),{markExplicitSelection:J,skipNextRestore:X,shouldSkipRestoreOnce:H}=function(e){let{enabled:t,form:r,selectedType:n,onAfterReset:i,defaultType:o="aiAct"}=e,[s,l]=(0,a.useState)(!1),A=(0,a.useRef)(!1);(0,a.useEffect)(()=>{t&&!s&&n&&n!==o&&(A.current=!1,r.setFieldsValue({type:o,prompt:"",params:{}}),null==i||i())},[t,s,n,o,r,i]);let c=(0,a.useCallback)(()=>{t&&l(!0)},[t]),u=(0,a.useCallback)(()=>{A.current=!0},[]),d=(0,a.useCallback)(()=>!!A.current&&(A.current=!1,!0),[]);return(0,a.useMemo)(()=>({markExplicitSelection:c,skipNextRestore:u,shouldSkipRestoreOnce:d}),[c,u,d])}({enabled:M,form:u,selectedType:p,onAfterReset:(0,a.useCallback)(()=>{L.current=null,P("")},[])}),q=(0,a.useMemo)(()=>{if(x){let e=x.find(e=>e.interfaceAlias===p||e.name===p);return!!(null==e?void 0:e.paramSchema)&&(!lY(e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0)}return!1},[p,x]),G=(0,a.useMemo)(()=>{if(x&&x.length>0){let e=x.find(e=>e.interfaceAlias===p||e.name===p);if(e){if(e.paramSchema&&lY(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{isOptional:r}=l$(t[e]);return!r})}return!!e.paramSchema}}return!0},[p,x]),V=(0,a.useMemo)(()=>["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert"].includes(p),[p]),W=(0,a.useMemo)(()=>{if("aiAct"===p||"aiLocate"===p)return!0;if(x){let e=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&lY(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{actualField:r}=l$(t[e]);return l_(r)})}}return!1},[p,x]),Y=(0,a.useMemo)(()=>"aiAct"===p,[p]),_=(0,a.useMemo)(()=>{let e="In-Browser-Extension"===d,t=V&&!k,r=As(S);return e||W||Y||t||r},[d,W,Y,V,k,S]),$=(0,a.useMemo)(()=>(e=>{let t=Object.keys(sl);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=sl[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)})(x),[x]),ee=(0,a.useMemo)(()=>$.filter(e=>!sA.includes(e)),[$]),et=(0,a.useCallback)(e=>{J(),u.setFieldValue("type",e)},[u,J]),er=(0,a.useMemo)(()=>[{key:"interaction-group",label:"Interaction APIs",match:e=>{var t;return(null==(t=sl[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=sl[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=sl[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!sl[e]}],[]),en=(0,a.useCallback)(e=>{var t;return{key:e,label:Ao(e),title:(null==(t=sl[e])?void 0:t.title)||"",onClick:()=>et(e)}},[et]),ei=(0,a.useMemo)(()=>{let e=[];for(let t of er){let r=ee.filter(t.match);0!==r.length&&e.push({key:t.key,type:"group",label:t.label,children:r.map(en)})}return e},[er,ee,en]),eo=(0,a.useMemo)(()=>{let e=sA.filter(e=>$.includes(e)),t=[];return e.length>0&&t.push({key:"primary-group",type:"group",label:"Primary APIs",children:e.map(en)}),t.push(...ei),{items:t}},[$,en,ei]),ea=(0,a.useMemo)(()=>({items:ei}),[ei]),es=(0,a.useCallback)(()=>{if(!q||!x)return{};let e=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&lY(e.paramSchema)){let t={},r=e.paramSchema.shape||{};return Object.keys(r).forEach(e=>{let n=(e=>{var t;let r=e;for(;null==(t=r._def)?void 0:t.innerType;){if(r._def.typeName===lq){if("function"==typeof r._def.defaultValue)return r._def.defaultValue();if(void 0!==r._def._serializedDefaultValue)return r._def._serializedDefaultValue}r=r._def.innerType}})(r[e]);void 0!==n&&(t[e]=n)}),t}return{}},[p,q,x]);(0,a.useEffect)(()=>{M||u.getFieldValue("type")||!K||u.setFieldValue("type",K)},[u,M,K]),(0,a.useEffect)(()=>{!M&&p&&p!==K&&Q(p)},[p,M,K,Q]);let el=(0,a.useCallback)(()=>{let e=B.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(),i=n.left-r.left+e.scrollLeft,o=n.width,a=r.width;e.scrollTo({left:Math.max(0,i-(a-o)/2),behavior:"smooth"})}},[]);(0,a.useEffect)(()=>{if(H())return;if(M){let e=es();u.setFieldsValue({prompt:"",params:e}),P(""),L.current=null;return}let e=Z[0];if(!e||!L.current||e.timestamp!==L.current.timestamp)if(e)u.setFieldsValue({type:e.type,prompt:e.prompt||"",params:e.params}),P(e.prompt||""),L.current=e;else{let e=es();u.setFieldsValue({prompt:"",params:e}),P(""),L.current=null}},[p,Z,u,es,M,H]),(0,a.useEffect)(()=>{let e=setTimeout(()=>{el()},100);return()=>clearTimeout(e)},[p,el]);let eA=aX.A.useWatch("prompt",u);(0,a.useEffect)(()=>{eA!==O&&P(eA||"")},[eA,O]);let ec=(0,a.useCallback)(e=>{J(),e.type!==p&&X(),u.setFieldsValue({prompt:e.prompt,type:e.type,params:e.params}),P(e.prompt)},[u,J,p,X]),eu=(0,a.useCallback)(e=>{P(e.target.value)},[]),ed=(0,a.useMemo)(()=>{if(!q||!x)return!1;let e=x.find(e=>e.interfaceAlias===p||e.name===p);return!!((null==e?void 0:e.paramSchema)&&lY(e.paramSchema))&&1===Object.keys(e.paramSchema.shape||{}).length},[p,q,x]),ep=(0,a.useMemo)(()=>M?l0(x,p):null,[x,M,p]),eh=(0,a.useMemo)(()=>((e,t,r,n,i,o)=>{if(!e)return!1;if(!(()=>{if(n){let e=n.find(e=>e.interfaceAlias===i||e.name===i);if(e){if(!e.paramSchema)return!1;if("object"==typeof e.paramSchema&&"shape"in e.paramSchema)return Object.keys(e.paramSchema.shape||{}).length>0}}return!0})())return!0;if(t){let e=r||{},t=null==n?void 0:n.find(e=>e.interfaceAlias===i||e.name===i);if((null==t?void 0:t.paramSchema)&&lY(t.paramSchema)){let r=t.paramSchema.shape||{};return Object.keys(r).every(t=>{let{isOptional:n}=l$(r[t]),i=e[t];return n||void 0!==i&&""!==i&&null!==i})}return!0}return o.trim().length>0})(c,!!q,z,x,p,O),[c,q,p,x,O,z]),ef=(0,a.useCallback)(()=>{let e=u.getFieldsValue(),t="";if(q&&e.params&&x){let r=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==r?void 0:r.paramSchema)&&lY(r.paramSchema)){let n="",i=[],o=r.paramSchema.shape||{};Object.keys(o).forEach(t=>{var r;let a=null==(r=e.params)?void 0:r[t];if(null!=a&&""!==a){let{actualField:e}=l$(o[t]);l_(e)?n=String(a):"distance"===t?i.push(`${a}`):i.push(String(a))}});let a=i.join(" ");t=n?`${n} - ${a}`:a}else t=e.prompt||""}else t=e.prompt||"";let r={type:e.type,prompt:t,params:e.params,timestamp:Date.now()};if(U(r),b(),E)if(L.current=r,P(""),q){let e=es();u.setFieldValue("params",e)}else u.setFieldValue("prompt","")},[u,U,b,q,p,E,x,es]),eg=(0,a.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eh?(ef(),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)},[ef,eh]),em=(0,a.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eh&&(ef(),e.preventDefault(),e.stopPropagation())},[ef,eh]),ey=(0,a.useCallback)(()=>{if(!q)return null;if(x){let e=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&lY(e.paramSchema)){let t=e.paramSchema.shape||{},r=Object.keys(t);if(1===r.length){let e=r[0],{actualField:n}=l$(t[e]),i=l_(n),a=(()=>{var t,r;if(null==(t=n._def)?void 0:t.description)return n._def.description;if(n.description)return n.description;if(x){let t=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==t?void 0:t.paramSchema)&&"object"==typeof t.paramSchema&&"shape"in t.paramSchema){let n=(t.paramSchema.shape||{})[e];if(null==n||null==(r=n._def)?void 0:r.description)return n._def.description;if(null==n?void 0:n.description)return n.description}}return i?"Describe the element you want to interact with":"keyName"===e?"Enter key name or text to type":"value"===e?"Enter text to input":`Enter ${e}`})();return(0,o.jsx)(aX.A.Item,{name:["params",e],style:{margin:0},children:(0,o.jsx)(m.A.TextArea,{className:"main-side-console-input-textarea",rows:3,placeholder:a,autoFocus:!0,onKeyDown:em})})}let n=[],i=r.sort((e,r)=>{let n=t[e],i=t[r],{isOptional:o}=l$(n),{isOptional:a}=l$(i);return!o&&a?-1:o&&!a?1:0});if(i.forEach((e,r)=>{var a,s,l;let{actualField:A,isOptional:c}=l$(t[e]),u=l_(A),d=e.charAt(0).toUpperCase()+e.slice(1),h=12*(r!==i.length-1),f=(()=>{var t,r;if(null==(t=A._def)?void 0:t.description)return A._def.description;if(A.description)return A.description;if(x){let t=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==t?void 0:t.paramSchema)&&"object"==typeof t.paramSchema&&"shape"in t.paramSchema){let n=(t.paramSchema.shape||{})[e];if(null==n||null==(r=n._def)?void 0:r.description)return n._def.description;if(null==n?void 0:n.description)return n.description}}if(u)return"Describe the element you want to interact with"})(),g={name:e,label:d,fieldSchema:A,isRequired:!c,marginBottom:h,placeholder:f};u?n.push((0,o.jsx)(Ag,AC({},g),e)):(null==(a=A._def)?void 0:a.typeName)==="ZodEnum"?n.push((0,o.jsx)(Am,AC({},g),e)):(null==(s=A._def)?void 0:s.typeName)==="ZodNumber"?n.push((0,o.jsx)(Ay,AC({},g),e)):(null==(l=A._def)?void 0:l.typeName)==="ZodBoolean"?n.push((0,o.jsx)(Av,AC({},g),e)):n.push((0,o.jsx)(Af,AC({},g),e))}),"aiScroll"===p){let e=n.find(e=>a.isValidElement(e)&&"direction"===e.props.name),t=n.find(e=>a.isValidElement(e)&&"distance"===e.props.name),r=n.filter(e=>a.isValidElement(e)&&"direction"!==e.props.name&&"distance"!==e.props.name);if(e&&t)return(0,o.jsxs)("div",{className:"structured-params",children:[(0,o.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:12},children:[e,t]}),r]})}return(0,o.jsx)("div",{className:"structured-params",children:n})}}return null},[p,q,x,em]),ev=(0,a.useCallback)(()=>{j(!0)},[]),eb=(0,a.useCallback)(()=>{j(!1)},[]),ew=(0,a.useCallback)(()=>{let e=e=>(0,o.jsx)(g.Ay,{type:"primary",icon:(0,o.jsx)(l1.A,{}),style:{borderRadius:20,zIndex:999},onClick:ef,disabled:!eh,loading:v,children:e});return f?"aiAct"===p?(0,o.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"):y?(0,o.jsx)(g.Ay,{icon:(0,o.jsx)(l2.A,{}),onClick:w,style:{borderRadius:20,zIndex:999},children:"Stop"}):e("Run")},[f,v,ef,w,eh,p,y]),eE=(0,a.useCallback)(()=>{let e=e=>(0,o.jsx)(g.Ay,{"aria-label":e,className:"minimal-run-trigger",type:"primary",icon:(0,o.jsx)(l3.A,{}),onClick:ef,disabled:!eh,loading:v});return f?"aiAct"===p?(0,o.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"):y?(0,o.jsx)(g.Ay,{"aria-label":"Stop running",className:"minimal-run-trigger minimal-run-trigger-stop",icon:(0,o.jsx)(l2.A,{}),onClick:w}):e("Run")},[f,v,ef,eh,w,p,y]),ex=G?q?ep?(0,o.jsx)(aX.A.Item,{name:["params",ep.name],style:{margin:0},children:(0,o.jsx)(AI,{className:"main-side-console-input-textarea",disabled:!c,rows:3,placeholder:"prompt"===ep.name?T:ep.placeholder,autoFocus:!0,onKeyDown:em})}):ed?ey():(0,o.jsx)("div",{className:"structured-params-container",children:ey()}):(0,o.jsx)(aX.A.Item,{name:"prompt",style:{margin:0},children:(0,o.jsx)(AI,{className:"main-side-console-input-textarea",disabled:!c,rows:3,placeholder:T,autoFocus:!0,onKeyDown:eg,onChange:eu,ref:D})}):(0,o.jsxs)("div",{className:"no-input-method",children:['Click "Run" to execute ',Ao(p)]}),ek=null!=(s=null==C||null==(t=C.icons)?void 0:t.action)?s:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAASdJREFUeAHtlt3NgjAUhg8/CVx+G8gGX5xAnUDdQMcgkIgJBLbQEXQD3MAR6gZewgXgOUn9iRp6vAC96JM07YG36Zv+nBZAwySO4ymWgUoXRdEfaYGJyRElSbKyLGuHJVdpHcc5khb7RMCAZcA0TU82PYZ8IPsoZ4ttoEu0ga8bMB6DNE1X8H6jTUBuLmQL7SxkLbDkzz/ruhZBEKxfDGRZNm2aZgc9UFXVLAzDPbVvS1AUxQGrE3SPwHK8BganBy7NBuTU+r5vKLSNbG5RuwQF+hRoA9rA76RifMl4+JjI4Z5yu0KUZTnE8c4U3GbAdd3/HgYnPNu2R9eg98uIvmOGfL2M2tCpWBv4BQPiqW7j9IGWZ4CODT7X5pRAVFrUjEn7eNQ0bVwAyWpjMDlJKpAAAAAASUVORK5CYII=",eS=null==C||null==(r=C.icons)?void 0:r.actionChevron,eC=null!=(l=null==C||null==(n=C.icons)?void 0:n.settings)?l:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg==",eI=null==C||null==(i=C.icons)?void 0:i.history;return M?(0,o.jsxs)("div",{className:"prompt-input-wrapper prompt-input-wrapper-minimal",children:[(0,o.jsx)(aX.A.Item,{hidden:!0,name:"type",style:{margin:0},children:(0,o.jsx)(m.A,{})}),(0,o.jsxs)("div",{className:`main-side-console-input minimal-main-side-console-input ${!c?"disabled":""} ${v?"loading":""}`,children:[ex,(0,o.jsxs)("div",{className:"minimal-toolbar-row",children:[(0,o.jsxs)("div",{className:"minimal-toolbar-left",children:[(0,o.jsx)(lg.A,{menu:eo,placement:"topLeft",trigger:["click"],disabled:!c,overlayClassName:"more-apis-dropdown",children:(0,o.jsxs)("button",{"aria-label":`Select action type (current: ${N})`,className:"minimal-action-trigger",disabled:!c,type:"button",children:[(0,o.jsx)("img",{alt:"",className:"minimal-action-icon",src:ek}),(0,o.jsx)("span",{className:"minimal-action-label",children:N}),eS?(0,o.jsx)("img",{alt:"",className:"minimal-action-chevron",src:eS}):(0,o.jsx)(l7,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,o.jsx)(AS,{onSelect:ec,history:Z,currentType:p,popupPlacement:"top",trigger:(0,o.jsx)("button",{"aria-label":"Open prompt history",className:"minimal-icon-trigger",type:"button",children:eI?(0,o.jsx)("img",{alt:"",className:"minimal-toolbar-icon minimal-toolbar-icon-history",src:eI}):(0,o.jsx)(l8,{"aria-hidden":"true",className:"minimal-toolbar-icon minimal-toolbar-icon-history",focusable:"false"})})}),_?(0,o.jsx)("div",{className:I?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ev,onMouseLeave:eb,children:(0,o.jsx)(Ac,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:V,hideDomAndScreenshotOptions:k,deviceType:S,popupPlacement:"topRight",trigger:(0,o.jsx)("button",{"aria-label":"Open run configuration",className:"minimal-icon-trigger",type:"button",children:(0,o.jsx)("img",{alt:"",className:"minimal-toolbar-icon",src:eC})})})}):null]}),(0,o.jsxs)("div",{className:"form-controller-wrapper",children:[null==C?void 0:C.inputActions,eE()]})]})]})]}):(0,o.jsxs)("div",{className:"prompt-input-wrapper",children:[(0,o.jsxs)("div",{className:"mode-radio-group-wrapper",children:[(0,o.jsxs)("div",{className:"mode-radio-group",ref:B,children:[(0,o.jsx)(aX.A.Item,{name:"type",style:{margin:0},children:(0,o.jsx)(l4.A.Group,{buttonStyle:"solid",disabled:!c,children:sA.map(e=>{var t;return(0,o.jsx)(h.A,{title:(null==(t=sl[e])?void 0:t.title)||"",children:(0,o.jsx)(l4.A.Button,{value:e,children:Ao(e)})},e)})})}),(0,o.jsx)(lg.A,{menu:ea,placement:"bottomLeft",trigger:["click"],disabled:!c,overlayClassName:"more-apis-dropdown",children:(0,o.jsxs)(g.Ay,{className:`more-apis-button ${!sA.includes(p)?"selected-from-dropdown":""}`,children:[p&&!sA.includes(p)?Ao(p):"more",(0,o.jsx)(l5.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,o.jsxs)("div",{className:"action-icons",children:[(0,o.jsx)(AS,{onSelect:ec,history:Z,currentType:p}),_&&(0,o.jsx)("div",{className:I?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ev,onMouseLeave:eb,children:(0,o.jsx)(Ac,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:V,hideDomAndScreenshotOptions:k,deviceType:S})})]})]}),(0,o.jsxs)("div",{className:`main-side-console-input ${!c?"disabled":""} ${v?"loading":""}`,children:[ex,(0,o.jsxs)("div",{className:"form-controller-wrapper",children:[null==C?void 0:C.inputActions,ew()]})]})]})};function AO(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function AP(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){AO(o,n,i,a,s,"next",e)}function s(e){AO(o,n,i,a,s,"throw",e)}a(void 0)})}}let{Text:AR}=u.A,AM=new Set;function AT(e){let{error:t}=e;if(!t)return null;let r=t.replace(/^(Error:\s*)+/,"Error: ");return(0,o.jsx)(y.A,{message:(0,o.jsx)("span",{style:{color:"#ff4d4f"},children:r}),type:"error",showIcon:!0})}function AN(e){var t,r,n;let{playgroundSDK:i,storage:s,contextProvider:l,config:A={},branding:c={},className:u="",dryMode:d=!1,showContextPreview:p=!0}=e,[h]=aX.A.useForm(),{config:f}=X(),[m,y]=(0,a.useState)(!1),v=(0,a.useRef)(null);(0,a.useEffect)(()=>{AP(function*(){if(i&&"function"==typeof i.checkStatus)try{yield i.checkStatus(),y(!0)}catch(e){console.warn("Failed to initialize SDK, using default namespace:",e),y(!0)}else y(!0)})()},[i]);let b=(0,a.useMemo)(()=>{if(!1===A.persistMessages)return null;if(s)return s;if(!m)return null;let e=A.storageNamespace||(i&&i.id&&"string"==typeof i.id?`agent-${i.id}`:"playground-default"),t=sY();return console.log(`Using ${t} storage for namespace: ${e}`),sW(t,e)},[s,m,A.storageNamespace,A.persistMessages,i]),{loading:w,setLoading:E,infoList:x,setInfoList:k,actionSpace:S,actionSpaceLoading:C,uiContextPreview:I,setUiContextPreview:j,showScrollToBottomButton:O,verticalMode:P,replayCounter:R,setReplayCounter:M,messagesInitialized:T,infoListRef:N,currentRunningIdRef:D,interruptedFlagRef:B,clearInfoList:z,handleScrollToBottom:L}=function(e,t,r,n){let i=!(arguments.length>4)||void 0===arguments[4]||arguments[4],[o,s]=(0,a.useState)(!1),[l,A]=(0,a.useState)([]),[c,u]=(0,a.useState)([]),[d,p]=(0,a.useState)(!0),[h,f]=(0,a.useState)(),[g,m]=(0,a.useState)(!1),[y,v]=(0,a.useState)(!0),b=(0,a.useRef)(0),[w,E]=(0,a.useState)(!1),[x,k]=(0,a.useState)(0),S=(0,a.useRef)(null),C=(0,a.useRef)(null),I=(0,a.useRef)({}),j=(0,a.useRef)(),[,O]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=!1,r=null!=t?t:null,o=t=>{e||A(t)};return j.current!==r&&(t||0===l.length)&&s$(function*(){let a=s1(s0({},sc(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield s$(function*(){if(!i)return[];let e=sW(sY(),"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)?o(e):o([a,...e])}catch(e){console.error("Failed to load messages:",e),o([a])}else o([a]);e||(j.current=r,O(e=>e+1))})(),()=>{e=!0}},[i,t]),(0,a.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,a.useEffect)(()=>{(null==r?void 0:r.getUIContext)&&!h&&r.getUIContext().then(e=>f(e)).catch(e=>{console.error("Failed to get UI context:",e)})},[r,h]),(0,a.useEffect)(()=>{s$(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)),i=yield e.getActionSpace(n);u(i||[])}catch(e){console.error("Failed to load action space:",e),u([])}finally{p(!1)}})()},[e,h,r]),(0,a.useEffect)(()=>{E(window.innerWidth<750);let e=()=>{E(window.innerWidth<750)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let P=(0,a.useCallback)(()=>{setTimeout(()=>{S.current&&(S.current.scrollTop=S.current.scrollHeight)},100)},[]),R=(0,a.useCallback)(()=>{if(S.current){let{scrollTop:e,scrollHeight:t,clientHeight:r}=S.current,n=e+r>=t-10;m(!n);let i=e<b.current;b.current=e,n?v(!0):i&&v(!1)}},[]),M=(0,a.useCallback)(()=>{S.current&&(S.current.scrollTo({top:S.current.scrollHeight,behavior:"smooth"}),m(!1),v(!0))},[]);(0,a.useEffect)(()=>{l.length>0&&y&&P()},[l,P,y]),(0,a.useEffect)(()=>{let e=S.current;if(e)return e.addEventListener("scroll",R),R(),()=>{e.removeEventListener("scroll",R)}},[R]);let T=(0,a.useCallback)(()=>s$(function*(){if(A([s1(s0({},sc(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,a.useCallback)(()=>s$(function*(){if(null==r?void 0:r.refreshContext)try{let e=yield r.refreshContext();f(e)}catch(e){console.error("Failed to refresh context:",e)}})(),[r]);return{loading:o,setLoading:s,infoList:l,setInfoList:A,messagesInitialized:j.current===(null!=t?t:null),actionSpace:c,actionSpaceLoading:d,uiContextPreview:h,setUiContextPreview:f,showScrollToBottomButton:g,verticalMode:w,replayCounter:x,setReplayCounter:k,infoListRef:S,currentRunningIdRef:C,interruptedFlagRef:I,clearInfoList:T,refreshContext:N,handleScrollToBottom:M,scrollToBottom:P}}(i,b,l,c.targetName,!1!==A.persistMessages&&!A.storageNamespace),{handleRun:F,handleStop:K,canStop:U}=function(e){let{playgroundSDK:t,storage:r,actionSpace:n,loading:i,setLoading:o,setInfoList:s,replayCounter:l,setReplayCounter:A,verticalMode:c,currentRunningIdRef:u,interruptedFlagRef:d,deviceType:p}=e,{deepLocate:h,deepThink:f,screenshotIncluded:g,domIncluded:m,imeStrategy:y,autoDismissKeyboard:v,keyboardDismissStrategy:b,alwaysRefreshScreenInfo:w}=X(),E=(0,a.useCallback)(function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return sk(function*(){if(!t)return void console.warn("PlaygroundSDK is not available");let i=Date.now(),a=e.type,E=n.displayContent||`${e.type}: ${e.prompt||JSON.stringify(e.params)}`,x={id:`user-${Date.now()}`,type:"user",content:E,timestamp:new Date};s(e=>[...e,x]),o(!0);let k=sS({},su),S={id:`system-${i}`,type:"system",content:"",timestamp:new Date,loading:!0,loadingProgressText:""};s(e=>[...e,S]);try{u.current=i,d.current[i]=!1,t.onDumpUpdate&&t.onDumpUpdate((e,t)=>{var r;if(d.current[i]||!(null==t||null==(r=t.tasks)?void 0:r.length))return;let n=t.tasks.map((e,t)=>{var r;let n,o;return{id:`progress-${i}-task-${t}`,type:"progress",content:(n=av(e),(o=ax(e))?`${n} - ${o}`:n),actionKind:av(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:sI(e.error),result:null}:void 0}});s(e=>{let t=e.findIndex(e=>e.id===`system-${i}`);if(-1===t)return e;let r=e.filter(e=>!("progress"===e.type&&e.id.startsWith(`progress-${i}-`)));return[...r.slice(0,t+1),...n,...r.slice(t+1)]})}),sO(a)||!0!==f||console.warn("[Playground] Non-aiAct action will be executed without deepThink. deepThink is only forwarded for aiAct and runMarkdown.",{actionType:a,requestId:i.toString()});let r="unset"===f?void 0:f,o=sS(sC(sS({requestId:i.toString(),deepLocate:h},sO(a)&&void 0!==r?{deepThink:r}:{}),{screenshotIncluded:g,domIncluded:m,deviceOptions:{imeStrategy:y,autoDismissKeyboard:v,keyboardDismissStrategy:b,alwaysRefreshScreenInfo:w}}),n.reportDisplay?{reportDisplay:n.reportDisplay}:{});if(k.result=yield t.executeAction(a,e,o),"object"==typeof k.result&&null!==k.result){let e=k.result;e.dump&&(k.dump=e.dump),e.reportHTML&&(k.reportHTML=e.reportHTML),e.error&&(k.error=sI(e.error)),"result"in e&&(k.result=e.result)}}catch(e){k.error=sI(e),console.error("Playground execution error:",e),"object"==typeof e&&null!==e&&(e.dump&&(k.dump=e.dump),e.reportHTML&&(k.reportHTML=e.reportHTML))}if(d.current[i])return;o(!1),u.current=null;let C=null,I=l;if(null==k?void 0:k.dump){let e=sj(k.dump,p);e&&(A(e=>e+1),C=e,I=l+1)}s(e=>e.map(e=>e.id===`system-${i}`?sC(sS({},e),{content:"",loading:!1,loadingProgressText:""}):e));let j={id:`result-${i}`,type:"result",content:"Execution result",timestamp:new Date,result:k,loading:!1,replayScriptsInfo:C,replayCounter:I,loadingProgressText:"",verticalMode:c,actionType:a};if(s(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)}let O={id:`separator-${i}`,type:"separator",content:"New Session",timestamp:new Date};s(e=>[...e,O])})()},[t,r,n,o,s,l,A,c,u,d,h,f,g,m,p,y,v,b,w]),x=(0,a.useCallback)(()=>sk(function*(){let e=u.current;if(e&&t&&t.cancelExecution)try{let r=yield t.cancelExecution(e.toString()),n=null;if(r)n=r;else if(t.getCurrentExecutionData)try{n=yield t.getCurrentExecutionData()}catch(e){console.error("Failed to get execution data before stop:",e)}if(d.current[e]=!0,o(!1),t.onProgressUpdate&&t.onProgressUpdate(()=>{}),t.onDumpUpdate&&t.onDumpUpdate(()=>{}),s(t=>t.map(t=>t.id===`system-${e}`?sC(sS({},t),{content:"",loading:!1,loadingProgressText:""}):t)),n&&(n.dump||n.reportHTML)){let t=null,r=l;(t=sj(n.dump,p))&&(A(e=>e+1),r=l+1);let i={id:`stop-result-${e}`,type:"result",content:"Execution stopped by user",timestamp:new Date,result:{result:null,dump:n.dump,reportHTML:n.reportHTML,error:null},loading:!1,verticalMode:c,replayScriptsInfo:t,replayCounter:r};s(e=>[...e,i])}else{let t={id:`stop-${e}`,type:"system",content:"Operation stopped",timestamp:new Date,loading:!1};s(e=>[...e,t])}let i={id:`separator-${e}`,type:"separator",content:"New Session",timestamp:new Date};s(e=>[...e,i])}catch(e){console.error("Failed to stop execution:",e)}})(),[t,u,d,o,s,c,l,p]);return{handleRun:E,handleStop:x,canStop:i&&!!u.current&&!!t&&!!t.cancelExecution}}({playgroundSDK:i,storage:b,actionSpace:S,loading:w,setLoading:E,setInfoList:k,replayCounter:R,setReplayCounter:M,verticalMode:P,currentRunningIdRef:D,interruptedFlagRef:B,deviceType:A.deviceType});(0,a.useEffect)(()=>{(null==i?void 0:i.overrideConfig)&&f&&i.overrideConfig(f).catch(e=>{console.error("Failed to override SDK config:",e),q(e,{title:"Failed to apply AI configuration"})})},[i,f]);let Q=(0,a.useCallback)(()=>AP(function*(){try{let e=h.getFieldsValue();yield F(e)}catch(e){q(e,{title:"Execution failed"})}})(),[h,F]);(0,a.useEffect)(()=>{let e=A.externalRunRequest;if(e&&function(e){let{request:t,handledRequestIds:r,lastRequestId:n,sdkReady:i,messagesInitialized:o}=e;return!!(t&&t.id!==n&&!(null==r?void 0:r.has(t.id))&&i&&o)}({request:e,handledRequestIds:AM,lastRequestId:v.current,sdkReady:m,messagesInitialized:T})){if(v.current=e.id,AM.add(e.id),AM.size>100){let e=AM.values().next().value;e&&AM.delete(e)}F(e.value,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}({displayContent:e.displayContent},e.reportDisplay?{reportDisplay:e.reportDisplay}:{})).catch(e=>{q(e,{title:"Execution failed"})})}},[A.externalRunRequest,F,T,m]);let Z=Object.keys(f||{}).length>=1,J=A.serverMode||!d&&!C&&Z,H=aX.A.useWatch("type",h)||sA["0"],G=(0,a.useMemo)(()=>i&&"function"==typeof i.getServiceMode?i.getServiceMode():"Server",[i]),V=p&&!1!==A.showContextPreview,W=A.layout||"vertical",Y=!1!==A.showVersionInfo,_=A.deviceType,$=null!=(t=A.executionFlow)?t:{},ee=!0===$.collapsible,et=null!=(r=$.label)?r:"Execution Flow",[er,en]=(0,a.useState)(()=>new Set),ei=(0,a.useCallback)(e=>{en(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),{firstInProgressGroup:eo,visibleInfoList:ea}=(0,a.useMemo)(()=>{let e=new Set,t=[],r=null,n=x.length>1;for(let i of x)if(!n||"welcome"!==i.id)if("progress"===i.type){if(null===r){r=i.id,e.add(i.id),t.push(i);continue}ee&&er.has(r)||t.push(i)}else r=null,t.push(i);return{firstInProgressGroup:e,visibleInfoList:t}},[er,ee,x]),es=(0,a.useMemo)(()=>{for(let e=x.length-1;e>=0;e--)if("progress"===x[e].type)return x[e].id;return null},[x]),el=void 0!==A.emptyState&&1===ea.length&&(null==(n=ea[0])?void 0:n.id)==="welcome",eA=(0,a.useMemo)(()=>el&&((e,t)=>{if(!(null==e?void 0:e.length)||!t||l0(e,t))return!1;let r=e.find(e=>e.interfaceAlias===t||e.name===t);return!!(null==r?void 0:r.paramSchema)&&!!lY(r.paramSchema)&&Object.keys(r.paramSchema.shape||{}).length>1})(S,H),[S,el,H]);(0,a.useEffect)(()=>{if(!eA)return;let e=()=>{let e=N.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 i=e.getBoundingClientRect(),o=r.getBoundingClientRect(),a=n.getBoundingClientRect(),s=function(e){let{currentScrollTop:t,maxScrollTop:r,containerTop:n,containerBottom:i,contentStartTop:o,contentEndBottom:a,topSafeMargin:s=24,bottomSafeMargin:l=24}=e;return Math.max(0,Math.round(Math.min(t+a-(i-l),t+o-(n+s),r)))}({currentScrollTop:e.scrollTop,maxScrollTop:Math.max(0,e.scrollHeight-e.clientHeight),containerTop:i.top,containerBottom:i.bottom,contentStartTop:o.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)}},[N,H,eA]);let ec=["playground-empty-state-wrapper",eA?"playground-empty-state-wrapper-offset-for-prompt":""].filter(Boolean).join(" ");return(0,o.jsx)("div",{className:`playground-container ${W}-mode ${u}`.trim(),children:(0,o.jsxs)(aX.A,{form:h,onFinish:Q,className:"command-form",initialValues:{type:sA["0"]},children:[V&&(0,o.jsx)("div",{className:"context-preview-section",children:(0,o.jsx)(lo,{uiContextPreview:I,setUiContextPreview:j,showContextPreview:V})}),(0,o.jsxs)("div",{className:"middle-dialog-area",children:[!1!==A.showClearButton&&x.length>1&&(0,o.jsx)("div",{className:"clear-button-container",children:(0,o.jsx)(g.Ay,{size:"small",icon:(0,o.jsx)(st.A,{}),onClick:z,type:"text",className:"clear-button"})}),(0,o.jsx)("div",{ref:N,className:"info-list-container",children:el?(0,o.jsx)("div",{className:ec,children:A.emptyState}):(0,o.jsx)(sa.A,{itemLayout:"vertical",dataSource:ea,renderItem:e=>{var t,r,n;let i,s,l,u,d,p,h,f=ee&&eo.has(e.id),g=f&&er.has(e.id);return(0,o.jsxs)(sa.A.Item,{className:"list-item",children:[f?(0,o.jsxs)("button",{type:"button",className:`progress-group-toggle ${er.has(e.id)?"is-collapsed":"is-expanded"}`,"aria-expanded":!er.has(e.id),onClick:()=>ei(e.id),children:[(0,o.jsx)("span",{className:"progress-group-toggle-label",children:et}),(0,o.jsx)(sr.A,{className:"progress-group-toggle-chevron"})]}):null,g?null:"user"===e.type?(0,o.jsx)("div",{className:"user-message-container",children:(0,o.jsx)("div",{className:"user-message-bubble",children:e.content})}):"progress"===e.type?(0,o.jsx)("div",{children:(s=null==(t=(i=e.content.split(" - "))[0])?void 0:t.trim(),l=i.slice(1).join(" - ").trim(),u=e.id===es,h="completed"==(p=(d=w&&u)?"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,a.createElement)(lX)}(e.actionKind,$.resolveActionIcon):null,(0,o.jsxs)("div",{className:"progress-row",children:[s?(0,o.jsx)("span",{className:`progress-status-icon ${p}`,children:"loading"===p?(0,o.jsx)(sn.A,{spin:!0}):"error"===p?"✗":null!==h?h:"✓"}):null,(0,o.jsxs)("div",{className:"progress-row-content",children:[s?(0,o.jsx)("span",{className:"progress-action-item",children:s}):null,l?(0,o.jsx)("div",{className:"progress-description-wrap",children:(0,o.jsx)(le,{text:l,className:"progress-description",disabled:!d})}):null,(null==(n=e.result)?void 0:n.error)&&(0,o.jsx)(AT,{error:e.result.error})]})]}))}):"separator"===e.type?(0,o.jsxs)("div",{className:"new-conversation-separator",children:[(0,o.jsx)("div",{className:"separator-line"}),(0,o.jsx)("div",{className:"separator-text-container",children:(0,o.jsx)(AR,{type:"secondary",className:"separator-text",children:e.content})})]}):(0,o.jsxs)("div",{className:"system-message-container",children:[!1!==A.showSystemMessageHeader&&(0,o.jsxs)("div",{className:"system-message-header",children:[(0,o.jsx)(si.A,{component:c.icon||lJ,style:{fontSize:20}}),(0,o.jsx)("span",{className:"system-message-title",children:c.title||"Playground"})]}),(e.content||e.result)&&(0,o.jsx)("div",{className:"system-message-content",children:"result"===e.type?(0,o.jsx)(lZ,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:G,replayScriptsInfo:e.replayScriptsInfo||null,replayCounter:e.replayCounter||0,loadingProgressText:e.loadingProgressText||"",verticalMode:e.verticalMode||!1,fitMode:"width",actionType:e.actionType,onDownloadReport:A.onDownloadReport}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"system-message-text",children:e.content}),e.loading&&e.loadingProgressText&&(0,o.jsx)("div",{className:"loading-progress-text",children:(0,o.jsx)("span",{children:e.loadingProgressText})})]})})]})]},e.id)}})}),O&&!1!==A.enableScrollToBottom&&(0,o.jsx)(g.Ay,{className:"scroll-to-bottom-button",type:"primary",shape:"circle",icon:(0,o.jsx)(so.A,{}),onClick:L,size:"large"})]}),(0,o.jsxs)("div",{className:"bottom-input-section",children:[A.showEnvConfigReminder?(0,o.jsx)(ls,{}):null,(0,o.jsx)(Aj,{runButtonEnabled:J,form:h,serviceMode:G,selectedType:H,dryMode:d,stoppable:U,loading:w,onRun:Q,onStop:K,actionSpace:S,chrome:A.promptInputChrome,deviceType:_})]}),Y&&c.version&&(0,o.jsx)("div",{className:"version-info-section",children:(0,o.jsxs)("span",{className:"version-text",children:["Midscene.js version: ",c.version]})})]})})}let AD=e=>{var t,r;return(0,o.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,o.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))},AB=e=>{var t,r;return(0,o.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,o.jsxs)("mask",{id:"midscene-logo_svg__a",width:55.371,height:52.35,x:-.202,y:-.201,fill:"#000",maskUnits:"userSpaceOnUse",children:[(0,o.jsx)("path",{fill:"#fff",d:"M-.202-.201h55.371v52.35H-.202z"}),(0,o.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,o.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,o.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,o.jsx)("mask",{id:"midscene-logo_svg__b",width:53,height:50,x:1,y:1,maskUnits:"userSpaceOnUse",style:{maskType:"alpha"},children:(0,o.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,o.jsxs)("g",{mask:"url(#midscene-logo_svg__b)",children:[(0,o.jsx)("path",{fill:"#fff",d:"M-4.044-9.086h63.087V65.49H-4.044z"}),(0,o.jsx)("g",{filter:"url(#midscene-logo_svg__c)",opacity:.8,children:(0,o.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,o.jsx)("path",{fill:"url(#midscene-logo_svg__d)",d:"M5.773 18.412h43.601v24.223H5.773z"}),(0,o.jsx)("path",{fill:"url(#midscene-logo_svg__e)",d:"M5.773 18.473h43.086v24.454H5.773z"}),(0,o.jsx)("path",{fill:"url(#midscene-logo_svg__f)",d:"M5.926 18.075h43.092v24.457H5.926z"}),(0,o.jsx)("foreignObject",{width:27.157,height:19.138,x:21.193,y:36.687,children:(0,o.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,o.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,o.jsxs)("defs",{children:[(0,o.jsx)("pattern",{id:"midscene-logo_svg__d",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,o.jsx)("use",{xlinkHref:"#midscene-logo_svg__h",transform:"scale(.00483 .0087)"})}),(0,o.jsx)("pattern",{id:"midscene-logo_svg__e",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,o.jsx)("use",{xlinkHref:"#midscene-logo_svg__i",transform:"scale(.009 .01587)"})}),(0,o.jsx)("pattern",{id:"midscene-logo_svg__f",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,o.jsx)("use",{xlinkHref:"#midscene-logo_svg__j",transform:"scale(.009 .01587)"})}),(0,o.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__h",width:207,height:115,preserveAspectRatio:"none"}),(0,o.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__i",width:111,height:63,preserveAspectRatio:"none"}),(0,o.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__j",width:111,height:63,preserveAspectRatio:"none"}),(0,o.jsx)("clipPath",{id:"midscene-logo_svg__g",transform:"translate(-21.193 -36.687)",children:(0,o.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,o.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,o.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,o.jsx)("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),(0,o.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 Az(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function AL(){return(0,o.jsx)(AD,{"aria-hidden":"true",className:"session-setup-select-icon"})}let AF="Create Agent";function AK(e){var t,r,n,i;let{form:a,sessionSetup:s,sessionSetupError:l,sessionViewState:A,sessionLoading:c,sessionMutating:u,onCreateSession:d}=e,p=u||c||"blocked"===A.setupState,h=null!=(t=null==s?void 0:s.primaryActionLabel)?t:AF,f=null!=(r=null==s?void 0:s.title)?r:AF,g=null!=(n=null==s?void 0:s.description)?n:"Create a platform session before running actions.";return(0,o.jsx)("div",{className:"session-setup-panel",children:(0,o.jsxs)("div",{className:"session-setup-card",children:[(0,o.jsx)(AB,{"aria-hidden":"true",className:"session-setup-logo"}),(0,o.jsx)("h1",{className:"session-setup-title",children:f}),(0,o.jsx)("p",{className:"session-setup-description",children:g}),"blocked"===A.setupState&&A.setupBlockingReason&&(0,o.jsx)(y.A,{type:"error",showIcon:!0,message:"Setup blocked",description:A.setupBlockingReason,className:"session-setup-alert"}),l?(0,o.jsx)(y.A,{type:"error",showIcon:!0,message:"Failed to load setup",description:l,className:"session-setup-alert"}):null,(null==s?void 0:s.notice)?(0,o.jsx)(y.A,{type:s.notice.type,showIcon:!0,message:s.notice.message,description:s.notice.description,className:"session-setup-alert"}):null,(0,o.jsxs)(aX.A,{form:a,layout:"vertical",className:"session-setup-form",onFinish:()=>{p||d()},children:[(null!=(i=null==s?void 0:s.fields)?i:[]).map(e=>(0,o.jsx)(aX.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,o.jsx)(Ad.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let i=Az(t),a=function(e,t){var r;if(Az(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 i===e.key&&(null==t||null==(r=t.platformSelector)?void 0:r.variant)==="cards"?(0,o.jsx)(l4.A.Group,{className:"platform-selector-group",children:(a||[]).map(e=>(0,o.jsxs)(l4.A.Button,{value:e.value,className:"platform-selector-card",children:[(0,o.jsx)("div",{className:"platform-selector-title",children:e.label}),e.description?(0,o.jsx)("div",{className:"platform-selector-description",children:e.description}):null]},String(e.value)))}):(0,o.jsx)(Au.A,{placeholder:e.placeholder,suffixIcon:(0,o.jsx)(AL,{}),options:(null!=(n=null!=a?a:e.options)?n:[]).map(e=>({label:e.label,value:e.value,description:e.description})),optionRender:e=>{let t=e.data.description;return t?(0,o.jsxs)("div",{className:"session-select-option",children:[(0,o.jsx)("div",{className:"session-select-option-label",children:e.data.label}),(0,o.jsx)("div",{className:"session-select-option-description",children:t})]}):e.data.label}})}return(0,o.jsx)(m.A,{placeholder:e.placeholder})}(e,s)},e.key)),(0,o.jsx)("button",{type:"submit",className:"session-setup-submit",disabled:p,children:u?"Creating...":h})]})]})})}function AU(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 AQ(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 AZ(e,t,r,n,i,o,a){try{var s=e[o](a),l=s.value}catch(e){r(e);return}s.done?t(l):Promise.resolve(l).then(n,i)}function AJ(e){var t,r,n,i,a,s;let l,{controller:A,appVersion:c,title:u="Playground",branding:d,playgroundConfig:p,header:h,className:m,playgroundClassName:v,notConnectedFallback:b}=e,{state:w,actions:E}=A,x=AQ(AU({},l={showContextPreview:!1,layout:"vertical",showVersionInfo:!1,enableScrollToBottom:!1,serverMode:!0,showEnvConfigReminder:!1,showClearButton:!1,showSystemMessageHeader:!1,promptInputChrome:{variant:"minimal"},executionFlow:{collapsible:!0},deviceType:w.deviceType,executionUx:{hints:w.executionUxHints,countdownSeconds:w.countdownSeconds}},p),{executionFlow:AU({},l.executionFlow,null==p?void 0:p.executionFlow),executionUx:AU({},l.executionUx,null==p?void 0:p.executionUx)}),k=(t=w.runtimeInfo,r=w.deviceType,AQ(AU({},d),{title:null!=(n=null==t?void 0:t.title)?n:u,version:c,targetName:null!=(s=null!=(a=null!=(i=null==t?void 0:t.platformId)?i:null==d?void 0:d.targetName)?a:r)?s:"screen"}));return(0,o.jsxs)("div",{className:["playground-conversation-panel",m].filter(Boolean).join(" "),children:[(0,o.jsx)(f.A,{open:null!==w.countdown,footer:(0,o.jsx)(g.Ay,{onClick:E.finishCountdown,type:"default",children:"Skip countdown"}),closable:!0,maskClosable:!0,onCancel:E.finishCountdown,centered:!0,width:400,styles:{mask:{backgroundColor:"rgba(0, 0, 0, 0.75)"}},children:(0,o.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,o.jsx)("div",{style:{fontSize:"120px",fontWeight:"bold",color:"GO!"===w.countdown?"#52c41a":"#1890ff",marginBottom:"24px",lineHeight:1},children:w.countdown}),(0,o.jsx)("div",{style:{fontSize:"18px",fontWeight:500,marginBottom:"12px"},children:"Automation Starting Soon"}),(0,o.jsxs)("div",{style:{fontSize:"14px",color:"var(--midscene-text-secondary)"},children:["The selected session requested a countdown before execution.",(0,o.jsx)("br",{}),"Please wait until the run starts."]})]})}),h,(0,o.jsx)("div",{className:"playground-conversation-body",children:w.serverOnline?w.sessionViewState.connected?(0,o.jsx)(AN,{playgroundSDK:w.playgroundSDK,config:x,branding:k,className:["playground-container","playground-conversation-skin",v].filter(Boolean).join(" ")}):void 0!==b?(0,o.jsx)(o.Fragment,{children:b}):(0,o.jsx)(AK,{form:w.form,sessionSetup:w.sessionSetup,sessionSetupError:w.sessionSetupError,sessionViewState:w.sessionViewState,sessionLoading:w.sessionLoading,sessionMutating:w.sessionMutating,onCreateSession:()=>{var e;return(e=function*(){yield E.createSession()},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){AZ(o,n,i,a,s,"next",e)}function s(e){AZ(o,n,i,a,s,"throw",e)}a(void 0)})})()}}):(0,o.jsx)("div",{className:"playground-conversation-offline",children:(0,o.jsx)(y.A,{type:"warning",showIcon:!0,message:"Playground server offline",description:"Reconnect the runtime to continue using the Android playground."})})})]})}let{Content:AX}=Y.A;function AH(e){var t;let{serverUrl:r,appVersion:n,title:i="Playground",defaultDeviceType:s="web",branding:A,playgroundConfig:c,offlineTitle:u="Midscene Playground",offlineStatusText:d="Server offline...",pollIntervalMs:h=5e3}=e,[f,g]=(0,a.useState)(!1),m=function(e){var t;let{serverUrl:r,defaultDeviceType:n="web",pollIntervalMs:i=5e3,countdownSeconds:s=3,initialFormValues:l,onCountdownFinish:A}=e,{message:c}=p.A.useApp(),[u]=aX.A.useForm(),d=(0,a.useRef)(l);(0,a.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 h=null!=(t=aX.A.useWatch([],u))?t:{},[f,g]=(0,a.useState)(null),[m,y]=(0,a.useState)(null),[v,b]=(0,a.useState)(null),[w,E]=(0,a.useState)(!1),[x,k]=(0,a.useState)(!1),S=X(e=>e.config),C=(0,a.useMemo)(()=>JSON.stringify(Object.entries(S).sort((e,t)=>{let[r]=e,[n]=t;return r.localeCompare(n)})),[S]),I=a6(m),j="string"==typeof I?h[I]:void 0,O=(0,a.useMemo)(()=>new aJ({type:"remote-execution",serverUrl:r}),[r]),{serverOnline:P,isUserOperating:R,deviceType:M,runtimeInfo:T,executionUxHints:N,refreshServerState:D}=function(e,t,r){let[n,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(!1),[l,A]=(0,a.useState)(t),[c,u]=(0,a.useState)(null),[d,p]=(0,a.useState)([]),h=(0,a.useRef)(null),f=(0,a.useRef)(!0);(0,a.useEffect)(()=>(f.current=!0,()=>{f.current=!1}),[]),(0,a.useEffect)(()=>{h.current=c},[c]),(0,a.useEffect)(()=>{e.onProgressUpdate(e=>{s(!!e)})},[e]);let g=(0,a.useCallback)(()=>{var r;return(r=function*(){try{let a=yield e.checkStatus();if(!f.current)return;if(i(a),!a){h.current=null,u(null),p([]);return}try{let r=yield e.getRuntimeInfo();if(!f.current)return;if(r){h.current=r,u(r),A(eS(r,t)),p(eC(r));return}}catch(e){console.warn("Failed to get runtime info:",e)}try{var r,n,o;let i=yield e.getInterfaceInfo();if(!f.current||!(null==i?void 0:i.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),o=o={interface:i,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(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);h.current=a,u(a),A(eS(a,t)),p(eC(a))}catch(e){console.warn("Failed to get interface info:",e)}}catch(e){if(!f.current)return;console.error("Failed to check server status:",e),i(!1)}},function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){aG(o,n,i,a,s,"next",e)}function s(e){aG(o,n,i,a,s,"throw",e)}a(void 0)})})()},[t,e]);return(0,a.useEffect)(()=>{g();let e=window.setInterval(()=>{g()},r);return()=>{window.clearInterval(e)}},[r,g]),{serverOnline:n,isUserOperating:o,deviceType:l,runtimeInfo:c,executionUxHints:d,refreshServerState:g}}(O,n,i),B=(0,a.useMemo)(()=>{let e,t;return t=(e=(null==T?void 0:T.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}},[T]),z=(0,a.useRef)(null),L=(0,a.useRef)(null),F=(0,a.useRef)(!0),K=(0,a.useRef)(void 0),U=(0,a.useRef)(null),Q=(0,a.useRef)(null),Z=(0,a.useRef)(!1),J=(0,a.useRef)(null),H=(0,a.useRef)(null),G=(0,a.useRef)(null),V=(0,a.useCallback)(()=>a7(function*(){if(!aW(S))return J.current=null,G.current=null,!0;if(J.current===C)return!0;let e=G.current;if((null==e?void 0:e.signature)===C)return e.promise;let t={promise:Promise.resolve(!0),signature:C},r=a7(function*(){try{var e;return yield(e=function*(){return!!aW(S)&&(yield O.overrideConfig(S),!0)},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){aV(o,n,i,a,s,"next",e)}function s(e){aV(o,n,i,a,s,"throw",e)}a(void 0)})})(),J.current=C,!0}catch(e){return q(e,{title:"Failed to apply AI configuration"}),!1}finally{G.current===t&&(G.current=null)}})();return t.promise=r,G.current=t,r})(),[S,C,O]),W=(0,a.useCallback)(()=>{let e=null!==z.current;null!==z.current&&(window.clearInterval(z.current),z.current=null);let t=L.current;L.current=null,F.current&&g(null),null==t||t(),e&&F.current&&(null==A||A())},[A]),Y=(0,a.useCallback)(()=>a7(function*(){if(!(s<=0))return W(),new Promise(e=>{L.current=e;let t=s;F.current&&g(t),z.current=window.setInterval(()=>{if((t-=1)>0){F.current&&g(t);return}if(0===t){F.current&&g("GO!");return}W()},1e3)})})(),[s,W]);(0,a.useEffect)(()=>(F.current=!0,()=>{F.current=!1,W()}),[W]),(0,a.useEffect)(()=>N.includes("countdown-before-run")?(O.setBeforeActionHook(()=>a7(function*(){yield Y()})()),()=>{O.setBeforeActionHook(void 0)}):void O.setBeforeActionHook(void 0),[N,O,Y]);let _=(0,a.useCallback)(e=>a7(function*(){let t=a8({},u.getFieldsValue(!0),e||{});E(!0);try{let r=yield O.getSessionSetup(e);y(r),b(null);let n=a6(r);K.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(aH(r,t))}catch(e){console.error("Failed to load session setup:",e),b(e instanceof Error?e.message:"Failed to load session setup")}finally{E(!1)}})(),[u,O]),$=(0,a.useCallback)((e,t)=>a7(function*(){if(H.current)return H.current;let r=a7(function*(){var r;let n;try{if(Z.current=!0,k(!0),!(yield V()))return!1;let r=null!=e?e:yield u.validateFields();return n=r,yield O.createSession(r),(null==t?void 0:t.silent)||(Q.current=null),(null==t?void 0:t.silent)||c.success("Agent created"),yield D(),!0}catch(e){if(e.errorFields)return!1;if(null==t?void 0:t.silent)return Q.current=aY(n),!1;return q(e,null!=(r=function(e){let t;if(t=a1(e).toLowerCase(),a0.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,o.jsx)(a5,{error:e}),duration:0,title:"Failed to create Agent"}}(e))?r:{title:"Failed to create Agent"}),!1}finally{Z.current=!1,k(!1)}})(),n={promise:null};return n.promise=r.finally(()=>{H.current===n.promise&&(H.current=null)}),H.current=n.promise,n.promise})(),[V,u,c,O,D]),ee=(0,a.useCallback)(()=>a7(function*(){try{Q.current=aY(aq(m,u.getFieldsValue(!0))),Z.current=!0,k(!0),yield O.destroySession(),c.success("Session disconnected"),yield D(),yield _()}catch(e){q(e,{title:"Failed to disconnect session"})}finally{Z.current=!1,k(!1)}})(),[u,c,O,D,_,m]);return(0,a.useEffect)(()=>{P&&V()},[V,P]),(0,a.useEffect)(()=>{if(!P||B.connected)return;let e=!1,t=!1,r=()=>a7(function*(){if(!e&&!t){t=!0;try{yield _(u.getFieldsValue(!0))}finally{t=!1}}})();r();let n=window.setInterval(()=>{r()},i);return()=>{e=!0,window.clearInterval(n)}},[u,i,_,P,B.connected]),(0,a.useEffect)(()=>{if(!P||B.connected||!j)return;let e=a6(m);if(e&&K.current!==j){var t,r;_((t=a8({},u.getFieldsValue(!0)),r=r={[e]:j},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,_,j,P,m,B.connected]),(0,a.useEffect)(()=>{if(B.connected){U.current=null;return}if(!P||w||x||Z.current||v)return;let e=aq(m,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,i=aY(t);return i?{signature:i,shouldCreate:i!==r&&i!==n}:{signature:null,shouldCreate:!1}}({autoCreateInput:e,lastAttemptedSignature:U.current,blockedSignature:Q.current});if(!r||!t){t||(U.current=null);return}U.current=t,a7(function*(){(yield $(null!=e?e:void 0,{silent:!0}))||(U.current=null)})()},[$,u,P,w,x,m,v,B.connected]),{state:{playgroundSDK:O,form:u,formValues:h,serverOnline:P,isUserOperating:R,deviceType:M,runtimeInfo:T,executionUxHints:N,sessionViewState:B,sessionSetup:m,sessionSetupError:v,sessionLoading:w,sessionMutating:x,countdown:f,countdownSeconds:s},actions:{refreshServerState:D,refreshSessionSetup:_,createSession:$,destroySession:ee,finishCountdown:W}}}({serverUrl:r,defaultDeviceType:s,countdownSeconds:null==c||null==(t=c.executionUx)?void 0:t.countdownSeconds,pollIntervalMs:h});return((0,a.useEffect)(()=>{let e=()=>{g(window.innerWidth<=1024)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),m.state.serverOnline)?(0,o.jsx)(eM,{children:(0,o.jsx)(Y.A,{className:"app-container playground-container",children:(0,o.jsx)(AX,{className:"app-content",children:(0,o.jsxs)(_.YZ,{autoSaveId:"playground-layout",direction:f?"vertical":"horizontal",children:[(0,o.jsx)(_.Zk,{defaultSize:f?67:32,maxSize:f?85:60,minSize:f?67:25,className:"app-panel left-panel",children:(0,o.jsxs)("div",{className:"panel-content left-panel-content",children:[(0,o.jsx)("div",{className:"playground-panel-header",children:(0,o.jsxs)("div",{className:"header-row",children:[(0,o.jsx)(l,{}),(0,o.jsx)(W,{showTooltipWhenEmpty:!1,showModelName:!1,playgroundSDK:m.state.playgroundSDK})]})}),(0,o.jsx)("div",{className:"playground-panel-playground",children:(0,o.jsx)(AJ,{controller:m,appVersion:n,branding:A,playgroundConfig:c,title:i})})]})}),(0,o.jsx)(_.TW,{className:"panel-resize-handle"}),(0,o.jsx)(_.Zk,{defaultSize:f?33:68,minSize:f?15:40,className:"app-panel right-panel",children:(0,o.jsx)("div",{className:"panel-content right-panel-content",children:m.state.sessionViewState.connected?(0,o.jsx)(eP,{playgroundSDK:m.state.playgroundSDK,runtimeInfo:m.state.runtimeInfo,serverUrl:r,serverOnline:m.state.serverOnline,isUserOperating:m.state.isUserOperating}):(0,o.jsx)(ee,{})})})]})})})}):(0,o.jsx)(eM,{children:(0,o.jsx)("div",{className:"server-offline-container",children:(0,o.jsxs)("div",{className:"server-offline-message",children:[(0,o.jsx)(l,{}),(0,o.jsxs)("div",{className:"server-offline-content",children:[(0,o.jsxs)("div",{className:"server-offline-icon",children:[(0,o.jsx)(a9,{className:"icon-background"}),(0,o.jsx)(se,{className:"icon-foreground"})]}),(0,o.jsx)("h1",{children:u}),(0,o.jsx)("p",{className:"connection-status",children:d})]})]})})})}let Aq=document.getElementById("root");if(!Aq)throw Error("Root element not found");(0,s.createRoot)(Aq).render((0,o.jsx)(a.StrictMode,{children:(0,o.jsx)(function(){return(0,o.jsx)(AH,{serverUrl:"",appVersion:"1.10.4",title:"Playground",offlineTitle:"Midscene Playground"})},{})}))},1182(){},3198(e,t,r){"use strict";r.d(t,{ZH:()=>d});var n=r(3244),i=r(5207),o=r(3078),a=r.n(o),s=r(217),l=r(6987),A=r(9152),c=r(5409);let u="midscene_run",d=e=>{if(!A.$9)return"";let t=(()=>{if(!A.$9)return"";let e=a().resolve(c.cwd(),A.$9?(0,s.j)(l.Tr)||u:"");if(!(0,n.existsSync)(e))try{(0,n.mkdirSync)(e,{recursive:!0})}catch(t){e=a().join((0,i.tmpdir)(),u),(0,n.mkdirSync)(e,{recursive:!0})}return e})(),r=a().join(t,e);return(0,n.existsSync)(r)||(0,n.mkdirSync)(r,{recursive:!0}),r}},217(e,t,r){"use strict";r.d(t,{j:()=>o});var n=r(6987),i=r(5409);let o=e=>{if(!n.Wh.includes(e))throw Error(`getBasicEnvValue with key ${e} is not supported.`);return i.env[e]}},6987(e,t,r){"use strict";r.d(t,{$:()=>C,$H:()=>h,$L:()=>c,$l:()=>s,AU:()=>w,CA:()=>S,Cn:()=>eA,DL:()=>ev,El:()=>B,FU:()=>d,G0:()=>i,HR:()=>o,I2:()=>n,IQ:()=>p,JM:()=>j,Jq:()=>E,Km:()=>m,Lg:()=>ew,Lh:()=>J,M1:()=>b,NF:()=>P,OK:()=>eo,OY:()=>ed,Od:()=>I,Pm:()=>H,Sk:()=>T,T4:()=>U,TN:()=>L,Tr:()=>F,UH:()=>eC,V7:()=>G,VM:()=>v,Vb:()=>ep,W4:()=>g,WH:()=>es,Wh:()=>em,XE:()=>eE,YK:()=>z,Yf:()=>Q,Yg:()=>q,Z$:()=>el,Z7:()=>X,ZX:()=>A,_j:()=>ek,_q:()=>K,aK:()=>y,aO:()=>ef,ag:()=>ea,b6:()=>k,c$:()=>ey,d8:()=>D,fS:()=>ee,ho:()=>N,iw:()=>u,jG:()=>x,j_:()=>M,kX:()=>Z,mZ:()=>er,n0:()=>l,nc:()=>$,pp:()=>R,rd:()=>eb,sg:()=>ec,tk:()=>ex,u1:()=>eh,v:()=>Y,v4:()=>a,vC:()=>V,wu:()=>eu,xP:()=>et,xg:()=>W,y2:()=>_,yR:()=>eg,yb:()=>O,zD:()=>f,zG:()=>ei,zQ:()=>en});let n="MIDSCENE_MODEL_INIT_CONFIG_JSON",i="MIDSCENE_MODEL_EXTRA_BODY_JSON",o="MIDSCENE_MODEL_NAME",a="MIDSCENE_DEBUG_MODEL_PROFILE",s="MIDSCENE_DEBUG_MODEL_RESPONSE",l="MIDSCENE_DEBUG_MODE",A="MIDSCENE_LANGSMITH_DEBUG",c="MIDSCENE_LANGFUSE_DEBUG",u="MIDSCENE_MODEL_SOCKS_PROXY",d="MIDSCENE_MODEL_HTTP_PROXY",p="MIDSCENE_MODEL_API_KEY",h="MIDSCENE_MODEL_BASE_URL",f="MIDSCENE_MODEL_TIMEOUT",g="MIDSCENE_MODEL_TEMPERATURE",m="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="OPENAI_API_KEY",x="OPENAI_BASE_URL",k="MIDSCENE_OPENAI_INIT_CONFIG_JSON",S="MIDSCENE_OPENAI_HTTP_PROXY",C="MIDSCENE_OPENAI_SOCKS_PROXY",I="MIDSCENE_CACHE",j="MIDSCENE_USE_VLM_UI_TARS",O="MIDSCENE_USE_QWEN_VL",P="MIDSCENE_USE_QWEN3_VL",R="MIDSCENE_USE_DOUBAO_VISION",M="MIDSCENE_USE_GEMINI",T="MATCH_BY_POSITION",N="MIDSCENE_REPORT_TAG_NAME",D="MIDSCENE_REPORT_QUIET",B="MIDSCENE_PREFERRED_LANGUAGE",z="MIDSCENE_CACHE_MAX_FILENAME_LENGTH",L="MIDSCENE_REPLANNING_CYCLE_LIMIT",F="MIDSCENE_RUN_DIR",K="MIDSCENE_INSIGHT_MODEL_NAME",U="MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY",Q="MIDSCENE_INSIGHT_MODEL_HTTP_PROXY",Z="MIDSCENE_INSIGHT_MODEL_BASE_URL",J="MIDSCENE_INSIGHT_MODEL_API_KEY",X="MIDSCENE_INSIGHT_MODEL_INIT_CONFIG_JSON",H="MIDSCENE_INSIGHT_MODEL_EXTRA_BODY_JSON",q="MIDSCENE_INSIGHT_MODEL_TIMEOUT",G="MIDSCENE_INSIGHT_MODEL_TEMPERATURE",V="MIDSCENE_INSIGHT_MODEL_RETRY_COUNT",W="MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL",Y="MIDSCENE_INSIGHT_MODEL_FAMILY",_="MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT",$="MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED",ee="MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET",et="MIDSCENE_PLANNING_MODEL_NAME",er="MIDSCENE_PLANNING_MODEL_SOCKS_PROXY",en="MIDSCENE_PLANNING_MODEL_HTTP_PROXY",ei="MIDSCENE_PLANNING_MODEL_BASE_URL",eo="MIDSCENE_PLANNING_MODEL_API_KEY",ea="MIDSCENE_PLANNING_MODEL_INIT_CONFIG_JSON",es="MIDSCENE_PLANNING_MODEL_EXTRA_BODY_JSON",el="MIDSCENE_PLANNING_MODEL_TIMEOUT",eA="MIDSCENE_PLANNING_MODEL_TEMPERATURE",ec="MIDSCENE_PLANNING_MODEL_RETRY_COUNT",eu="MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL",ed="MIDSCENE_PLANNING_MODEL_FAMILY",ep="MIDSCENE_PLANNING_MODEL_REASONING_EFFORT",eh="MIDSCENE_PLANNING_MODEL_REASONING_ENABLED",ef="MIDSCENE_PLANNING_MODEL_REASONING_BUDGET",eg="MIDSCENE_MODEL_FAMILY",em=[l,a,s,F],ey=[I,A,c,D],ev=[z,L],eb=["MIDSCENE_ADB_PATH","MIDSCENE_ADB_REMOTE_HOST","MIDSCENE_ADB_REMOTE_PORT","MIDSCENE_ANDROID_IME_STRATEGY","MIDSCENE_IOS_DEVICE_UDID","MIDSCENE_IOS_SIMULATOR_UDID",N,B,T,"MIDSCENE_CHROME_PATH","MIDSCENE_MCP_CHROME_PATH","DOCKER_CONTAINER"],ew=[...ey,...ev,...eb],eE=[o,n,i,p,h,u,d,f,g,m,y,v,b,w,j,O,P,R,M,"MIDSCENE_USE_VL_MODEL",E,x,k,S,C,K,U,Q,Z,J,X,H,q,G,V,W,Y,_,$,ee,et,er,en,ei,eo,ea,es,el,eA,ec,eu,ed,ep,eh,ef,eg],ex=["MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",...em,...ew,...eE],ek=["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","kimi","xiaomi-mimo"];var eS,eC=((eS={}).V1_0="1.0",eS.V1_5="1.5",eS.DOUBAO_1_5_15B="doubao-1.5-15B",eS.DOUBAO_1_5_20B="doubao-1.5-20B",eS)},4565(e,t,r){"use strict";r.d(t,{N:()=>g,a:()=>function e(t,r){let n=`${p}:${t}`,o=(null==r?void 0:r.console)??!1,s=o?`${n}:withConsole`:n;if(!f.has(s))if(o){let r=e(t);f.set(s,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=c()(n);f.set(s,function(){for(var r=arguments.length,n=Array(r),o=0;o<r;o++)n[o]=arguments[o];d.$9&&function(e,t){if(!d.$9)return;let r=function(e){let t=e.replace(/:/g,"-");if(!h.has(t)){let e=a().join((0,u.ZH)("log"),`${t}.log`),r=i().createWriteStream(e,{flags:"a"});h.set(t,r)}return h.get(t)}(e),n=new Date,o=n.toLocaleDateString("sv-SE"),s=n.toLocaleTimeString("sv-SE"),l=n.getMilliseconds().toString().padStart(3,"0"),A=n.getTimezoneOffset(),c=Math.floor(Math.abs(A)/60).toString().padStart(2,"0"),p=(Math.abs(A)%60).toString().padStart(2,"0"),f=`${A<=0?"+":"-"}${c}:${p}`,g=`${o}T${s}.${l}${f}`;r.write(`[${g}] ${t}
959
- `)}(t,l().format(...n)),e(...n)})}return f.get(s)}});var n=r(3244),i=r.n(n),o=r(3078),a=r.n(o),s=r(1344),l=r.n(s),A=r(7617),c=r.n(A),u=r(3198),d=r(9152);let p="midscene",h=new Map,f=new Map;function g(e){d.$9||c().enable(`${p}:${e}`)}},9152(e,t,r){"use strict";r.d(t,{$9:()=>A,NB:()=>v,Qd:()=>E,gQ:()=>h,gV:()=>w,ht:()=>s,rS:()=>l,tD:()=>d,uR:()=>c,vA:()=>p,x3:()=>b});var n,i=r(7086),o=r(3961),a=r(5409);let s="undefined"!=typeof window,l="undefined"!=typeof WorkerGlobalScope,A=void 0!==a&&(null==(n=a.versions)?void 0:n.node);function c(){return(0,o.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,o="",a=i.sha256.create().update(r).hex().split("").map(e=>String.fromCharCode(97+Number.parseInt(e,16)%26)).join("");for(;n<a.length-1;){if(u[o=a.slice(0,n)]&&u[o]!==r){n++;continue}u[o]=r;break}return o}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 f=/</g,g=/>/g,m="__midscene_lt__",y="__midscene_gt__",v=e=>e.replace(f,m).replace(g,y),b=e=>{let t=RegExp(m,"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)}},4678(e){"use strict";if("undefined"==typeof sharp){var t=Error("Cannot find module 'sharp'");throw t.code="MODULE_NOT_FOUND",t}e.exports=sharp},6122(){},7407(){},9140(){},8973(){},3009(){},2801(){},6390(){},6970(){},3147(){},3612(){},3244(){},5592(){}},l={};function A(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={exports:{}};return s[e].call(r.exports,r,r.exports,A),r.exports}A.m=s,A.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return A.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,A.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 i=Object.create(null);A.r(i);var o={};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=>{o[e]=()=>r[e]});return o.default=()=>r,A.d(i,o),i},A.d=(e,t)=>{for(var r in t)A.o(t,r)&&!A.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},A.f={},A.e=e=>Promise.all(Object.keys(A.f).reduce((t,r)=>(A.f[r](e,t),t),[])),A.u=e=>"static/js/async/"+e+"."+({195:"0366f6e8",236:"a5d2c1b1",271:"72510be8",467:"710fa05a",985:"c09263d7"})[e]+".js",A.miniCssF=e=>""+e+".css",A.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),A.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},A.l=function(e,t,n,i){if(r[e])return void r[e].push(t);if(void 0!==n)for(var o,a,s=document.getElementsByTagName("script"),l=0;l<s.length;l++){var c=s[l];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="playground:"+n){o=c;break}}o||(a=!0,(o=document.createElement("script")).timeout=120,A.nc&&o.setAttribute("nonce",A.nc),o.setAttribute("data-rspack","playground:"+n),o.src=e),r[e]=[t];var u=function(t,n){o.onerror=o.onload=null,clearTimeout(d);var i=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(function(e){return e(n)}),t)return t(n)},d=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),a&&document.head.appendChild(o)},A.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n=[],A.O=(e,t,r,i)=>{if(t){i=i||0;for(var o=n.length;o>0&&n[o-1][2]>i;o--)n[o]=n[o-1];n[o]=[t,r,i];return}for(var a=1/0,o=0;o<n.length;o++){for(var[t,r,i]=n[o],s=!0,l=0;l<t.length;l++)(!1&i||a>=i)&&Object.keys(A.O).every(e=>A.O[e](t[l]))?t.splice(l--,1):(s=!1,i<a&&(a=i));if(s){n.splice(o--,1);var c=r();void 0!==c&&(e=c)}}return e},A.p="/",A.b=document.baseURI||self.location.href,i={410:0},A.f.j=function(e,t){var r=A.o(i,e)?i[e]:void 0;if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((t,n)=>r=i[e]=[t,n]);t.push(r[2]=n);var o=A.p+A.u(e),a=Error();A.l(o,function(t){if(A.o(i,e)&&(0!==(r=i[e])&&(i[e]=void 0),r)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",a.name="ChunkLoadError",a.type=n,a.request=o,r[1](a)}},"chunk-"+e,e)}},A.O.j=e=>0===i[e],o=(e,t)=>{var r,n,[o,a,s]=t,l=0;if(o.some(e=>0!==i[e])){for(r in a)A.o(a,r)&&(A.m[r]=a[r]);if(s)var c=s(A)}for(e&&e(t);l<o.length;l++)n=o[l],A.o(i,n)&&i[n]&&i[n][0](),i[n]=0;return A.O(c)},(a=self.webpackChunkplayground=self.webpackChunkplayground||[]).forEach(o.bind(null,0)),a.push=o.bind(null,a.push.bind(a));var c=A.O(void 0,["783","445"],()=>A(7250));c=A.O(c)})();
960
- //# sourceMappingURL=index.babddf12.js.map