@midscene/playground 1.10.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- /*! For license information please see index.3146a384.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},8087(e,t,r){"use strict";let n;var i,o=r(5723),a=r(2155),s=r(8997);let A=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 l=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,k="midscene-auto-zoom",x="midscene-background-visible",S="midscene-elements-visible",C="midscene-model-call-details",j="midscene-dark-mode",I="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(k),r="false"!==localStorage.getItem(x),n="false"!==localStorage.getItem(S),i="true"===localStorage.getItem(C),o="true"===localStorage.getItem(j),a=Number.parseFloat(localStorage.getItem(I)||"1"),s=Number.isNaN(a)?1:a,A="false"!==localStorage.getItem(O),l=P("focusOnCursor"),c=P("showElementMarkers"),u=P("darkMode"),d=void 0===u?o:u;return void 0!==u&&localStorage.setItem(j,d.toString()),{backgroundVisible:r,elementsVisible:void 0===c?n:c,autoZoom:void 0===l?t:l,modelCallDetailsEnabled:i,darkModeEnabled:d,playbackSpeed:[.5,1,1.5,2].includes(s)?s:1,setBackgroundVisible:t=>{e({backgroundVisible:t}),localStorage.setItem(x,t.toString())},setElementsVisible:t=>{e({elementsVisible:t}),localStorage.setItem(S,t.toString())},setAutoZoom:t=>{e({autoZoom:t}),localStorage.setItem(k,t.toString())},setModelCallDetailsEnabled:t=>{e({modelCallDetailsEnabled:t}),localStorage.setItem(C,t.toString())},setDarkModeEnabled:t=>{e({darkModeEnabled:t}),localStorage.setItem(j,t.toString())},setPlaybackSpeed:t=>{e({playbackSpeed:t}),localStorage.setItem(I,t.toString())},subtitleEnabled:A,setSubtitleEnabled:t=>{e({subtitleEnabled:t}),localStorage.setItem(O,t.toString())}}}),T="midscene-env-config",N="midscene-service-mode",M="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(T)||"",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(N),a="false"!==localStorage.getItem(M),s="true"===localStorage.getItem(D),A=localStorage.getItem(B),l="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(N,t)},config:n,configString:r,setConfig:t=>e({config:t}),loadConfig:t=>{e({config:J(t),configString:t}),localStorage.setItem(T,t)},syncFromStorage:()=>{let t=Z();e({config:J(t),configString:t})},forceSameTabNavigation:a,setForceSameTabNavigation:t=>{e({forceSameTabNavigation:t}),localStorage.setItem(M,t.toString())},deepLocate:s,setDeepLocate:t=>{e({deepLocate:t}),localStorage.setItem(D,t.toString())},deepThink:"true"===A||"false"!==A&&"unset",setDeepThink:t=>{e({deepThink:t}),localStorage.setItem(B,t.toString())},screenshotIncluded:l,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 G(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 V(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function q(e){let{showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:i="icon",playgroundSDK:s}=e,{message:A}=p.A.useApp(),{config:l,configString:c,loadConfig:u,syncFromStorage:v}=X(),[b,w]=(0,a.useState)(!1),[E,k]=(0,a.useState)(c),[x,S]=(0,a.useState)(null),[C,j]=(0,a.useState)(!1),I=l.MIDSCENE_MODEL_NAME,O=!!(null==s?void 0:s.runConnectivityTest),P=(0,a.useRef)(null),R=(0,a.useRef)(null),T=()=>{null!==R.current&&(window.clearTimeout(R.current),R.current=null)},N=e=>{v(),T(),w(!0),e.preventDefault(),e.stopPropagation()},M=()=>{T(),w(!1),u(E)};return(0,a.useEffect)(()=>{b&&(k(c),S(null))},[b,c]),(0,a.useEffect)(()=>()=>{T()},[]),(0,o.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px",alignItems:"center",height:"100%",minHeight:"32px"},ref:P,children:[r?I: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(l).length:void 0),children:"icon"===i?(0,o.jsx)(d.A,{onClick:N}):(0,o.jsx)("span",{onClick:N,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,o.jsxs)(f.A,{title:"Model Env Config",open:b,onOk:M,onCancel:()=>{T(),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{j(!0),S(null);let e=J(E),t=yield s.runConnectivityTest(e);S(t),t.passed?(u(E),A.success("Model verification passed"),T(),R.current=window.setTimeout(()=>{w(!1),R.current=null},2e3)):A.warning("Model verification found issues")}catch(t){let e=t instanceof Error?t.message:String(t);G(t,{title:"Model verification failed"}),S({passed:!1,message:e})}finally{j(!1)}},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){V(o,n,i,a,s,"next",e)}function s(e){V(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:M,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=>k(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"}),"."]})]}),x?(0,o.jsx)(y.A,{type:x.passed?"success":"warning",showIcon:!0,message:x.passed?"Model verification passed":"Model verification failed",description:x.passed?void 0:(0,o.jsx)("span",{style:{whiteSpace:"pre-wrap"},children:x.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:A}=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)(l.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)(q,{showTooltipWhenEmpty:r,showModelName:n,playgroundSDK:A})]})}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),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).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:A="default",contentRef:l}=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,k]=(0,a.useState)(()=>String(Date.now())),x=(0,a.useRef)(null),S=!!(s&&n),C=["screenshot-viewer","screen-only"===A&&"screen-only"].filter(Boolean).join(" "),j=(0,a.useRef)(null),I=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!S)return;let e=window.setTimeout(()=>{let e=x.current;!e||e.naturalWidth>0||e.naturalHeight>0||k(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)(()=>{j.current&&clearInterval(j.current),console.log("Starting screenshot polling (5s interval)"),j.current=setInterval(()=>{!I.current&&n&&O(!1)},5e3)},[O,n]),T=(0,a.useCallback)(()=>{j.current&&(console.log("Stopping screenshot polling"),clearInterval(j.current),j.current=null)},[]),N=(0,a.useCallback)(()=>{console.log("Pausing screenshot polling"),I.current=!0},[]),M=(0,a.useCallback)(()=>{console.log("Resuming screenshot polling"),I.current=!1},[]),D=(0,a.useCallback)(()=>{O(!0)},[O]);if((0,a.useEffect)(()=>{if(!n){u(null),m(null),w(null),T();return}return(P(),S)?void T():(O(!1),R(),()=>{T()})},[n,S,R,T,O,P]),(0,a.useEffect)(()=>{n&&!S&&(i?N():(M(),O(!1)))},[i,N,M,O,n,S]),(0,a.useEffect)(()=>()=>{T()},[T]),!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:l,children:S?(0,o.jsx)("img",{ref:x,src:E?`${s}${(null==s?void 0:s.includes("?"))?"&":"?"}_mjpegRetry=${encodeURIComponent(E)}`:s,alt:"Device Live Stream",className:"screenshot-image",onError:()=>{window.setTimeout(()=>k(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"===A?(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),eA=r(2397);let el=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:A,keyboardEnabled:l=!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),k=(0,a.useRef)(null),x=(0,a.useRef)(null),S=(0,a.useCallback)(()=>{if(l){b.current=!0;let e=m.current;e&&document.activeElement!==e&&e.focus({preventScroll:!0})}},[l]),C=(0,a.useCallback)((e,t)=>{l&&Promise.resolve(t).catch(()=>void 0).then(()=>{window.setTimeout(()=>{b.current&&w.current===e&&S()},0)})},[S,l]),j=(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`},[]),I=(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}j(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,j]),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,A=Math.sqrt(a*a+s*s),l=Math.max(0,performance.now()-r.startTime),c=I(r.startX,r.startY,r.contentRect),u=I(e.clientX,e.clientY,r.contentRect);c&&u&&(E.current=u,A<=p&&l<=h?C(r.keyboardFocusRequestId,null==n?void 0:n(c)):null==i||i(c,u,Math.round(l)))},[n,i,I,C,p,h]),R=(0,a.useCallback)(e=>P(e,!1),[P]),T=(0,a.useCallback)(e=>P(e,!0),[P]),N=(0,a.useCallback)(()=>{let e=k.current;k.current=null,x.current&&(clearTimeout(x.current),x.current=null),e&&(null==A||A(e.point,{deltaX:e.deltaX,deltaY:e.deltaY}))},[A]),M=(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=I(e.clientX,e.clientY,i);if(!o)return;e.preventDefault(),e.stopPropagation();let a=k.current;k.current={point:o,deltaX:((null==a?void 0:a.deltaX)||0)+e.deltaX,deltaY:((null==a?void 0:a.deltaY)||0)+e.deltaY},x.current&&clearTimeout(x.current),x.current=setTimeout(N,80)},[d,r,t,N,I,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(l&&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)&&(el.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)}}},[l,u]),z=(0,a.useCallback)(e=>{var t;if(!l||!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))},[l,c]),L=(0,a.useCallback)(e=>{var t,r,n,i,o;if(!l||!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,l,u,c]);return((0,a.useEffect)(()=>{t||(y.current=null,k.current=null,x.current&&(clearTimeout(x.current),x.current=null),v.current=!1,b.current=!1,E.current=null)},[t]),(0,a.useEffect)(()=>{if(!t||!l){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,l]),(0,a.useEffect)(()=>()=>{x.current&&(clearTimeout(x.current),x.current=null)},[]),t&&r)?(0,o.jsx)("div",{ref:g,onPointerDown:O,onPointerUp:R,onPointerCancel:T,onWheel:M,onContextMenu:e=>e.preventDefault(),"data-midscene-device-interaction-layer":"true",style:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({position:"absolute",inset:0,zIndex:5,cursor:l?"default":"crosshair",outline:"none",color:"transparent",caretColor:"transparent",touchAction:"none",userSelect:"none"},f),children:l?(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(!l||!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),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).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:A,metadataTimeoutMs:l=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,k]=(0,a.useState)(null),[x,S]=(0,a.useState)(()=>em()),[C,j]=(0,a.useState)(!0),[I,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,x),[b,x]),R=("error"===b||"disconnected"===b)&&!!s,T=(0,a.useCallback)(()=>{w("connecting"),k(null),S(em()),O(e=>e+1)},[]);(0,a.useEffect)(()=>{null==i||i(b,P)},[i,b,P]);let N=()=>{let e=p.current;e&&e.replaceChildren()},M=()=>{f.current&&(f.current.dispose(),f.current=null)},D=()=>{g.current&&(clearTimeout(g.current),g.current=null)};return(0,a.useEffect)(()=>{if(!A){w("error"),k("scrcpy preview metadata is missing a server URL.");return}if(!es.p.isSupported){j(!1),w("error"),k("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),M(),N(),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"),k(null),S(em());let c=(0,eg.io)(A,{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"),k(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.`}(l)),S(em()),c.disconnect(),h.current=null,o())},l),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(),M(),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",N(),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"),k(t.message),o())}),S(em()),w("connected")}catch(t){if(e)return;w("error"),k(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"),k(null),S(em()),o()}}),c.on("connect_error",t=>{D(),e||(w("error"),k(t.message),S(em()),o())}),c.on("error",t=>{D(),e||(w("error"),k(t.message),S(em()),o())})};return t=setTimeout(()=>{t=null,a()},0),()=>{e=!0,i()}},[r,l,c,I,A]),(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:T,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 ek=["android","ios","web","harmony","computer"],ex=["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(ek.includes(e))return e}return t}function eC(e){return((null==e?void 0:e.executionUxHints)||[]).filter(e=>ex.includes(e))}function ej(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function eI(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){ej(o,n,i,a,s,"next",e)}function s(e){ej(o,n,i,a,s,"throw",e)}a(void 0)})}}function eO(e){var t,r;let{connectingOverlay:n,onDeviceSizeChange:i,onScrcpyStatusChange:s,renderErrorOverlay:A,scrcpyViewportStyle:l,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),A=Number.isFinite(s)?s:void 0,l=A&&n?((t=new URL(n)).port=String(A),t.pathname="/",t.search="",t.hash="",t.toString()):void 0;return{deviceId:a,type:"scrcpy",scrcpyPort:A,scrcpyUrl:l}}return{type:"screenshot"}}(d,h),[b,w]=(0,a.useState)(null),[E,k]=(0,a.useState)(null),[x,S]=(0,a.useState)(null),[C,j]=(0,a.useState)("connecting"),I=(0,a.useRef)(Promise.resolve()),O=(0,a.useRef)(""),P=(0,a.useRef)(null),R=(0,a.useRef)(null),T=(0,a.useRef)(null),N=(0,a.useRef)(null),M=null!=(t=null==x?void 0:x.includes("Tap"))&&t,D=(null==x?void 0:x.includes("Swipe"))?"Swipe":"DragAndDrop",B=(null==x?void 0:x.includes("KeyboardPress"))||(null==x?void 0:x.includes("Input"))||!1,z=null!=(r=null==x?void 0:x.includes("Scroll"))&&r,L=(0,a.useCallback)(e=>{let t=I.current.then(e,e);return I.current=t.catch(()=>void 0),t},[m]);(0,a.useEffect)(()=>{if(!f){w(null),S(null);return}let e=!1,t=()=>eI(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=T.current)?e:Promise.resolve();O.current="",P.current=null;let i=(null!=(t=T.current)?t:Promise.resolve()).catch(()=>void 0).then(()=>eI(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(()=>{T.current===i&&(T.current=null)});return T.current=i,T.current},[J,L,u,Z]),H=(0,a.useCallback)(e=>eI(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]),G=(0,a.useCallback)((e,t,r)=>eI(function*(){yield X();let n=yield L(()=>{var n,i,o,a,s,A;let l;return u.interact((n=D,i=e,o=t,a=r,l={actionType:n,x:i.x,y:i.y,endX:o.x,endY:o.y},"DragAndDrop"===n?l:(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}({},l),A=A={duration:a},Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(A)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(A)).forEach(function(e){Object.defineProperty(s,e,Object.getOwnPropertyDescriptor(A,e))}),s)))});n.ok||Z(`${D} failed`,n.error)})(),[L,X,D,u,Z]),V=(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 q=(0,a.useCallback)(e=>eI(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)=>eI(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)=>{j(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)(eA.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:k,onStatusChange:Y,renderErrorOverlay:A,serverUrl:v.scrcpyUrl,viewportStyle:l,contentRef:N}):(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:N}),(0,o.jsx)(ed,{enabled:M&&f&&Q,deviceSize:b,contentRef:N,onTap:H,onSwipe:G,scrollEnabled:z,onWheelScroll:W,keyboardEnabled:B,onTextInput:V,onKeyboardPress:q})]})}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 eT(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 eN=r(4565),eM=r(217),eD=r(6987);let eB=()=>{let e=(0,eM.j)(eD.v4),t="";e&&(console.warn("MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),t="ai:profile"),(0,eM.j)(eD.$l)&&(console.warn("MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),t=t?"ai:*":"ai:call"),t&&(0,eN.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},eG=(e,t)=>{let r=(0,eN.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,eN.a)("ai:config")("enter parseOpenaiSdkConfig with keys:",o);let A=s?a[eD.Jq]:void 0,l=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]||A,g=a[o.openaiBaseURL]||l,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],k=eX(o.extraBody,E),x=(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.1 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:k,modelFamily:h,uiTarsModelVersion:S,modelName:v,modelDescription:C,intent:"-",slot:"-",timeout:a[o.timeout]?Number(a[o.timeout]):void 0,temperature:x,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 eV(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eq{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=eG("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=eG("insight",t),i=eG("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){eV(this,"modelConfigMap",void 0),eV(this,"isInitialized",!1),eV(this,"isolatedMode",!1),eV(this,"globalConfigManager",void 0),eV(this,"modelConfig",void 0),eV(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let eW=new eq,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(6990);function e2(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 e3(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==e)return e;if(Array.isArray(e))return e.map(e=>e3(e,t));if("object"==typeof e){let n={};for(let[i,o]of Object.entries(e)){var r;let e=i.trim(),a=(null==(r=t.preserveStringValueKeys)?void 0:r.includes(e))??!1,s="string"==typeof o?a?o:o.trim():e3(o,t);n[e]=s}return n}return"string"==typeof e?e.trim():e}function e5(e,t){let r=((e,t,r)=>{var n;let i,o;if(null==e?void 0:e.match(/\((\d+),(\d+)\)/))return null==(n=e.match(/\((\d+),(\d+)\)/))?void 0:n.slice(1).map(Number);try{return i=JSON.parse(e),e3(i,r)}catch(e){o=e}try{return i=JSON.parse((0,e1.m)(e)),e3(i,r)}catch(e){o=e}return{parsed:void 0,lastError:o,rawResponse:t}})(e2(e),e,t);if(r&&"object"==typeof r&&"parsed"in r&&void 0===r.parsed)throw Error(`failed to parse LLM response into JSON. Error - ${String(r.lastError??"unknown error")}. Response -
3
- ${e}`);return r}let e7=e=>void 0,e4=e=>{let{midsceneDefaults:t,userConfig:r}=e;return{config:{temperature:r.temperature??t.temperature}}},e8={temperature:0},e6=[[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 e9(e){let{shape:t}=e,{plural:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"bbox"===t?r?"bounding boxes":"bounding box":r?"points":"point"}function te(e){return Math.max(e-1,0)}function tt(e,t,r){return Math.round(e*te(r)/t)}function tr(e,t,r){return Math.min(Math.max(e,t),r)}function tn(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,A=te(r),l=te(n);if(i<0||o<0||a>A||s>l)throw Error(`locate pixel bbox is outside the image size: bbox=${JSON.stringify(t)} imageSize=${r}x${n}`)}(e,t,o,a);let s=te((null==i?void 0:i.width)??o),A=te((null==i?void 0:i.height)??a),[l,c,u,d]=e;return[tr(l,0,s),tr(c,0,A),tr(u,0,s),tr(d,0,A)]}function ti(e){return Array.isArray(e)&&Array.isArray(e[0])?e[0]:e}function to(e,t){let r=ti(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 ta(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 ts={primary:{bbox:["bbox","bbox_2d"],point:["point"]},references:{bbox:["references_bbox","references_bbox_2d"],point:["references_point"]}};function tA(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 tl(e,t,r){let n=ts[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 tc(e){let t,r,n,i,o,a="custom"===e.kind?e:(t=tA(e.coordinates),r=e.parseRawLocateValue??(e=>(function(e,t){if("point"===e.shape){let r=to(t,"point");if(r.length<2)throw Error(`invalid point data: ${JSON.stringify(t)} `);return ta(e,r)}let r=to(t,"bbox");if(4!==r.length)throw Error(`invalid bbox data: ${JSON.stringify(t)} `);return ta(e,r)})(t,e)),n=e.mapLocateResultToPixelBbox??((e,t)=>(function(e,t){var r,n,i,o,a;let{preparedSize:s}=t,{width:A,height:l}=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 A=void 0!==a?`normalized range [0, ${a}]`:`image size [0, ${t}]x[0, ${r}]`,l=void 0!==a?` normalizedBy=${a}`:"";throw Error(`locate result coordinates ${JSON.stringify(e.coordinates)} exceed ${A}. shape=${o.shape} order=${o.order}${l} limits=${JSON.stringify(s)}`)}(e,A,l);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??te(A),o=u??te(l),[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[tt(i,t,r),tt(o,t,n),tt(a,t,r),tt(s,t,n)]}(p,u,A,l)})(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=tl(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:e9(t),resultNounPlural:e9(t,{plural:!0}),exampleValues:e6.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=tl(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)=>tn(a.adaptElementLocateResultToPixelBbox(e,t),e,t),adaptSectionLocateResultToPixelBboxGroup:(e,t)=>{var r;return r=a.adaptSectionLocateResultToPixelBboxGroup(e,t),{target:tn(r.target,e,t),...r.references?{references:r.references.map(r=>tn(r,e,t))}:{}}},adaptPlanningParamToPixelBbox:(e,t)=>tn(a.adaptPlanningParamToPixelBbox(e,t),e,t)}}var tu=r(6448),td=r(6732),tp=r.n(td),th=r(4201),tf=r(5592),tg=r(3078),tm=r.n(tg);let ty=(0,eN.a)("img"),tv=null,tb=!1;async function tw(){if(tv&&tb)return tv;let e=eQ.ht?"browser":eQ.rS?"worker":eQ.$9?"node":"unknown";ty(`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(),ty("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)),ty("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 tb=!0,tv}catch(e){if(ty(`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(),tb=!0,tv}catch(e){ty(`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 tE(){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 tk=(0,eN.a)("img");async function tx(e,t,r){if("string"==typeof t)throw Error("inputData is base64, use resizeImgBase64 instead");tp()(r&&r.width>0&&r.height>0,"newSize must be positive");let n=Date.now();if(tk(`resizeImg start, target size: ${r.width}x${r.height}`),eQ.$9)try{let i=await tE(),{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(),A=Date.now();return tk(`resizeImg done (Sharp), target size: ${r.width}x${r.height}, cost: ${A-n}ms`),{buffer:s,format:"jpeg"}}catch(e){tk("Sharp failed, falling back to Photon:",e)}let{PhotonImage:i,SamplingFilter:o,resize:a}=await tw(),s=new Uint8Array(t),A=i.new_from_byteslice(s),l=A instanceof Promise?await A:A,c=l.get_width(),u=l.get_height();if(!c||!u)throw l.free(),Error("Undefined width or height from the input image.");if(r.width===c&&r.height===u)return l.free(),{buffer:t,format:e};let d=a(l,r.width,r.height,o.CatmullRom),p=d.get_bytes_jpeg(90),h=th.Buffer.from(p);l.free(),d.free();let f=Date.now();return tk(`resizeImg done (Photon), target size: ${r.width}x${r.height}, cost: ${f-n}ms`),{buffer:h,format:"jpeg"}}let tS=/^data:image\/(png|jpe?g);base64,([\s\S]*)$/i,tC=/^[A-Za-z0-9+/=\s]+$/,tj=(e,t)=>`data:image/${e};base64,${t.replace(/\s/g,"")}`;async function tI(e,t){let{body:r,mimeType:n}=tz(e),i=th.Buffer.from(r,"base64"),{buffer:o,format:a}=await tx(n.split("/")[1],i,t);return tj(a,o.toString("base64"))}async function tO(e){let{PhotonImage:t}=await tw(),{body:r}=tz(e),n=t.new_from_base64(r);return n instanceof Promise?await n:n}async function tP(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:A}=await tw(),l=i-r,c=o-n,u=e;if(l>0&&(u=a(u,l,new A(255,255,255,255))),c>0){let t=new A(255,255,255,255),r=u;u=s(r,c,t),r!==e&&r.free()}return{width:i,height:o,image:u}}async function tR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28,r=await tO(e);try{let e=await tP(r,t),n={width:e.width,height:e.height,imageBase64:await tN(e.image)};return e.image!==r&&e.image.free(),n}finally{r.free()}}async function tT(e,t){let{crop:r}=await tw(),n=await tO(e),{left:i,top:o,width:a,height:s}=t,A=r(n,i,o,i+a,o+s);n.free();try{return{width:A.get_width(),height:A.get_height(),imageBase64:await tN(A)}}finally{A.free()}}async function tN(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90,r=e.get_bytes_jpeg(t),n=th.Buffer.from(r).toString("base64");return`data:image/jpeg;base64,${n}`}let tM=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}`);tp()(r.startsWith("image/"),`The url ${e} is not a image, because of content-type in header is ${r}.`);let n=th.Buffer.from(await t.arrayBuffer());return`data:${r};base64,${n.toString("base64")}`},tD=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,tf.readFileSync)(e).toString("base64");if(t)return r;let n=tm().extname(e).slice(1);return`data:image/${"svg"===n?"svg+xml":n||"jpg"};base64,${r}`},tB=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}=tz(e);return`data:${t};base64,${r}`}return e.startsWith("http://")||e.startsWith("https://")?t?await tM(e):e:await tD(e)},tz=e=>{try{let r=";base64,",n=e.indexOf(r);if(-1===n){var t;let r=e.replace(/\s/g,""),n=(t=th.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 tL(e,t){if(t<=0)throw Error("Scale factor must be positive");let{body:r}=tz(e),n=th.Buffer.from(r,"base64"),i=Date.now();if(tk(`scaleImage start, scale factor: ${t}`),eQ.$9)try{let e=await tE(),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),A=Math.round(a*t),l=await e(n).resize(s,A,{kernel:"lanczos3",fit:"fill"}).jpeg({quality:90}).toBuffer(),c=Date.now();tk(`scaleImage done (Sharp): ${o}x${a} -> ${s}x${A} (scale=${t}), cost: ${c-i}ms`);let u=`data:image/jpeg;base64,${l.toString("base64")}`;return{width:s,height:A,imageBase64:u}}catch(e){tk("Sharp failed, falling back to Photon:",e)}let{PhotonImage:o,SamplingFilter:a,resize:s}=await tw(),A=new Uint8Array(n),l=o.new_from_byteslice(A),c=l instanceof Promise?await l:l,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=th.Buffer.from(g);c.free(),f.free();let y=Date.now();return tk(`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 tF(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,A=Math.sqrt(16e4/o),l=Math.round(i.width*A),c=Math.round(i.height*A),u=Math.max(Math.round(a-l/2),0),d=Math.max(Math.round(s-c/2),0);return{left:u,top:d,width:Math.min(l,t.width-u),height:Math.min(c,t.height-d)}}function tK(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 tU=tu.Ik({left:tu.ai(),top:tu.ai()}),tQ=tu.Ik({width:tu.ai(),height:tu.ai()});tU.and(tQ).and(tu.Ik({zoom:tu.ai().optional()}));let tZ=tu.Ik({images:tu.YO(tu.Ik({name:tu.Yj(),url:tu.Yj()})).optional(),convertHttpImage2Base64:tu.zM().optional()}),tJ=tu.KC([tu.Yj(),tu.Ik({prompt:tu.Yj()}).and(tZ.partial())]),tX=e=>"string"==typeof e?e:e.prompt,tH=e=>{if("string"!=typeof e&&e.images)return{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}},tG=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 tB(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},tV=tu.Ik({prompt:tJ,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(),tq=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},tW=(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")}):[]},tY=(e,t)=>{if(!(0,eQ.Qd)(e))return{};let r=tW(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]=tq(t.prompt))))}return n},t_=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"),A=String(r.getSeconds()).padStart(2,"0"),l=e.replace("YYYY",String(n)).replace("MM",i).replace("DD",o).replace("HH",a).replace("mm",s).replace("ss",A);return`${l} (${e})`};var t$=r(6970),t0=r(2801),t1=r(4201).Buffer,t2={"node:fs"(e){e.exports=t0}},t3={};function t5(e){var t=t3[e];if(void 0!==t)return t.exports;var r=t3[e]={exports:{}};return t2[e](r,r.exports,t5),r.exports}var t7=t5("node:fs");let t4=eQ.NB,t8=eQ.x3;function t6(){return"<\/script>"}function t9(e,t,r,n){let i=(0,t7.openSync)(e,"r"),o=(0,t7.statSync)(e).size,a=t1.alloc(65536),s=0,A="",l=!1,c="";try{for(;s<o;){let e=(0,t7.readSync)(i,a,0,65536,s),o=A+a.toString("utf-8",0,e);s+=e;let u=0;for(;u<o.length;)if(l){let e=o.indexOf(r,u);if(-1!==e){if(c+=o.slice(u,e),n(c))return;l=!1,c="",u=e+r.length}else{c+=o.slice(u,-r.length),A=o.slice(-r.length);break}}else{let e=o.indexOf(t,u);if(-1!==e){l=!0;let i=(c=o.slice(e+t.length)).indexOf(r);if(-1!==i){if(n(c.slice(0,i)))return;l=!1,c="",u=e+t.length+i+r.length}else{A=c.slice(-r.length),c=c.slice(0,-r.length);break}}else{A=o.slice(-t.length);break}}}}finally{(0,t7.closeSync)(i)}}function re(e,t){let r=`<script type="midscene-image" data-id="${t}">`,n=t6(),i=null;return t9(e,r,n,e=>(i=t8(e),!0)),i}function rt(){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)})()'+t6()+"\n"),n}let rr="data-screenshot-mode";function rn(e,t){let r=t6(),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+">"+t4(e)+r}var ri=r(6390),ro=r(4201).Buffer;function ra(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rs(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 rA(e,t){let r=rs(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,tg.isAbsolute)(e)?e:(0,tg.join)((0,tg.dirname)(t.reportPath),e));if((0,t0.existsSync)(o))return{type:"file",id:n,mimeType:i,filePath:o}}let o=re(t.reportPath,n);if(o)return{type:"data-uri",id:n,mimeType:i,dataUri:o};let a=(0,tg.join)((0,tg.dirname)(t.reportPath),"screenshots",`${n}.${"image/jpeg"===i?"jpeg":"png"}`);if((0,t0.existsSync)(a))return{type:"file",id:n,mimeType:i,filePath:a};throw Error(`ScreenshotStore: cannot resolve screenshot "${n}" from ${t.reportPath}`)}class rl{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,t0.existsSync)(r)||(0,t0.mkdirSync)(r,{recursive:!0});let n=`./screenshots/${e.id}.${e.extension}`,i=(0,tg.join)(r,`${e.id}.${e.extension}`);if(!this.writtenFileIds.has(e.id)){let t=ro.from(e.rawBase64,"base64");await (0,ri.writeFile)(i,t),this.writtenFileIds.add(e.id)}return t.markAsPersisted?e.markPersistedToPath(n,i):e.registerPersistedFileCopy(n,i)}loadBase64(e){let t=rs(e);if(!t)throw Error("ScreenshotStore: invalid screenshot reference");let r=rA(t,{reportPath:this.reportPath});if("data-uri"===r.type)return r.dataUri;let n=(0,t0.readFileSync)(r.filePath);return`data:${r.mimeType};base64,${n.toString("base64")}`}cleanup(){"directory"===this.mode&&this.screenshotsDir&&(0,t0.existsSync)(this.screenshotsDir)&&(0,t0.rmSync)(this.screenshotsDir,{recursive:!0,force:!0}),this.writtenInlineIds.clear(),this.writtenFileIds.clear()}constructor(e){ra(this,"mode",void 0),ra(this,"reportPath",void 0),ra(this,"screenshotsDir",void 0),ra(this,"writeInlineImage",void 0),ra(this,"alsoWriteFileCopy",void 0),ra(this,"writtenInlineIds",new Set),ra(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 rc(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ru{static create(e,t){return new ru((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,t$.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=re(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!==rs(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){rc(this,"_id",void 0),rc(this,"_base64",void 0),rc(this,"_format",void 0),rc(this,"_capturedAt",void 0),rc(this,"_serializedRef",null),rc(this,"_persistedPath",null),rc(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 rd(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 rp{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=`
1
+ /*! For license information please see index.f720647c.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},8087(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 G(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 V(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 q(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);G(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){V(o,n,i,a,s,"next",e)}function s(e){V(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)(q,{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]),G=(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]),V=(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 q=(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:G,scrollEnabled:z,onWheelScroll:W,keyboardEnabled:B,onTextInput:V,onKeyboardPress:q})]})}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},eG=(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.2 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 eV(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eq{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=eG("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=eG("insight",t),i=eG("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){eV(this,"modelConfigMap",void 0),eV(this,"isInitialized",!1),eV(this,"isolatedMode",!1),eV(this,"globalConfigManager",void 0),eV(this,"modelConfig",void 0),eV(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let eW=new eq,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(6990);function e2(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 e3(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==e)return e;if(Array.isArray(e))return e.map(e=>e3(e,t));if("object"==typeof e){let n={};for(let[i,o]of Object.entries(e)){var r;let e=i.trim(),a=(null==(r=t.preserveStringValueKeys)?void 0:r.includes(e))??!1,s="string"==typeof o?a?o:o.trim():e3(o,t);n[e]=s}return n}return"string"==typeof e?e.trim():e}function e5(e,t){let r=((e,t,r)=>{var n;let i,o;if(null==e?void 0:e.match(/\((\d+),(\d+)\)/))return null==(n=e.match(/\((\d+),(\d+)\)/))?void 0:n.slice(1).map(Number);try{return i=JSON.parse(e),e3(i,r)}catch(e){o=e}try{return i=JSON.parse((0,e1.m)(e)),e3(i,r)}catch(e){o=e}return{parsed:void 0,lastError:o,rawResponse:t}})(e2(e),e,t);if(r&&"object"==typeof r&&"parsed"in r&&void 0===r.parsed)throw Error(`failed to parse LLM response into JSON. Error - ${String(r.lastError??"unknown error")}. Response -
3
+ ${e}`);return r}let e7=e=>void 0,e4=e=>{let{midsceneDefaults:t,userConfig:r}=e;return{config:{temperature:r.temperature??t.temperature}}},e8={temperature:0},e6=[[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 e9(e){let{shape:t}=e,{plural:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"bbox"===t?r?"bounding boxes":"bounding box":r?"points":"point"}function te(e){return Math.max(e-1,0)}function tt(e,t,r){return Math.round(e*te(r)/t)}function tr(e,t,r){return Math.min(Math.max(e,t),r)}function tn(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=te(r),A=te(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=te((null==i?void 0:i.width)??o),l=te((null==i?void 0:i.height)??a),[A,c,u,d]=e;return[tr(A,0,s),tr(c,0,l),tr(u,0,s),tr(d,0,l)]}function ti(e){return Array.isArray(e)&&Array.isArray(e[0])?e[0]:e}function to(e,t){let r=ti(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 ta(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 ts={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 tA(e,t,r){let n=ts[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 tc(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=to(t,"point");if(r.length<2)throw Error(`invalid point data: ${JSON.stringify(t)} `);return ta(e,r)}let r=to(t,"bbox");if(4!==r.length)throw Error(`invalid bbox data: ${JSON.stringify(t)} `);return ta(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??te(l),o=u??te(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[tt(i,t,r),tt(o,t,n),tt(a,t,r),tt(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=tA(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:e9(t),resultNounPlural:e9(t,{plural:!0}),exampleValues:e6.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=tA(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)=>tn(a.adaptElementLocateResultToPixelBbox(e,t),e,t),adaptSectionLocateResultToPixelBboxGroup:(e,t)=>{var r;return r=a.adaptSectionLocateResultToPixelBboxGroup(e,t),{target:tn(r.target,e,t),...r.references?{references:r.references.map(r=>tn(r,e,t))}:{}}},adaptPlanningParamToPixelBbox:(e,t)=>tn(a.adaptPlanningParamToPixelBbox(e,t),e,t)}}var tu=r(6448),td=r(6732),tp=r.n(td),th=r(4201),tf=r(5592),tg=r(3078),tm=r.n(tg);let ty=(0,eT.a)("img"),tv=null,tb=!1;async function tw(){if(tv&&tb)return tv;let e=eQ.ht?"browser":eQ.rS?"worker":eQ.$9?"node":"unknown";ty(`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(),ty("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)),ty("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 tb=!0,tv}catch(e){if(ty(`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(),tb=!0,tv}catch(e){ty(`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 tE(){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 tx=(0,eT.a)("img");async function tk(e,t,r){if("string"==typeof t)throw Error("inputData is base64, use resizeImgBase64 instead");tp()(r&&r.width>0&&r.height>0,"newSize must be positive");let n=Date.now();if(tx(`resizeImg start, target size: ${r.width}x${r.height}`),eQ.$9)try{let i=await tE(),{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 tx(`resizeImg done (Sharp), target size: ${r.width}x${r.height}, cost: ${l-n}ms`),{buffer:s,format:"jpeg"}}catch(e){tx("Sharp failed, falling back to Photon:",e)}let{PhotonImage:i,SamplingFilter:o,resize:a}=await tw(),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=th.Buffer.from(p);A.free(),d.free();let f=Date.now();return tx(`resizeImg done (Photon), target size: ${r.width}x${r.height}, cost: ${f-n}ms`),{buffer:h,format:"jpeg"}}let tS=/^data:image\/(png|jpe?g);base64,([\s\S]*)$/i,tC=/^[A-Za-z0-9+/=\s]+$/,tI=(e,t)=>`data:image/${e};base64,${t.replace(/\s/g,"")}`;async function tj(e,t){let{body:r,mimeType:n}=tz(e),i=th.Buffer.from(r,"base64"),{buffer:o,format:a}=await tk(n.split("/")[1],i,t);return tI(a,o.toString("base64"))}async function tO(e){let{PhotonImage:t}=await tw(),{body:r}=tz(e),n=t.new_from_base64(r);return n instanceof Promise?await n:n}async function tP(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 tw(),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 tR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:28,r=await tO(e);try{let e=await tP(r,t),n={width:e.width,height:e.height,imageBase64:await tT(e.image)};return e.image!==r&&e.image.free(),n}finally{r.free()}}async function tM(e,t){let{crop:r}=await tw(),n=await tO(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 tT(l)}}finally{l.free()}}async function tT(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:90,r=e.get_bytes_jpeg(t),n=th.Buffer.from(r).toString("base64");return`data:image/jpeg;base64,${n}`}let tN=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}`);tp()(r.startsWith("image/"),`The url ${e} is not a image, because of content-type in header is ${r}.`);let n=th.Buffer.from(await t.arrayBuffer());return`data:${r};base64,${n.toString("base64")}`},tD=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,tf.readFileSync)(e).toString("base64");if(t)return r;let n=tm().extname(e).slice(1);return`data:image/${"svg"===n?"svg+xml":n||"jpg"};base64,${r}`},tB=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}=tz(e);return`data:${t};base64,${r}`}return e.startsWith("http://")||e.startsWith("https://")?t?await tN(e):e:await tD(e)},tz=e=>{try{let r=";base64,",n=e.indexOf(r);if(-1===n){var t;let r=e.replace(/\s/g,""),n=(t=th.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 tL(e,t){if(t<=0)throw Error("Scale factor must be positive");let{body:r}=tz(e),n=th.Buffer.from(r,"base64"),i=Date.now();if(tx(`scaleImage start, scale factor: ${t}`),eQ.$9)try{let e=await tE(),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();tx(`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){tx("Sharp failed, falling back to Photon:",e)}let{PhotonImage:o,SamplingFilter:a,resize:s}=await tw(),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=th.Buffer.from(g);c.free(),f.free();let y=Date.now();return tx(`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 tF(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 tK(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 tU=tu.Ik({left:tu.ai(),top:tu.ai()}),tQ=tu.Ik({width:tu.ai(),height:tu.ai()});tU.and(tQ).and(tu.Ik({zoom:tu.ai().optional()}));let tZ=tu.Ik({images:tu.YO(tu.Ik({name:tu.Yj(),url:tu.Yj()})).optional(),convertHttpImage2Base64:tu.zM().optional()}),tJ=tu.KC([tu.Yj(),tu.Ik({prompt:tu.Yj()}).and(tZ.partial())]),tX=e=>"string"==typeof e?e:e.prompt,tH=e=>{if("string"!=typeof e&&e.images)return{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}},tG=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 tB(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},tV=tu.Ik({prompt:tJ,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(),tq=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},tW=(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")}):[]},tY=(e,t)=>{if(!(0,eQ.Qd)(e))return{};let r=tW(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]=tq(t.prompt))))}return n},t_=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 t$=r(6970),t0=r(2801),t1=r(4201).Buffer,t2={"node:fs"(e){e.exports=t0}},t3={};function t5(e){var t=t3[e];if(void 0!==t)return t.exports;var r=t3[e]={exports:{}};return t2[e](r,r.exports,t5),r.exports}var t7=t5("node:fs");let t4=eQ.NB,t8=eQ.x3;function t6(){return"<\/script>"}function t9(e,t,r,n){let i=(0,t7.openSync)(e,"r"),o=(0,t7.statSync)(e).size,a=t1.alloc(65536),s=0,l="",A=!1,c="";try{for(;s<o;){let e=(0,t7.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,t7.closeSync)(i)}}function re(e,t){let r=`<script type="midscene-image" data-id="${t}">`,n=t6(),i=null;return t9(e,r,n,e=>(i=t8(e),!0)),i}function rt(){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)})()'+t6()+"\n"),n}let rr="data-screenshot-mode";function rn(e,t){let r=t6(),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+">"+t4(e)+r}var ri=r(6390),ro=r(4201).Buffer;function ra(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rs(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 rl(e,t){let r=rs(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,tg.isAbsolute)(e)?e:(0,tg.join)((0,tg.dirname)(t.reportPath),e));if((0,t0.existsSync)(o))return{type:"file",id:n,mimeType:i,filePath:o}}let o=re(t.reportPath,n);if(o)return{type:"data-uri",id:n,mimeType:i,dataUri:o};let a=(0,tg.join)((0,tg.dirname)(t.reportPath),"screenshots",`${n}.${"image/jpeg"===i?"jpeg":"png"}`);if((0,t0.existsSync)(a))return{type:"file",id:n,mimeType:i,filePath:a};throw Error(`ScreenshotStore: cannot resolve screenshot "${n}" from ${t.reportPath}`)}class rA{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,t0.existsSync)(r)||(0,t0.mkdirSync)(r,{recursive:!0});let n=`./screenshots/${e.id}.${e.extension}`,i=(0,tg.join)(r,`${e.id}.${e.extension}`);if(!this.writtenFileIds.has(e.id)){let t=ro.from(e.rawBase64,"base64");await (0,ri.writeFile)(i,t),this.writtenFileIds.add(e.id)}return t.markAsPersisted?e.markPersistedToPath(n,i):e.registerPersistedFileCopy(n,i)}loadBase64(e){let t=rs(e);if(!t)throw Error("ScreenshotStore: invalid screenshot reference");let r=rl(t,{reportPath:this.reportPath});if("data-uri"===r.type)return r.dataUri;let n=(0,t0.readFileSync)(r.filePath);return`data:${r.mimeType};base64,${n.toString("base64")}`}cleanup(){"directory"===this.mode&&this.screenshotsDir&&(0,t0.existsSync)(this.screenshotsDir)&&(0,t0.rmSync)(this.screenshotsDir,{recursive:!0,force:!0}),this.writtenInlineIds.clear(),this.writtenFileIds.clear()}constructor(e){ra(this,"mode",void 0),ra(this,"reportPath",void 0),ra(this,"screenshotsDir",void 0),ra(this,"writeInlineImage",void 0),ra(this,"alsoWriteFileCopy",void 0),ra(this,"writtenInlineIds",new Set),ra(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 rc(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ru{static create(e,t){return new ru((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,t$.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=re(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!==rs(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){rc(this,"_id",void 0),rc(this,"_base64",void 0),rc(this,"_format",void 0),rc(this,"_capturedAt",void 0),rc(this,"_serializedRef",null),rc(this,"_persistedPath",null),rc(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 rd(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 rp{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=`
4
4
  Current sub-goal is: ${t.description}`,t.logs&&t.logs.length>0)){let e=t.logs.map(e=>`- ${e}`).join("\n");r+=`
5
5
  Actions performed for current sub-goal:
6
6
  ${e}`}return`Sub-goals:
@@ -8,8 +8,8 @@ ${e.join("\n")}${r}`}appendHistoricalLog(e){e&&this.historicalLogs.push(e)}histo
8
8
  ${e}`}appendMemory(e){e&&this.memories.push(e)}getMemories(){return[...this.memories]}memoriesToText(){return 0===this.memories.length?"":`Memories from previous steps:
9
9
  ---
10
10
  ${this.memories.join("\n---\n")}
11
- `}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;rd(this,"messages",[]),rd(this,"subGoals",[]),rd(this,"memories",[]),rd(this,"historicalLogs",[]),rd(this,"pendingFeedbackMessage",void 0),(null==e||null==(t=e.initialMessages)?void 0:t.length)&&this.seed(e.initialMessages),this.pendingFeedbackMessage=""}}async function rh(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 tR(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 rf=(0,eN.a)("planning");function rg(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 rf("skip locate normalization for action outside actionSpace",e);rf("actionInActionSpace matched",t);let a=tW(t.paramSchema);rf("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 rm(e,t,r){var n,i;let o,a,s,{context:A}=t,l=await rh({imageBase64:A.screenshot.base64,width:A.shotSize.width,height:A.shotSize.height,policy:t.modelRuntime.adapter.imagePreprocess}),c={...t,context:{...A,screenshot:ru.create(l.imageBase64,A.screenshot.capturedAt),shotSize:l.preparedSize}},u={userInstruction:e,userInstructionText:tX(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>
12
- `:""),A=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:A}]},...r.referenceImageMessages??[],...i.snapshot(t.historyImageLimit)]:[{role:"user",content:`${s}${A}`},...r.referenceImageMessages??[],...i.snapshot(t.historyImageLimit)]}(u,r.messages),{content:p,usage:h,rawChoiceMessage:f}=await nO(d,c.modelRuntime,{abortSignal:c.abortSignal,requiresOriginalImageDetail:c.includeLocateInPlanning});try{o=r.parseResponse(p,u),a=r.transformActions(o,u),rg(a,{actionSpace:c.actionSpace,includeLocateInPlanning:c.includeLocateInPlanning,locateResultAdapter:r.coordinateNormalizer,locateResultContext:{preparedSize:l.preparedSize,contentSize:l.contentSize}}),s=r.shouldContinuePlanning(o,a)}catch(e){throw new nS(`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,eN.a)("ai:inspect"),rv=[{name:"Tap",description:"Tap the element",paramSchema:tu.Ik({locate:tV}),call:async()=>void 0}];async function rb(e){let{options:t,locateImage:r}=e,{context:n}=t;return{...t,context:{...n,screenshot:ru.create(r.imageBase64,n.screenshot.capturedAt),shotSize:{width:r.width,height:r.height}},actionSpace:rv,conversationHistory:new rp,includeLocateInPlanning:!0,referenceImageMessages:e.referenceImageMessages}}let rw={coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}};function rE(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class rk{constructor(e,t){var r;rE(this,"jsonParser",void 0),rE(this,"chatCompletion",void 0),rE(this,"imagePreprocess",void 0),rE(this,"planning",void 0),rE(this,"locate",void 0),this.jsonParser=function(e){if(!e||"lenient-json"===e)return e5;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)??e4,o=(null==e?void 0:e.resolveImageDetail)??e7,a=(null==e?void 0:e.unsupportedUserConfig)??[];return{unsupportedUserConfig:a,buildChatCompletionParams:e=>i({...e,userConfig:e.userConfig??{},midsceneDefaults:e8}),resolveImageDetail:e=>o({...e,userConfig:e.userConfig??{},midsceneDefaults:e8}),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=tA(t),i=tc({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)=>rm(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=[],A="",l="";try{let t=await rb(r),s=await rm(e,t,n);l=s.rawResponse??"",o=s.rawChoiceMessage,a=s.usage,A=s.log,ry("planning-tap-locator rawResponse:",l);let c=i.getLocatedPixelBbox(s.actions??[]);if(!c)throw Error("No locatedPixelBbox found in planner response");return{locatedPixelBbox:c,rawResponse:l,rawChoiceMessage:o,usage:a,reasoningContent:A}}catch(t){let e=t instanceof Error?t.message:String(t);t instanceof nS&&(l=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:l,rawChoiceMessage:o,usage:a,reasoningContent:A,errors:s}}}return{kind:"custom",supportsSearchArea:e.supportsSearchArea??!1,locateFn:r}}return{kind:"standard",supportsSearchArea:(null==e?void 0:e.supportsSearchArea)??!0,resultAdapter:tc((null==e?void 0:e.resultAdapter)??rw)}}(e.locate,i)}}function rx(e){for(let t of e)if("Tap"===t.type)return t.param.locate.locatedPixelBbox}function rS(){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 rC(){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 rj=(0,eN.a)("auto-glm-actions"),rI=["AndroidBackButton","HarmonyBackButton"],rO=["AndroidHomeButton","HarmonyHomeButton"];function rP(e,t,r){if(!e)return r;let n=e.find(e=>t.includes(e.name));return n?n.name:r}let rR=(0,eN.a)("auto-glm-parser"),rT=(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 rN(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?`
11
+ `}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;rd(this,"messages",[]),rd(this,"subGoals",[]),rd(this,"memories",[]),rd(this,"historicalLogs",[]),rd(this,"pendingFeedbackMessage",void 0),(null==e||null==(t=e.initialMessages)?void 0:t.length)&&this.seed(e.initialMessages),this.pendingFeedbackMessage=""}}async function rh(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 tR(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 rf=(0,eT.a)("planning");function rg(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 rf("skip locate normalization for action outside actionSpace",e);rf("actionInActionSpace matched",t);let a=tW(t.paramSchema);rf("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 rm(e,t,r){var n,i;let o,a,s,{context:l}=t,A=await rh({imageBase64:l.screenshot.base64,width:l.shotSize.width,height:l.shotSize.height,policy:t.modelRuntime.adapter.imagePreprocess}),c={...t,context:{...l,screenshot:ru.create(A.imageBase64,l.screenshot.capturedAt),shotSize:A.preparedSize}},u={userInstruction:e,userInstructionText:tX(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>
12
+ `:""),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 nO(d,c.modelRuntime,{abortSignal:c.abortSignal,requiresOriginalImageDetail:c.includeLocateInPlanning});try{o=r.parseResponse(p,u),a=r.transformActions(o,u),rg(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 nS(`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"),rv=[{name:"Tap",description:"Tap the element",paramSchema:tu.Ik({locate:tV}),call:async()=>void 0}];async function rb(e){let{options:t,locateImage:r}=e,{context:n}=t;return{...t,context:{...n,screenshot:ru.create(r.imageBase64,n.screenshot.capturedAt),shotSize:{width:r.width,height:r.height}},actionSpace:rv,conversationHistory:new rp,includeLocateInPlanning:!0,referenceImageMessages:e.referenceImageMessages}}let rw={coordinates:{shape:"bbox",order:"xy",normalizedBy:1e3}};function rE(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class rx{constructor(e,t){var r;rE(this,"jsonParser",void 0),rE(this,"chatCompletion",void 0),rE(this,"imagePreprocess",void 0),rE(this,"planning",void 0),rE(this,"locate",void 0),this.jsonParser=function(e){if(!e||"lenient-json"===e)return e5;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)??e4,o=(null==e?void 0:e.resolveImageDetail)??e7,a=(null==e?void 0:e.unsupportedUserConfig)??[];return{unsupportedUserConfig:a,buildChatCompletionParams:e=>i({...e,userConfig:e.userConfig??{},midsceneDefaults:e8}),resolveImageDetail:e=>o({...e,userConfig:e.userConfig??{},midsceneDefaults:e8}),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=tc({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)=>rm(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 rb(r),s=await rm(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 nS&&(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:tc((null==e?void 0:e.resultAdapter)??rw)}}(e.locate,i)}}function rk(e){for(let t of e)if("Tap"===t.type)return t.param.locate.locatedPixelBbox}function rS(){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 rC(){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 rI=(0,eT.a)("auto-glm-actions"),rj=["AndroidBackButton","HarmonyBackButton"],rO=["AndroidHomeButton","HarmonyHomeButton"];function rP(e,t,r){if(!e)return r;let n=e.find(e=>t.includes(e.name));return n?n.name:r}let rR=(0,eT.a)("auto-glm-parser"),rM=(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 rT(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?`
13
13
  The current date: ${rS()}
14
14
 
15
15
  # Setup
@@ -136,7 +136,7 @@ REMEMBER:
136
136
  16. 在做游戏任务时如果在战斗页面如果有自动战斗一定要开启自动战斗,如果多轮历史状态相似要检查自动战斗是否开启。
137
137
  17. 如果没有合适的搜索结果,可能是因为搜索页面不对,请返回到搜索页面的上一级尝试重新搜索,如果尝试三次返回上一级搜索后仍然没有符合要求的结果,执行 finish(message="原因")。
138
138
  18. 在结束任务前请一定要仔细检查任务是否完整准确的完成,如果出现错选、漏选、多选的情况,请返回之前的步骤进行纠正。
139
- `,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){rR("Parsing action:",e);let t="";try{if((t=e.content.trim()).startsWith('do(action="Type"')||t.startsWith('do(action="Type_Name"')){let r=rT(t,'text="');return{_metadata:"do",action:"Type",text:r,think:e.think}}if(t.startsWith("finish(message=")){let r=rT(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=rT(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=rT(t,'instruction="');return{...i,action:"Call_API",instruction:e}}case"Take_over":{let e=rT(t,'message="');return{...i,action:"Take_over",message:e}}case"Note":{let e=rT(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 rR("autoGLM rawResponse:",e),rR("thinking in response:",t.think),rR("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 rj("Transform finish action:",e),[{type:"Finished",param:{},thought:e.message}];case"do":switch(e.action){case"Tap":return rj("Transform Tap action:",e),[{type:"Tap",param:{locate:{point:e.element,prompt:""}}}];case"Double Tap":return rj("Transform Double Tap action:",e),[{type:"DoubleClick",param:{locate:{point:e.element,prompt:""}}}];case"Type":return rj("Transform Type action:",e),[{type:"Input",param:{value:e.text}}];case"Swipe":{let t,r;rj("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"),rj(`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 rj("Transform Long Press action:",e),[{type:"LongPress",param:{locate:{point:e.element,prompt:""}},thought:e.think||""}];case"Back":return rj("Transform Back action:",e),[{type:rP(r,rI,"AndroidBackButton"),param:{},thought:e.think||""}];case"Home":return rj("Transform Home action:",e),[{type:rP(r,rO,"AndroidHomeButton"),param:{},thought:e.think||""}];case"Wait":return rj("Transform Wait action:",e),[{type:"Sleep",param:{timeMs:e.durationMs},thought:e.think||""}];case"Launch":return rj("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 rj("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?`
139
+ `,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){rR("Parsing action:",e);let t="";try{if((t=e.content.trim()).startsWith('do(action="Type"')||t.startsWith('do(action="Type_Name"')){let r=rM(t,'text="');return{_metadata:"do",action:"Type",text:r,think:e.think}}if(t.startsWith("finish(message=")){let r=rM(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=rM(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=rM(t,'instruction="');return{...i,action:"Call_API",instruction:e}}case"Take_over":{let e=rM(t,'message="');return{...i,action:"Take_over",message:e}}case"Note":{let e=rM(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 rR("autoGLM rawResponse:",e),rR("thinking in response:",t.think),rR("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 rI("Transform finish action:",e),[{type:"Finished",param:{},thought:e.message}];case"do":switch(e.action){case"Tap":return rI("Transform Tap action:",e),[{type:"Tap",param:{locate:{point:e.element,prompt:""}}}];case"Double Tap":return rI("Transform Double Tap action:",e),[{type:"DoubleClick",param:{locate:{point:e.element,prompt:""}}}];case"Type":return rI("Transform Type action:",e),[{type:"Input",param:{value:e.text}}];case"Swipe":{let t,r;rI("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"),rI(`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 rI("Transform Long Press action:",e),[{type:"LongPress",param:{locate:{point:e.element,prompt:""}},thought:e.think||""}];case"Back":return rI("Transform Back action:",e),[{type:rP(r,rj,"AndroidBackButton"),param:{},thought:e.think||""}];case"Home":return rI("Transform Home action:",e),[{type:rP(r,rO,"AndroidHomeButton"),param:{},thought:e.think||""}];case"Wait":return rI("Transform Wait action:",e),[{type:"Sleep",param:{timeMs:e.durationMs},thought:e.think||""}];case"Launch":return rI("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 rI("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?`
140
140
  The current date: ${rS()}
141
141
 
142
142
  # Setup
@@ -183,8 +183,8 @@ REMEMBER:
183
183
 
184
184
  必须遵循的规则:
185
185
  - 你的目标是定位并点击用户指定的UI元素(例如按钮、图标、链接等),请不要尝试任何其他的操作。
186
- `,getLocatedPixelBbox:rx}}}}let rM={"auto-glm":rN(!1),"auto-glm-multilingual":rN(!0)},rD={chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"]}},rB={shape:"bbox",order:"xy",normalizedBy:1e3},rz={shape:"point",order:"xy",normalizedBy:1e3},rL={jsonParser:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{source:"generic-object"},{source:r}=t;try{return e5(e,t)}catch(i){if("locate"!==r&&"section-locator"!==r&&"planning-action-param"!==r)throw i;let n=function(e){if(e.includes("bbox"))for(;/\d+\s+\d+/.test(e);)e=e.replace(/(\d+)\s+(\d+)/g,"$1,$2");return e}(e2(e));try{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,A="string"==typeof a?s?a:a.trim():e(a,r);i[t]=A}return i}return"string"==typeof t?t.trim():t}(JSON.parse((0,e1.m)(n)),t)}catch(t){throw Error(`failed to parse LLM response into JSON. Error - ${String(t??i??"unknown error")}. Response -
187
- ${e}`)}}},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:rB,parseRawLocateValue:function(e){let t=ti(e);if("string"==typeof t){(0,eQ.vA)(/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(t.trim()),`invalid bbox data string for doubao-vision mode: ${t}`);let e=t.split(" ");if(4===e.length)return ta(rB,[Number(e[0]),Number(e[1]),Number(e[2]),Number(e[3])]);throw Error(`invalid bbox data string for doubao-vision 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 ta(rB,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return ta(rz,[r[0],r[1]]);if(8===t.length)return ta(rB,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for doubao-vision mode: ${JSON.stringify(t)} `)}}}},rF=e=>{let{geminiReasoningContent:t,providerReasoningContent:r}=e;return t&&r?`thoughtParts:${t}; reasoning_content:${r}`:t||r||""},rK={shape:"point",order:"xy",normalizedBy:1},rU={shape:"point",order:"xy"},rQ={shape:"bbox",order:"xy"},rZ={shape:"point",order:"xy"},rJ={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 rX=r(5409);let rH={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}},rG=Object.entries(rH).reduce((e,t)=>{let[r,n]=t,i=r.toLowerCase();return i!==r&&(e[i]=n),e},{}),rV=e=>{let t=e.toLowerCase();return rG[t]?rG[t].key:e},rq="undefined"!=typeof window?/Mac|iPod|iPhone|iPad/.test(window.navigator.platform):"darwin"===rX.platform,rW={return:rH.Enter.key,enter:rH.Enter.key,ctrl:rq?rH.Meta.key:rH.Control.key,shift:rH.Shift.key,alt:rH.Alt.key,space:rH.Space.key,"page down":rH.PageDown.key,pagedown:rH.PageDown.key,"page up":rH.PageUp.key,pageup:rH.PageUp.key},rY=(0,eN.a)("ui-tars-planning"),r_=(0,eN.a)("ui-tars-planning",{console:!0});function r$(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 r0=r(2788);let r1=(0,eN.a)("ui-tars-planning");function r2(){let e=e_();return`
186
+ `,getLocatedPixelBbox:rk}}}}let rN={"auto-glm":rT(!1),"auto-glm-multilingual":rT(!0)},rD={chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningEffort","reasoningBudget"],useReasoningAsContentFallback:!0}},rB={shape:"bbox",order:"xy",normalizedBy:1e3},rz={shape:"point",order:"xy",normalizedBy:1e3},rL={jsonParser:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{source:"generic-object"},{source:r}=t;try{return e5(e,t)}catch(i){if("locate"!==r&&"section-locator"!==r&&"planning-action-param"!==r)throw i;let n=function(e){if(e.includes("bbox"))for(;/\d+\s+\d+/.test(e);)e=e.replace(/(\d+)\s+(\d+)/g,"$1,$2");return e}(e2(e));try{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}(JSON.parse((0,e1.m)(n)),t)}catch(t){throw Error(`failed to parse LLM response into JSON. Error - ${String(t??i??"unknown error")}. Response -
187
+ ${e}`)}}},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:rB,parseRawLocateValue:function(e){let t=ti(e);if("string"==typeof t){(0,eQ.vA)(/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(t.trim()),`invalid bbox data string for doubao-vision mode: ${t}`);let e=t.split(" ");if(4===e.length)return ta(rB,[Number(e[0]),Number(e[1]),Number(e[2]),Number(e[3])]);throw Error(`invalid bbox data string for doubao-vision 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 ta(rB,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return ta(rz,[r[0],r[1]]);if(8===t.length)return ta(rB,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for doubao-vision mode: ${JSON.stringify(t)} `)}}}},rF=e=>{let{geminiReasoningContent:t,providerReasoningContent:r}=e;return t&&r?`thoughtParts:${t}; reasoning_content:${r}`:t||r||""},rK={shape:"point",order:"xy",normalizedBy:1},rU={shape:"point",order:"xy"},rQ={shape:"bbox",order:"xy"},rZ={shape:"point",order:"xy"},rJ={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 rX=r(5409);let rH={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}},rG=Object.entries(rH).reduce((e,t)=>{let[r,n]=t,i=r.toLowerCase();return i!==r&&(e[i]=n),e},{}),rV=e=>{let t=e.toLowerCase();return rG[t]?rG[t].key:e},rq="undefined"!=typeof window?/Mac|iPod|iPhone|iPad/.test(window.navigator.platform):"darwin"===rX.platform,rW={return:rH.Enter.key,enter:rH.Enter.key,ctrl:rq?rH.Meta.key:rH.Control.key,shift:rH.Shift.key,alt:rH.Alt.key,space:rH.Space.key,"page down":rH.PageDown.key,pagedown:rH.PageDown.key,"page up":rH.PageUp.key,pageup:rH.PageUp.key},rY=(0,eT.a)("ui-tars-planning"),r_=(0,eT.a)("ui-tars-planning",{console:!0});function r$(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 r0=r(2788);let r1=(0,eT.a)("ui-tars-planning");function r2(){let e=e_();return`
188
188
  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.
189
189
 
190
190
  ## Output Format
@@ -211,20 +211,24 @@ finished(content='xxx') # Use escape characters \\', \\", and \\n in content par
211
211
  - Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part.
212
212
 
213
213
  ## User Instruction
214
- `}let r3=e=>e.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),r5={shape:"bbox",order:"xy",normalizedBy:1e3},r7={shape:"point",order:"xy",normalizedBy:1e3},r4=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{source:"generic-object"},{source:r}=t;try{return e5(e,t)}catch(i){if("locate"!==r&&"section-locator"!==r&&"planning-action-param"!==r)throw i;let n=function(e){if(e.includes("bbox"))for(;/\d+\s+\d+/.test(e);)e=e.replace(/(\d+)\s+(\d+)/g,"$1,$2");return e}(e2(e));try{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,A="string"==typeof a?s?a:a.trim():e(a,r);i[t]=A}return i}return"string"==typeof t?t.trim():t}(JSON.parse((0,e1.m)(n)),t)}catch(t){throw Error(`failed to parse LLM response into JSON. Error - ${String(t??i??"unknown error")}. Response -
215
- ${e}`)}}};function r8(e){let t=ti(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 ta(r5,[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 ta(r5,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return ta(r7,[r[0],r[1]]);if(8===t.length)return ta(r5,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for ui-tars mode: ${JSON.stringify(t)} `)}function r6(e){return{jsonParser:r4,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:r2,buildUserInstruction:e=>`<user_instruction>${e}</user_instruction>`,buildAssistantContent:(e,t)=>r3(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),A=Number.parseInt(i,10),l=Math.floor((o+s)/2),c=Math.floor((a+A)/2);return`(${l},${c})`}).trim(),o=(0,r0.q)({prediction:i,factor:[1e3,1e3],screenContext:{width:n.width,height:n.height},modelVer:e}),r1("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:r$(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:r$(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:r$(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=r$(e.action_inputs.start_box),n=r$(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=rW[(i=e.action_inputs.key).toLowerCase()]?[rV(rW[i.toLowerCase()])]:i.split(" ").map(e=>rV(rW[e.toLowerCase()]||e));t.push({type:"KeyboardPress",param:{keyName:r.join("+")},thought:e.thought||""})}else r_("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||""}),rY("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 rY("transformActions",JSON.stringify(t,null,2)),t})(e),shouldContinuePlanning:(e,t)=>t.every(e=>"Finished"!==e.type),buildResponseLog:(e,t)=>r3(t)}},locate:{resultAdapter:{coordinates:r5,parseRawLocateValue:r8}}}}let r9=r6(eD.UH.DOUBAO_1_5_20B),ne={"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:rQ,parseRawLocateValue:function(e){let t=ti(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]?ta(rQ,[t[0],t[1],t[2],t[3]]):ta(rZ,[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":rJ,qwen3:rJ,"qwen3.5":rJ,"qwen3.6":rJ,"doubao-vision":rL,"doubao-seed":rL,gemini:{chatCompletion:{unsupportedUserConfig:["reasoningEnabled","reasoningBudget"],buildChatCompletionParams:e=>{let{midsceneDefaults:t,userConfig:r,intent:n}=e,{reasoningEnabled:i,reasoningEffort:o}=r,a={};void 0!==r.temperature&&(a.temperature=r.temperature);let s={};return"default"!==i&&(o?s.extra_body={google:{thinking_config:{thinking_level:o,include_thoughts:!0}}}:("insight"===n&&(s.extra_body={google:{thinking_config:{include_thoughts:!0}}}),s.reasoning_effort="minimal")),{config:{...t,...a,...s}}},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:rF({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:rF({geminiReasoningContent:i,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}}},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"yx",normalizedBy:1e3}}}},...{"vlm-ui-tars":r6(eD.UH.V1_0),"vlm-ui-tars-doubao":r9,"vlm-ui-tars-doubao-1.5":r9},"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);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}}}},...rM,"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),{config:{...t,...o,reasoning_effort:!0===n?i??"medium":"none"}}},resolveImageDetail:e=>"default"===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,{config:{...t,...i,thinking:{type:n?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:rK,parseRawLocateValue:function(e){let t=to(e,"point");if(t.length<2)throw Error(`invalid point data: ${JSON.stringify(e)} `);let[r,n]=t;return ta(r<=1&&n<=1?rK:rU,[r,n])}}}},"xiaomi-mimo":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{intent:t,midsceneDefaults:r,userConfig:n}=e,{reasoningEnabled:i}=n,o={};return o.response_format={type:"default"===t?"json_object":"text"},void 0!==n.temperature&&(o.temperature=n.temperature),{config:{...r,...o,thinking:{type:i?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0}}},nt=new Map,nr=(0,eN.a)("ai:model-adapter");function nn(e){return{config:e,adapter:function(e){var t;let r=e??"default",n=nt.get(r);if(n)return n;let i=e?ne[e]:rD;if(!i)throw Error(`No model adapter registered for modelFamily: ${e}`);return n=new rk(i,r),nt.set(r,n),0!==(t=n).chatCompletion.unsupportedUserConfig.length&&nr(`model adapter "${r}" unsupportedUserConfig: ${JSON.stringify(t.chatCompletion.unsupportedUserConfig)}`),n}(e.modelFamily)}}var ni=r(5409),no=r(4201).Buffer;function na(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ns=(0,eN.a)("ai:call:codex"),nA=(0,eN.a)("ai:call:codex",{console:!0});class nl{async run(e){let t,r=this.tail;this.tail=new Promise(e=>{t=e}),await r;try{return await e()}finally{t()}}constructor(){na(this,"tail",Promise.resolve())}}let nc=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)},nu=e=>{if("string"==typeof e)return e.trim()||void 0},nd=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ni.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))}},np=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"):""},nh=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?nu(null==(n=e.image_url)?void 0:n.url):"input_image"===t?nu(e.image_url||e.url):void 0;if(i){if(i.startsWith("/")||i.startsWith("./")||i.startsWith("../")||i.startsWith("file://")){let e=i.startsWith("file://")?nd(i):i;r.push({type:"localImage",path:e});continue}r.push({type:"image",url:i})}}return r};class nf{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 nf(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:A,reasoningEnabled:l,abortSignal:c}=e,u=Date.now(),d=a.timeout||6e5,p=Date.now()+d,h=!!(s&&A),{developerInstructions:f,input:g}=(e=>{let t=[],r=[],n=[];for(let i of e){let e=String(i.role||"user"),o=np(i);if("system"===e){o.trim()&&t.push(o.trim());continue}let a=e.toUpperCase();o.trim()?r.push(`[${a}]
214
+ `}let r3=e=>e.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),r5={shape:"bbox",order:"xy",normalizedBy:1e3},r7={shape:"point",order:"xy",normalizedBy:1e3},r4=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{source:"generic-object"},{source:r}=t;try{return e5(e,t)}catch(i){if("locate"!==r&&"section-locator"!==r&&"planning-action-param"!==r)throw i;let n=function(e){if(e.includes("bbox"))for(;/\d+\s+\d+/.test(e);)e=e.replace(/(\d+)\s+(\d+)/g,"$1,$2");return e}(e2(e));try{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}(JSON.parse((0,e1.m)(n)),t)}catch(t){throw Error(`failed to parse LLM response into JSON. Error - ${String(t??i??"unknown error")}. Response -
215
+ ${e}`)}}};function r8(e){let t=ti(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 ta(r5,[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 ta(r5,[r[0],r[1],r[2],r[3]]);if(6===r.length||2===r.length||3===r.length||7===r.length)return ta(r7,[r[0],r[1]]);if(8===t.length)return ta(r5,[r[0],r[1],r[4],r[5]]);throw Error(`invalid bbox data for ui-tars mode: ${JSON.stringify(t)} `)}function r6(e){return{jsonParser:r4,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:r2,buildUserInstruction:e=>`<user_instruction>${e}</user_instruction>`,buildAssistantContent:(e,t)=>r3(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,r0.q)({prediction:i,factor:[1e3,1e3],screenContext:{width:n.width,height:n.height},modelVer:e}),r1("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:r$(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:r$(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:r$(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=r$(e.action_inputs.start_box),n=r$(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=rW[(i=e.action_inputs.key).toLowerCase()]?[rV(rW[i.toLowerCase()])]:i.split(" ").map(e=>rV(rW[e.toLowerCase()]||e));t.push({type:"KeyboardPress",param:{keyName:r.join("+")},thought:e.thought||""})}else r_("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||""}),rY("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 rY("transformActions",JSON.stringify(t,null,2)),t})(e),shouldContinuePlanning:(e,t)=>t.every(e=>"Finished"!==e.type),buildResponseLog:(e,t)=>r3(t)}},locate:{resultAdapter:{coordinates:r5,parseRawLocateValue:r8}}}}let r9=r6(eD.UH.DOUBAO_1_5_20B),ne={"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:rQ,parseRawLocateValue:function(e){let t=ti(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]?ta(rQ,[t[0],t[1],t[2],t[3]]):ta(rZ,[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":rJ,qwen3:rJ,"qwen3.5":rJ,"qwen3.6":rJ,"doubao-vision":rL,"doubao-seed":rL,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:rF({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:rF({geminiReasoningContent:i,providerReasoningContent:"string"==typeof e.reasoning_content?e.reasoning_content:""})}}}},locate:{resultAdapter:{coordinates:{shape:"bbox",order:"yx",normalizedBy:1e3}}}},...{"vlm-ui-tars":r6(eD.UH.V1_0),"vlm-ui-tars-doubao":r9,"vlm-ui-tars-doubao-1.5":r9},"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);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}}}},...rN,"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),{config:{...t,...o,reasoning_effort:!0===n?i??"medium":"none"}}},resolveImageDetail:e=>"default"===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,{config:{...t,...i,thinking:{type:n?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0},locate:{resultAdapter:{coordinates:rK,parseRawLocateValue:function(e){let t=to(e,"point");if(t.length<2)throw Error(`invalid point data: ${JSON.stringify(e)} `);let[r,n]=t;return ta(r<=1&&n<=1?rK:rU,[r,n])}}}},"xiaomi-mimo":{chatCompletion:{unsupportedUserConfig:["reasoningEffort","reasoningBudget"],buildChatCompletionParams:e=>{let{intent:t,midsceneDefaults:r,userConfig:n}=e,{reasoningEnabled:i}=n,o={};return o.response_format={type:"default"===t?"json_object":"text"},void 0!==n.temperature&&(o.temperature=n.temperature),{config:{...r,...o,thinking:{type:i?"enabled":"disabled"}}}},useReasoningAsContentFallback:!0}}},nt=new Map,nr=(0,eT.a)("ai:model-adapter");function nn(e){return{config:e,adapter:function(e){var t;let r=e??"default",n=nt.get(r);if(n)return n;let i=e?ne[e]:rD;if(!i)throw Error(`No model adapter registered for modelFamily: ${e}`);return n=new rx(i,r),nt.set(r,n),0!==(t=n).chatCompletion.unsupportedUserConfig.length&&nr(`model adapter "${r}" unsupportedUserConfig: ${JSON.stringify(t.chatCompletion.unsupportedUserConfig)}`),n}(e.modelFamily)}}var ni=r(5409),no=r(4201).Buffer;function na(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ns=(0,eT.a)("ai:call:codex"),nl=(0,eT.a)("ai:call:codex",{console:!0});class nA{async run(e){let t,r=this.tail;this.tail=new Promise(e=>{t=e}),await r;try{return await e()}finally{t()}}constructor(){na(this,"tail",Promise.resolve())}}let nc=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)},nu=e=>{if("string"==typeof e)return e.trim()||void 0},nd=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ni.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))}},np=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"):""},nh=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?nu(null==(n=e.image_url)?void 0:n.url):"input_image"===t?nu(e.image_url||e.url):void 0;if(i){if(i.startsWith("/")||i.startsWith("./")||i.startsWith("../")||i.startsWith("file://")){let e=i.startsWith("file://")?nd(i):i;r.push({type:"localImage",path:e});continue}r.push({type:"image",url:i})}}return r};class nf{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 nf(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=np(i);if("system"===e){o.trim()&&t.push(o.trim());continue}let a=e.toUpperCase();o.trim()?r.push(`[${a}]
216
216
  ${o.trim()}`):r.push(`[${a}]
217
- (no text content)`),"user"===e&&n.push(...nh(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:l,modelConfig:a}),y="",v="",b=e=>{let{content:t,reasoning:r,isComplete:n,usage:i}=e;h&&A&&A({content:t,reasoning_content:r,accumulated:y,isComplete:n,usage:i})};try{var w,E,k,x,S,C,j,I;let e,o=await this.request({method:"thread/start",params:{model:a.modelName,cwd:ni.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,A=o.params||{};if("error"===s){let e=(null==(C=A.error)?void 0:C.message)||A.message||"codex app-server reported turn error";n=String(e);continue}if("item/agentMessage/delta"===s&&A.threadId===t&&A.turnId===r){let e=String(A.delta||"");e&&(y+=e,b({content:e,reasoning:"",isComplete:!1}));continue}if(("item/reasoning/summaryTextDelta"===s||"item/reasoning/textDelta"===s)&&A.threadId===t&&A.turnId===r){let e=String(A.delta||"");e&&(v+=e,b({content:"",reasoning:e,isComplete:!1}));continue}if("item/completed"===s&&A.threadId===t&&A.turnId===r&&(null==(k=A.item)?void 0:k.type)==="agentMessage"&&"string"==typeof(null==(x=A.item)?void 0:x.text)&&!y){y=A.item.text;continue}if("thread/tokenUsage/updated"===s&&A.threadId===t&&A.turnId===r){i=this.mapUsage({usage:A,modelConfig:a,turnId:r,startTime:u});continue}if("turn/completed"===s&&A.threadId===t&&(null==(S=A.turn)?void 0:S.id)===r){e=String(A.turn.status||""),n=(null==(I=A.turn)||null==(j=I.error)?void 0:j.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 nc(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=>{nA(`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=no.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){nA(`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}
218
- `,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){na(this,"child",void 0),na(this,"lineReader",void 0),na(this,"pendingMessages",[]),na(this,"lineBuffer",[]),na(this,"nextRequestId",1),na(this,"closed",!1),na(this,"lastExitCode",null),na(this,"processErrorMessage",null),na(this,"stderrBuffer",""),this.child=e,this.lineReader=t}}let ng=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()||!nc(t))&&await this.resetConnection(),t}})}async shutdownForTests(){await this.resetConnection()}async getConnection(){return(!this.connection||this.connection.isClosed())&&(this.connection=await nf.create(),ns("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(),ns("reset codex app-server connection")}constructor(){na(this,"connection",null),na(this,"runner",new nl)}};async function nm(e,t,r){if(eQ.ht)throw Error("codex app-server provider is not supported in browser runtime");return ng.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 ny=(0,eN.a)("ai:call");function nv(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated, ${e.length} chars total]`}function nb(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 nw="AI_CALL_HARD_TIMEOUT";function nE(e){let{timeout:t}=e;return"number"!=typeof t?18e4:t<=0?null:t}function nk(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=nw,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)}}}function nx(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class nS extends Error{constructor(e,t,r,n){super(e),nx(this,"usage",void 0),nx(this,"rawResponse",void 0),nx(this,"rawChoiceMessage",void 0),this.name="AIResponseParseError",this.rawResponse=t,this.usage=r,this.rawChoiceMessage=n}}async function nC(e){let t,n,i,{modelConfig:o}=e,{socksProxy:a,httpProxy:s,modelName:A,openaiBaseURL:l,openaiApiKey:c,openaiExtraConfig:u,modelDescription:d,modelFamily:p,createOpenAIClient:h,timeout:f}=o,g=(0,eN.a)("ai:call",{console:!0}),m=(0,eN.a)("ai:call:proxy"),y=(0,eN.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=nE({timeout:f}),w={},E={baseURL:l,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=[nb(i)],void 0!==(t=i&&"object"==typeof i?i.cause:void 0)&&e.push(`Cause: ${nb(t)}`),nv(e.join("\n"),4e3));throw ny("OpenAI-compatible fetch failed",r),w.fetchErrors??(w.fetchErrors=[]),w.fetchErrors.push({attempt:n,error:r}),i}if(!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},k=new e0.Ay(E),x=k;if(x&&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");x=e(x)}if(x&&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");x=e(x)}if(h){let e=await h(k,E);e&&(x=e)}return{completion:x.chat.completions,modelName:A,modelDescription:d,modelFamily:p,openAIErrorResponseContext:w}}async function nj(e,t,r){var n,i,o,a,s,A,l,c,u,d;let p,h,f,g,m,y,{config:v,adapter:b}=t;if((n=v.openaiBaseURL)&&n.trim().toLowerCase().startsWith("codex://"))return nm(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});let{completion:w,modelName:E,modelDescription:k,modelFamily:x,openAIErrorResponseContext:S}=await nC({modelConfig:v}),C=nE(v),j=v.extraBody,I=(0,eN.a)("ai:call"),O=(0,eN.a)("ai:call",{console:!0}),P=(0,eN.a)("ai:profile:stats"),R=(0,eN.a)("ai:profile:detail"),T=Date.now(),N=(null==r?void 0:r.stream)&&(null==r?void 0:r.onChunk),M={intent:v.intent,userConfig:{temperature:v.temperature,reasoningEnabled:v.reasoningEnabled,reasoningEffort:v.reasoningEffort,reasoningBudget:v.reasoningBudget},requiresOriginalImageDetail:null==r?void 0:r.requiresOriginalImageDetail},{config:D}=b.chatCompletion.buildChatCompletionParams(M);I(`adapter chat completion params: ${function(e){try{return JSON.stringify(e)}catch(t){return String(e)}}({config:D})}`);let B="",z="",L=e=>"string"==typeof e&&e.trim().length>0,F=(e,t)=>!L(e)&&b.chatCompletion.useReasoningAsContentFallback&&L(t)?(O("empty content from AI model, using reasoning content"),t):e,K=(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:E,model_description:k,response_model_name:y,slot:v.slot,intent:void 0,request_id:t??void 0}},U={...D,...j??{}},Q=U.temperature,Z=b.chatCompletion.resolveImageDetail(M),J=Z?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:Z}}:e});return{...e,content:t}}):e;try{if(I(`sending ${N?"streaming ":""}request to ${E}`),N){let{signal:e,cleanup:t}=nk(C,null==r?void 0:r.abortSignal);try{let t=await w.create({model:E,messages:J,...U,stream:!0},{stream:!0,signal:e});for await(let e of(m=t._request_id,t)){let t=b.chatCompletion.extractContentAndReasoning(null==(o=e.choices)||null==(i=o[0])?void 0:i.delta),n=t.content||"",A=t.reasoning_content||"";if(e.usage&&(f=e.usage),e.model&&(y=e.model),n||A){B+=n,z+=A;let e={content:n,reasoning_content:A,accumulated:B,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(B.length/4));f={prompt_tokens:e,completion_tokens:e,total_tokens:2*e}}B=F(B,z)||"";let e={content:"",accumulated:B,reasoning_content:"",isComplete:!0,usage:K(f,m)};r.onChunk(e);break}}}finally{t()}p=B,P(`streaming model, ${E}, mode, ${x||"default"}, cost-ms, ${g}, temperature, ${Q??""}`)}else{let e,t=(d=v.retryCount,"number"==typeof d&&Number.isFinite(d)?Math.max(0,Math.floor(d)):1),n=v.retryInterval??2e3,i=t+1,o=[];for(let t=1;t<=i;t++){let{signal:a,cleanup:s}=nk(C,null==r?void 0:r.abortSignal);try{let e=await w.create({model:E,messages:J,...U,stream:!1},{signal:a});if(g=Date.now()-T,P(`model, ${E}, mode, ${x||"default"}, prompt-tokens, ${(null==(A=e.usage)?void 0:A.prompt_tokens)||""}, completion-tokens, ${(null==(l=e.usage)?void 0:l.completion_tokens)||""}, total-tokens, ${(null==(c=e.usage)?void 0:c.total_tokens)||""}, cost-ms, ${g}, requestId, ${e._request_id||""}, temperature, ${Q??""}`),R(`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 t=b.chatCompletion.extractContentAndReasoning(e.choices[0].message);if(p=t.content,z=t.reasoning_content,f=e.usage,m=e._request_id,y=e.model,p=F(p,z),!L(p))throw new nS("empty content from AI model",JSON.stringify(e),K(f,m),h);break}catch(a){if(e=a instanceof Error?a:Error(String(a)),o.push({attempt:t,error:a}),function(e){if(!e||"object"!=typeof e)return!1;if(e.code===nw)return!0;let t=e.cause;return!!t&&"object"==typeof t&&t.code===nw}(e)&&O(`AI call hit hard timeout (${C}ms, attempt ${t}/${i}, model ${E}, slot ${v.slot})`),null==r||null==(u=r.abortSignal)?void 0:u.aborted)break;t<i&&(O(`AI call failed (attempt ${t}/${i}), retrying in ${n}ms... Error: ${e.message}`),await new Promise(e=>setTimeout(e,n)))}finally{s()}}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}
217
+ (no text content)`),"user"===e&&n.push(...nh(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:ni.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 nc(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=>{nl(`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=no.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){nl(`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}
218
+ `,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){na(this,"child",void 0),na(this,"lineReader",void 0),na(this,"pendingMessages",[]),na(this,"lineBuffer",[]),na(this,"nextRequestId",1),na(this,"closed",!1),na(this,"lastExitCode",null),na(this,"processErrorMessage",null),na(this,"stderrBuffer",""),this.child=e,this.lineReader=t}}let ng=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()||!nc(t))&&await this.resetConnection(),t}})}async shutdownForTests(){await this.resetConnection()}async getConnection(){return(!this.connection||this.connection.isClosed())&&(this.connection=await nf.create(),ns("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(),ns("reset codex app-server connection")}constructor(){na(this,"connection",null),na(this,"runner",new nA)}};async function nm(e,t,r){if(eQ.ht)throw Error("codex app-server provider is not supported in browser runtime");return ng.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 ny=(0,eT.a)("ai:call");function nv(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated, ${e.length} chars total]`}function nb(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 nw="AI_CALL_HARD_TIMEOUT";function nE(e){let{timeout:t}=e;return"number"!=typeof t?18e4:t<=0?null:t}function nx(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=nw,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)}}}function nk(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class nS extends Error{constructor(e,t,r,n){super(e),nk(this,"usage",void 0),nk(this,"rawResponse",void 0),nk(this,"rawChoiceMessage",void 0),this.name="AIResponseParseError",this.rawResponse=t,this.usage=r,this.rawChoiceMessage=n}}async function nC(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=nE({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=[nb(i)],void 0!==(t=i&&"object"==typeof i?i.cause:void 0)&&e.push(`Cause: ${nb(t)}`),nv(e.join("\n"),4e3));throw ny("OpenAI-compatible fetch failed",r),w.fetchErrors??(w.fetchErrors=[]),w.fetchErrors.push({attempt:n,error:r}),i}if(!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 nI(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;if((n=v.openaiBaseURL)&&n.trim().toLowerCase().startsWith("codex://"))return nm(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});let{completion:w,modelName:E,modelDescription:x,modelFamily:k,openAIErrorResponseContext:S}=await nC({modelConfig:v}),C=nE(v),I=v.extraBody,j=(0,eT.a)("ai:call"),O=(0,eT.a)("ai:call",{console:!0}),P=(0,eT.a)("ai:profile:stats"),R=(0,eT.a)("ai:profile:detail"),M=Date.now(),T=(null==r?void 0:r.stream)&&(null==r?void 0:r.onChunk),N={intent:v.intent,userConfig:{temperature:v.temperature,reasoningEnabled:v.reasoningEnabled,reasoningEffort:v.reasoningEffort,reasoningBudget:v.reasoningBudget},requiresOriginalImageDetail:null==r?void 0:r.requiresOriginalImageDetail},{config:D}=b.chatCompletion.buildChatCompletionParams(N);j(`adapter chat completion params: ${function(e){try{return JSON.stringify(e)}catch(t){return String(e)}}({config:D})}`);let B="",z="",L=e=>"string"==typeof e&&e.trim().length>0,F=(e,t)=>!L(e)&&b.chatCompletion.useReasoningAsContentFallback&&L(t)?(O("empty content from AI model, using reasoning content"),t):e,K=(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:E,model_description:x,response_model_name:y,slot:v.slot,intent:void 0,request_id:t??void 0}},U={...D,...I??{}},Q=U.temperature,Z=b.chatCompletion.resolveImageDetail(N),J=Z?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:Z}}:e});return{...e,content:t}}):e;try{if(j(`sending ${T?"streaming ":""}request to ${E}`),T){let{signal:e,cleanup:t}=nx(C,null==r?void 0:r.abortSignal);try{let t=await w.create({model:E,messages:J,...U,stream:!0},{stream:!0,signal:e});for await(let e of(m=t._request_id,t)){let t=b.chatCompletion.extractContentAndReasoning(null==(o=e.choices)||null==(i=o[0])?void 0:i.delta),n=t.content||"",l=t.reasoning_content||"";if(e.usage&&(f=e.usage),e.model&&(y=e.model),n||l){B+=n,z+=l;let e={content:n,reasoning_content:l,accumulated:B,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()-M,!f){let e=Math.max(1,Math.floor(B.length/4));f={prompt_tokens:e,completion_tokens:e,total_tokens:2*e}}B=F(B,z)||"";let e={content:"",accumulated:B,reasoning_content:"",isComplete:!0,usage:K(f,m)};r.onChunk(e);break}}}finally{t()}p=B,P(`streaming model, ${E}, mode, ${k||"default"}, cost-ms, ${g}, temperature, ${Q??""}`)}else{let e,t=(d=v.retryCount,"number"==typeof d&&Number.isFinite(d)?Math.max(0,Math.floor(d)):1),n=v.retryInterval??2e3,i=t+1,o=[];for(let t=1;t<=i;t++){let{signal:a,cleanup:s}=nx(C,null==r?void 0:r.abortSignal);try{let e=await w.create({model:E,messages:J,...U,stream:!1},{signal:a});if(g=Date.now()-M,P(`model, ${E}, mode, ${k||"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, ${e._request_id||""}, temperature, ${Q??""}`),R(`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 t=b.chatCompletion.extractContentAndReasoning(e.choices[0].message);if(p=t.content,z=t.reasoning_content,f=e.usage,m=e._request_id,y=e.model,p=F(p,z),!L(p))throw new nS("empty content from AI model",JSON.stringify(e),K(f,m),h);break}catch(a){if(e=a instanceof Error?a:Error(String(a)),o.push({attempt:t,error:a}),function(e){if(!e||"object"!=typeof e)return!1;if(e.code===nw)return!0;let t=e.cause;return!!t&&"object"==typeof t&&t.code===nw}(e)&&O(`AI call hit hard timeout (${C}ms, attempt ${t}/${i}, model ${E}, slot ${v.slot})`),null==r||null==(u=r.abortSignal)?void 0:u.aborted)break;t<i&&(O(`AI call failed (attempt ${t}/${i}), retrying in ${n}ms... Error: ${e.message}`),await new Promise(e=>setTimeout(e,n)))}finally{s()}}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}
219
219
  Previous AI call attempt errors:
220
- ${s}`,e}(e,o,i)}if(I(`response reasoning content: ${z}`),I(`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}}return{content:p||"",reasoning_content:z||void 0,rawChoiceMessage:h,usage:K(f,m),isStreamed:!!N}}catch(e){if(O("call AI error",e),e instanceof nS)throw e;throw Error(`failed to call ${N?"streaming ":""}AI model service (${E}): ${e.message}${function(e,t){var r,n,i,o;let a=[];if((null==(r=t.rawResponseBodies)?void 0:r.length)===1)a.push(`OpenAI raw error response body: ${nv(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}: ${nv(r,4e3)}`}).join("\n");a.push(`OpenAI raw error response bodies:
220
+ ${s}`,e}(e,o,i)}if(j(`response reasoning content: ${z}`),j(`response content: ${p}`),T&&!f){let e=Math.max(1,Math.floor((p||"").length/4));f={prompt_tokens:e,completion_tokens:e,total_tokens:2*e}}return{content:p||"",reasoning_content:z||void 0,rawChoiceMessage:h,usage:K(f,m),isStreamed:!!T}}catch(e){if(O("call AI error",e),e instanceof nS)throw e;throw Error(`failed to call ${T?"streaming ":""}AI model service (${E}): ${e.message}${function(e,t){var r,n,i,o;let a=[];if((null==(r=t.rawResponseBodies)?void 0:r.length)===1)a.push(`OpenAI raw error response body: ${nv(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}: ${nv(r,4e3)}`}).join("\n");a.push(`OpenAI raw error response bodies:
221
221
  ${e}`)}if((null==(i=t.fetchErrors)?void 0:i.length)===1)a.push(`OpenAI fetch error (attempt ${t.fetchErrors[0].attempt}): ${t.fetchErrors[0].error}`);else if(null==(o=t.fetchErrors)?void 0:o.length){let e=t.fetchErrors.map(e=>{let{attempt:t,error:r}=e;return`Attempt ${t}: ${r}`}).join("\n");a.push(`OpenAI fetch errors:
222
222
  ${e}`)}return a.length?`
223
223
  ${a.join("\n")}`:""}(0,S)}
224
- Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:e})}}async function nI(e,t,r){var n;let i,o="config"in(n=t)&&"adapter"in n?n:nn(n),{config:a,adapter:s}=o,A=await nj(e,o,{abortSignal:null==r?void 0:r.abortSignal});(0,eQ.vA)(A,"empty response");try{i=s.jsonParser(A.content,{source:(null==r?void 0:r.jsonParserSource)??"generic-object"})}catch(e){throw new nS(e instanceof Error?e.message:String(e),A.content,A.usage)}if("object"!=typeof i)throw new nS(`failed to parse json response from model (${a.modelName}): ${A.content}`,A.content,A.usage,A.rawChoiceMessage);return{content:i,contentString:A.content,usage:A.usage,reasoning_content:A.reasoning_content,rawChoiceMessage:A.rawChoiceMessage}}async function nO(e,t,r){let{content:n,usage:i,rawChoiceMessage:o}=await nj(e,t,r);return{content:n,usage:i,rawChoiceMessage:o}}let nP="https://midscenejs.com/model-config",nR=`Default model family is required for locate. Configure MIDSCENE_MODEL_FAMILY so Midscene can parse locate coordinates correctly. ${nP}`;function nT(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. ${nP}`:`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. ${nP}`}function nN(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 nM(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 A=s+o.length;return e.substring(A,a).trim()}function nD(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 nB(){return`## Important Notes for Locating Elements:
225
- - When the user describes an element that contains text (such as buttons, input fields, dropdown options, radio buttons, etc.), you should locate ONLY the text region of that element, not the entire element boundary.
226
- - For example: If an input field is large (both wide and tall) with a placeholder text "Please enter your comment", you should locate only the area where the placeholder text appears, not the entire input field.
227
- - This principle applies to all text-containing elements: focus on the visible text region rather than the full element container.`}function nz(e){return Array.isArray(e)?`[${e.join(", ")}]`:JSON.stringify(e)}function nL(e){let[t,r,n,i]=e;return{left:t,top:r,width:n-t+1,height:i-r+1}}let nF=(0,eN.a)("ai:inspect"),nK=(0,eN.a)("ai:section");function nU(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 nQ(e){let{context:t,baseRect:r}=e,n=tF(r,t.shotSize),i=await tT(t.screenshot.base64,n),o=await tL(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 nZ(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 tG(tH(n)),A={elementDescriptionText:tX(n),locateImage:a,referenceImageMessages:s,options:i},l=e.modelRuntime.adapter.locate,c="custom"===l.kind?l.locateFn:nJ,{locatedPixelBbox:u,rawResponse:d,rawChoiceMessage:p,usage:h,reasoningContent:f,errors:g=[]}=await c(n,i,A),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=nL(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,A=e=>(1!==s?Math.round(e/s):e)+a.x,l=e=>(1!==s?Math.round(e/s):e)+a.y;return[A(r),l(n),A(i),l(o)]}(u,null==(r=i.searchConfig)?void 0:r.mapping));return nF("resRect",e),{rect:e,parseResult:{element:nN(e,A.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 nJ(e,t,r){var n;let i,o,a,s,A,l,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_(),A=n.resultKey,l=nz(n.exampleValues[0]),c=`the ${n.resultNoun} of the element that matches the user's description`,`
224
+ Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:e})}}async function nj(e,t,r){var n;let i,o="config"in(n=t)&&"adapter"in n?n:nn(n),{config:a,adapter:s}=o,l=await nI(e,o,{abortSignal:null==r?void 0:r.abortSignal});(0,eQ.vA)(l,"empty response");try{i=s.jsonParser(l.content,{source:(null==r?void 0:r.jsonParserSource)??"generic-object"})}catch(e){throw new nS(e instanceof Error?e.message:String(e),l.content,l.usage)}if("object"!=typeof i)throw new nS(`failed to parse json response from model (${a.modelName}): ${l.content}`,l.content,l.usage,l.rawChoiceMessage);return{content:i,contentString:l.content,usage:l.usage,reasoning_content:l.reasoning_content,rawChoiceMessage:l.rawChoiceMessage}}async function nO(e,t,r){let{content:n,usage:i,rawChoiceMessage:o}=await nI(e,t,r);return{content:n,usage:i,rawChoiceMessage:o}}let nP="https://midscenejs.com/model-config",nR=`Default model family is required for locate. Configure MIDSCENE_MODEL_FAMILY so Midscene can parse locate coordinates correctly. ${nP}`;function nM(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. ${nP}`:`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. ${nP}`}function nT(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 nN(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 nD(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 nB(){return`## Important Notes for Locating Elements:
225
+ - 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.
226
+ - 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.
227
+ - 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.
228
+ - 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.
229
+ - If the target is an icon, arrow, checkbox, radio, or accessory control, return only that glyph/control region. Do not return adjacent owner text.
230
+ - 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.
231
+ - If the same text appears in multiple regions, obey the described owner region first, such as filter bar vs table header.`}function nz(e){return Array.isArray(e)?`[${e.join(", ")}]`:JSON.stringify(e)}function nL(e){let[t,r,n,i]=e;return{left:t,top:r,width:n-t+1,height:i-r+1}}let nF=(0,eT.a)("ai:inspect"),nK=(0,eT.a)("ai:section");function nU(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 nQ(e){let{context:t,baseRect:r}=e,n=tF(r,t.shotSize),i=await tM(t.screenshot.base64,n),o=await tL(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 nZ(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 tG(tH(n)),l={elementDescriptionText:tX(n),locateImage:a,referenceImageMessages:s,options:i},A=e.modelRuntime.adapter.locate,c="custom"===A.kind?A.locateFn:nJ,{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=nL(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 nF("resRect",e),{rect:e,parseResult:{element:nT(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 nJ(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=nz(n.exampleValues[0]),c=`the ${n.resultNoun} of the element that matches the user's description`,`
228
232
  ## Role:
229
233
  You are an AI assistant that helps identify UI elements.
230
234
 
@@ -237,19 +241,19 @@ ${nB()}
237
241
  ## Output Format:
238
242
  \`\`\`json
239
243
  {
240
- "${A}": ${n.resultValueSchema}, // ${n.resultValueDescription}
244
+ "${l}": ${n.resultValueSchema}, // ${n.resultValueDescription}
241
245
  "errors"?: string[]
242
246
  }
243
247
  \`\`\`
244
248
 
245
249
  Fields:
246
- * \`${A}\` is ${c}
250
+ * \`${l}\` is ${c}
247
251
  * \`errors\` is an optional array of error messages (if any)
248
252
 
249
253
  For example, when an element is found:
250
254
  \`\`\`json
251
255
  {
252
- "${A}": ${l},
256
+ "${l}": ${A},
253
257
  "errors": []
254
258
  }
255
259
  \`\`\`
@@ -257,11 +261,11 @@ For example, when an element is found:
257
261
  When no element is found:
258
262
  \`\`\`json
259
263
  {
260
- "${A}": [],
264
+ "${l}": [],
261
265
  "errors": ["I can see ..., but {some element} is not found. Use ${s}."]
262
266
  }
263
267
  \`\`\`
264
- `),f=await rh({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 nI(g,u,{abortSignal:t.abortSignal,jsonParserSource:"locate"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof nS?n.rawResponse:e,r=n instanceof nS?n.usage:void 0;return{rawResponse:t,rawChoiceMessage:n instanceof nS?n.rawChoiceMessage:void 0,usage:r,errors:[`AI call error: ${e}`]}}let m=JSON.stringify(i.content),y="errors"in i.content?i.content.errors:[],v=d.locate.resultAdapter;if(!nU(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 nX(e){var t,r;let n,i,o,a,s,A,l,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 rh({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=nz(t.exampleValues[0]),A=`"${a}": ${t.resultValueSchema}, // ${t.resultValueDescription}`,l=t.resultValueSchema,c=`${t.resultNoun} of the section containing the target element`,u=`Optional array of ${t.resultNounPlural} of reference elements`,`
268
+ `),f=await rh({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 nj(g,u,{abortSignal:t.abortSignal,jsonParserSource:"locate"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof nS?n.rawResponse:e,r=n instanceof nS?n.usage:void 0;return{rawResponse:t,rawChoiceMessage:n instanceof nS?n.rawChoiceMessage:void 0,usage:r,errors:[`AI call error: ${e}`]}}let m=JSON.stringify(i.content),y="errors"in i.content?i.content.errors:[],v=d.locate.resultAdapter;if(!nU(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 nX(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 rh({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=nz(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`,`
265
269
  ## Role:
266
270
  You are an AI assistant that helps identify UI elements.
267
271
 
@@ -272,9 +276,9 @@ You are an AI assistant that helps identify UI elements.
272
276
  ## Output Format:
273
277
  \`\`\`json
274
278
  {
275
- ${A}
279
+ ${l}
276
280
  "references_${a}"?: [
277
- ${l},
281
+ ${A},
278
282
  ...
279
283
  ],
280
284
  "error"?: string
@@ -294,7 +298,7 @@ If the description is "delete button on the second row with title 'Peter'", retu
294
298
  "references_${a}": [${s}]
295
299
  }
296
300
  \`\`\`
297
- `),b=(d=tX(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 tG(tH(h));w.push(...e)}try{n=await nI(w,f,{abortSignal:e.abortSignal,jsonParserSource:"section-locator"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof nS?n.rawResponse:e,r=n instanceof nS?n.usage:void 0;return{searchAreaConfig:void 0,error:`AI call error: ${e}`,rawResponse:t,rawChoiceMessage:n instanceof nS?n.rawChoiceMessage:void 0,usage:r}}let E=n.content.error,k=g.locate.resultAdapter;if(!nU(n.content,k.promptSpec.resultKey))return{searchAreaConfig:void 0,error:E,rawResponse:JSON.stringify(n.content),rawChoiceMessage:n.rawChoiceMessage,usage:n.usage};try{let e,t,o,a=k.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})),nL([e,t,o,Math.max(...r.map(e=>{let[,,,t]=e;return t}))]));nK("mergedRect %j",s);let A=tF(s,p.shotSize),l=A.width,c=A.height;nK("expanded sectionRect %j",A),i=await nQ({context:p,baseRect:s}),nK("scaled section image from %dx%d to %dx%d (scale=%d)",l,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:JSON.stringify(n.content),rawChoiceMessage:n.rawChoiceMessage,usage:n.usage}}async function nH(e){var t,r;let n,i,{dataQuery:o,context:a,extractOption:s,multimodalPrompt:A,modelRuntime:l}=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`
301
+ `),b=(d=tX(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 tG(tH(h));w.push(...e)}try{n=await nj(w,f,{abortSignal:e.abortSignal,jsonParserSource:"section-locator"})}catch(n){let e=n instanceof Error?n.message:String(n),t=n instanceof nS?n.rawResponse:e,r=n instanceof nS?n.usage:void 0;return{searchAreaConfig:void 0,error:`AI call error: ${e}`,rawResponse:t,rawChoiceMessage:n instanceof nS?n.rawChoiceMessage:void 0,usage:r}}let E=n.content.error,x=g.locate.resultAdapter;if(!nU(n.content,x.promptSpec.resultKey))return{searchAreaConfig:void 0,error:E,rawResponse:JSON.stringify(n.content),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})),nL([e,t,o,Math.max(...r.map(e=>{let[,,,t]=e;return t}))]));nK("mergedRect %j",s);let l=tF(s,p.shotSize),A=l.width,c=l.height;nK("expanded sectionRect %j",l),i=await nQ({context:p,baseRect:s}),nK("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:JSON.stringify(n.content),rawChoiceMessage:n.rawChoiceMessage,usage:n.usage}}async function nH(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`
298
302
  You are a versatile professional in software UI design and testing. Your outstanding contributions will impact the user experience of billions of users.
299
303
 
300
304
  ${o}
@@ -305,7 +309,7 @@ When DATA_DEMAND is a JSON object, the keys in your response must exactly match
305
309
 
306
310
 
307
311
  Return in the following XML format:
308
- <thought>the thinking process of the extraction, less than 300 words. Use ${t} in this field.</thought>
312
+ <observation>brief evidence observed for the extraction, less than 300 words. Use ${t} in this field.</observation>
309
313
  <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>
310
314
  <errors>optional error messages as JSON array, e.g., ["error1", "error2"]</errors>
311
315
 
@@ -322,7 +326,7 @@ For example, if the DATA_DEMAND is:
322
326
 
323
327
  By viewing the screenshot and page contents, you can extract the following data:
324
328
 
325
- <thought>According to the screenshot, i can see ...</thought>
329
+ <observation>According to the screenshot, i can see ...</observation>
326
330
  <data-json>
327
331
  {
328
332
  "name": "John",
@@ -340,7 +344,7 @@ the todo items list, string[]
340
344
 
341
345
  By viewing the screenshot and page contents, you can extract the following data:
342
346
 
343
- <thought>According to the screenshot, i can see ...</thought>
347
+ <observation>According to the screenshot, i can see ...</observation>
344
348
  <data-json>
345
349
  ["todo 1", "todo 2", "todo 3"]
346
350
  </data-json>
@@ -354,7 +358,7 @@ the page title, string
354
358
 
355
359
  By viewing the screenshot and page contents, you can extract the following data:
356
360
 
357
- <thought>According to the screenshot, i can see ...</thought>
361
+ <observation>According to the screenshot, i can see ...</observation>
358
362
  <data-json>
359
363
  "todo list"
360
364
  </data-json>
@@ -370,11 +374,11 @@ If the DATA_DEMAND is:
370
374
 
371
375
  By viewing the screenshot and page contents, you can extract the following data:
372
376
 
373
- <thought>According to the screenshot, i can see ...</thought>
377
+ <observation>According to the screenshot, i can see ...</observation>
374
378
  <data-json>
375
379
  { "StatementIsTruthy": true }
376
380
  </data-json>
377
- `}({screenshotIncluded:(null==s?void 0:s.screenshotIncluded)!==!1,referenceImagesIncluded:!!(null==A||null==(t=A.images)?void 0:t.length)}),u=a.screenshot.base64,d=(r=e.pageDescription||"",i="",i="string"==typeof o?o:JSON.stringify(o,null,2),`
381
+ `}({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),`
378
382
  <PageDescription>
379
383
  ${r}
380
384
  </PageDescription>
@@ -382,53 +386,49 @@ ${r}
382
386
  <DATA_DEMAND>
383
387
  ${i}
384
388
  </DATA_DEMAND>
385
- `),p=[];(null==s?void 0:s.screenshotIncluded)!==!1&&(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(A){let e=await tG(A);h.push(...e)}let{content:f,usage:g,reasoning_content:m,rawChoiceMessage:y}=await nj(h,l,{abortSignal:e.abortSignal});try{n=function(e){let t,r,n=nM(e,"thought"),i=nM(e,"data-json"),o=nM(e,"errors");if(!i)throw Error("Missing required field: data-json");try{t=e5(i)}catch(e){throw Error(`Failed to parse data-json: ${e}`)}if(o)try{let e=e5(o);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 nS(`XML parse error: ${e}`,f,g,y)}return{parseResult:n,rawResponse:f,rawChoiceMessage:y,usage:g,reasoning_content:m}}let nG={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 nV 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 nq=r(4201).Buffer;function nW(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function nY(e,t){var r,n;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 n_(e,t){return"screenshot"!==e||"object"!=typeof t||null===t||ru.isSerialized(t),t}class n${serialize(e){return JSON.stringify(this.toJSON(),nY,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 n$(JSON.parse(e,n_))}static fromJSON(e){return new n$(e)}collectScreenshots(){let e=[];for(let r of this.tasks){var t;if((null==(t=r.uiContext)?void 0:t.screenshot)instanceof ru&&e.push(r.uiContext.screenshot),r.recorder)for(let t of r.recorder)t.screenshot instanceof ru&&e.push(t.screenshot)}return e}constructor(e){nW(this,"id",void 0),nW(this,"logTime",void 0),nW(this,"name",void 0),nW(this,"description",void 0),nW(this,"tasks",void 0),nW(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 n0{serialize(e){return JSON.stringify(this.toJSON(),nY,e)}serializeWithInlineScreenshots(e){let t=e=>e instanceof ru?{base64:e.base64,capturedAt:e.capturedAt}:Array.isArray(e)?e.map(t):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).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 n0(JSON.parse(e,n_))}static fromJSON(e){return new n0(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,t0.existsSync)(t)||(0,t0.mkdirSync)(t,{recursive:!0}),this.collectAllScreenshots())){let r=(0,tg.join)(t,`${e.id}.${e.extension}`);if((0,t0.existsSync)(r))continue;let n=e.rawBase64;(0,t0.writeFileSync)(r,nq.from(n,"base64"))}(0,t0.writeFileSync)(e,this.serialize(),"utf-8")}static fromFilesAsInlineJson(e){let t=(0,t0.readFileSync)(e,"utf-8"),r=`${e}.screenshots`,n=JSON.parse(t),i=new rl({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=rs(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}})}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,tg.join)(r,`${e}.${n}`);if(!(0,t0.existsSync)(i))return"";let o=(0,t0.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,t0.rmSync)(t,{force:!0,recursive:!0})}catch{}}static getFilePaths(e){return[e,`${e}.screenshots`]}constructor(e){nW(this,"sdkVersion",void 0),nW(this,"groupName",void 0),nW(this,"groupDescription",void 0),nW(this,"modelBriefs",void 0),nW(this,"executions",void 0),nW(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 n$?e:n$.fromJSON(e)),this.deviceType=e.deviceType}}let n1={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 n2(e,t,r,n,i){let o=Math.floor(n.x),a=Math.floor(n.y),s=Math.floor(n.w),A=Math.floor(n.h);for(let n=a;n<a+A&&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}}let n3=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=new Uint8Array(t*r*4),s=[{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;n2(a,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],l=s[o%s.length],c=Math.max(0,A.rect.left-n),u=Math.max(0,A.rect.top-n),d=Math.min(t-c,A.rect.width+2*n),p=Math.min(r-u,A.rect.height+2*n);!function(e,t,r,n,i,o){let a=Math.floor(n.x),s=Math.floor(n.y),A=Math.floor(n.w),l=Math.floor(n.h);for(let n=s;n<s+l&&n<r;n++)for(let r=a;r<a+A&&r<t;r++){if(r<0||n<0)continue;let c=r>=a&&r<a+o,u=r<=a+A-1&&r>a+A-o-1,d=n>=s&&n<s+o,p=n<=s+l-1&&n>s+l-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}}}(a,t,r,{x:c,y:u,w:d,h:p},l.rect,i);let h=A.indexId;if("number"!=typeof h)continue;let f=11*h.toString().length-1,g=f+5,m=c-g,y=u+Math.floor(p/2)-Math.floor(7)-2,v=(t,r)=>e.slice(0,o).some(e=>t<e.rect.left+e.rect.width&&t+g>e.rect.left&&r<e.rect.top+e.rect.height&&r+18>e.rect.top),b=(e,n)=>e>=0&&e+g<=t&&n>=0&&n+18<=r;(v(m,y)||!b(m,y))&&(!v(c,u-18-2)&&b(c,u-18-2)?(m=c,y=u-18-2):!v(c,u+p+2)&&b(c,u+p+2)?(m=c,y=u+p+2):!v(c+d+2,u)&&b(c+d+2,u)?(m=c+d+2,y=u):(m=c,y=u+2)),n2(a,t,r,{x:m,y:y,w:g,h:18},l.rect),function(e,t,r,n,i,o,a){let s=n.toString(),A=i;for(let n of s)!function(e,t,r,n,i,o,a){let s=n1[n];if(s){for(let n=0;n<7;n++)for(let A=0;A<5;A++)if(1===s[n][A])for(let s=0;s<2;s++)for(let l=0;l<2;l++){let c=i+2*A+l,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,A,o,a),A+=11}(a,t,r,h,m+Math.floor((g-f)/2),y+Math.floor(2),l.text)}return a},n5=async e=>{tp()(e.inputImgBase64,"inputImgBase64 is required");let{PhotonImage:t,SamplingFilter:r,resize:n}=await tw(),i=0,o=0;e.size&&(i=e.size.width,o=e.size.height);let a=await tO(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:A}=e;try{let r=a.get_raw_pixels(),n=await n3(s,i,o,e.annotationPadding,e.borderThickness,A),l=function(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}(r,n,0,0),c=new t(l,i,o),u=await tN(c,90);return c.free(),u}finally{a.free()}};function n7(e){let t={logTime:Date.now()};return{logId:(0,eQ.uR)(),...t,...e}}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}let n8=(0,eN.a)("ai:service");class n6{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(nR);let A=(null==t?void 0:t.context)||await this.contextRetrieverFn(),l=await this.resolveLocateSearchArea({query:e,queryPrompt:s,opt:t,context:A,modelRuntime:r,abortSignal:n}),c=Date.now(),{parseResult:u,rect:d,rawResponse:p,rawChoiceMessage:h,usage:f,reasoning_content:g}=await nZ({context:A,targetElementDescription:s,searchConfig:l.config,modelRuntime:r,abortSignal:n}),m=Date.now()-c,y={...this.taskInfo?this.taskInfo:{},durationMs:m,rawResponse:JSON.stringify(p),rawChoiceMessage:h,formatResponse:JSON.stringify(u),usage:f,searchArea:l.trace.sourceRect,searchAreaRawResponse:l.trace.rawResponse,searchAreaRawChoiceMessage:l.trace.rawChoiceMessage,searchAreaUsage:l.trace.usage,reasoning_content:g};(null==(i=u.errors)?void 0:i.length)&&(o=`failed to locate element:
386
- ${u.errors.join("\n")}`);let v={type:"locate",userQuery:{element:s},matchedRect:d,data:null,taskInfo:y,deepLocate:!!l.trace.sourceRect,error:o},b=u.element,w=n7({...v,matchedElement:b?[b]:[]});if(o)throw new nV(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:A}=e,{adapter:l}=s,c=!!(null==o||null==(t=o.planLocatedElement)?void 0:t.rect);if(!n.deepLocate)return{trace:{}};if(c){let e=await nQ({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(l.locate.supportsSearchArea){let e=await nX({context:a,sectionDescription:i,modelRuntime:s,abortSignal:A}),{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 nZ({context:a,targetElementDescription:i,modelRuntime:s,abortSignal:A});(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 nQ({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 A,l,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 nH({context:o,dataQuery:e,multimodalPrompt:i,extractOption:r,modelRuntime:t,pageDescription:n,abortSignal:null==a?void 0:a.abortSignal});A=s.parseResult,l=s.rawResponse,c=s.rawChoiceMessage,u=s.usage,d=s.reasoning_content}catch(t){if(t instanceof nS){let r=Date.now()-h,n=n7({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 nV(t.message,n)}throw t}let f=Date.now()-h,g={...this.taskInfo?this.taskInfo:{},durationMs:f,rawResponse:l,rawChoiceMessage:c,formatResponse:JSON.stringify(A),usage:u,reasoning_content:d};(null==(s=A.errors)?void 0:s.length)&&(p=`AI response error:
387
- ${A.errors.join("\n")}`);let{data:m,thought:y}=A||{},v=n7({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:g,error:p,data:m});if(p&&!m)throw new nV(p,v);return{data:m,thought:y,usage:u,reasoning_content:d,dump:v}}async describe(e,t,r){let n,i;(0,eQ.vA)(e,"target is required for service.describe");let o=(null==r?void 0:r.context)||await this.contextRetrieverFn(),{shotSize:a}=o,s=o.screenshot.base64;(0,eQ.vA)(s,"screenshot is required for service.describe");let A=(i=e_(),`
388
- Describe the element in the red rectangle for precise identification.
389
-
390
- IMPORTANT: You MUST write the description in ${i}.
391
-
392
- CRITICAL REQUIREMENTS:
393
- 1. UNIQUENESS: The description must uniquely identify this element on the current page
394
- 2. UNIVERSALITY: Use generic, reusable selectors that work across different contexts
395
- 3. PRECISION: Be specific enough to distinguish from similar elements
396
-
397
- DESCRIPTION STRUCTURE:
398
- 1. Element type (button, input, link, div, etc.)
399
- 2. Primary identifier (in order of preference):
400
- - Unique text content: "with text 'Login'"
401
- - Unique attribute: "with aria-label 'Search'"
402
- - Unique class/ID: "with class 'primary-button'"
403
- - Unique position: "in header navigation"
404
- 3. Secondary identifiers (if needed for uniqueness):
405
- - Visual features: "blue background", "with icon"
406
- - Relative position: "below search bar", "in sidebar"
407
- - Parent context: "in login form", "in main menu"
408
- - Neighboring stable text: "to the right of the 'Settings' section title"
409
-
410
- GUIDELINES:
411
- - Keep description under 25 words
412
- - Prioritize semantic identifiers over visual ones
413
- - Use consistent terminology across similar elements
414
- - Avoid page-specific or temporary content
415
- - Don't mention the red rectangle or selection box
416
- - Focus on stable, reusable characteristics
417
- - If the selected point/box is inside a text input, textarea, search box, or form field, describe the whole field/control, not the individual placeholder character, typed character, caret, or inner text fragment.
418
- - For icon-only buttons or unlabeled controls, include the nearest stable label, section title, menu item text, row text, or parent region that owns the control.
419
- - When multiple similar icons or controls appear in a list/sidebar/menu, the description MUST distinguish the selected one by its owning stable text or section, not by generic position such as "bottom", "nearby", or "sidebar button".
420
- - For expand/collapse, disclosure, chevron, close, menu, and settings icons, describe both the icon purpose and the stable text/section it controls.
421
- - Use the actual visible neighboring text from the current screenshot when available; do not copy labels from the examples.
422
- - **Write the description in ${i}**
389
+ `),p=[];(null==s?void 0:s.screenshotIncluded)!==!1&&(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 tG(l);h.push(...e)}let{content:f,usage:g,reasoning_content:m,rawChoiceMessage:y}=await nI(h,A,{abortSignal:e.abortSignal});try{n=function(e){let t,r,n=nN(e,"observation"),i=nN(e,"data-json"),o=nN(e,"errors");if(!i)throw Error("Missing required field: data-json");try{t=e5(i)}catch(e){throw Error(`Failed to parse data-json: ${e}`)}if(o)try{let e=e5(o);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 nS(`XML parse error: ${e}`,f,g,y)}return{parseResult:n,rawResponse:f,rawChoiceMessage:y,usage:g,reasoning_content:m}}let nG={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 nV 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 nq=r(4201).Buffer;function nW(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function nY(e,t){var r,n;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 n_(e,t){return"screenshot"!==e||"object"!=typeof t||null===t||ru.isSerialized(t),t}class n${serialize(e){return JSON.stringify(this.toJSON(),nY,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 n$(JSON.parse(e,n_))}static fromJSON(e){return new n$(e)}collectScreenshots(){let e=[];for(let r of this.tasks){var t;if((null==(t=r.uiContext)?void 0:t.screenshot)instanceof ru&&e.push(r.uiContext.screenshot),r.recorder)for(let t of r.recorder)t.screenshot instanceof ru&&e.push(t.screenshot)}return e}constructor(e){nW(this,"id",void 0),nW(this,"logTime",void 0),nW(this,"name",void 0),nW(this,"description",void 0),nW(this,"tasks",void 0),nW(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 n0{serialize(e){return JSON.stringify(this.toJSON(),nY,e)}serializeWithInlineScreenshots(e){let t=e=>e instanceof ru?{base64:e.base64,capturedAt:e.capturedAt}:Array.isArray(e)?e.map(t):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).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 n0(JSON.parse(e,n_))}static fromJSON(e){return new n0(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,t0.existsSync)(t)||(0,t0.mkdirSync)(t,{recursive:!0}),this.collectAllScreenshots())){let r=(0,tg.join)(t,`${e.id}.${e.extension}`);if((0,t0.existsSync)(r))continue;let n=e.rawBase64;(0,t0.writeFileSync)(r,nq.from(n,"base64"))}(0,t0.writeFileSync)(e,this.serialize(),"utf-8")}static fromFilesAsInlineJson(e){let t=(0,t0.readFileSync)(e,"utf-8"),r=`${e}.screenshots`,n=JSON.parse(t),i=new rA({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=rs(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}})}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,tg.join)(r,`${e}.${n}`);if(!(0,t0.existsSync)(i))return"";let o=(0,t0.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,t0.rmSync)(t,{force:!0,recursive:!0})}catch{}}static getFilePaths(e){return[e,`${e}.screenshots`]}constructor(e){nW(this,"sdkVersion",void 0),nW(this,"groupName",void 0),nW(this,"groupDescription",void 0),nW(this,"modelBriefs",void 0),nW(this,"executions",void 0),nW(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 n$?e:n$.fromJSON(e)),this.deviceType=e.deviceType}}let n1={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 n2(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=n1[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 n3(e){return 11*e.toString().length-1}function n5(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 n7(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 n4(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 n8=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;n5(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&&n7(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=n3(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)),n5(s,t,r,{x:y,y:v,w:m,h:18},c.rect),n2(s,t,r,f,y+Math.floor((m-g)/2),v+Math.floor(2),c.text)}return s},n6=async e=>{tp()(e.inputImgBase64,"inputImgBase64 is required");let{PhotonImage:t,SamplingFilter:r,resize:n}=await tw(),i=0,o=0;e.size&&(i=e.size.width,o=e.size.height);let a=await tO(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 n8(s,i,o,e.annotationPadding,e.borderThickness,l,e.centerPoint),A=n4(r,n,i,o),c=new t(A,i,o),u=await tT(c,90);return c.free(),u}finally{a.free()}},n9=async e=>{tp()(e.inputImgBase64,"inputImgBase64 is required");let{PhotonImage:t,SamplingFilter:r,resize:n}=await tw(),i=0,o=0;e.size&&(i=e.size.width,o=e.size.height);let a=await tO(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),n7(e,t,r,A,m+2,o.calloutBorder,{thickness:3}),n7(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=n3(o.indexId),n2(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=n4(r,n,i,o),l=new t(s,i,o),A=await tT(l,90);return l.free(),A}finally{a.free()}},ie={resize:{cropMaxLongEdge:1e3,cropUpscaleMaxRatio:2}};function it(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 ir(e){return e.width<=40&&e.height<=40?1:2}function ii(e){let t={logTime:Date.now()};return{logId:(0,eQ.uR)(),...t,...e}}function io(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ia=(0,eT.a)("ai:service");class is{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(nR);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 nZ({context:l,targetElementDescription:s,searchConfig:A.config,modelRuntime:r,abortSignal:n}),m=Date.now()-c,y={...this.taskInfo?this.taskInfo:{},durationMs:m,rawResponse:JSON.stringify(p),rawChoiceMessage:h,formatResponse:JSON.stringify(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:
390
+ ${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=ii({...v,matchedElement:b?[b]:[]});if(o)throw new nV(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 nQ({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 nX({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 nZ({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 nQ({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 nH({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 nS){let r=Date.now()-h,n=ii({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 nV(t.message,n)}throw t}let f=Date.now()-h,g={...this.taskInfo?this.taskInfo:{},durationMs:f,rawResponse:A,rawChoiceMessage:c,formatResponse:JSON.stringify(l),usage:u,reasoning_content:d};(null==(s=l.errors)?void 0:s.length)&&(p=`AI response error:
391
+ ${l.errors.join("\n")}`);let{data:m,thought:y}=l||{},v=ii({type:"extract",userQuery:{dataDemand:e},data:null,taskInfo:g,error:p,data:m});if(p&&!m)throw new nV(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_(),`
392
+ Describe the real page element indicated by the temporary callout.
393
+ The callout is an annotation overlay. It is not part of the page or target.
394
+ 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.
395
+
396
+ IMPORTANT: You MUST write the description in ${o}.
397
+
398
+ OBSERVE IN THIS ORDER:
399
+ 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.
400
+ 2. Primitive: name what that smallest part is before adding surrounding context.
401
+ 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.
402
+ 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.
403
+
404
+ RULES:
405
+ - Keep description under 35 words.
406
+ - Describe the smallest indicated UI part itself, not the larger container, row, card, sentence, or group that merely contains it.
407
+ - Ignore every annotation overlay, including callout number, line, color, marker, border, dot, ring, crosshair, or selection box. Never describe the annotation as the target.
408
+ - Do not borrow the text, glyph, direction, purpose, or state from a nearby element outside the callout endpoint/center.
409
+ - 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.
410
+ - 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.
411
+ - 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.
412
+ - 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.
413
+ - 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.
414
+ - 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.
415
+ - 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.
416
+ - For inline text, links, or substrings, describe only the exact substring/link at the endpoint/center, not the whole line.
417
+ - 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.
418
+ - 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.
419
+ - Use selected, highlighted, hovered, focused, or active state only if the callout endpoint/center is inside that state.
420
+ - If the endpoint/center is on blank space, describe the empty region/gap between stable surrounding anchors. Do not invent a nearby control.
421
+ - Use actual visible text from the current screenshot when available; do not copy labels from the examples.
422
+ - **Write the description in ${o}**
423
423
 
424
424
  EXAMPLES:
425
- ${(nG[i]||nG.English).map(e=>`- ${e}`).join("\n")}
425
+ ${(nG[o]||nG.English).map(e=>`- ${e}`).join("\n")}
426
426
 
427
427
  Return JSON:
428
428
  {
429
429
  "description": "unique element identifier",
430
430
  "error"?: "error message if any"
431
- }`),l=Array.isArray(e)?{left:Math.floor(e[0]-15),top:Math.floor(e[1]-15),width:30,height:30}:e,c=await n5({inputImgBase64:s,size:a,elementsPositionInfo:[{rect:l}],borderThickness:3});if(null==r?void 0:r.deepLocate){let e=tF(l,a);n8("describe: cropping to searchArea",e),c=(await tT(c,e)).imageBase64}let u=[{role:"system",content:A},{role:"user",content:[{type:"image_url",image_url:{url:c,detail:"high"}}]}];try{n=await nI(u,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),i=e instanceof nS?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 nS))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+='\\"'}}(e2(i),"description"))?void 0:r.trim();if(o)return{description:o}}(t);if(!e)throw t;return n8("describe: recovered malformed description JSON response"),e}let{content:d}=n;return(0,eQ.vA)(!d.error,`describe failed: ${d.error}`),(0,eQ.vA)(d.description,"failed to describe the element"),d}constructor(e,t){n4(this,"contextRetrieverFn",void 0),n4(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 n9="data:image/png;base64,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",ie={width:1788,height:500},it="CONNECTIVITY_OK";function ir(e){return"number"==typeof e&&Number.isFinite(e)}function ii(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,...r}}async function io(e){let t=Date.now();try{let r=(await nj([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${it}`}],e)).content.trim(),n=r.includes(it);return ii("text",e,{passed:n,durationMs:Date.now()-t,message:n?"":`Unexpected response: ${r}`})}catch(r){return ii("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function ia(e){let t=Date.now();try{return await nj([{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:n9,detail:"high"}}]}],e),ii("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return ii("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function is(e){let t=Date.now();try{var r,n;let i={screenshot:ru.create(n9,Date.now()),shotSize:ie,shrunkShotToLogicalRatio:1},o=new n6(i),a=await o.locate({prompt:"the main todo input box"},{},e),s=a.rect||(null==(r=a.element)?void 0:r.rect),A=null==(n=a.element)?void 0:n.center,l=!!s&&"object"==typeof s&&ir(s.left)&&ir(s.top)&&ir(s.width)&&ir(s.height)&&Array.isArray(A)&&2===A.length&&ir(A[0])&&ir(A[1]);return ii("aiLocate",e,{passed:l,durationMs:Date.now()-t,message:l?"":`Invalid locate result: ${JSON.stringify({rect:s,center:A})}`})}catch(r){return ii("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function iA(e){let t,r=nn(e.planningModelConfig),n=nn(e.insightModelConfig),i=nn(e.defaultModelConfig),o=await Promise.all([io(r),ia(n),is(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 il(e){if(!e._def)return e;let t=e._def.typeName;return"ZodOptional"===t||"ZodNullable"===t||"ZodDefault"===t?il(e._def.innerType):"ZodEffects"===t&&e._def.schema?il(e._def.schema):e}function ic(e){var t,r,n;let i=il(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 iu(e,t){var r,n,i,o;let a=il(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 ic(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=>iu(e,t)).join(" | "):"union"}return"unknown"}function id(e){if("description"in e)return e.description||null;let t=il(e);return"description"in t?t.description||null:ic(t)?"Location information for the target element":null}(0,eN.a)("ai:recorder-markdown",{console:!0});let ip=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}},ih=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=iu(i,t),a=id(i),s=ip(i),A=void 0!==s,l=`${n}: ${o}`,c=[];if(a&&c.push(a),A){let e="string"==typeof s?`"${s}"`:JSON.stringify(s);c.push(`default: ${e}`)}c.length>0&&(l+=` // ${c.join(", ")}`),r.push(l)}r.length>0&&(i.push("- param:"),r.forEach(e=>{i.push(` - ${e}`)}))}else{let e=iu(n),t=id(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=tW(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:
431
+ }`),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 n9({inputImgBase64:l,size:s,point:d}):await n6({inputImgBase64:l,size:s,elementsPositionInfo:[{rect:it(u)}],borderThickness:ir(u),centerPoint:!0});if(null==r?void 0:r.deepDescribe){let e=[{kind:"focused",rect:tF(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;ia("describe: cropping deep context area",e);let o=await tM(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 n9({inputImgBase64:o.imageBase64,size:a,point:{x:d.x-e.rect.left,y:d.y-e.rect.top}}):await n6({inputImgBase64:o.imageBase64,size:a,elementsPositionInfo:[{rect:it(s)}],borderThickness:ir(s),centerPoint:!0}),p=function(e){let t=Math.max(e.width,e.height);if(!t)return;let{resize:r}=ie,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 tj(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 nj(h,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),i=e instanceof nS?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 nS))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+='\\"'}}(e2(i),"description"))?void 0:r.trim();if(o)return{description:o}}(t);if(!e)throw t;return ia("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){io(this,"contextRetrieverFn",void 0),io(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 il="data:image/png;base64,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",iA={width:1788,height:500},ic="CONNECTIVITY_OK";function iu(e){return"number"==typeof e&&Number.isFinite(e)}function id(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,...r}}async function ip(e){let t=Date.now();try{let r=(await nI([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${ic}`}],e)).content.trim(),n=r.includes(ic);return id("text",e,{passed:n,durationMs:Date.now()-t,message:n?"":`Unexpected response: ${r}`})}catch(r){return id("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function ih(e){let t=Date.now();try{return await nI([{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:il,detail:"high"}}]}],e),id("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return id("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function ig(e){let t=Date.now();try{var r,n;let i={screenshot:ru.create(il,Date.now()),shotSize:iA,shrunkShotToLogicalRatio:1},o=new is(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&&iu(s.left)&&iu(s.top)&&iu(s.width)&&iu(s.height)&&Array.isArray(l)&&2===l.length&&iu(l[0])&&iu(l[1]);return id("aiLocate",e,{passed:A,durationMs:Date.now()-t,message:A?"":`Invalid locate result: ${JSON.stringify({rect:s,center:l})}`})}catch(r){return id("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function im(e){let t,r=nn(e.planningModelConfig),n=nn(e.insightModelConfig),i=nn(e.defaultModelConfig),o=await Promise.all([ip(r),ih(n),ig(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 iy(e){if(!e._def)return e;let t=e._def.typeName;return"ZodOptional"===t||"ZodNullable"===t||"ZodDefault"===t?iy(e._def.innerType):"ZodEffects"===t&&e._def.schema?iy(e._def.schema):e}function iv(e){var t,r,n;let i=iy(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 ib(e,t){var r,n,i,o;let a=iy(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 iv(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=>ib(e,t)).join(" | "):"union"}return"unknown"}function iw(e){if("description"in e)return e.description||null;let t=iy(e);return"description"in t?t.description||null:iv(t)?"Location information for the target element":null}(0,eT.a)("ai:recorder-markdown",{console:!0});let iE=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}},ix=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=ib(i,t),a=iw(i),s=iE(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=ib(n),t=iw(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=tW(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:
432
432
  <action-type>${e.name}</action-type>
433
433
  <action-param-json>
434
434
  ${JSON.stringify(o,null,2).replace(/\n/g,`
@@ -436,20 +436,20 @@ Return JSON:
436
436
  </action-param-json>`;i.push(a)}return`- ${e.name}, ${e.description||"No description provided"}
437
437
  ${i.join(`
438
438
  `)}
439
- `.trim()};async function ig(e){let{actionSpace:t,locatePromptSpec:r,includeLocateInPlanning:n,includeThought:i,includeSubGoals:o}=e,a=e_();if(n&&!r)throw Error(nT());let s=t.map(e=>{var t;return ih(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"),A=["### 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"),l=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?`{
439
+ `.trim()};async function ik(e){let{actionSpace:t,locatePromptSpec:r,includeLocateInPlanning:n,includeThought:i,includeSubGoals:o}=e,a=e_();if(n&&!r)throw Error(nM());let s=t.map(e=>{var t;return ix(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?`{
440
440
  "prompt": ${JSON.stringify(e)},
441
441
  "${i.resultKey}": ${nz(o??i.exampleValues[0])}
442
442
  }`:`{
443
443
  "prompt": ${JSON.stringify(e)}
444
- }`},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=l?`REQUIRED: You MUST always output the <thought> tag. Never skip it.
444
+ }`},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.
445
445
 
446
- Include your thought process in the <thought> 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 your thoughts naturally without numbering or section headers.
446
+ 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.
447
447
 
448
- ${h}`:`REQUIRED: You MUST always output the <thought> tag. Never skip it.
448
+ ${h}`:`REQUIRED: You MUST always output the <planning> tag. Never skip it.
449
449
 
450
- Include your thought process in the <thought> tag. It should answer: What is the current state based on the screenshot? What should be the next action? Write your thoughts naturally without numbering or section headers.
450
+ 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.
451
451
 
452
- ${h}`,g=l?`
452
+ ${h}`,g=A?`
453
453
 
454
454
  * <update-plan-content> tag
455
455
 
@@ -479,7 +479,7 @@ During execution, you can call <update-plan-content> at any time to update the p
479
479
 
480
480
  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:
481
481
 
482
- <thought>...</thought>
482
+ <planning>...</planning>
483
483
  <update-plan-content>
484
484
  <sub-goal index="1" status="pending">Log in to the system</sub-goal>
485
485
  <sub-goal index="2" status="pending">Complete all to-do items</sub-goal>
@@ -504,23 +504,23 @@ After some time, when the last sub-goal is also completed, you can mark it as do
504
504
 
505
505
  <mark-sub-goal-done>
506
506
  <sub-goal index="3" status="finished" />
507
- </mark-sub-goal-done>`:"",m=l?3:2,y=l?4:3;return`
507
+ </mark-sub-goal-done>`:"",m=A?3:2,y=A?4:3;return`
508
508
  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.
509
509
 
510
- ${l?"## Step 1: Observe and Plan (related tags: <thought>, <update-plan-content>, <mark-sub-goal-done>)":"## Step 1: Observe (related tags: <thought>)"}
510
+ ${A?"## Step 1: Observe and Plan (related tags: <planning>, <update-plan-content>, <mark-sub-goal-done>)":"## Step 1: Observe (related tags: <planning>)"}
511
511
 
512
- ${l?"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."}
513
- ${l?`
512
+ ${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."}
513
+ ${A?`
514
514
  ### Observation Guidelines
515
515
 
516
516
  - Treat visible summaries, thumbnails, cropped content, and partially visible lists as potentially incomplete when the task depends on precise details.
517
517
  - 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.
518
518
  `:""}
519
- * <thought> tag (REQUIRED)
519
+ * <planning> tag (REQUIRED)
520
520
 
521
521
  ${f}
522
522
  ${g}
523
- ${l?`
523
+ ${A?`
524
524
  ## Step 2: Memory Data from Current Screenshot (related tags: <memory>)
525
525
 
526
526
  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.
@@ -537,9 +537,9 @@ Examples:
537
537
 
538
538
  Don't use this tag if no information needs to be preserved.
539
539
  `:""}
540
- ## Step ${m}: ${l?"Check if Goal is Accomplished":"Check if the Instruction is Fulfilled"} (related tags: <complete>)
540
+ ## Step ${m}: ${A?"Check if Goal is Accomplished":"Check if the Instruction is Fulfilled"} (related tags: <complete>)
541
541
 
542
- ${l?"Based on the current screenshot and the status of all sub-goals, determine":"Determine"} if the entire task is completed.
542
+ ${A?"Based on the current screenshot and the status of all sub-goals, determine":"Determine"} if the entire task is completed.
543
543
 
544
544
  ### CRITICAL: The User's Instruction is the Supreme Authority
545
545
 
@@ -549,15 +549,15 @@ The user's instruction defines the EXACT scope of what you must accomplish. You
549
549
  - 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.
550
550
  - 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.
551
551
 
552
- **What "${l?"goal accomplished":"instruction fulfilled"}" means:**
553
- - The ${l?"goal is accomplished":"instruction is fulfilled"} when you have done EXACTLY what the user asked - no extra steps, no assumptions.
552
+ **What "${A?"goal accomplished":"instruction fulfilled"}" means:**
553
+ - The ${A?"goal is accomplished":"instruction is fulfilled"} when you have done EXACTLY what the user asked - no extra steps, no assumptions.
554
554
  - Do NOT perform any action beyond the explicit instruction, even if it seems logical or helpful.
555
555
 
556
556
  **Examples - Explicit instructions (execute exactly, no extra steps):**
557
- - "fill out the form" → ${l?"Goal accomplished":"Instruction fulfilled"} when all fields are filled. Do NOT submit the form.
558
- - "click the login button" → ${l?"Goal accomplished":"Instruction fulfilled"} once clicked. Do NOT wait for page load or verify login success.
559
- - "type 'hello' in the search box" → ${l?"Goal accomplished":"Instruction fulfilled"} when 'hello' is typed. Do NOT press Enter or trigger search.
560
- - "select the first item" → ${l?"Goal accomplished":"Instruction fulfilled"} when selected. Do NOT proceed to checkout.
557
+ - "fill out the form" → ${A?"Goal accomplished":"Instruction fulfilled"} when all fields are filled. Do NOT submit the form.
558
+ - "click the login button" → ${A?"Goal accomplished":"Instruction fulfilled"} once clicked. Do NOT wait for page load or verify login success.
559
+ - "type 'hello' in the search box" → ${A?"Goal accomplished":"Instruction fulfilled"} when 'hello' is typed. Do NOT press Enter or trigger search.
560
+ - "select the first item" → ${A?"Goal accomplished":"Instruction fulfilled"} when selected. Do NOT proceed to checkout.
561
561
 
562
562
  **Change completion:**
563
563
  - 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.
@@ -582,7 +582,7 @@ The user's instruction defines the EXACT scope of what you must accomplish. You
582
582
  - Retry input only when the input field is clearly still empty, or when the page shows an explicit error message.
583
583
 
584
584
  **Special case - Assertion instructions:**
585
- - 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 ${l?"the goal":"it"} as failed (success="false").
585
+ - 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").
586
586
  - 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.
587
587
 
588
588
  ### Completion Criteria for Process-required Instructions
@@ -594,7 +594,7 @@ For process-required instructions, do NOT treat the task as complete only becaus
594
594
  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.
595
595
 
596
596
  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.
597
- ${!l?`
597
+ ${!A?`
598
598
  **Page navigation restriction:**
599
599
  - 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.
600
600
  - 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).
@@ -604,13 +604,13 @@ ${!l?`
604
604
 
605
605
  - If the task is NOT complete, skip this section and continue to Step ${y}.
606
606
  - Use the <complete success="true|false">message</complete> tag to output the result if the goal is accomplished or failed.
607
- - the 'success' attribute is required. ${l?"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 ${l?"expected goal is not accomplished and cannot be accomplished":"instruction is not fulfilled and cannot be fulfilled"}, set success="false".
607
+ - 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".
608
608
  - the 'message' is the information that will be provided to the user. If the user asks for a specific format, strictly follow that.
609
609
  - If you output <complete>, do NOT output <action-type> or <action-param-json>. The task ends here.
610
610
 
611
611
  ## Step ${y}: Determine Next Action (related tags: <log>, <action-type>, <action-param-json>, <error>)
612
612
 
613
- ONLY if the task is not complete: Think what the next action is according to the current screenshot${l?" and the plan":""}.
613
+ ONLY if the task is not complete: Think what the next action is according to the current screenshot${A?" and the plan":""}.
614
614
 
615
615
  - 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.
616
616
  - 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.
@@ -618,7 +618,7 @@ ONLY if the task is not complete: Think what the next action is according to the
618
618
  - Give just the next ONE action you should do (if any)
619
619
  - 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.
620
620
 
621
- ${A}
621
+ ${l}
622
622
 
623
623
  ${n?`${nB()}
624
624
 
@@ -670,9 +670,9 @@ For example:
670
670
  Return in XML format following this decision flow:
671
671
 
672
672
  **Always include (REQUIRED):**
673
- <!-- Step 1: Observe${l?" and Plan":""} -->
674
- <thought>Your thought process here. NEVER skip this tag.</thought>
675
- ${l?`
673
+ <!-- Step 1: Observe${A?" and Plan":""} -->
674
+ <planning>Your planning details here. NEVER skip this tag.</planning>
675
+ ${A?`
676
676
  <!-- required when no update-plan-content is provided in the previous response -->
677
677
  <update-plan-content>...</update-plan-content>
678
678
 
@@ -680,16 +680,16 @@ ${l?`
680
680
  <mark-sub-goal-done>
681
681
  <sub-goal index="1" status="finished" />
682
682
  </mark-sub-goal-done>
683
- `:""}${l?`
683
+ `:""}${A?`
684
684
  <!-- Step 2: Memory data from current screenshot if needed -->
685
685
  <memory>...</memory>
686
686
  `:""}
687
687
  **Then choose ONE of the following paths:**
688
688
 
689
- **Path A: If the ${l?"goal is accomplished":"instruction is fulfilled"} or failed (Step ${m})**
689
+ **Path A: If the ${A?"goal is accomplished":"instruction is fulfilled"} or failed (Step ${m})**
690
690
  <complete success="true|false">...</complete>
691
691
 
692
- **Path B: If the ${l?"goal is NOT complete":"instruction is NOT fulfilled"} yet (Step ${y})**
692
+ **Path B: If the ${A?"goal is NOT complete":"instruction is NOT fulfilled"} yet (Step ${y})**
693
693
  <!-- Determine next action -->
694
694
  <log>...</log>
695
695
  <action-type>...</action-type>
@@ -697,7 +697,7 @@ ${l?`
697
697
 
698
698
  <!-- OR if there's an error -->
699
699
  <error>...</error>
700
- ${l?`
700
+ ${A?`
701
701
  ## Multi-turn Conversation Example
702
702
 
703
703
  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":
@@ -710,7 +710,7 @@ Below is an example of a multi-turn conversation for "fill out the registration
710
710
  **Screenshot:** [Shows a registration form with empty Name and Email fields]
711
711
 
712
712
  **Your response:**
713
- <thought>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.</thought>
713
+ <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>
714
714
  <update-plan-content>
715
715
  <sub-goal index="1" status="pending">Fill in the Name field with 'John'</sub-goal>
716
716
  <sub-goal index="2" status="pending">Fill in the Email field with 'john@example.com'</sub-goal>
@@ -740,7 +740,7 @@ Actions performed for current sub-goal:
740
740
  **Screenshot:** [Shows the form with Name field now focused/active]
741
741
 
742
742
  **Your response:**
743
- <thought>The Name field is now focused. I need to type 'John' into this field. Current sub-goal is running, will be completed after input.</thought>
743
+ <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>
744
744
  <log>Typing 'John' into the Name field</log>
745
745
  <action-type>Input</action-type>
746
746
  <action-param-json>
@@ -766,7 +766,7 @@ Actions performed for current sub-goal:
766
766
  **Screenshot:** [Shows the form with Name field containing 'John']
767
767
 
768
768
  **Your response:**
769
- <thought>The Name field now shows 'John'. Sub-goal 1 is complete. Next, I need to fill the Email field for sub-goal 2.</thought>
769
+ <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>
770
770
  <mark-sub-goal-done>
771
771
  <sub-goal index="1" status="finished" />
772
772
  </mark-sub-goal-done>
@@ -795,7 +795,7 @@ Actions performed for current sub-goal:
795
795
  **Screenshot:** [Shows the form with Name='John' and Email field focused]
796
796
 
797
797
  **Your response:**
798
- <thought>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.</thought>
798
+ <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>
799
799
  <log>Typing email address into the Email field</log>
800
800
  <action-type>Input</action-type>
801
801
  <action-param-json>
@@ -821,7 +821,7 @@ Actions performed for current sub-goal:
821
821
  **Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
822
822
 
823
823
  **Your response:**
824
- <thought>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.</thought>
824
+ <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>
825
825
  <mark-sub-goal-done>
826
826
  <sub-goal index="2" status="finished" />
827
827
  <sub-goal index="3" status="finished" />
@@ -840,7 +840,7 @@ Below is an example of a multi-turn conversation for "fill out the registration
840
840
  **Screenshot:** [Shows a registration form with empty Name and Email fields]
841
841
 
842
842
  **Your response:**
843
- <thought>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.</thought>
843
+ <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>
844
844
  <log>Click on the Name field to start filling the form</log>
845
845
  <action-type>Tap</action-type>
846
846
  <action-param-json>
@@ -857,7 +857,7 @@ The previous action has been executed, here is the latest screenshot. Please con
857
857
  **Screenshot:** [Shows the form with Name field now focused/active]
858
858
 
859
859
  **Your response:**
860
- <thought>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.</thought>
860
+ <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>
861
861
  <log>Typing 'John' into the Name field</log>
862
862
  <action-type>Input</action-type>
863
863
  <action-param-json>
@@ -874,7 +874,7 @@ The previous action has been executed, here is the latest screenshot. Please con
874
874
  **Screenshot:** [Shows the form with Name field containing 'John']
875
875
 
876
876
  **Your response:**
877
- <thought>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.</thought>
877
+ <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>
878
878
  <log>Moving to the Email field</log>
879
879
  <action-type>Tap</action-type>
880
880
  <action-param-json>
@@ -891,7 +891,7 @@ The previous action has been executed, here is the latest screenshot. Please con
891
891
  **Screenshot:** [Shows the form with Name='John' and Email field focused]
892
892
 
893
893
  **Your response:**
894
- <thought>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.</thought>
894
+ <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>
895
895
  <log>Typing email address into the Email field</log>
896
896
  <action-type>Input</action-type>
897
897
  <action-param-json>
@@ -908,48 +908,48 @@ The previous action has been executed, here is the latest screenshot. Please con
908
908
  **Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
909
909
 
910
910
  **Your response:**
911
- <thought>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.</thought>
911
+ <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>
912
912
  <complete success="true">john@example.com</complete>
913
- `}`}let im=(0,eN.a)("planning"),iy=(0,eN.a)("planning",{console:!0});function iv(e,t){let r,n,i=nM(e,"thought"),o=nM(e,"memory"),a=nM(e,"log")||"",s=nM(e,"error"),A=nM(e,"action-type"),l=nM(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=nM(e,"update-plan-content"),p=nM(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(A&&"null"!==A.toLowerCase()){let e,r=A.split("<")[0].trim();if(l)try{e=t(l,{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 ib(e,t){let r,n,{context:i,conversationHistory:o}=t,a=t.modelRuntime,{adapter:s}=a,{shotSize:A}=i,l=i.screenshot.base64;if(t.includeLocateInPlanning&&!a.config.modelFamily)throw Error(nT(a.config.slot));let c=a.config.modelFamily&&"standard"===s.locate.kind?s.locate.resultAdapter:void 0,u=!0===t.deepThink,d=await ig({actionSpace:t.actionSpace,locatePromptSpec:null==c?void 0:c.promptSpec,includeLocateInPlanning:t.includeLocateInPlanning,includeThought:!0,includeSubGoals:u}),p=await rh({imageBase64:l,width:A.width,height:A.height,policy:s.imagePreprocess}),h=p.imageBase64,f=tX(e),g=t.actionContext?`<high_priority_knowledge>${t.actionContext}</high_priority_knowledge>
913
+ `}`}let iS=(0,eT.a)("planning"),iC=(0,eT.a)("planning",{console:!0});function iI(e,t){let r,n,i=nN(e,"planning"),o=nN(e,"memory"),a=nN(e,"log")||"",s=nN(e,"error"),l=nN(e,"action-type"),A=nN(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=nN(e,"update-plan-content"),p=nN(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 ij(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(nM(a.config.slot));let c=a.config.modelFamily&&"standard"===s.locate.kind?s.locate.resultAdapter:void 0,u=!0===t.deepThink,d=await ik({actionSpace:t.actionSpace,locatePromptSpec:null==c?void 0:c.promptSpec,includeLocateInPlanning:t.includeLocateInPlanning,includeThought:!0,includeSubGoals:u}),p=await rh({imageBase64:A,width:l.width,height:l.height,policy:s.imagePreprocess}),h=p.imageBase64,f=tX(e),g=t.actionContext?`<high_priority_knowledge>${t.actionContext}</high_priority_knowledge>
914
914
  `:"",m=[{role:"user",content:[{type:"text",text:`${g}<user_instruction>${f}</user_instruction>`}]},...t.referenceImageMessages??[]],y=u?o.subGoalsToText():o.historicalLogsToText(),v=y?`
915
915
 
916
916
  ${y}`:o.pendingFeedbackMessage?"":`
917
917
 
918
918
  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?`
919
919
 
920
- ${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:k,usage:x,reasoning_content:S,rawChoiceMessage:C}=await nj(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});try{try{n=iv(k,s.jsonParser)}catch{let e=await nj(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});k=e.content,x=e.usage,S=e.reasoning_content,C=e.rawChoiceMessage,n=iv(k,s.jsonParser)}n.action&&void 0!==n.finalizeSuccess&&(iy("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&&(im("task completed via <complete> tag, stop planning"),r=!1,u&&o.markAllSubGoalsFinished());let i={...n,actions:e,rawResponse:k,rawChoiceMessage:C,usage:x,reasoning_content:S,yamlFlow:function(e,t){let r=[];for(let n of e){let e=n.type,i=tK(e,t),o=i.interfaceAlias||e,a=i.paramSchema?tY(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,A=s?Object.keys(a):[],l=s&&1===A.length&&A[0]===s&&"string"==typeof a[s]?{[o]:a[s]}:{[o]:"",...a};r.push(l)}return r}(e,t.actionSpace),shouldContinuePlanning:r};if((0,eQ.vA)(n,"can't get plans from AI"),rg(e,{actionSpace:t.actionSpace,includeLocateInPlanning:t.includeLocateInPlanning,locateResultAdapter:c,locateResultContext:{preparedSize:p.preparedSize,contentSize:p.contentSize}}),u){var j,I;if((null==(j=n.updateSubGoals)?void 0:j.length)&&o.mergeSubGoals(n.updateSubGoals),null==(I=n.markFinishedIndexes)?void 0:I.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:k}]}),i}catch(t){let e=t instanceof Error?t.message:String(t);throw new nS(`XML parse error: ${e}`,k,x,C)}}r(1182);var iw=r(3612),iE=r(3198),ik=r(9383),ix=r(5409);let iS=(0,eN.a)("yaml:utils"),iC=/^tasks\s*:/,ij=/^[^\s#][^:]*:/,iI=["images","convertHttpImage2Base64"];function iO(e){if("object"!=typeof e||null===e)return;let t=iI.map(t=>[t,e[t]]).filter(e=>{let[,t]=e;return void 0!==t});return t.length?Object.fromEntries(t):void 0}function iP(e,t){let r;iS("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 iS("no prompt, will return undefined in buildDetailedLocateParam",t);let s=iO(t);return s&&(i="string"==typeof i?{prompt:i,...s}:{...i,...s}),{prompt:i,deepLocate:o,cacheable:a,xpath:r}}var iR=r(5409);function iT(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let iN=(0,eN.a)("yaml-player"),iM={aiQuery:"aiQuery",aiNumber:"aiNumber",aiString:"aiString",aiBoolean:"aiBoolean",aiAsk:"aiAsk",aiLocate:"aiLocate"},iD=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 iD(t.innerType);case tu.kY.ZodEffects:return iD(t.schema);case tu.kY.ZodPipeline:return iD(t.out);case tu.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>iD(e))}default:return!1}};class iB{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,tg.resolve)(iR.cwd(),this.output),t=(0,tg.dirname)(e);(0,iw.existsSync)(t)||(0,iw.mkdirSync)(t,{recursive:!0}),(0,iw.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,tg.resolve)(iR.cwd(),this.unstableLogContent),n=(0,tg.dirname)(r);(0,iw.existsSync)(n)||(0,iw.mkdirSync)(n,{recursive:!0}),(0,iw.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;iN(`playing step ${n}, flowItem=${JSON.stringify(t)}`);let i=Object.keys(iM).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,A=n??i??o;"string"==typeof a&&a||a&&"object"==typeof a&&"string"==typeof a.prompt&&a.prompt?r=a:A&&"object"==typeof A&&"string"==typeof A.prompt&&A.prompt?r=A:"string"==typeof A&&A&&(r=A),(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");let{pass:a,thought:s,message:A}=await e.aiAssert(r,n,{...o,keepRawResponse:!0})||{};if(this.setResult(i,{pass:a,thought:s,message:A}),!a)throw Error(A)}else if(i){let{[i]:r,name:n,...o}=t;(0,eQ.vA)(r,`missing prompt for ${i}`);let a=e[iM[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:iP(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:iP(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,A=o??("object"==typeof n&&null!==n?n.locate:void 0);if("string"==typeof n&&n)r=n;else if("object"==typeof A&&(null==A?void 0:A.prompt)){let{prompt:e,...t}=A;r=e,s={...t,...a}}else r=(null==n?void 0:n.prompt)||i||A;(0,eQ.vA)(r,"missing prompt for aiTap"),await e.aiTap(r,s)}else{var o,a,s;let r,n,i,A=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)(A,`unknown flowItem in yaml: ${JSON.stringify(t)}`);let l=iD(A.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=A.name,a=A.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){iN(`matchedAction: ${A.name}`,`flowParams: ${JSON.stringify(d)}`);let t=await e.callActionInActionSpace(A.name,d);void 0!==t&&this.setResult(c,t)}else if("string"==typeof n&&l){if(A.paramSchema){let e=A.paramSchema.safeParse(n);e.success&&"string"==typeof e.data?i=e.data:e.success||(iN(`parse failed for action ${A.name} with string param`,e.error),i=n)}else i=n;if(void 0!==i){iN(`matchedAction: ${A.name}`,`flowParams: ${JSON.stringify(i)}`);let r=await e.callActionInActionSpace(A.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=iO(t),i=iP(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,[A.name,A.interfaceAlias||"_never_mind_"]),s={...a,locate:o};iN(`matchedAction: ${A.name}`,`flowParams: ${JSON.stringify(s,null,2)}`);let l=await e.callActionInActionSpace(A.name,s),c=t.name;void 0!==l&&this.setResult(c,l)}}}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,A=[];try{let{agent:a,freeFn:l}=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)},A=[...l||[],{name:"restore-agent-onTaskStartTip",fn:()=>{s&&(s.onTaskStartTip=c)}}]}catch(e){this.setPlayerStatus("error",e);return}this.interfaceAgent=s;let l=0;this.setPlayerStatus("running");let c=!1;for(;l<a.length;){let e=this.taskStatusList[l];this.setTaskStatus(l,"running"),this.setTaskIndex(l),this.failedReportExecutionInCurrentStep=!1;try{await this.playTask(e,this.interfaceAgent),this.setTaskStatus(l,"done")}catch(r){this.setTaskStatus(l,"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){iN("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,l++}for(let e of(c?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",A))try{await e.fn()}catch(e){}}constructor(e,t,r,n){var i,o,a,s,A;iT(this,"script",void 0),iT(this,"setupAgent",void 0),iT(this,"onTaskStatusChange",void 0),iT(this,"currentTaskIndex",void 0),iT(this,"taskStatusList",void 0),iT(this,"status",void 0),iT(this,"reportFile",void 0),iT(this,"result",void 0),iT(this,"unnamedResultIndex",void 0),iT(this,"output",void 0),iT(this,"unstableLogContent",void 0),iT(this,"errorInSetup",void 0),iT(this,"interfaceAgent",void 0),iT(this,"agentStatusTip",void 0),iT(this,"target",void 0),iT(this,"actionSpace",void 0),iT(this,"scriptPath",void 0),iT(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 l=(null==(i=e.agent)?void 0:i.aiActContext)??(null==(o=e.agent)?void 0:o.aiActionContext);if(void 0!==l&&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=l),this.target=e.target||e.web||e.android||e.ios||e.computer||e.config,eQ.ht||eQ.rS)this.output=void 0,iN("output is undefined in browser or worker");else if(null==(a=this.target)?void 0:a.output)this.output=(0,tg.resolve)(iR.cwd(),this.target.output),iN("setting output by config.output",this.output);else{const e=this.scriptPath?(0,tg.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,tg.join)((0,iE.ZH)("output"),`${e}-${Date.now()}.json`),iN("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,tg.resolve)(iR.cwd(),this.target.unstableLogContent):(null==(A=this.target)?void 0:A.unstableLogContent)===!0&&(this.unstableLogContent=(0,tg.join)((0,iE.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 iz=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert","aiWaitFor"],iL=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function iF(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&&tW(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=iP(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(s[e]=t)}}),[s]}async function iK(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 iF(o,n.params,i);return await e.callActionInActionSpace(o.name,t[0])}else{let t=n.prompt?iP(n.prompt,{deepLocate:i.deepLocate,cacheable:!0}):void 0,{deviceOptions:r,reportDisplay:a,...s}=i,A={locate:t,...s,...i.deviceOptions||{}};return await e.callActionInActionSpace(o.name,A)}{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(!iL.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 iU=(0,eN.a)("task-timing");function iQ(e,t){if(!e)return void iU(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?iU(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}function iZ(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let iJ=(0,eN.a)("task-runner");class iX{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 iJ(`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
920
+ ${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 nI(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});try{try{n=iI(x,s.jsonParser)}catch{let e=await nI(E,a,{abortSignal:t.abortSignal,requiresOriginalImageDetail:t.includeLocateInPlanning});x=e.content,k=e.usage,S=e.reasoning_content,C=e.rawChoiceMessage,n=iI(x,s.jsonParser)}n.action&&void 0!==n.finalizeSuccess&&(iC("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&&(iS("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=tK(e,t),o=i.interfaceAlias||e,a=i.paramSchema?tY(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"),rg(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 nS(`XML parse error: ${e}`,x,k,C)}}r(1182);var iO=r(3612),iP=r(3198),iR=r(9383),iM=r(5409);let iT=(0,eT.a)("yaml:utils"),iN=/^tasks\s*:/,iD=/^[^\s#][^:]*:/,iB=["images","convertHttpImage2Base64"];function iz(e){if("object"!=typeof e||null===e)return;let t=iB.map(t=>[t,e[t]]).filter(e=>{let[,t]=e;return void 0!==t});return t.length?Object.fromEntries(t):void 0}function iL(e,t){let r;iT("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 iT("no prompt, will return undefined in buildDetailedLocateParam",t);let s=iz(t);return s&&(i="string"==typeof i?{prompt:i,...s}:{...i,...s}),{prompt:i,deepLocate:o,cacheable:a,xpath:r}}var iF=r(5409);function iK(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let iU=(0,eT.a)("yaml-player"),iQ={aiQuery:"aiQuery",aiNumber:"aiNumber",aiString:"aiString",aiBoolean:"aiBoolean",aiAsk:"aiAsk",aiLocate:"aiLocate"},iZ=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 iZ(t.innerType);case tu.kY.ZodEffects:return iZ(t.schema);case tu.kY.ZodPipeline:return iZ(t.out);case tu.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>iZ(e))}default:return!1}};class iJ{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,tg.resolve)(iF.cwd(),this.output),t=(0,tg.dirname)(e);(0,iO.existsSync)(t)||(0,iO.mkdirSync)(t,{recursive:!0}),(0,iO.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,tg.resolve)(iF.cwd(),this.unstableLogContent),n=(0,tg.dirname)(r);(0,iO.existsSync)(n)||(0,iO.mkdirSync)(n,{recursive:!0}),(0,iO.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;iU(`playing step ${n}, flowItem=${JSON.stringify(t)}`);let i=Object.keys(iQ).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");let{pass:a,thought:s,message:l}=await e.aiAssert(r,n,{...o,keepRawResponse:!0})||{};if(this.setResult(i,{pass:a,thought:s,message:l}),!a)throw Error(l)}else if(i){let{[i]:r,name:n,...o}=t;(0,eQ.vA)(r,`missing prompt for ${i}`);let a=e[iQ[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:iL(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:iL(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=iZ(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){iU(`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||(iU(`parse failed for action ${l.name} with string param`,e.error),i=n)}else i=n;if(void 0!==i){iU(`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=iz(t),i=iL(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};iU(`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){iU("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;iK(this,"script",void 0),iK(this,"setupAgent",void 0),iK(this,"onTaskStatusChange",void 0),iK(this,"currentTaskIndex",void 0),iK(this,"taskStatusList",void 0),iK(this,"status",void 0),iK(this,"reportFile",void 0),iK(this,"result",void 0),iK(this,"unnamedResultIndex",void 0),iK(this,"output",void 0),iK(this,"unstableLogContent",void 0),iK(this,"errorInSetup",void 0),iK(this,"interfaceAgent",void 0),iK(this,"agentStatusTip",void 0),iK(this,"target",void 0),iK(this,"actionSpace",void 0),iK(this,"scriptPath",void 0),iK(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,iU("output is undefined in browser or worker");else if(null==(a=this.target)?void 0:a.output)this.output=(0,tg.resolve)(iF.cwd(),this.target.output),iU("setting output by config.output",this.output);else{const e=this.scriptPath?(0,tg.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,tg.join)((0,iP.ZH)("output"),`${e}-${Date.now()}.json`),iU("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,tg.resolve)(iF.cwd(),this.target.unstableLogContent):(null==(l=this.target)?void 0:l.unstableLogContent)===!0&&(this.unstableLogContent=(0,tg.join)((0,iP.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 iX=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert","aiWaitFor"],iH=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function iG(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&&tW(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=iL(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(s[e]=t)}}),[s]}async function iV(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 iG(o,n.params,i);return await e.callActionInActionSpace(o.name,t[0])}else{let t=n.prompt?iL(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(!iH.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 iq=(0,eT.a)("task-timing");function iW(e,t){if(!e)return void iq(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?iq(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}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)("task-runner");class i${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 i_(`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
921
921
  error=${null==(r=this.latestErrorTask())?void 0:r.error}
922
922
  ${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
923
923
  error=${null==(r=this.latestErrorTask())?void 0:r.error}
924
- ${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;iQ(e.timing,"getUiContextStart");let s=await this.getUiContext({forceRefresh:a});iQ(e.timing,"getUiContextEnd"),e.uiContext=s;let A={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,A)):"Planning"===e.type?(r=await e.executor(o,A),"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,A)),i===this.tasks.length-1){iQ(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();this.attachRecorderItem(e,t,"after-calling"),iQ(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 iH(n?`${t}
925
- ${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 n$({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){iZ(this,"id",void 0),iZ(this,"name",void 0),iZ(this,"tasks",void 0),iZ(this,"status",void 0),iZ(this,"onTaskStart",void 0),iZ(this,"uiContextBuilder",void 0),iZ(this,"onSnapshotChange",void 0),iZ(this,"onTaskEvent",void 0),iZ(this,"executionLogTime",void 0),iZ(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 iH extends Error{constructor(e,t,r,n){super(e,n),iZ(this,"runner",void 0),iZ(this,"errorTask",void 0),this.runner=t,this.errorTask=r}}var iG=r(3009);r(5207);var iV=r(1344),iq=r(4201).Buffer,iW=r(5409);let iY=new Map,i_=new Map;function i$(){return"REPLACE_ME_WITH_REPORT_HTML"}function i0(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
926
- ${e.slice(r)}`}function i1(e,t,r){let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],i="";if(n&&!(i=i$()))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=i_.get(t);if(e)return e;let n=(0,eQ.uR)();return i_.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?(iY.get(t)||((0,t$.writeFileSync)(t,i,{flag:"w"}),iY.set(t,!0)),!function(e,t){let r="</html>",n=(0,t$.statSync)(e),i=Math.min(n.size,4096),o=Math.max(0,n.size-i),a=iq.alloc(n.size-o),s=(0,t$.openSync)(e,"r");(0,t$.readSync)(s,a,0,a.length,o),(0,t$.closeSync)(s);let A=a.toString("utf8"),l=A.lastIndexOf(r);if(-1===l)throw Error(`No </html> found in file:${e}`);let c=A.slice(0,l),u=o+iq.byteLength(c,"utf8");(0,t$.truncateSync)(e,u),(0,t$.appendFileSync)(e,`${t}
924
+ ${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;iW(e.timing,"getUiContextStart");let s=await this.getUiContext({forceRefresh:a});iW(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){iW(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();this.attachRecorderItem(e,t,"after-calling"),iW(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 i0(n?`${t}
925
+ ${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 n$({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){iY(this,"id",void 0),iY(this,"name",void 0),iY(this,"tasks",void 0),iY(this,"status",void 0),iY(this,"onTaskStart",void 0),iY(this,"uiContextBuilder",void 0),iY(this,"onSnapshotChange",void 0),iY(this,"onTaskEvent",void 0),iY(this,"executionLogTime",void 0),iY(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 i0 extends Error{constructor(e,t,r,n){super(e,n),iY(this,"runner",void 0),iY(this,"errorTask",void 0),this.runner=t,this.errorTask=r}}var i1=r(3009);r(5207);var i2=r(1344),i3=r(4201).Buffer,i5=r(5409);let i7=new Map,i4=new Map;function i8(){return"REPLACE_ME_WITH_REPORT_HTML"}function i6(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
926
+ ${e.slice(r)}`}function i9(e,t,r){let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],i="";if(n&&!(i=i8()))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=i4.get(t);if(e)return e;let n=(0,eQ.uR)();return i4.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?(i7.get(t)||((0,t$.writeFileSync)(t,i,{flag:"w"}),i7.set(t,!0)),!function(e,t){let r="</html>",n=(0,t$.statSync)(e),i=Math.min(n.size,4096),o=Math.max(0,n.size-i),a=i3.alloc(n.size-o),s=(0,t$.openSync)(e,"r");(0,t$.readSync)(s,a,0,a.length,o),(0,t$.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+i3.byteLength(c,"utf8");(0,t$.truncateSync)(e,u),(0,t$.appendFileSync)(e,`${t}
927
927
  ${r}
928
- `)}(t,a)):(0,t$.writeFileSync)(t,i0(i,a),{flag:"w"}),t):i0(i,a)}async function i2(e){return new Promise(t=>setTimeout(t,e))}function i3(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];iW.env[eD.n0]&&console.log("[Midscene]",...t)}let i5=null,i7="";async function i4(e){let{testUrl:t,serverUrl:r}=e;if(!r)return;let{repoUrl:n,userEmail:i}=await function(){if(i5)return i5;let e=(0,iV.promisify)(iG.execFile);return i5=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!==i7:t)&&(i3("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=>{i3("Successfully uploaded test info to server:",e)}).catch(e=>i3("Failed to upload test info to server:",e)),i7=n)}var i8=r(3147);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={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0};function oe(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class ot{static create(e,t){var r;if(oe(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 i9;let n=(0,iE.ZH)("report"),i=(0,tg.join)(n,e);return new ot({reportPath:"html-and-external-assets"===t.outputFormat?(0,tg.join)(i,"index.html"):(0,tg.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.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 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,tg.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,t$.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump))return;let e=(0,tg.dirname)(this.reportPath),t=(0,t$.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,[rr]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new n0({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeInlineExecution(e,t){let r=(0,tg.dirname)(this.reportPath);for(let t of((0,t$.existsSync)(r)||(0,t$.mkdirSync)(r,{recursive:!0}),this.initialized||(await (0,i8.writeFile)(this.reportPath,i$()),this.initialized=!0),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();await (0,i8.appendFile)(this.reportPath,`
929
- ${rn(n,this.getDumpScriptAttributes())}`)}async writeDirectoryExecution(e,t){let r=(0,tg.dirname)(this.reportPath);for(let t of((0,t$.existsSync)(r)||(0,t$.mkdirSync)(r,{recursive:!0}),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();this.initialized||(await (0,i8.writeFile)(this.reportPath,`${i$()}${rt()}`),this.initialized=!0),await (0,i8.appendFile)(this.reportPath,`
930
- ${rn(n,this.getDumpScriptAttributes())}`)}getExecutionLogKey(e){if(!e.id)throw Error("ReportGenerator: execution.id is required for persisting execution dumps");return`id:${e.id}`}async persistExecutionDumpToFile(e,t){let r=(0,tg.dirname)(this.reportPath);(0,t$.existsSync)(r)||(0,t$.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,tg.join)((0,tg.dirname)(this.reportPath),o);await (0,i8.writeFile)(a,t.serialize(2),"utf-8")}constructor(e){i6(this,"reportPath",void 0),i6(this,"screenshotMode",void 0),i6(this,"shouldPersistExecutionDump",void 0),i6(this,"autoPrint",void 0),i6(this,"firstWriteDone",!1),i6(this,"executionLogIndex",0),i6(this,"executionLogFileIndexByExecutionKey",new Map),i6(this,"reportStreamId",void 0),i6(this,"screenshotStore",void 0),i6(this,"initialized",!1),i6(this,"lastExecution",void 0),i6(this,"lastReportMeta",void 0),i6(this,"reportAttributes",{}),i6(this,"writeQueue",Promise.resolve()),i6(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 rl({mode:"inline"===this.screenshotMode?"inline":"directory",reportPath:this.reportPath,screenshotsDir:(0,tg.join)((0,tg.dirname)(this.reportPath),"screenshots"),writeInlineImage:async(e,t)=>{let r;await (0,i8.appendFile)(this.reportPath,`
931
- ${(r=t6(),'<script type="midscene-image" data-id="'+e+'">'+t4(t)+r)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}var or=r(8973);tu.Ik({locate:tV.describe("The element to be tapped")}),tu.Ik({locate:tV.describe("The element to be right clicked")}),tu.Ik({locate:tV.describe("The element to be double clicked")}),tu.Ik({locate:tV.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:tV.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.")}),tu.Ik({locate:tV.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:tV.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:tV.describe("The position to be dragged"),to:tV.describe("The position to be dropped")}),tu.Ik({locate:tV.describe("The element to be long pressed"),duration:tu.ai().optional().describe("Long press duration in milliseconds")}),tu.Ik({start:tV.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:tV.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:tV.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:tV.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 on=tu.Ik({timeMs:tu.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),oi=["read-only","read-write","write-only"],oo=oi.map(e=>`"${e}"`).join(", ");function oa(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let os=(0,eN.a)("agent-progress-bus",{console:!0});class oA{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(){oa(this,"listeners",[]),oa(this,"sequence",0),oa(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){os("error in progress listener",e)}})}}function ol(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function oc(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(oc):ol(e)&&"string"==typeof e.prompt?oc(e.prompt):ol(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,oc(r)]})):String(e)}function ou(e){return e instanceof Error?e.message:String(e)}function od(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function op(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 oh(e){return[Math.floor((e[0]+e[2])/2),Math.floor((e[1]+e[3])/2)]}function of(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=op(e,"locatedPixelBbox");if(n)return oh(n);let i=op(e,"bbox");if(i)return oh(i)}function og(e){let t=op(e,"locatedPixelBbox");if(t)return t;let r=op(e,"bbox");if(r)return r;if(!ol(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 om(e){return!!ol(e)&&("center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let oy=["locate","from","to","start","end"],ov=(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:
928
+ `)}(t,a)):(0,t$.writeFileSync)(t,i6(i,a),{flag:"w"}),t):i6(i,a)}async function oe(e){return new Promise(t=>setTimeout(t,e))}function ot(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];i5.env[eD.n0]&&console.log("[Midscene]",...t)}let or=null,on="";async function oi(e){let{testUrl:t,serverUrl:r}=e;if(!r)return;let{repoUrl:n,userEmail:i}=await function(){if(or)return or;let e=(0,i2.promisify)(i1.execFile);return or=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!==on:t)&&(ot("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=>{ot("Successfully uploaded test info to server:",e)}).catch(e=>ot("Failed to upload test info to server:",e)),on=n)}var oo=r(3147);function oa(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let os={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0};function ol(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class oA{static create(e,t){var r;if(ol(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 os;let n=(0,iP.ZH)("report"),i=(0,tg.join)(n,e);return new oA({reportPath:"html-and-external-assets"===t.outputFormat?(0,tg.join)(i,"index.html"):(0,tg.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.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 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,tg.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,t$.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump))return;let e=(0,tg.dirname)(this.reportPath),t=(0,t$.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,[rr]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new n0({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeInlineExecution(e,t){let r=(0,tg.dirname)(this.reportPath);for(let t of((0,t$.existsSync)(r)||(0,t$.mkdirSync)(r,{recursive:!0}),this.initialized||(await (0,oo.writeFile)(this.reportPath,i8()),this.initialized=!0),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();await (0,oo.appendFile)(this.reportPath,`
929
+ ${rn(n,this.getDumpScriptAttributes())}`)}async writeDirectoryExecution(e,t){let r=(0,tg.dirname)(this.reportPath);for(let t of((0,t$.existsSync)(r)||(0,t$.mkdirSync)(r,{recursive:!0}),e.collectScreenshots()))await this.screenshotStore.persist(t);let n=t.serialize();this.initialized||(await (0,oo.writeFile)(this.reportPath,`${i8()}${rt()}`),this.initialized=!0),await (0,oo.appendFile)(this.reportPath,`
930
+ ${rn(n,this.getDumpScriptAttributes())}`)}getExecutionLogKey(e){if(!e.id)throw Error("ReportGenerator: execution.id is required for persisting execution dumps");return`id:${e.id}`}async persistExecutionDumpToFile(e,t){let r=(0,tg.dirname)(this.reportPath);(0,t$.existsSync)(r)||(0,t$.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,tg.join)((0,tg.dirname)(this.reportPath),o);await (0,oo.writeFile)(a,t.serialize(2),"utf-8")}constructor(e){oa(this,"reportPath",void 0),oa(this,"screenshotMode",void 0),oa(this,"shouldPersistExecutionDump",void 0),oa(this,"autoPrint",void 0),oa(this,"firstWriteDone",!1),oa(this,"executionLogIndex",0),oa(this,"executionLogFileIndexByExecutionKey",new Map),oa(this,"reportStreamId",void 0),oa(this,"screenshotStore",void 0),oa(this,"initialized",!1),oa(this,"lastExecution",void 0),oa(this,"lastReportMeta",void 0),oa(this,"reportAttributes",{}),oa(this,"writeQueue",Promise.resolve()),oa(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 rA({mode:"inline"===this.screenshotMode?"inline":"directory",reportPath:this.reportPath,screenshotsDir:(0,tg.join)((0,tg.dirname)(this.reportPath),"screenshots"),writeInlineImage:async(e,t)=>{let r;await (0,oo.appendFile)(this.reportPath,`
931
+ ${(r=t6(),'<script type="midscene-image" data-id="'+e+'">'+t4(t)+r)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}var oc=r(8973);tu.Ik({locate:tV.describe("The element to be tapped")}),tu.Ik({locate:tV.describe("The element to be right clicked")}),tu.Ik({locate:tV.describe("The element to be double clicked")}),tu.Ik({locate:tV.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:tV.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.")}),tu.Ik({locate:tV.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:tV.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:tV.describe("The position to be dragged"),to:tV.describe("The position to be dropped")}),tu.Ik({locate:tV.describe("The element to be long pressed"),duration:tu.ai().optional().describe("Long press duration in milliseconds")}),tu.Ik({start:tV.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:tV.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:tV.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:tV.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 ou=tu.Ik({timeMs:tu.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),od=["read-only","read-write","write-only"],op=od.map(e=>`"${e}"`).join(", ");function oh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let of=(0,eT.a)("agent-progress-bus",{console:!0});class og{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(){oh(this,"listeners",[]),oh(this,"sequence",0),oh(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){of("error in progress listener",e)}})}}function om(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function oy(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(oy):om(e)&&"string"==typeof e.prompt?oy(e.prompt):om(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,oy(r)]})):String(e)}function ov(e){return e instanceof Error?e.message:String(e)}function ob(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function ow(e,t){let r=e[t];if(!Array.isArray(r)||r.length<4)return;let n=ob(r[0]),i=ob(r[1]),o=ob(r[2]),a=ob(r[3]);if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return[n,i,o,a]}function oE(e){return[Math.floor((e[0]+e[2])/2),Math.floor((e[1]+e[3])/2)]}function ox(e){let t=e.center;if(Array.isArray(t)&&t.length>=2){let e=ob(t[0]),r=ob(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=ob(r[0]),t=ob(r[1]);if(void 0!==e&&void 0!==t)return[e,t]}let n=ow(e,"locatedPixelBbox");if(n)return oE(n);let i=ow(e,"bbox");if(i)return oE(i)}function ok(e){let t=ow(e,"locatedPixelBbox");if(t)return t;let r=ow(e,"bbox");if(r)return r;if(!om(e.rect))return;let n=ob(e.rect.left),i=ob(e.rect.top),o=ob(e.rect.width),a=ob(e.rect.height);if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return[n,i,n+o,i+a]}function oS(e){return!!om(e)&&("center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let oC=["locate","from","to","start","end"],oI=(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:
932
932
  ${r}
933
933
 
934
- ${n}`;return"string"==typeof e?i:{...e,prompt:i}},ob=/^(Given|When|Then|And|But)\s+(.+)$/i,ow=/^(Scenario):\s*(.*)$/i,oE=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,ok=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},ox=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},oS=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,oC=(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})`},oj=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",oI=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,A=r.trim();if(!A||A.startsWith("#")||A.startsWith("@"))continue;if('"""'===A||"'''"===A)throw Error(`runGherkinScenario does not support doc strings; found one at line ${n}.`);if(A.startsWith("|"))throw Error(`runGherkinScenario does not support data tables; found one at line ${n}.`);if(oE.test(A))throw Error(`runGherkinScenario does not support "${A}" at line ${n}.`);let l=A.match(ow);if(l){a+=1,t=l[2].trim()||void 0,s="scenario";continue}let c=A.match(ob);if(c){let e={keyword:ok(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}: ${A}`)}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 A=1===a?i:o;if(0===A.length)throw Error("runGherkinScenario requires at least one Gherkin step.");return{scenario:t,steps:A.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){ox(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",o=oS(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 ${oC(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${oj(e)}`,{cause:e})}}},oO=e=>e?` in ${e}`:"",oP=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),A=(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}"${oO(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}${oO(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,tg.isAbsolute)(r)?r:(0,tg.resolve)((0,tg.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${oO(t)}.`);return{type:"text",value:o}}return i(e),e}))})(s),n);return 0===A.length?{prompt:e,imageCount:0}:{prompt:{prompt:a(s),images:A,convertHttpImage2Base64:!0},imageCount:A.length}};var oR=r(9140),oT=r(8586),oN=r.n(oT);async function oM(e){let t,{PhotonImage:r}=await tw(),n=e.replace(/^data:image\/\w+;base64,/,"").replace(/\s/g,"");tp()(n,"Invalid image: empty base64 data"),tp()(/^[A-Za-z0-9+/]+={0,2}$/.test(n)&&n.length%4!=1,"Invalid image: malformed base64 data");let i=th.Buffer.from(n,"base64");tp()(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(),tp()(a&&s,"Invalid image: cannot get width or height"),{width:a,height:s}}var oD=r(9300),oB=r.n(oD),oz=r(5409);(0,eN.a)("agent");let oL={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function oF(e,t){var r;let n=(0,eN.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"),i4({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 A=await e.screenshotBase64(),l=Date.now();(0,eQ.vA)(A,"screenshotBase64 is required"),n("will get screenshot dimensions");let{width:c,height:u}=await oM(A);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 tI(A,{width:e,height:t});return{shotSize:{width:e,height:t},deprecatedDpr:g,screenshot:ru.create(r,l),shrunkShotToLogicalRatio:m}}return{shotSize:{width:c,height:u},deprecatedDpr:g,screenshot:ru.create(A,l),shrunkShotToLogicalRatio:m}}function oK(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=eY.getEnvConfigValue(eD.ho),r=oB()().format("YYYY-MM-DD_HH-mm-ss"),n=(0,eQ.uR)().substring(0,8);return`${t||e}-${r}-${n}`}function oU(e){var t;return Array.isArray(t=e.locatedPixelBbox)&&4===t.length&&t.every(e=>"number"==typeof e&&Number.isFinite(e))}async function oQ(e,t,r,n){var i;if(t){if(!1===n)return void oH("cache disabled for prompt: %s",r);if(null==(i=e.taskCache)?void 0:i.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void oH("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 oH("cache hit, prompt: %s",r),i}catch(e){oH("rectMatchesCacheFeature error: %s",e);return}}}}let oZ=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0};var oJ=r(4201).Buffer;function oX(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let oH=(0,eN.a)("cache"),oG=(0,eN.a)("cache",{console:!0}),oV=".cache.yaml";class oq{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,iV.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),oH("cache found and marked as used, type: %s, prompt: %s, index: %d",t,e,n),{cacheContent:i,cacheUsable:!0,updateFn:r=>{(oH("will call updateFn to update cache, type: %s, prompt: %s, index: %d",t,e,n),r(i),this.readOnlyMode)?oH("read-only mode, cache updated in memory but not flushed to file"):(oH("cache updated, will flush to file, type: %s, prompt: %s, index: %d",t,e,n),this.flushCacheToFile())}}}}oH("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 oH("plan cache matched but yamlWorkflow is empty, treat as cache miss"),{...t,cacheUsable:!1};try{var n;let e=ik.Ay.load(r);if(!(null==e||null==(n=e.tasks)?void 0:n.some(e=>Array.isArray(e.flow)&&e.flow.length>0)))return oH("plan cache matched but flow is empty, treat as cache miss"),{...t,cacheUsable:!1}}catch{return oH("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){(oH("will append cache",e),this.cache.caches.push(e),this.readOnlyMode)?oH("read-only mode, cache appended to memory but not flushed to file"):this.flushCacheToFile()}loadCacheFromFile(){let e=this.cacheFilePath;if(tp()(e,"cache file path is required"),!(0,oR.existsSync)(e))return void oH("no cache file found, path: %s",e);let t=e.replace(oV,".json");if((0,oR.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,oR.readFileSync)(e,"utf8"),r=ik.Ay.load(t);if(oN().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.
934
+ ${n}`;return"string"==typeof e?i:{...e,prompt:i}},oj=/^(Given|When|Then|And|But)\s+(.+)$/i,oO=/^(Scenario):\s*(.*)$/i,oP=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,oR=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},oM=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},oT=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,oN=(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})`},oD=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",oB=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(oP.test(l))throw Error(`runGherkinScenario does not support "${l}" at line ${n}.`);let A=l.match(oO);if(A){a+=1,t=A[2].trim()||void 0,s="scenario";continue}let c=l.match(oj);if(c){let e={keyword:oR(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){oM(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",o=oT(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 ${oN(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${oD(e)}`,{cause:e})}}},oz=e=>e?` in ${e}`:"",oL=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}"${oz(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}${oz(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,tg.isAbsolute)(r)?r:(0,tg.resolve)((0,tg.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${oz(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 oF=r(9140),oK=r(8586),oU=r.n(oK);async function oQ(e){let t,{PhotonImage:r}=await tw(),n=e.replace(/^data:image\/\w+;base64,/,"").replace(/\s/g,"");tp()(n,"Invalid image: empty base64 data"),tp()(/^[A-Za-z0-9+/]+={0,2}$/.test(n)&&n.length%4!=1,"Invalid image: malformed base64 data");let i=th.Buffer.from(n,"base64");tp()(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(),tp()(a&&s,"Invalid image: cannot get width or height"),{width:a,height:s}}var oZ=r(9300),oJ=r.n(oZ),oX=r(5409);(0,eT.a)("agent");let oH={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function oG(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"),oi({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 oQ(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 tj(l,{width:e,height:t});return{shotSize:{width:e,height:t},deprecatedDpr:g,screenshot:ru.create(r,A),shrunkShotToLogicalRatio:m}}return{shotSize:{width:c,height:u},deprecatedDpr:g,screenshot:ru.create(l,A),shrunkShotToLogicalRatio:m}}function oV(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=eY.getEnvConfigValue(eD.ho),r=oJ()().format("YYYY-MM-DD_HH-mm-ss"),n=(0,eQ.uR)().substring(0,8);return`${t||e}-${r}-${n}`}function oq(e){var t;return Array.isArray(t=e.locatedPixelBbox)&&4===t.length&&t.every(e=>"number"==typeof e&&Number.isFinite(e))}async function oW(e,t,r,n){var i;if(t){if(!1===n)return void o0("cache disabled for prompt: %s",r);if(null==(i=e.taskCache)?void 0:i.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void o0("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 o0("cache hit, prompt: %s",r),i}catch(e){o0("rectMatchesCacheFeature error: %s",e);return}}}}let oY=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0};var o_=r(4201).Buffer;function o$(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let o0=(0,eT.a)("cache"),o1=(0,eT.a)("cache",{console:!0}),o2=".cache.yaml";class o3{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,i2.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),o0("cache found and marked as used, type: %s, prompt: %s, index: %d",t,e,n),{cacheContent:i,cacheUsable:!0,updateFn:r=>{(o0("will call updateFn to update cache, type: %s, prompt: %s, index: %d",t,e,n),r(i),this.readOnlyMode)?o0("read-only mode, cache updated in memory but not flushed to file"):(o0("cache updated, will flush to file, type: %s, prompt: %s, index: %d",t,e,n),this.flushCacheToFile())}}}}o0("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 o0("plan cache matched but yamlWorkflow is empty, treat as cache miss"),{...t,cacheUsable:!1};try{var n;let e=iR.Ay.load(r);if(!(null==e||null==(n=e.tasks)?void 0:n.some(e=>Array.isArray(e.flow)&&e.flow.length>0)))return o0("plan cache matched but flow is empty, treat as cache miss"),{...t,cacheUsable:!1}}catch{return o0("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){(o0("will append cache",e),this.cache.caches.push(e),this.readOnlyMode)?o0("read-only mode, cache appended to memory but not flushed to file"):this.flushCacheToFile()}loadCacheFromFile(){let e=this.cacheFilePath;if(tp()(e,"cache file path is required"),!(0,oF.existsSync)(e))return void o0("no cache file found, path: %s",e);let t=e.replace(o2,".json");if((0,oF.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,oF.readFileSync)(e,"utf8"),r=iR.Ay.load(t);if(oU().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.
935
935
  Please delete the existing cache and rebuild it. Sorry for the inconvenience.
936
- cache file: ${e}`);return oH("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion="1.10.1",r}catch(t){oH("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!this.cacheFilePath)return void oH("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?oH("cleaned %d unused cache record(s)",r):oH("no unused cache to clean")}else oH("skip cleaning: cache is not used for reading");try{let e=(0,tg.dirname)(this.cacheFilePath);(0,oR.existsSync)(e)||((0,oR.mkdirSync)(e,{recursive:!0}),oH("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=ik.Ay.dump(r,{lineWidth:-1});(0,oR.writeFileSync)(this.cacheFilePath,n),oH("cache flushed to file: %s",this.cacheFilePath)}catch(e){oG(`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]?(oH("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),oH("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(tp()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?oH("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var i;let o;if(oX(this,"cacheId",void 0),oX(this,"cacheFilePath",void 0),oX(this,"cache",void 0),oX(this,"isCacheResultUsed",void 0),oX(this,"cacheOriginalLength",void 0),oX(this,"readOnlyMode",void 0),oX(this,"writeOnlyMode",void 0),oX(this,"matchedCacheIndices",new Set),oX(this,"consumedCacheIndices",new Map),oX(this,"staleCacheIndices",new Map),tp()(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 A=eY.getEnvConfigValueAsNumber(eD.YK)??200;if(oJ.byteLength(s,"utf8")>A){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,tg.join)(a||(0,iE.ZH)("cache"),`${this.cacheId}${oV}`);const l=!!(null==n?void 0:n.readOnly),c=!!(null==n?void 0:n.writeOnly);if(l&&c)throw Error("TaskCache cannot be both read-only and write-only");this.isCacheResultUsed=!c&&t,this.readOnlyMode=l,this.writeOnlyMode=c,this.cacheFilePath&&!this.writeOnlyMode&&(o=this.loadCacheFromFile()),o||(o={midsceneVersion:"1.10.1",cacheId:this.cacheId,caches:[]}),this.cache=o,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}class oW{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 iX(e,t,r)}}let oY=(0,eN.a)("agent:usage-intent",{console:!0});function o_(e,t){if(e)return e.intent?(oY(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}function o$(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let o0=(0,eN.a)("agent:task-builder");function o1(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function o2(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 o3(e){return{type:"Locate",param:o2(e),thought:""}}class o5{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=tK(r,this.actionSpace),i=e.param,o=tW(n.paramSchema),a=tW(n.paramSchema,!0);o.forEach(e=>{if(i[e]){let n=o3(i[e]);o0("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(i[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelBbox=${oU(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}`),o0(`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;o0("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}.`)}),iQ(o,"beforeInvokeActionHookStart");let A=n.delayBeforeRunner??200;try{await Promise.all([(async()=>{this.interface.beforeInvokeAction&&(o0(`will call "beforeInvokeAction" for interface with action name ${n.name}`),await this.interface.beforeInvokeAction(n.name,e),o0(`called "beforeInvokeAction" for interface with action name ${n.name}`))})(),A>0?i2(A):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})}iQ(o,"beforeInvokeActionHookEnd");let{shrunkShotToLogicalRatio:l}=s;if(void 0===l)throw Error("shrunkShotToLogicalRatio is not defined in Action task");if(n.paramSchema)try{e=((e,t,r)=>{if(!t)return;let n=e??{},i=tW(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),A=null==r?void 0:r.shrunkShotToLogicalRatio;for(let e in o){let t=o[e];void 0!==A&&1!==A&&t&&"object"==typeof t&&t.center&&t.rect&&(t={...t,center:[Math.round(t.center[0]/A),Math.round(t.center[1]/A)],rect:{...t.rect,left:Math.round(t.rect.left/A),top:Math.round(t.rect.top/A),width:Math.round(t.rect.width/A),height:Math.round(t.rect.height/A)}}),s[e]=t}return s})(e,n.paramSchema,{shrunkShotToLogicalRatio:l})}catch(t){throw Error(`Invalid parameters for action ${n.name}: ${t.message}
937
- Parameters: ${JSON.stringify(e)}`,{cause:t})}iQ(o,"callActionStart"),o0("calling action",n.name);let c=n.call.bind(this.interface),u=await c(e,t);iQ(o,"callActionEnd"),o0("called action",n.name,"result:",u),iQ(o,"afterInvokeActionHookStart");let d=n.delayAfterRunner??this.waitAfterAction??300;d>0&&await i2(d);try{this.interface.afterInvokeAction&&(o0(`will call "afterInvokeAction" for interface with action name ${n.name}`),await this.interface.afterInvokeAction(n.name,e),o0(`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 iQ(o,"afterInvokeActionHookEnd"),{output:u}}};t.tasks.push(s)}createLocateTask(e,t,r,n){let{cacheable:i,defaultModel:o,deepLocate:a,abortSignal:s}=r,A=o2(t);return void 0!==i&&(A={...A,cacheable:i}),a&&!A.deepLocate&&(A={...A,deepLocate:!0}),{type:"Planning",subType:"Locate",param:A,thought:e.thought,executor:async(e,t)=>{var r,i,a,A,l,c,u,d,p,h,f,g;let m,y,v,b,w,E,{task:k}=t,{uiContext:x}=t,S=oU(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)}`),x||(x=await this.service.contextRetrieverFn()),(0,eQ.vA)(x,"uiContext is required for Service task");let{shrunkShotToLogicalRatio:C}=x;if(void 0===C)throw Error("shrunkShotToLogicalRatio is not defined in locate task");let j=e=>{var t,r,n,i,o,a,s;e&&(m=e,k.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},k.usage=o_(null==(i=e.taskInfo)?void 0:i.usage,"default"),k.searchArea=null==(o=e.taskInfo)?void 0:o.searchArea,(null==(a=e.taskInfo)?void 0:a.searchAreaUsage)&&(k.searchAreaUsage=e.taskInfo.searchAreaUsage),(null==(s=e.taskInfo)?void 0:s.reasoning_content)&&(k.reasoning_content=e.taskInfo.reasoning_content))},I=S?function(e){var t;if(e)return nN(nL(e.locatedPixelBbox),"string"==typeof e.prompt?e.prompt:(null==(t=e.prompt)?void 0:t.prompt)||"")}(S):void 0,O=e.deepLocate?void 0:I,P=!!O;if(!P&&e.xpath&&this.interface.rectMatchesCacheFeature)try{v=await this.interface.rectMatchesCacheFeature({xpaths:[e.xpath]})}catch{}let R=v?nN((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,T=!!R,N=e.prompt,M=null==(i=this.taskCache)?void 0:i.matchLocateCache(N),D=null==M||null==(a=M.cacheContent)?void 0:a.cache,B=P||T?null:await oQ({taskCache:this.taskCache,interfaceInstance:this.interface},D,N,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(!T&&!L&&!P)try{iQ(F,"callAiStart"),y=await this.service.locate(e,{context:x,planLocatedElement:I},o,s),j(y.dump),b=y.element}catch(e){throw e instanceof nV&&j(e.dump),e}finally{iQ(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 nV(e,m);throw Error(e)}}let U=o1(null==M||null==(A=M.cacheContent)?void 0:A.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)],o0("Transformed coordinates for cacheFeatureForPoint: %o -> %o",K.center,t));let r=await this.interface.cacheFeatureForPoint(t,{targetDescription:"string"==typeof e.prompt?e.prompt:null==(l=e.prompt)?void 0:l.prompt,modelRuntime:o});o1(r)?(o0("update cache, prompt: %s, cache: %o",N,r),w=r,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:N,cache:r},M)):o0("no cache data returned, skip cache update, prompt: %s",N)}catch(e){o0("cacheFeatureForPoint failed: %s",e)}else o0("cacheFeatureForPoint is not supported, skip cache update");if(!K){if(m)throw new nV(`Element not found : ${e.prompt}`,m);throw Error(`Element not found: ${e.prompt}`)}return P&&S?E={from:"Plan",context:{locatedPixelBbox:S.locatedPixelBbox}}:T?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:x.deprecatedDpr}},hitBy:E}}}}constructor({interfaceInstance:e,service:t,taskCache:r,actionSpace:n,waitAfterAction:i}){o$(this,"interface",void 0),o$(this,"service",void 0),o$(this,"taskCache",void 0),o$(this,"actionSpace",void 0),o$(this,"waitAfterAction",void 0),this.interface=e,this.service=t,this.taskCache=r,this.actionSpace=n,this.waitAfterAction=i}}function o7(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 o4(e){return e.subType||e.type}function o8(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 o6(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 o9(e,t){return t?`${e} - ${t}`:e}function ae(e){var t,r,n,i,o,a,s,A,l,c,u;let d;if("Planning"===e.type&&(d="Locate"===e.subType?o8(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)?tX(e.param.userInstruction):void 0)),"Insight"===e.type&&(d=o6(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?o8(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==(A=e.param)?void 0:A.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==(l=e.param)?void 0:l.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=o8(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 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 ar=(0,eN.a)("device-task-executor"),an=(0,eN.a)("device-task-executor",{console:!0});class ai{get page(){return this.interface}createExecutionSession(e,t){return new oW(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)}
938
- ...[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){an(`Failed to get device time string, falling back to runtime time: ${e}`)}else an("useDeviceTime is enabled but getDeviceLocalTimeString is not implemented, falling back to runtime time.");return t_(e)}async convertPlanToExecutable(e,t,r,n){return this.taskBuilder.build(e,t,r,n)}async loadYamlFlowAsPlanning(e,t,r){let n=this.createExecutionSession(o9((null==r?void 0:r.type)||"Act",(null==r?void 0:r.prompt)||tX(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:A}=await o.appendAndRun(a)??{};return{output:A,runner:s}}async action(e,t,r,n,i,o,a,s,A,l,c,u,d){return ao(this.interface,l,async()=>this.runAction(e,t,r,n,i,o,a,s,A,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,A,l,c,u){let d,p,h,f=new rp,g=(null==u?void 0:u.prompt)||tX(e),m=this.createExecutionSession(o9((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)),k=0,x=0;if(null==c?void 0:c.aborted)return E(`Task aborted: ${c.reason||"abort signal received"}`);let S=await tG(tH(e));for(;;){let a,g=v+1;if(x=g,null==c?void 0:c.aborted)return E(`Task aborted: ${c.reason||"abort signal received"}`,g);let C=f.subGoalsToText()||void 0,j=f.memoriesToText()||void 0,I=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:A,...C?{subGoalStatus:C}:{},...j?{memoriesStatus:j}:{}},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 l=this.getActionSpace();ar("actionSpace for this interface is:",l.map(e=>e.name).join(", ")),(0,eQ.vA)(Array.isArray(l),"actionSpace must be an array"),0===l.length&&console.warn(`ActionSpace for ${this.interface.interfaceType} is empty. This may lead to unexpected behavior.`);let u="custom"===t.adapter.planning.kind?t.adapter.planning.planFn:ib;try{iQ(a,"callAiStart"),i=await u(e.userInstruction,{context:o,actionContext:e.aiActContext,actionSpace:l,modelRuntime:t,conversationHistory:f,includeLocateInPlanning:n,imagesIncludeCount:s,deepThink:A,referenceImageMessages:S,abortSignal:c})}catch(e){throw e instanceof nS&&(r.task.usage=o_(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:ou(e)}),e}finally{iQ(a,"callAiEnd")}ar("planResult",JSON.stringify(i,null,2));let{actions:d,thought:h,log:m,memory:y,error:v,usage:b,rawResponse:E,rawChoiceMessage:k,reasoning_content:x,finalizeSuccess:C,finalizeMessage:j,updateSubGoals:I,markFinishedIndexes:O}=i;if(p=j,r.task.log={...r.task.log||{},rawResponse:E,rawChoiceMessage:k},r.task.usage=o_(b,"planning"),r.task.reasoning_content=x,r.task.output={actions:d||[],log:m,thought:h,memory:y,yamlFlow:i.yamlFlow,output:j,shouldContinuePlanning:i.shouldContinuePlanning,updateSubGoals:I,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}
936
+ cache file: ${e}`);return o0("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion="1.10.2",r}catch(t){o0("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!this.cacheFilePath)return void o0("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?o0("cleaned %d unused cache record(s)",r):o0("no unused cache to clean")}else o0("skip cleaning: cache is not used for reading");try{let e=(0,tg.dirname)(this.cacheFilePath);(0,oF.existsSync)(e)||((0,oF.mkdirSync)(e,{recursive:!0}),o0("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=iR.Ay.dump(r,{lineWidth:-1});(0,oF.writeFileSync)(this.cacheFilePath,n),o0("cache flushed to file: %s",this.cacheFilePath)}catch(e){o1(`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]?(o0("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),o0("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(tp()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?o0("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var i;let o;if(o$(this,"cacheId",void 0),o$(this,"cacheFilePath",void 0),o$(this,"cache",void 0),o$(this,"isCacheResultUsed",void 0),o$(this,"cacheOriginalLength",void 0),o$(this,"readOnlyMode",void 0),o$(this,"writeOnlyMode",void 0),o$(this,"matchedCacheIndices",new Set),o$(this,"consumedCacheIndices",new Map),o$(this,"staleCacheIndices",new Map),tp()(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(o_.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,tg.join)(a||(0,iP.ZH)("cache"),`${this.cacheId}${o2}`);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.2",cacheId:this.cacheId,caches:[]}),this.cache=o,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}class o5{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 i$(e,t,r)}}let o7=(0,eT.a)("agent:usage-intent",{console:!0});function o4(e,t){if(e)return e.intent?(o7(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}function o8(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let o6=(0,eT.a)("agent:task-builder");function o9(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function ae(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 at(e){return{type:"Locate",param:ae(e),thought:""}}class ar{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=tK(r,this.actionSpace),i=e.param,o=tW(n.paramSchema),a=tW(n.paramSchema,!0);o.forEach(e=>{if(i[e]){let n=at(i[e]);o6("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(i[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelBbox=${oq(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}`),o6(`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;o6("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}.`)}),iW(o,"beforeInvokeActionHookStart");let l=n.delayBeforeRunner??200;try{await Promise.all([(async()=>{this.interface.beforeInvokeAction&&(o6(`will call "beforeInvokeAction" for interface with action name ${n.name}`),await this.interface.beforeInvokeAction(n.name,e),o6(`called "beforeInvokeAction" for interface with action name ${n.name}`))})(),l>0?oe(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})}iW(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=tW(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}
937
+ Parameters: ${JSON.stringify(e)}`,{cause:t})}iW(o,"callActionStart"),o6("calling action",n.name);let c=n.call.bind(this.interface),u=await c(e,t);iW(o,"callActionEnd"),o6("called action",n.name,"result:",u),iW(o,"afterInvokeActionHookStart");let d=n.delayAfterRunner??this.waitAfterAction??300;d>0&&await oe(d);try{this.interface.afterInvokeAction&&(o6(`will call "afterInvokeAction" for interface with action name ${n.name}`),await this.interface.afterInvokeAction(n.name,e),o6(`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 iW(o,"afterInvokeActionHookEnd"),{output:u}}};t.tasks.push(s)}createLocateTask(e,t,r,n){let{cacheable:i,defaultModel:o,deepLocate:a,abortSignal:s}=r,l=ae(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=oq(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=o4(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=e.taskInfo.searchAreaUsage),(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 nT(nL(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?nT((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 oW({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{iW(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 nV&&I(e.dump),e}finally{iW(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 nV(e,m);throw Error(e)}}let U=o9(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)],o6("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});o9(r)?(o6("update cache, prompt: %s, cache: %o",T,r),w=r,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:T,cache:r},N)):o6("no cache data returned, skip cache update, prompt: %s",T)}catch(e){o6("cacheFeatureForPoint failed: %s",e)}else o6("cacheFeatureForPoint is not supported, skip cache update");if(!K){if(m)throw new nV(`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}){o8(this,"interface",void 0),o8(this,"service",void 0),o8(this,"taskCache",void 0),o8(this,"actionSpace",void 0),o8(this,"waitAfterAction",void 0),this.interface=e,this.service=t,this.taskCache=r,this.actionSpace=n,this.waitAfterAction=i}}function an(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 ai(e){return e.subType||e.type}function ao(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 aa(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 as(e,t){return t?`${e} - ${t}`:e}function al(e){var t,r,n,i,o,a,s,l,A,c,u;let d;if("Planning"===e.type&&(d="Locate"===e.subType?ao(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)?tX(e.param.userInstruction):void 0)),"Insight"===e.type&&(d=aa(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?ao(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=ao(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 aA(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ac=(0,eT.a)("device-task-executor"),au=(0,eT.a)("device-task-executor",{console:!0});class ad{get page(){return this.interface}createExecutionSession(e,t){return new o5(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)}
938
+ ...[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){au(`Failed to get device time string, falling back to runtime time: ${e}`)}else au("useDeviceTime is enabled but getDeviceLocalTimeString is not implemented, falling back to runtime time.");return t_(e)}async convertPlanToExecutable(e,t,r,n){return this.taskBuilder.build(e,t,r,n)}async loadYamlFlowAsPlanning(e,t,r){let n=this.createExecutionSession(as((null==r?void 0:r.type)||"Act",(null==r?void 0:r.prompt)||tX(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 ap(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 rp,g=(null==u?void 0:u.prompt)||tX(e),m=this.createExecutionSession(as((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 tG(tH(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();ac("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:ij;try{iW(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 nS&&(r.task.usage=o4(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:ov(e)}),e}finally{iW(a,"callAiEnd")}ac("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=o4(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}
939
939
  ${m||""}`;await this.emitAiActProgress("plan_failed",{planIndex:g,planLimit:w,error:e})}if((0,eQ.vA)(!v,`Failed to continue: ${v}
940
- ${m||""}`),!1===C){let e=`Task failed: ${j||"No error message provided"}
941
- ${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==I?void 0:I.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:l,abortSignal:c})}catch(e){return E(`Error converting plans to executable tasks: ${ou(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(),T=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(ol(e)){for(let t of oy){let r=e[t];if(om(r))return r}return Object.values(e).find(om)}}(e.param);if(i){let e=of(i);if(e){let t=og(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(ol(t=e.param)&&Object.entries(t).some(e=>{let[t,r]=e;return!!oy.includes(t)&&"string"==typeof r||om(r)&&!of(r)&&!og(r)}))return;let o=(r=e.param)&&"object"==typeof r?"string"==typeof r.prompt?oc(r.prompt):r.locate&&"object"==typeof r.locate&&null!==r.locate?{locate:oc(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,oc(r)]}))}:oc(r):oc(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(T)))}catch(t){k++;let e=await this.getTimeString();this.setPendingFeedbackMessage(f,e,`Error executing running tasks: ${(null==t?void 0:t.message)||String(t)}`),ar("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:",k)}finally{d=void 0}if(k>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,T),++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:x,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 A,l,{task:c}=s,u=e=>{var t,r,n,i,o;A=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=o_(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"]:nD(e,t)}:p&&(h={[f=e]:nD(e,t)});let g="";if((null==n?void 0:n.domIncluded)&&this.interface.getElementsNodeTree){ar("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}="${o7(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="",A="",l="",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+=`
942
- ${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]=o7(n,t)),e},{})))} ${i(r)}>`;let o=o7(n.node.content,t);A=o?`
943
- ${u} ${o}`:"",l=`</${e}>`}else r||d.trim().startsWith("<>")||(s="<>",A="",l="</>");if(c&&!d.trim())return"";let f=`${u}${s}${A}${d}
944
- ${u}${l}`;return f.trim()?f:""})(e,0,n).replace(/^\s*\n/gm,"")}(e,200,!1,(null==n?void 0:n.domIncluded)==="visible-only")}try{l=await this.service.extract(h,r,n,g,i,d,o)}catch(e){throw e instanceof nV&&u(e.dump),e}let{data:m,thought:y,dump:v}=l;u(v);let b=m;if(p&&("string"==typeof m?b=m:"WaitFor"===e?b=null!=m&&m[f]:null==m?b=null:(null==m?void 0:m[f])!==void 0?b=m[f]:(null==m?void 0:m.result)!==void 0?b=m.result:(0,eQ.vA)(!1,"No result in query data")),"Assert"===e&&!b)throw c.thought=y,Error(`Assertion failed: ${y}`);return{output:b,log:A,thought:y}}}}async createTypeQueryExecution(e,t,r,n,i,o){let a=this.createExecutionSession(o9(e,"string"==typeof t?t:JSON.stringify(t))),s=await this.createTypeQueryTask(e,t,r,n,i,o),A=a.getRunner(),l=await a.appendAndRun(s);if(!l)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:c,thought:u}=l;return{output:c,thought:u,runner:A}}async waitFor(e,t,r){let{textPrompt:n,multimodalPrompt:i}=oZ(e),o=`waitFor: ${n}`,a=this.createExecutionSession(o9("WaitFor",o)),s=a.getRunner(),{timeoutMs:A,checkIntervalMs:l,domIncluded:c,screenshotIncluded:u,...d}=t,p={domIncluded:c,screenshotIncluded:u,...d};(0,eQ.vA)(e,"No assertion for waitFor"),(0,eQ.vA)(A,"No timeoutMs for waitFor"),(0,eQ.vA)(l,"No checkIntervalMs for waitFor"),(0,eQ.vA)(l<=A,`wrong config for waitFor: checkIntervalMs must be less than timeoutMs, config: {checkIntervalMs: ${l}, timeoutMs: ${A}}`);let h=Date.now(),f=h,g="";for(;f-h<=A;){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 A=Date.now();if(A-e<l){let t=A-e,n=l-t,i=`Check interval is ${l}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){at(this,"interface",void 0),at(this,"service",void 0),at(this,"taskCache",void 0),at(this,"providedActionSpace",void 0),at(this,"taskBuilder",void 0),at(this,"onTaskStartCallback",void 0),at(this,"hooks",void 0),at(this,"replanningCycleLimit",void 0),at(this,"waitAfterAction",void 0),at(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 o5({interfaceInstance:e,service:t,taskCache:r.taskCache,actionSpace:this.getActionSpace(),waitAfterAction:r.waitAfterAction})}}async function ao(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 aa(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,eN.a)("agent"),aA=(0,eN.a)("agent",{console:!0}),al={domIncluded:!1,screenshotIncluded:!0};class ac{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 nn(this.modelConfigManager.getModelConfig(e))}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return as("Using frozen page context for action:",e),this.frozenUIContext;let t=ac.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await oF(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){as(`retryable context error (attempt ${e+1}/${t}), retrying in ${ac.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,ac.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}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 n0({sdkVersion:"1.10.1",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)}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 i1(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=ae(e),r=t?`${o4(e)} - ${t}`:o4(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t){as("callActionInActionSpace",e,",",t);let r={type:e,param:t||{},thought:""};as("actionPlan",r);let n=[r].filter(Boolean),i=o9(e,o8((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=iP(e,t),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await ao(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=iP(e,t);await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){(0,eQ.vA)(e,"missing locate prompt for double click");let r=iP(e,t);await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){(0,eQ.vA)(e,"missing locate prompt for hover");let r=iP(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=iP(i,o),s="number"==typeof n?String(n):n,A=(null==o?void 0:o.mode)==="append"?"typeOnly":null==o?void 0:o.mode;await this.callActionInActionSpace("Input",{...o||{},value:s,locate:a,mode:A})}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?iP(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 oL?oL[e]:e})(i.scrollType);e!==i.scrollType&&(i={...i||{},scrollType:e})}let o=iP(n||"",i);await this.callActionInActionSpace("Scroll",{...i||{},locate:o})}async aiPinch(e,t){let r=iP(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=iP(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=iP(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,A,l;let c=this.resolveModelRuntime("planning"),u=this.resolveModelRuntime("default"),d=(null==t?void 0:t.context)!==void 0?t.context:this.aiActContext,p=ov(e,d),h=(null==t?void 0:t.deepThink)===!0;h&&"custom"===c.adapter.planning.kind&&(aA(`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&&(aA(`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;as("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==(l=b.cacheContent)||null==(A=l.yamlWorkflow)?void 0:A.trim())){let t=b.cacheContent.yamlWorkflow;try{await this.taskExecutor.loadYamlFlowAsPlanning(e,t,r),as("matched cache, will call .runYaml to run the action"),await this.runYaml(t);return}catch(e){w=!0,aA(`cached aiAct plan failed, will replan and disable the stale cache: ${e instanceof Error?e.message:String(e)}`)}}let E=h?2:1,{output:k}=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==k?void 0:k.yamlFlow;if(!w&&!(null==e?void 0:e.length))return null==k?void 0:k.output;let t=e??[],r=ik.Ay.dump({tasks:[{name:i,flow:t}]});this.taskCache.updateOrAppendCacheRecord({type:"plan",prompt:p,yamlWorkflow:r},b)}return null==k?void 0:k.output};return await s()}async runMarkdown(e,t){let r=await (0,or.readFile)(e,"utf-8"),{prompt:n}=await oP(r,e);return this.aiAct(n,{...t,_internalReportDisplay:{type:"Markdown",prompt:(0,tg.basename)(e)}})}async runGherkinScenario(e,t){return oI(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]:al,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]:al,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oZ(e),{output:o}=await this.taskExecutor.createTypeQueryExecution("Boolean",n,r,t,i);return o}async aiNumber(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:al,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oZ(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]:al,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oZ(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]:al;return this.aiString(e,t)}async aiLocate(e,t){let r=iP(e,t);(0,eQ.vA)(r,"cannot get locate param for aiLocate");let n=o3(r),i=this.resolveModelRuntime("default"),o=this.resolveModelRuntime("planning"),{output:a}=await this.taskExecutor.runPlans(o9("Locate",o8(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){let n=this.resolveModelRuntime("insight"),i={domIncluded:(null==r?void 0:r.domIncluded)??al.domIncluded,screenshotIncluded:(null==r?void 0:r.screenshotIncluded)??al.screenshotIncluded},{textPrompt:o,multimodalPrompt:a}=oZ(ov(e,null==r?void 0:r.context)),s="string"==typeof e?e:e.prompt;try{let{output:e,thought:A}=await this.taskExecutor.createTypeQueryExecution("Assert",o,n,i,a,{abortSignal:null==r?void 0:r.abortSignal}),l=!!e,c=l?void 0:`Assertion failed: ${t||s}
945
- Reason: ${A||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:l,thought:A,message:c};if(!l)throw Error(c)}catch(e){if(e instanceof iH){let n=e.errorTask,i=null==n?void 0:n.thought,o=null==n?void 0:n.error,a=(null==n?void 0:n.errorMessage)||(o instanceof Error?o.message:o?String(o):void 0),A=`Assertion failed: ${t||s}
946
- Reason: ${i||a||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:!1,thought:i,message:A};throw Error(A,{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 iB(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(iC.test(t))return r=!0,e;ij.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 A=s.trim(),l=ix.env[A];if(void 0===l)if(t)r+=e.slice(o,a+1);else throw Error(`Environment variable "${A}" is not defined`);else r+=l;n=a+1,i=a+1}return r+e.slice(n)}(e,r)}).join("\n")),o=ik.Ay.load(i,{schema:ik.Ay.JSON_SCHEMA}),a=t?`, failed to load ${t}`:"";return(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:
947
- ${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;this.destroyed=!0;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 A=(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(tS);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 tj(e,t)}if(n.startsWith("data:")||!tC.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return tj("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),i=r+t;return{type:"screenshot",ts:i,screenshot:ru.create(n.base64,i),description:n.description}}),l={taskId:(0,eQ.uR)(),type:"Log",subType:"Screenshot",status:"finished",recorder:A,timing:{start:r,end:r,cost:0},param:{content:(null==t?void 0:t.content)||""},executor:async()=>{}},c=new n$({id:(0,eQ.uR)(),logTime:r,name:`Log - ${e||"untitled"}`,description:(null==t?void 0:t.content)||"",tasks:[l]});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:ru.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 n$({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(){as("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,as("Page context frozen successfully")}async unfreezePageContext(){as("Unfreezing page context"),this.frozenUIContext=void 0,as("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&&!oi.some(e=>e===t))throw Error(`cache.strategy must be one of ${oo}, 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=oR.existsSync,isInBrowser:n=eQ.ht,resolvePath:i=tg.resolve,wslDistroName:o=oz.env.WSL_DISTRO_NAME,cwd:a=oz.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;aa(this,"interface",void 0),aa(this,"service",void 0),aa(this,"dump",void 0),aa(this,"reportFile",void 0),aa(this,"reportFileName",void 0),aa(this,"taskExecutor",void 0),aa(this,"opts",void 0),aa(this,"dryMode",!1),aa(this,"onTaskStartTip",void 0),aa(this,"taskCache",void 0),aa(this,"dumpUpdateListeners",[]),aa(this,"progressBus",new oA),aa(this,"destroyed",!1),aa(this,"modelConfigManager",void 0),aa(this,"frozenUIContext",void 0),aa(this,"executionDumpIndexByRunner",new WeakMap),aa(this,"fullActionSpace",void 0),aa(this,"reportGenerator",void 0),aa(this,"lastExecutionDump",void 0),this.interface=e,this.opts=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},t||{}),oe(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 eq(null==t?void 0:t.modelConfig,null==t?void 0:t.createOpenAIClient):eW,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new n6(async()=>this.getUIContext());const a=this.processCacheConfig(t||{});a&&(this.taskCache=new oq(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:on,sample:{timeMs:2e3},call:async e=>{let t=(null==e?void 0:e.timeMs)??1e3;(0,eN.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.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)??oK((null==t?void 0:t.testId)||this.interface.interfaceType||"web"),this.reportGenerator=ot.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})}}aa(ac,"CONTEXT_RETRY_MAX",3),aa(ac,"CONTEXT_RETRY_DELAY_MS",1500),r(4201).Buffer;RegExp(`${rr}="(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 au{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&&tW(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=tW(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 ad(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ap extends au{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 iF(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 eq(e);return iA({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,A=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 iK(s,e,A,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=n0.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=n0.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=n0.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(),ad(this,"agent",void 0),ad(this,"agentFactory",void 0),ad(this,"dumpUpdateCallback",void 0),ad(this,"progressCallback",void 0),ad(this,"_id",void 0),ad(this,"currentRequestId",void 0),this.agent=e??null,this.agentFactory=t,this._id=(0,eQ.uR)()}}function ah(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class af extends au{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 iF(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(),ah(this,"serverUrl",void 0),ah(this,"_id",void 0),ah(this,"dumpUpdateCallback",void 0),ah(this,"pollingIntervalId",void 0),this.serverUrl=e}}function ag(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class am{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 ap(r,n);case"remote-execution":return new af(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 ap||this.adapter instanceof af?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 af||this.adapter instanceof ap)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof af)||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 af?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof af?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof ap?this.adapter.onDumpUpdate(e):this.adapter instanceof af&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof ap&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof af){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null}}else if(this.adapter instanceof ap){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 ap&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof af?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof af?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof af?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof af?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof af?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof af?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof af?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 af?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof af?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof af?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof af)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof af)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof ap?"In-Browser-Extension":"Server"}constructor(e){ag(this,"adapter",void 0),ag(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var ay=r(5810);function av(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 ab(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=av(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}function aw(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function aE(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function ak(e){return Object.keys(e).length>0}function ax(e){return e?JSON.stringify(e):null}let aS="npx puppeteer browsers install chrome",aC="https://pptr.dev/guides/configuration",aj=/could not find (?:google )?chrome/;function aI(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 aO(){if("undefined"!=typeof navigator)try{var e;null==(e=navigator.clipboard)||e.writeText(aS).catch(()=>void 0)}catch(e){}}function aP(){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 aR(e){let{error:t}=e,r=aI(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:aS}),(0,o.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>i(!1),onClick:aO,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)(aP,{})})]}),(0,o.jsxs)("div",{children:["Guide:"," ",(0,o.jsx)("a",{href:aC,rel:"noreferrer",target:"_blank",children:aC})]}),(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 aT(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function aN(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){aT(o,n,i,a,s,"next",e)}function s(e){aT(o,n,i,a,s,"throw",e)}a(void 0)})}}function aM(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 aD(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let 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",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))},az=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 aL=r(4707),aF=r(6820),aK=r(9870),aU=r(9877),aQ=r(5528),aZ=r(638);let aJ="Auto dismiss keyboard",aX={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"}},aH=["aiAct","aiTap","aiQuery","aiAssert"],aG=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
940
+ ${m||""}`),!1===C){let e=`Task failed: ${I||"No error message provided"}
941
+ ${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: ${ov(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 oC){let r=e[t];if(oS(r))return r}return Object.values(e).find(oS)}}(e.param);if(i){let e=ox(i);if(e){let t=ok(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!!oC.includes(t)&&"string"==typeof r||oS(r)&&!ox(r)&&!ok(r)}))return;let o=(r=e.param)&&"object"==typeof r?"string"==typeof r.prompt?oy(r.prompt):r.locate&&"object"==typeof r.locate&&null!==r.locate?{locate:oy(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,oy(r)]}))}:oy(r):oy(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)}`),ac("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=o4(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"]:nD(e,t)}:p&&(h={[f=e]:nD(e,t)});let g="";if((null==n?void 0:n.domIncluded)&&this.interface.getElementsNodeTree){ac("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}="${an(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+=`
942
+ ${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]=an(n,t)),e},{})))} ${i(r)}>`;let o=an(n.node.content,t);l=o?`
943
+ ${u} ${o}`:"",A=`</${e}>`}else r||d.trim().startsWith("<>")||(s="<>",l="",A="</>");if(c&&!d.trim())return"";let f=`${u}${s}${l}${d}
944
+ ${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 nV&&u(e.dump),e}let{data:m,thought:y,dump:v}=A;u(v);let b=m;if(p&&("string"==typeof m?b=m:"WaitFor"===e?b=null!=m&&m[f]:null==m?b=null:(null==m?void 0:m[f])!==void 0?b=m[f]:(null==m?void 0:m.result)!==void 0?b=m.result:(0,eQ.vA)(!1,"No result in query data")),"Assert"===e&&!b)throw c.thought=y,Error(`Assertion failed: ${y}`);return{output:b,log:l,thought:y}}}}async createTypeQueryExecution(e,t,r,n,i,o){let a=this.createExecutionSession(as(e,"string"==typeof t?t:JSON.stringify(t))),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}=oY(e),o=`waitFor: ${n}`,a=this.createExecutionSession(as("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){aA(this,"interface",void 0),aA(this,"service",void 0),aA(this,"taskCache",void 0),aA(this,"providedActionSpace",void 0),aA(this,"taskBuilder",void 0),aA(this,"onTaskStartCallback",void 0),aA(this,"hooks",void 0),aA(this,"replanningCycleLimit",void 0),aA(this,"waitAfterAction",void 0),aA(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 ar({interfaceInstance:e,service:t,taskCache:r.taskCache,actionSpace:this.getActionSpace(),waitAfterAction:r.waitAfterAction})}}async function ap(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 ah(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let af=(0,eT.a)("agent"),ag=(0,eT.a)("agent",{console:!0}),am={domIncluded:!1,screenshotIncluded:!0};class ay{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 nn(this.modelConfigManager.getModelConfig(e))}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return af("Using frozen page context for action:",e),this.frozenUIContext;let t=ay.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await oG(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){af(`retryable context error (attempt ${e+1}/${t}), retrying in ${ay.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,ay.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}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 n0({sdkVersion:"1.10.2",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)}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 i9(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=al(e),r=t?`${ai(e)} - ${t}`:ai(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t){af("callActionInActionSpace",e,",",t);let r={type:e,param:t||{},thought:""};af("actionPlan",r);let n=[r].filter(Boolean),i=as(e,ao((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=iL(e,t),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await ap(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=iL(e,t);await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){(0,eQ.vA)(e,"missing locate prompt for double click");let r=iL(e,t);await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){(0,eQ.vA)(e,"missing locate prompt for hover");let r=iL(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=iL(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?iL(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 oH?oH[e]:e})(i.scrollType);e!==i.scrollType&&(i={...i||{},scrollType:e})}let o=iL(n||"",i);await this.callActionInActionSpace("Scroll",{...i||{},locate:o})}async aiPinch(e,t){let r=iL(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=iL(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=iL(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=oI(e,d),h=(null==t?void 0:t.deepThink)===!0;h&&"custom"===c.adapter.planning.kind&&(ag(`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&&(ag(`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;af("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),af("matched cache, will call .runYaml to run the action"),await this.runYaml(t);return}catch(e){w=!0,ag(`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=iR.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,oc.readFile)(e,"utf-8"),{prompt:n}=await oL(r,e);return this.aiAct(n,{...t,_internalReportDisplay:{type:"Markdown",prompt:(0,tg.basename)(e)}})}async runGherkinScenario(e,t){return oB(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]:am,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]:am,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oY(e),{output:o}=await this.taskExecutor.createTypeQueryExecution("Boolean",n,r,t,i);return o}async aiNumber(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:am,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oY(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]:am,r=this.resolveModelRuntime("insight"),{textPrompt:n,multimodalPrompt:i}=oY(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]:am;return this.aiString(e,t)}async aiLocate(e,t){let r=iL(e,t);(0,eQ.vA)(r,"cannot get locate param for aiLocate");let n=at(r),i=this.resolveModelRuntime("default"),o=this.resolveModelRuntime("planning"),{output:a}=await this.taskExecutor.runPlans(as("Locate",ao(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){let n=this.resolveModelRuntime("insight"),i={domIncluded:(null==r?void 0:r.domIncluded)??am.domIncluded,screenshotIncluded:(null==r?void 0:r.screenshotIncluded)??am.screenshotIncluded},{textPrompt:o,multimodalPrompt:a}=oY(oI(e,null==r?void 0:r.context)),s="string"==typeof e?e:e.prompt;try{let{output:e,thought:l}=await this.taskExecutor.createTypeQueryExecution("Assert",o,n,i,a,{abortSignal:null==r?void 0:r.abortSignal}),A=!!e,c=A?void 0:`Assertion failed: ${t||s}
945
+ Reason: ${l||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:A,thought:l,message:c};if(!A)throw Error(c)}catch(e){if(e instanceof i0){let n=e.errorTask,i=null==n?void 0:n.thought,o=null==n?void 0:n.error,a=(null==n?void 0:n.errorMessage)||(o instanceof Error?o.message:o?String(o):void 0),l=`Assertion failed: ${t||s}
946
+ Reason: ${i||a||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:!1,thought:i,message:l};throw Error(l,{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 iJ(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(iN.test(t))return r=!0,e;iD.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=iM.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=iR.Ay.load(i,{schema:iR.Ay.JSON_SCHEMA}),a=t?`, failed to load ${t}`:"";return(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:
947
+ ${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;this.destroyed=!0;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(tS);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 tI(e,t)}if(n.startsWith("data:")||!tC.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return tI("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),i=r+t;return{type:"screenshot",ts:i,screenshot:ru.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 n$({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:ru.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 n$({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(){af("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,af("Page context frozen successfully")}async unfreezePageContext(){af("Unfreezing page context"),this.frozenUIContext=void 0,af("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&&!od.some(e=>e===t))throw Error(`cache.strategy must be one of ${op}, 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=oF.existsSync,isInBrowser:n=eQ.ht,resolvePath:i=tg.resolve,wslDistroName:o=oX.env.WSL_DISTRO_NAME,cwd:a=oX.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;ah(this,"interface",void 0),ah(this,"service",void 0),ah(this,"dump",void 0),ah(this,"reportFile",void 0),ah(this,"reportFileName",void 0),ah(this,"taskExecutor",void 0),ah(this,"opts",void 0),ah(this,"dryMode",!1),ah(this,"onTaskStartTip",void 0),ah(this,"taskCache",void 0),ah(this,"dumpUpdateListeners",[]),ah(this,"progressBus",new og),ah(this,"destroyed",!1),ah(this,"modelConfigManager",void 0),ah(this,"frozenUIContext",void 0),ah(this,"executionDumpIndexByRunner",new WeakMap),ah(this,"fullActionSpace",void 0),ah(this,"reportGenerator",void 0),ah(this,"lastExecutionDump",void 0),this.interface=e,this.opts=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},t||{}),ol(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 eq(null==t?void 0:t.modelConfig,null==t?void 0:t.createOpenAIClient):eW,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new is(async()=>this.getUIContext());const a=this.processCacheConfig(t||{});a&&(this.taskCache=new o3(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:ou,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 ad(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.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)??oV((null==t?void 0:t.testId)||this.interface.interfaceType||"web"),this.reportGenerator=oA.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})}}ah(ay,"CONTEXT_RETRY_MAX",3),ah(ay,"CONTEXT_RETRY_DELAY_MS",1500),r(4201).Buffer;RegExp(`${rr}="(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 av{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&&tW(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=tW(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 ab(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class aw extends av{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 iG(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 eq(e);return im({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 iV(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=n0.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=n0.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=n0.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(),ab(this,"agent",void 0),ab(this,"agentFactory",void 0),ab(this,"dumpUpdateCallback",void 0),ab(this,"progressCallback",void 0),ab(this,"_id",void 0),ab(this,"currentRequestId",void 0),this.agent=e??null,this.agentFactory=t,this._id=(0,eQ.uR)()}}function aE(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ax extends av{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 iG(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(),aE(this,"serverUrl",void 0),aE(this,"_id",void 0),aE(this,"dumpUpdateCallback",void 0),aE(this,"pollingIntervalId",void 0),this.serverUrl=e}}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}class aS{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 aw(r,n);case"remote-execution":return new ax(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 aw||this.adapter instanceof ax?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 ax||this.adapter instanceof aw)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof ax)||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 ax?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof ax?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof aw?this.adapter.onDumpUpdate(e):this.adapter instanceof ax&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof aw&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof ax){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null}}else if(this.adapter instanceof aw){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 aw&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof ax?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof ax?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof ax?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof ax?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof ax?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof ax?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof ax?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 ax?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof ax?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof ax?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof ax)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof ax)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof aw?"In-Browser-Extension":"Server"}constructor(e){ak(this,"adapter",void 0),ak(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var aC=r(5810);function aI(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 aj(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=aI(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}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,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 aR(e){return Object.keys(e).length>0}function aM(e){return e?JSON.stringify(e):null}let aT="npx puppeteer browsers install chrome",aN="https://pptr.dev/guides/configuration",aD=/could not find (?:google )?chrome/;function aB(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 az(){if("undefined"!=typeof navigator)try{var e;null==(e=navigator.clipboard)||e.writeText(aT).catch(()=>void 0)}catch(e){}}function aL(){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 aF(e){let{error:t}=e,r=aB(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:aT}),(0,o.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>i(!1),onClick:az,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)(aL,{})})]}),(0,o.jsxs)("div",{children:["Guide:"," ",(0,o.jsx)("a",{href:aN,rel:"noreferrer",target:"_blank",children:aN})]}),(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 aK(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 aU(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){aK(o,n,i,a,s,"next",e)}function s(e){aK(o,n,i,a,s,"throw",e)}a(void 0)})}}function aQ(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 aZ(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let aJ=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))},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: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 aH=r(4707),aG=r(6820),aV=r(9870),aq=r(9877),aW=r(5528),aY=r(638);let a_="Auto dismiss keyboard",a$={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"}},a0=["aiAct","aiTap","aiQuery","aiAssert"],a1=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
948
948
  Welcome to Midscene.js Playground!
949
949
 
950
950
  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.
951
951
 
952
952
  Please enter your instructions in the input box below to start experiencing.
953
- `,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};aG();let aV={result:void 0,dump:null,reportHTML:null,error:null},aq="data:image/png;base64,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",aW="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAYKADAAQAAAABAAAAYAAAAABaCTJNAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAAZfUlEQVR4Ae1da5Ac1XXue7tnHzMrYSMMEqyMYB/CCOyEhTjxH9YYk0p4GEsBJxTgFNjalYDEruCHMAkjEsd2gsu4AD1DUrYpUoZgy4iEAhNbqiRQDpIxGAGSdnmYt4wgknZmd2em++b7TnfPzvZ0z660u3rNXGmnu2/f53fOPffccx9tWQ3XQKCBwEFAwFiWOgjZNLKIQ8BkLR3nf7j6mcss+0grcxWW5HipSMD5ZumpxxyJlWIdqio3jR4zwpksNOSNUfdbLq/5ZZ2/n9fq+jffOLFlGss+I0mRcYb7O1fl+zuu5z3rYLK9zkwxz7TLZRZUZS2Phc8v6zhLGbXC0WpJCT6uZX1m1pqB+4RAqNiMIHiAiYblHlreeUGLUo/YWln5krfBuN7ftK178ddMdibKPW0twBiInAD8kWULF4KDbkqn7C2tjlpS9IxhhZDZZXuXdh9Hrsoepv2C8qwbUVRruOgV0yl9qdL66Vx/11/nb+hs91uDpVnXA6RzVbRpIYBwhoLIAefn+zr/xDXuf6MBrEQlyEXkdDQI/LesT2lV+ghvbtk2fZVgelNxFDEsO4C+COmcP1IyLK2TL7gUoSrdpG41RevxfF/XYoZTqCvrPJU8w7hTJkDYLFmJXF9Xv6esu1tsdRwy0MZjPRQLqiGC3CZbpbSyV5ilPamQm8KCHKorC6iymwA5GcL0pZu0wn0J5SH2Nu5NvuCVUPb5tm09kO/v+jLLKuWfBiJMqSmF4O9Z3tFpe2p9Jm335vMi2j2/AuO43HM0CWG9Aw5anl49cL9UPmgarNShcKHYHOrr+mSTbT0KccmyxzGmC9FkQ/yQqx6ybe+vWu56cUeIwYGWPS6jSaUlzRayfN/nOxfZrvr3TJPuzefcQhCZ6UaJK60AHHYcuoTFUvFDDD7LSpEiV+V9AQxSy9nQI4i/l27WF3muepB191tyr1MrYq13tbNMiLmFIgTNdmRZ9/kQME8026qbzRSQNyVECbyVGkW/0Kz1n+be7ryCniRE7Tgz9zbMO7es68J0k/3HwyUDCVrT8bXKj3rFlK0Xatt6XDAAFsSkZsyEl/tdeXL+2eu2FpkxWutPIDJnFfxmW4sLwDiWm3aUhrDdPeqZzZC0m6VMWb93TijfzHrfEuSt3F35orcRHZSGrCcmbBXSMmIKQCKkCq7xEH42MSAWxITYxISv6TUBwcfHlc4TGQ2R8433IPT7VnSuSTIzjFxEJilUzBpxzbvo4a5Jv9v8sLp/WyiuwnCH5EqVUrQatMShtzp6taXWQv3sHEVn5RohQi0mRb8GpvLMsFH6krbVOx4LMZpsZSZNAJH5aGq55aeeozy9GXo9wKeKKVpOfH7KKkHmO6MFzwLnr8jMbb+NoouB0SRQ70PI/RUlruxI74Nmc+Gcjq8qS33Nr6OhVlFD5TSuo7XtkgjaOzez6sUnQ6wqski8nRQBWKjL0eFygAVtcgNk/mng5loFo8gxUEf1qGv+x1M6S+5gKchxK1ei7ws6v8SSHeQXZAjrMozigxH60NJTz8Qg7F4w0BkQTyWwComQhJeLutqo6wtQsy9tWb19e6hdTVSNpATL8ULuGLnu1O6SpzdmHN2NAiWDzzEMBioouEa4DWn3mMtVIB9D7i8nfpjehHUe+twpJyjHXoe6XAIlg6KWeCVh5kJ02bmCt8PT7iWzV7+0PUynVjVryTfh1pAjXFd/G6omwafsTmqS5HwLBdEYBd+TzqSvJPjbLlvUdKSAz/KLagmtpu2fXno7nUtfIXVBnQKBKXVkuIiz2VIyKdWtjb1x73WnzfFV1NpaXk0CWBAVzISjP9xcBPWLXJCkbonYSbdolSu6/4CB1lXqtmdybIqLDpMONwJYzUdptRC96gfP5FgXqRPqhkhSz4TITr5kCplWu8v2ikskzAQml6TmVLb80f7BITgGTzRxMvPqOPBHj+q1NqMJjnjfals78FVmHmoYUpAj9KeyDkN9nd/MtOiv5EeAhI9CNRZBPfFin1Hm6szqwQ21RFFsCwgjDC1fMBeJ3E66+9bkGPDJEZD5BH+44IMPKvmWUfgfobiXix2qqKwTGSs3itaNwQ8CsG5J9fNgBZ4Fs90dxFBEUYLdqIoAzGjlIj9hbVI3YfA0v+DW6HRRCJH5AB9NVTjfytLAlTiQKVfuSLmRuqBOLG/bmsGvDJfQv0HJwGMSATREUSmdUu3EUOp5vz9HIvcVP5JoxXNZ9OT6Tj0bw/Mn8wU2QglRFRa+yERD7nkbMqsHPs1QJCACJhVMEjpSf0JxZG78cCa/L39PS0pdOiLm9tixkAhsmLIVzNrnZNa+uCWULJX1r2oBbC7U+wHjTQIjZDsiJINfdF/2RqylTJTxjlbwWb9QHFG5wGj+M6MlsxlMyjoX+T7iMJYLpYBawXfENhJmvIpECjEARoLXpB39aTQjgl+tcvqdrjPqeszh2ln/MvBbDsE5WItmcLQ9UxztvKGzWUwpRq1l/dDciVFcq4dqaizHVosL/Z2/K2EjxsdyCxDRAQDNF9tbQavr0OkmO3Su7IdgLlkxa83gz2ToDX0/OcLR9abrjoFRqtfptTv/FQO0LLBI7A/QOlxihcHT1ytQKEuU8k1ov8j1d3y+2dbrMKwORU85TJCAR6tmrmgehVbwhxWJ1tWtMCy4nlIjP6dzFzA5NpAYZaYWQCAtbFj4YNjLK22uSa8a/GEYl+8lsHQuMJLtuXbRseD+Pgo1po2fKPjSLmDS56vb+BuKLd7XkwMwhq1A5DosvLmS2c0ZP2Ag6JSxQE8A8KmspD1PrTBfWPA+xoUtTLD3qXW5/5BqGu3GbE8PVSgAXC37adOH+oVpu4cya3eKcc2CelXOrM5uVgb1Tc9rfhhM/iub+p/PuFEkaKbgZM+H86N2B1+eHoyQfQLc54MI9j7P70oMU4o6emKlAHsHtRb34ACsJsA1GrBenmnRFdUyuw2ouN+A2C7SNI36R5lS4JIBnLGuJz6hwqKJJtWrfH/3SZgs+QtOGcLLJwxDjjnTmkI6lvVYZs3Oh6T5Bbb9sSD1dxcOWj3jPA10NtBkAydAjUdD6QK0Frz6RKW/5qiVHp5yz8cExAmQV3RVCcAD5mVDxVRkv4Rq/FhhK5i9bsc7rjEP+GKoGj9iSvwxgzYfxk0x1JGJtRXIImX0xylP4KLNh34GEXndljlxQGT/0WRqYMWm4sIBVlvR+Q/0j7t8JSZWNHNtFCyX5kuSH7CXXnxvX+cfQFtazNVJCc5L+dL+lw3g4xESkfzP2/eBV29ubhIJHjcoVZi6ZK95ItdSkXASMqXUQkypzQom2KPih52vjUmJnNHu7cyemcUXo459A0li22YzzNWctHIIVQQRhY6aXvNTRsnIWID0lOm2U2WqRQlQam2xofKY+9tWv/SMgJ+tSjiSTx0+Bup4c1PhVXAsbERlPCvBoKJaSLfaXHHxO3whoaD9tFN9jSIvMcWkBKp5agufn9u2qK5VT8Ek5gfYYVSMqdfvvDYMPDfEBBEvEEdziQi61LNp9tH55R3zgfxHS/AEzNHBFz0dTEVSDO1iCqcv+kBcJ52UX535bxO5j0HZsxgv7UF/6wC/8WIIfA5pQuF0rJVLZ7CgBTM3xjoFK70IVrQRcGkJfQc9p/RfPpqbGgSYgK1c29oLNEc1BU50VhDMjyU9NG1/aNQuztEFS50GGZ9CmjA/VBNA++pnrm3Vy28hUYVxg1BqgjLU52vOegHbtlU7fwXo30z5+uh4vCDSEabU2mxnisY5A/h6FxgZocVqNqAf45unBNFsL5Mcn2B9Qh1ba8FmZa8vxpW1xceuiqkZVxNzrHP5BDrhWKObnwGoSckEou0Wj22bGuD7yNT4DUS0Mb+gqIETRSc+gkqTACcmTb5ATikmAjpskgSCyfr4xBq+4xAwyrecjfMc/4ANRAW0AnOyT6iYpsI+BBNfReW9KVFvaYif8RBWP60MvLRtngeu8fsNwNGU+uD+0zmZNgSc4yU7WxB6bW3Z6SDdxmUCBG4JmNS4akTQE3AjkQI/XFrYAj4IKx4FfZWjFgVXShn9qtzFhBH/xs8YAgFGBdd+C57cZRnriDn+nahtrecliaAgstsyd+5rTAXPjU44Fs4xzxCjY3QbMUsigGK/C9P1PO7uiJdTFWm+Pfh889hj4246EUALqKUmSVbmhNZ2WvcabhIIhMJ8ROdOQnDuM45zhuNbjNre1J5ntoMIdFVhA5tD6j373Q8FAQKpJOEbP3EIBChCc5yP146MY6PhEMafOVOvYk5YjdDgmewMtoun/FNOqkiUHKve32CLXx6werHQhh0F9lqQ99/wTRbVLcD3UbajvLkC6MrY5Ood6/H1DzCC5jgP3E9raKLDK9kb/rpvb6sOx7gkDvbFtFe/bfjEIhDOsSvrXFqSRdusDog5dmqV5llcMGSoDhD6eJxEBoF6xCNIPHzZuCYjAB3/eJEsUXO0RDFGrMxK/a/GDMIjwuaxqyEM9h9LD7FQ4r2/x++uk/NtvAkxMlYHORcMHiOEMGeGV8D+dYyE1Vs0+OA5LqByxRhntQ9/buEp/nbTCdXWuiUCAFTE6LfXLOQk1/uMWDkDe0IMKrbRr+gmY+3Kj7hvYFEWJ2Wis11KViJa1jzPds9gGps29TZaQQyY9Nq6tIcrIazZTd4FgH0RDv/g43gJD9mEd5jmdfOYms9jRkzvQaA3/EURVa2AEmw0nXGakMxZTK39zNei88b0bjgg0PPeVmFgbKs/A5v0iAnniMcTAKopO2f8e67JTr2puaQODecJnGXFCNEWAHJhoh5nPSBGj/nzBS2yOSGaKGPWuRPxM7ZD6MzkfhUmamANXDequ17YHYgT8xhOumJ7oRiSdlPGE+boIl8Zc2bOUceIfzZC1XLgOr4JMMkv7foo0PoktuwSSRFJFagQW9v134mBUwjgKvMO3uyRUQGDjHfcD1BKtzgLQLlPjX/VeIoi4GpzVqbFng3dhwdYjRc/IAk3cYy43nvQg55nXFypA1km19+5Bbs4erCRgHKrSs5To0KnvmskZXXNuWNgbzTjxrOPQK6v88EWR12MqVyK84jCYnCgh81lnk+k1wx8jPsrNI9oYVQopnfiBW+rwKcnNSqcEHV8U8H8EZ/rdWsS6x514VrZERz6CsMmwWeQCPjgdPK6PzT+uaSBRQ463GKktfef9Iy2GQno/0Ct5ZI6tWRff8fxXNmLxxrBK2LWyS127d6Is5RYW+HkSLW5WY876H+DyfjvyjusI6JkEXJh996rwPPHrb42RDEUddRf4cxiR9vd8jJcAxMNWUfP/u7SsUNfY3V/Hw9DEzSawCvY2ivLPIm9NBPZGY9AOAPrVvQBDE6ohTB8CBzP/Cymm20cz+VdKH51vk4IAPmHvmYpbqKHvoawhVf/+GYYd75Hn1BsCQGeC9b7ZJzRV/DuKR6+gWt1K4BaxfPf4Jbv4zG+FEOSOb3q0AX9Jw/7Q/94UXCqVkwfis4XYgPMvTVftO+rRIqcLk6oCcIM9XVcjV17d0M2OTBDU8qXwwRBeRQL94u9m3l3wO8LyAnVLSYIfnRfgo3aL0D246RF6RWjeFGSGLzH+Xne0syawfXhpngiIy1AIAqoaTveZoT314JGk5KAluYBp0jwWOwQv1m8slVE8kMexb8EkdUbmdP5JUiMTjlZoJpZGcSQYfH+6XTr6D30sLKbytKlTABfnPQ6rXe99AqCrJdl6clcTSOdh10gWZyo9WfcN8YDLCTxOviRjRjYogtt8Dw0/W9U9JvVtYcM8bVScxc3b8i+4gpcywRgzPBgPdPsPQh16Sc8EwLecSoVRY5PRWX6WKDwAIvqEhxdPgIgzsAz+A4CwLm7WcwHsUv7WXGv2VGqUDLbcHjT9+lBRuc1dOMIQE9m0Pbdl962jPd3AeWi2pDEhWeK5+sjg3Pzx47+kIcYsSUczWMD1k0kxVU4sEl7d2NUuwDcz30VUZuPQAmMBF+sQfl7FZywIuBV/FQRgAMzEoEnPGHXzL3pVoe9esK6IGXjYwc8TfzS4Vx+DdNF05BDLCryOCpuqe2xbqzMcFt+DcTvJfmiS26OAx/exsvAJA3Zf2fb6p33ImLs5pYqAkC0GGtRr3S/yHAdrKQFaERN8JXMWYCIw5FcHjQjfeVQf8e35F326CKCqNqoE+vGOrKuvsoZe6QDg8HmD7WzZF41uvR1esipvMQ24gToiJ88+rIO3wfAtnpHmX9LUEnDqEIeOTO0cWwlYYawwpJPoy/HoU4/CrEMwaq8VrWA8GU4yJq1ZucD6IVvxd5WEqsYvo9cRQHjwa48VzNsCSKOgmPQIuGPiMdKscM6yZmhPLzWZ9sk5i36WKnvCfhBv5FU4UQCVEZIO9a3h0fcndCKOGHDTifOsUCKh5pmUvaX8e2wHxh0VkJIaElxEQ5nPzkXjkoFT0hEXaROPLCVstz/iyt+Cf1hKjfs/hxm+y9KgCQyBbFrEkC0GnAwevC9JeVejGPKdmDQwU5nnCpVURLJDpqBB6PelflM/l6qazzgLhy4VIQ9LG+BsBw6K2o1GIfHU0pdUKcJON/D2XAOTg7e4dpmKedMRPTEyP3Kik9AHz+oNEVww/4dXw/tCJMP0BRehgi7lof7MTUWipoWMq7qkCoLdijuw3oybw4wQYo+qtnU9OBFrJLwIvgag9O9mM762Kz1A9tqyX2mH7qkBMP35Wtovygs7z4HH274GeR7GxokW0KM8akcTQ525dcooEOvaNk98I/hQCRMrxzyEN3IuIVmdVh2fXEph/DdzFE+i8SxDnCvVUcXvSM/8LMP5wksaVu786eTBZ/pT5oADBx+niO3rONSTOvjcCJLY7BG7qglymSgAtFlQTQNgBR9bXMHN4l4g27NdHnP68F2UaB4UDnKt552LppaUB7+Jej5Ulr5tBXAh3gyS+Sgbn7gaD+O8Nw/AgArRPCPajyu42J8J/L7MMOGH/GpRQSKG7EIshvjoX9Iai2PPpNq8GVADCvLFRszI54o35G+1DkkOmf3OMHEOQ68WAbD2TE0NqJIDCdhwzJGruFXM4ZwANNV6XcGN0oLQhxEmrR4rZVBJL/qR378TGGMAPk3GxyTNCQfiyj6cfB1DUTAi8cwTXdby6qBR8cCofToJ7ZijWXPuq2l/alMZRrhPQnL1XxcUMaONfTffUPnbM5vc4oVOS7mRBPnOibRopmEiFbMob+AVbZXZ1bteDJMd3+vB0QA4SQsw2NTk4+ZaetH0JG7+X0tFCBVqxBEHZkSWIerxzBUtzCXuhG98sP4Gt8v0+t2/qIyPsWeFaw4szhxdEvAXUgA/8ucJmXi08qAa7mSG0SsFAdcWMa1TbK8xqi/5SIDMV6xQJjtQ2oOYuGppitSHadGiJZziXwvhmU8QGaZKLOaJQllqHzK0FXr8OWIj+eHgahvM6klkpgu4eKfpulbo4/Ijbh7UaCfwu/XQOLZvQX96AfkGDD4HKDjomJZ18qllVxmjwVmXOM0MurKSg8kWy5HzSz81mulUViOiaiWy3dieHTnFE6PnBIBWOCQCGzSLUXrO/D5LO0gWHxE7YFEmEwe0uFBeDqtPGkKNOTkNjQU8vH/4W8QjLkLz5u5a58bx7l3mdtnuYOTmwi5j41bqbibBxp7O+xXPch4IdBtRxnmyfpWiBiu8uNCM7zjBrrJlI3V9O1huEFBb+XAlGMjirewL2GgA3GTLUDNtEMiMBA1CX51A810Po7zZQ0J7kStwU/f5zL2JQxvIw3cMQWIKaBFcYUE+Ukpvmc4qsGsA15Q9LH/VnKePDeWcG8Dl9dLd4NFxghEdZJxJ1ceKbsxtAjTKInv2F5B0wzilxmP91NxLPy0OIGGPxA/8tkOz/ka1Dk5JTaYKyVIzG+yeTI8/sD3kip+KJ+D2NGEgsB+DL9GIHwQd//zZQoGDKCpKoDw9yLvda2rBzaT6/lyqpzPNOgmC4YfehK/la1haFnXFdgSflOToxaBISlWQlBqDWwmkYsfhKBPYwXYXHHYFbaWIl32S5wV5MQU50aYY2Xd+DwdbhrLP1YcFjQ0NxjMFWMFxdWA6jq0iI+QEPzKNlhZ1qUi1oyUYaw0k7pzKdYw+lX+DJcsSljPqVnODkp9MEcylc42qRQzVnlwkQx6wqbKEwLzw81XwrsPo+IeHmDKtY38CId0t9iNFpBixsoUgMCehqVj30R+sLgaEMDz9VM4UO92rgwJFicI14fMxADT7Wa6slLeyqbL/VPplHs5+P+zaPMnQ85+kCIeX2qiLk4U2LFiBwP+yhJ/ytVmuoSd1xTn0ZswAsTXkMQX5fgxVwVyYZpa/Zv3mNvBslUdFAJIhaRF9NqVzZhmAKD8l3h/HtgSp/fq99tQQw24UU7q4hp7caLdsKzR8lY+E2C68Mp7Ao7d0MoBk1sKyHOcggB7QPNBAH8nFyVzXSzD0eHduI96+r4z91tZgZnLpSLlJC0iz/OrcZQjqt+OzuFiEOR0mAf8g6KACs60YAsRx0ITRsou3EodwNC4gVkST9RcfU/eoDPFJkSEewP3TwDix9ySeWf2+sHHJbHgh+tjuUQzm/WJVvluJu+lnDOZQa20Q27jIoDKlmHwIcyCW5znYijgKu9kaCYnQaP8PXDsGSgwW0URQM7nWUc8bgegQ1002/Gep1QR7NfxnnbkRzA0eIs7QbkZUfbDBQUq532I5yb+H8lGaZooTb2GAAAAAElFTkSuQmCC";function aY(e){return"object"==typeof e&&null!==e}let a_=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 a$(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 a0=(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)}},a1=(e,t)=>a0({left:0,top:0,width:e,height:t},e,t),a2=(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}},a3=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}),a5=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 A=(o=s.sdkVersion,a=[],(a3((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(!A)return{scripts:[],sdkVersion:s.sdkVersion,modelBriefs:[]};let{width:l,height:c}=A,u=[],d=a3((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=a7(d[e],-1,l,c,e);t&&u.push(...t)}return{scripts:u.filter((e,t)=>t===u.length-1||"Done"!==e.title),width:l,height:c,sdkVersion:A.sdkVersion,modelBriefs:A.modelBriefs,deviceType:A.deviceType}},a7=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=a$({},e),n=null;return Object.defineProperty(r,"img",{get:()=>(null===n&&(n=t.base64),n),enumerable:!0}),r},A=[],l=!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=ae(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=o4(e),a=ae(e),c=e.uiContext,h=null==c?void 0:c.screenshot;if(c&&h){let{width:u,height:d}=a2(e,r,n);A.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:a_(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=a$({},a0(a_(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,A.push(s({type:"insight",context:c,camera:i,highlightElement:b,searchArea:(null==e?void 0:e.searchArea)??(null==(m=aY(v=null==e?void 0:e.log)&&aY(y=v.dump)&&"string"==typeof y.type&&aY(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)),l=!0})}if(e.recorder&&e.recorder.length>0){let t=null==(p=e.recorder[0])?void 0:p.screenshot,{width:i,height:o}=a2(e,r,n);A.push(s({type:"img",duration:900,title:o4(e),subTitle:ae(e),imageWidth:i,imageHeight:o,taskId:w},t))}}else if("Action Space"===e.type){let t=o4(e),i=ae(e);A.push({type:"spinning-pointer",duration:300,title:t,subTitle:i,taskId:w}),l&&(A.push({type:"clear-insight",duration:200,title:t,subTitle:i,taskId:w}),l=!1),A.push({type:"pointer",img:aq,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}=a2(e,r,n);A.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?a1(a,c):void 0,title:t,subTitle:i,imageWidth:a,imageHeight:c,taskId:w},o))}else{let t=o4(e),i=ae(e),o=null==(m=e.recorder)||null==(g=m[e.recorder.length-1])?void 0:g.screenshot;if(o){let{width:a,height:l}=a2(e,r,n);A.push(s({type:"img",duration:900,camera:a1(a,l),title:t,subTitle:i,imageWidth:a,imageHeight:l,taskId:w},o))}}if("finished"!==e.status){let t=o4(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:l,height:c}=a2(e,r,n);A.push(s({type:"img",camera:a1(l,c),duration:900,title:t,subTitle:o,imageWidth:l,imageHeight:c,taskId:w},a))}}),l&&(A.push({type:"clear-insight",duration:200,title:"",subTitle:"",taskId:o}),l=!1);let u=a.length>0?a2(a[a.length-1],r,n):{width:r,height:n};return A.push({title:"End",subTitle:c,type:"img",duration:200,camera:a1(u.width,u.height),taskId:void 0}),A};function a4(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function a8(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 a6(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 a9(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 se(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 st(e,t){return e?Array.isArray(null==e?void 0:e.executions)?a5(e):e.tasks&&Array.isArray(e.tasks)?a5({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function sr(e){return"aiAct"===e||"runMarkdown"===e}function sn(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class si{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){sn(this,"dbPromise",void 0),sn(this,"dbName",void 0),sn(this,"version",void 0),sn(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let so=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}},sa=(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 ss(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function sA(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){ss(o,n,i,a,s,"next",e)}function s(e){ss(o,n,i,a,s,"throw",e)}a(void 0)})}}function sl(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function sc(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){sl(e,t,r[t])})}return e}function su(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 sd="playground_messages",sp="playground_results";class sh{saveMessages(e){return sA(function*(){yield so(()=>sA(function*(){yield this.dbManager.clear(sd);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=su(sc({},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(sd,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return sA(function*(){return(yield so(()=>sA(function*(){let e=yield this.dbManager.getAll(sd,!0);return 0===e.length?[]:Promise.all(e.map(e=>sA(function*(){let t=e.data,r=su(sc({},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 sA(function*(){yield so(()=>sA(function*(){yield Promise.all([this.dbManager.clear(sd),this.dbManager.clear(sp)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return sA(function*(){yield so(()=>sA(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(sp,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return sA(function*(){return(yield so(()=>sA(function*(){let t=yield this.dbManager.get(sp,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)?su(sc({},e),{result:su(sc({},t),{dump:su(sc({},r),{executions:r.executions.map(e=>su(sc({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?su(sc({},e),{result:su(sc({},t),{dump:su(sc({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return su(sc({},e),{uiContext:e.uiContext?su(sc({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>su(sc({},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 sA(function*(){return(yield so(()=>sA(function*(){let[e,t]=yield Promise.all([this.dbManager.count(sd),this.dbManager.count(sp)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return sA(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){sl(this,"dbManager",void 0),sl(this,"namespace",void 0),sl(this,"messagesCleanup",void 0),sl(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new si(`midscene_playground_${e}`,1,[{name:sd,keyPath:"id"},{name:sp,keyPath:"id"}]),this.messagesCleanup=sa(this.dbManager,sd,100),this.resultsCleanup=sa(this.dbManager,sp,50)}}function sf(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function sg(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sf(o,n,i,a,s,"next",e)}function s(e){sf(o,n,i,a,s,"throw",e)}a(void 0)})}}function sm(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function sy(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){sm(e,t,r[t])})}return e}function sv(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 sb{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 sg(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>sv(sy({},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=>sv(sy({},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 sg(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>sg(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 sy({},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 sg(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 sg(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 sg(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"){sm(this,"messagesKey",void 0),sm(this,"resultsKey",void 0),sm(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class sw{saveMessages(e){return sg(function*(){this.messages=[...e]}).call(this)}loadMessages(){return sg(function*(){return[...this.messages]}).call(this)}clearMessages(){return sg(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return sg(function*(){this.results.set(e,t)}).call(this)}constructor(){sm(this,"messages",[]),sm(this,"results",new Map)}}class sE{saveMessages(e){return sg(function*(){})()}loadMessages(){return sg(function*(){return[]})()}clearMessages(){return sg(function*(){})()}saveResult(e,t){return sg(function*(){})()}}function sk(){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 sh(t);return console.warn("IndexedDB not available, falling back to localStorage"),sk("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new sb(t);return console.warn("localStorage not available, falling back to memory storage"),sk("memory",t);case"memory":return new sw;case"none":return new sE;default:throw Error(`Unknown storage type: ${e}`)}}function sx(){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 sS(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function sC(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sS(o,n,i,a,s,"next",e)}function s(e){sS(o,n,i,a,s,"throw",e)}a(void 0)})}}function sj(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 sI(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 sO=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,A=i.width,l=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=>a_(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:`${A}/${l}`,"--ui-scale":Math.max(1,Math.sqrt(A/1920))},children:[n&&(0,o.jsx)("div",{className:"blackboard-rect blackboard-rect-search",style:{left:`${n.left/A*100}%`,top:`${n.top/l*100}%`,width:`${n.width/A*100}%`,height:`${n.height/l*100}%`},children:(0,o.jsx)("span",{className:"blackboard-rect-label",children:"Search Area"})}),c.map(e=>{let t=a_(e);return(0,o.jsx)("div",{className:"blackboard-rect blackboard-rect-highlight",style:{left:`${t.left/A*100}%`,top:`${t.top/l*100}%`,width:`${t.width/A*100}%`,height:`${t.height/l*100}%`}},`${e.key}-rect`)})]})]}),(0,o.jsx)("div",{className:"bottom-tip",style:{display:e.hideController?"none":"block"},children:p})]})};var sP=r(9783),sR=r(7294),sT=r(4985),sN=r(1090),sM=r(2946),sD=r(90),sB=r(3776);let sz=e=>{let{text:t,disabled:r=!1,speed:n=5,className:i="",colorTheme:a="blue"}=e,s={"--animation-duration":`${n}s`},A=`theme-${a}`;return(0,o.jsx)("div",{className:`shiny-text ${A} ${r?"disabled":""} ${i}`,style:s,children:t})},sL=(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"})]}),sF=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:sL;return(0,o.jsx)("div",{className:"server-tip",children:(0,o.jsx)(y.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},sK=(0,o.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,o.jsx)(sz,{disabled:!0,text:"The result will be shown here"})});var sU=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 sQ=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)(sO,{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)(sP.A,{})});case"finishedWithWarning":return(0,o.jsx)("span",{style:{color:"#f7bb05"},children:(0,o.jsx)(sR.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,o.jsx)("span",{style:{color:"#FF0A0A"},children:(0,o.jsx)(sT.A,{})});case"pending":return(0,o.jsx)(sN.A,{});case"cancelled":case"skipped":return(0,o.jsx)("span",{style:{color:"#8c8c8c"},children:(0,o.jsx)(sM.A,{})});case"running":return(0,o.jsx)(sD.A,{});default:return(0,o.jsx)(sB.A,{})}})("failed")," No UI context",(0,o.jsx)(g.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(sU)},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 sZ=r(4291);let sJ=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)(sZ.A,{className:"reminder-icon"}),(0,o.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,o.jsx)(q,{mode:"text",showTooltipWhenEmpty:!1})]})};var sX=r(7062),sH=r(6130),sG=r(2297),sV=r(5862),sq=r(7615),sW=r(2107),sY=r(4544),s_=r(3616),s$=r(1879),s0=r(9876),s1=r(1269);let s2=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))},s3=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 s5(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function s7(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 s4(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function s8(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=s4(i,o);e.camera=s7({},t),e.prevCamera=s7({},t),e.pointerMoved=!1}}function s6(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function s9(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 Ae(e,t,r,n,i){let o=s4(r,n),a={img:"",imgW:r,imgH:n,camera:s7({},o),prevCamera:s7({},o),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:aq,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,A;let l=e[o],c=l.startFrame+l.durationInFrames;if(0===l.durationInFrames){l.startFrame<=t&&("pointer"===l.type&&l.pointerImg&&(a.pointerImg=l.pointerImg,a.pointerVisible=!0),a.title=l.title||a.title,a.subTitle=l.subTitle||a.subTitle,a.taskId=null!=(s=l.taskId)?s:a.taskId,a.scriptIndex=o);continue}if(t<l.startFrame)break;switch(a.title=l.title||a.title,a.subTitle=l.subTitle||a.subTitle,a.taskId=null!=(A=l.taskId)?A:a.taskId,a.scriptIndex=o,a.frameInScript=t-l.startFrame,a.rawProgress=Math.min(a.frameInScript/l.durationInFrames,1),l.type){case"img":!function(e,t,r,n,i){s8(e,t,n,i);let o=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=s7({},e.camera),e.camera=s7({},t.cameraTarget),e.pointerMoved=s6(e.prevCamera,e.camera)):r>=o&&(e.pointerMoved=!1,e.imageChanged=!1),e.spinning=!1}(a,l,t,r,n);break;case"insight":!function(e,t,r,n,i){if(s8(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=s7({},e.camera),e.camera=s7({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=s6(e.prevCamera,e.camera))}e.spinning=!1}(a,l,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=s7({},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,l,t);break;case"spinning-pointer":a.spinning=!0,a.spinningElapsedMs=a.frameInScript/i*1e3;break;case"sleep":a.spinning=!1}t>=c&&("clear-insight"!==l.type&&(a.imageChanged=!1),a.pointerMoved=!1,a.rawProgress=1,l.cameraTarget&&(a.prevCamera=s7({},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 At(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 Ar(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function An(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 Ai(e){return Ar(e,"imageWidth"),An(Math.max(1,Math.sqrt(e/1920)))}function Ao(e){let t=e.height;return{size:t,centerOffset:t/2}}let Aa=e=>{let{frameMap:t,autoZoom:r,frame:n,width:i,height:s,fps:A}=e,{scriptFrames:l,imageWidth:c,imageHeight:u}=t,d=(0,a.useMemo)(()=>Ae(l,n,c,u,A),[l,n,c,u,A]);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:k,title:x,subTitle:S,frameInScript:C,imageChanged:j,pointerMoved:I,rawProgress:O}=d,P=r?I?Math.min(O/.375,1):O:1,R=I?O<=.375?0:Math.min((O-.375)/.625,1):O,T=y.pointerLeft+(m.pointerLeft-y.pointerLeft)*P,N=y.pointerTop+(m.pointerTop-y.pointerTop)*P,M=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}=At(i,s,h,f),U=h/B,Q=-(F/h*M),Z=-(K/f*D),J=`scale(${U}) translate(${Q}px, ${Z}px)`,X=f/h*B,H=(T-M)/B*F,G=(N-D)/X*K,V=s9(k,m,y,h,f),q=Ai(h),W=Ao(q),Y=q.scale,_=j?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:[j&&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:j?_: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=a_(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:aW,style:{position:"absolute",left:H-W.centerOffset,top:G-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))"}}),V&&!b&&(0,o.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:H-q.hotspotX,top:G-q.hotspotY,width:q.width,height:q.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};function As(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function AA(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){As(o,n,i,a,s,"next",e)}function s(e){As(o,n,i,a,s,"throw",e)}a(void 0)})}}let Al=!1;function Ac(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function Au(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 Ad(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).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){Ad(o,n,i,a,s,"next",e)}function s(e){Ad(o,n,i,a,s,"throw",e)}a(void 0)})}}function Ah(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 Af(e){var t,r,n,i;let s,{message:A}=p.A.useApp(),{autoZoom:l,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,A,l;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 A=Math.max(Math.ceil(e/1e3*30),1),l=t.camera,c=t.imageWidth||r,u=t.imageHeight||n,d={type:"img",startFrame:o,durationInFrames:A,img:t.img,imageWidth:c,imageHeight:u,title:t.title,subTitle:t.subTitle,taskId:t.taskId};l&&(d.cameraTarget={left:l.left,top:l.top,width:l.width,pointerLeft:null!=(a=l.pointerLeft)?a:Math.round(c/2),pointerTop:null!=(s=l.pointerTop)?s:Math.round(u/2)}),i.push(d),o+=A;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!=(A=p.pointerLeft)?A:Math.round(u/2),pointerTop:null!=(l=p.pointerTop)?l: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),[k,x]=(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;x(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,[A,l]=(0,a.useState)(0),[c,u]=(0,a.useState)(o),d=(0,a.useRef)(c),p=(0,a.useRef)(A),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=A,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,l(0);else{p.current=f.current-1,l(f.current-1),u(!1);return}else p.current=e,l(e)}}t=i,e=requestAnimationFrame(n)};return e=requestAnimationFrame(n),()=>cancelAnimationFrame(e)},[c]);let y=()=>{p.current>=f.current-1&&(p.current=0,l(0))},v=(0,a.useCallback)(()=>{y(),u(!0)},[]),b=(0,a.useCallback)(()=>u(!1),[]);return{currentFrame:A,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,l(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]),j=(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 I=(0,a.useMemo)(()=>{var e;let t;return v?(e=S.currentFrame,(t=Ae(v.scriptFrames,e,v.imageWidth,v.imageHeight,v.fps)).img?t:null):null},[v,S.currentFrame]),O=(0,a.useCallback)(()=>Ap(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 A=null!=i?i:globalThis.document;if(!A)throw Error("Report download requires a document context.");let l=null!=o?o:globalThis.URL;if(!(null==l?void 0:l.createObjectURL)||!(null==l?void 0:l.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=l.createObjectURL(c),d=A.createElement("a");d.href=u,d.download=r,d.style.display="none",A.body.appendChild(d);try{d.click()}finally{A.body.removeChild(d),(null!=s?s:e=>setTimeout(e,0))(()=>{l.revokeObjectURL(u)})}},function(){var e=this,t=arguments;return new Promise(function(n,i){var o=r.apply(e,t);function a(e){s5(o,n,i,a,s,"next",e)}function s(e){s5(o,n,i,a,s,"throw",e)}a(void 0)})})())}catch(e){G(e,{title:"Failed to download report"})}})(),[null==e?void 0:e.onDownloadReport,null==e?void 0:e.reportFileContent]),P=(0,a.useMemo)(()=>I&&(I.title||I.subTitle)?{title:I.title,subTitle:I.subTitle}:null,[I]),[T,N]=(0,a.useState)(!1),[M,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),T||(F.current=setTimeout(()=>L(!1),3e3))},[T]),U=(0,a.useCallback)(()=>{L(!0),F.current&&clearTimeout(F.current)},[]),Q=(0,a.useCallback)(()=>{F.current&&clearTimeout(F.current),T||(F.current=setTimeout(()=>L(!1),1e3))},[T]);(0,a.useEffect)(()=>{T&&(L(!0),F.current&&(clearTimeout(F.current),F.current=null))},[T]),(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(),j())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[j]);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),V=(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 q=(0,a.useCallback)(()=>Ap(function*(){if(v&&!B.current){B.current=!0,N(!0),D(0);try{var e,t;yield(e={autoZoom:l},t=e=>D(Math.round(100*e)),AA(function*(){if(Al)throw Error("Video export is already in progress");Al=!0;try{var r,n,i;yield(r=v,n=e,i=t,AA(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 A=new Map;yield Promise.all([...s].map(e=>AA(function*(){try{A.set(e,(yield Ac(e)))}catch(e){}})()));let l=new Set([aq]);for(let e of r.scriptFrames)e.pointerImg&&l.add(e.pointerImg);let c=new Map;yield Promise.all([...l].map(e=>AA(function*(){try{c.set(e,(yield Ac(e)))}catch(e){}})()));let u=null;try{u=yield Ac(aW)}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,l=!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",x),h.getTracks().forEach(e=>e.stop())},k=e=>{l||s||(s=e,"inactive"!==f.state?f.stop():(E(),l=!0,n(e)))},x=()=>{document.hidden&&k(Error("Video export was interrupted because the report tab was hidden"))};f.onerror=()=>{k(Error("MediaRecorder error"))},f.onstop=()=>{if(E(),l)return;if(l=!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",x),f.start();let S=e=>{if(!l&&"inactive"!==f.state){if(d>0&&e-y>Math.max(2e3,10*w))return void k(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,A,l,c,u,d,p,h,f,g,m,y,v,b,w,E,k;let x,{scriptFrames:S,imageWidth:C,imageHeight:j,fps:I}=r,O=Ae(S,t,C,j,I);if(!O.img)return;let{img:P,prevImg:R,imageWidth:T,imageHeight:N,camera:M,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:G,camWidth:V}=(h=D,f=M,g=T,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,k=f.width,E+(k-E)*m)}:{camLeft:0,camTop:0,camWidth:g}),q=(A=D.pointerLeft,l=M.pointerLeft,A+(l-A)*X),W=(c=D.pointerTop,u=M.pointerTop,c+(u-c)*X),Y=T/V,{offsetX:_,offsetY:$,contentWidth:ee,contentHeight:et}=At(960,540,T,N),er=-(ee/T*H),en=-(et/N*G),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=Au(a_(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=Au(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:T,imageHeight:N});let ea=N/T*V,es=_+(q-H)/V*ee,eA=$+(W-G)/ea*et,el=(Ar(ee,"contentWidth"),An(Ai(T).scale*(ee/T))),ec=Ao(el),eu=null!=(s=i.get(Q))?s:i.get(aq),ed=s9(Z,M,D,T,N);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}({},el),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))}),x=(Math.sin(U/500-Math.PI/2)+1)/2*Math.PI*2,e.save(),e.translate(es,eA),e.rotate(x),e.drawImage(o,-d.centerOffsetX,-d.centerOffsetY,d.width,d.height),e.restore()),!K&&ed&&eu&&e.drawImage(eu,es-el.hotspotX,eA-el.hotspotY,el.width,el.height)}(p,d,r,A,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{Al=!1}})()),A.success("Video exported")}catch(e){console.error("Export failed:",e),G(e,{title:"Video export failed"})}finally{B.current=!1,N(!1),D(0)}}})(),[l,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)(sX.A,{}),onClick:()=>{O()},children:"Download report"})]})}):null;let $=(null==I?void 0:I.imageWidth)||v.imageWidth,ee=(null==I?void 0:I.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:j,children:(s=k.width>0&&k.height>0?Math.min(k.width/$,k.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)(Aa,{frameMap:v,autoZoom:l&&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:j,children:S.playing?(0,o.jsx)(sH.A,{}):(0,o.jsx)(sG.A,{})}),(0,o.jsxs)("span",{className:"time-display",children:[Ah(Math.min(S.currentFrame,C),v.fps)," ","/ ",Ah(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)(sX.A,{})})}):null,(0,o.jsx)(s$.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:T?"not-allowed":"pointer",opacity:T?.5:1},onClick:T?void 0:q,children:[(0,o.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:T?(0,o.jsx)(s0.A,{type:"circle",percent:M,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,o.jsx)(sV.A,{style:{width:"16px",height:"16px"}})}),(0,o.jsx)("span",{className:"player-export-label",children:T?`Exporting ${M}%`:"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)(s2,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,o.jsx)(s1.A,{size:"small",checked:l,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)(sq.A,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,o.jsx)(s1.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)(sW.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)(s3,{style:{width:"16px",height:"16px"}})})}),(0,o.jsx)("div",{className:"status-icon",onClick:V,children:X?(0,o.jsx)(sY.A,{}):(0,o.jsx)(s_.A,{})})]})]})]})})}let Ag=e=>{let{result:t,loading:r,serverValid:n,serviceMode:i,replayScriptsInfo:a,replayCounter:s,loadingProgressText:A,verticalMode:l=!1,notReadyMessage:c,fitMode:u,autoZoom:d,actionType:p,canDownloadReport:h,onDownloadReport:f}=e,g="result-wrapper";l&&(g+=" vertical-mode-result"),a&&l&&(g+=" result-wrapper-compact");let m=sK,y=p&&iz.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)(aK.A,{spin:!0})}),(0,o.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,o.jsx)(sz,{text:A,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)(Af,{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)(Af,{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)(Af,{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)(Af,{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)(Af,{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=sF(c);return(0,o.jsx)("div",{className:g,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:m})},Am=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 Ay(){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 Av="ZodOptional",Ab="ZodDefault",Aw="ZodNullable",AE="ZodObject",Ak="midscene_location_field_flag",Ax=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),AS=e=>{var t,r,n;if((null==(t=e._def)?void 0:t.typeName)===AE){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&&Ak 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},AC=e=>{var t,r,n,i,o;let a=e,s=!1,A=!1;for(;(null==(t=a._def)?void 0:t.typeName)===Av||(null==(r=a._def)?void 0:r.typeName)===Ab||(null==(n=a._def)?void 0:n.typeName)===Aw;)(null==(i=a._def)?void 0:i.typeName)===Av&&(s=!0),(null==(o=a._def)?void 0:o.typeName)===Ab&&(A=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:A}},Aj=(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)||!Ax(i.paramSchema))return null;let o=i.paramSchema.shape||{},a=Object.keys(o);if(1!==a.length)return null;let[s]=a,{actualField:A}=AC(o[s]),l=AS(A);if(!("ZodString"===(null==(r=A._def)?void 0:r.typeName)||l))return null;let c=(null==(n=A._def)?void 0:n.description)||A.description||(l?"Describe the element you want to interact with":`Enter ${s}`);return{name:s,placeholder:c}};var AI=r(8460),AO=r(3896),AP=r(3246),AR=r(1631),AT=r(4665);let AN=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))},AM=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 AD={};AD.d=(e,t)=>{for(var r in t)AD.o(t,r)&&!AD.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},AD.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),AD.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var AB={};function Az(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}AD.r(AB),AD.d(AB,{create:()=>v.vt});let{create:AL}=AB,AF="midscene-prompt-history-v2",AK="midscene-last-selected-type",AU=AL((e,t)=>{let r;return{history:(r=localStorage.getItem(AF))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(AK)||"aiAct",clearHistory:r=>{let n=Az({},t().history);delete n[r],e({history:n}),localStorage.setItem(AF,JSON.stringify(n))},addHistory:r=>{var n,i;let{type:o}=r,a=t().history,s=a[o]||[],A=JSON.stringify({prompt:r.prompt,params:r.params}),l=[r,...s.filter(e=>JSON.stringify({prompt:e.prompt,params:e.params})!==A)];l.length>10&&(l.length=10);let c=(n=Az({},a),i=i={[o]:l},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(AF,JSON.stringify(c))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(AK,t)}}}),AQ=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 AZ(e){return{supportsImeStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function AJ(e){return Object.values(AZ(e)).some(Boolean)}var AX=r(6356);let AH=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))},AG=e=>{let t,{showDeepLocateOption:r=!1,showDeepThinkOption:n=!1,enableTracking:i=!1,showDataExtractionOptions:a=!1,hideDomAndScreenshotOptions:s=!1,deviceType:A,trigger:l,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),k=X(e=>e.setImeStrategy),x=X(e=>e.autoDismissKeyboard),S=X(e=>e.setAutoDismissKeyboard),C=X(e=>e.keyboardDismissStrategy),j=X(e=>e.setKeyboardDismissStrategy),I=X(e=>e.alwaysRefreshScreenInfo),O=X(e=>e.setAlwaysRefreshScreenInfo),P=AZ(A),R=AJ(A);if(!i&&!r&&!n&&!a&&!R)return null;let T=(t=[],i&&t.push({label:(0,o.jsx)(AX.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)(AX.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)(AT.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)(AT.A,{value:"unset",children:"Auto"})}),(0,o.jsx)(AT.A,{value:!0,children:"On"}),(0,o.jsx)(AT.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),a&&!s&&(t.push({label:(0,o.jsx)(AX.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)(AT.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,o.jsx)(AT.A,{value:!1,children:"Off"}),(0,o.jsx)(AT.A,{value:!0,children:"All"}),(0,o.jsx)(AT.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)(AT.A.Group,{size:"small",value:E,onChange:e=>k(e.target.value),children:[(0,o.jsx)(AT.A,{value:"always-yadb",children:"Always YADB"}),(0,o.jsx)(AT.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),P.supportsAutoDismissKeyboard&&t.push({label:(0,o.jsx)(AX.A,{onChange:e=>S(e.target.checked),checked:x,children:aJ}),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)(AT.A.Group,{size:"small",value:C,onChange:e=>j(e.target.value),children:[(0,o.jsx)(AT.A,{value:"esc-first",children:"ESC first"}),(0,o.jsx)(AT.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),P.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,o.jsx)(AX.A,{onChange:e=>O(e.target.checked),checked:I,children:"Always refresh screen info"}),key:"always-refresh-screen-info-config"})),!P.supportsImeStrategy&&P.supportsAutoDismissKeyboard&&t.push({label:(0,o.jsx)(AX.A,{onChange:e=>S(e.target.checked),checked:x,children:aJ}),key:"auto-dismiss-keyboard-config"}),t),N=null!=l?l:(0,o.jsx)("button",{"aria-label":"Open run configuration",className:"selector-trigger-button",type:"button",children:(0,o.jsx)(AH,{width:24,height:24})});return(0,o.jsx)("div",{className:"selector-trigger",children:(0,o.jsx)(s$.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:T},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:c,trigger:["click"],children:N})})};var AV=r(7991),Aq=r(2752);let{TextArea:AW}=m.A,AY=(e,t)=>`${e}${t?" (Optional)":""}`,A_=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=a||`Enter ${t}`;return(0,o.jsx)(ay.A.Item,{name:["params",t],label:AY(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(m.A,{placeholder:s})},t)},A$=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)(ay.A.Item,{name:["params",t],label:AY(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(AW,{rows:2,placeholder:s})},t)},A0=e=>{var t;let{name:r,label:n,fieldSchema:i,isRequired:a,marginBottom:s,placeholder:A}=e,l=((null==(t=i._def)?void 0:t.values)||[]).map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)}));return(0,o.jsx)(ay.A.Item,{name:["params",r],label:n,rules:a?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:s},colon:!1,children:(0,o.jsx)(AV.A,{placeholder:A||`Select ${r}`,options:l})},r)},A1=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=500*("distance"===t),A=a&&Number(a)||s,l="distance"===t?1e4:void 0;return(0,o.jsx)(ay.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)(Aq.A,{placeholder:A.toString(),min:0,max:l,step:"distance"===t?10:1,style:{width:"100%"}})},t)},A2=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e;return(0,o.jsx)(ay.A.Item,{name:["params",t],label:AY(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(AV.A,{placeholder:a||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var A3=r(316);let A5=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))},A7=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))},A4=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:A8}=u.A,A6=e=>{let{onSelect:t,history:r,currentType:n,trigger:i,popupPlacement:s="bottom",title:A="History",showClear:l=!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,k]=(0,a.useState)(!1),[x,S]=(0,a.useState)(""),[C,j]=(0,a.useState)(0),I=AU(e=>e.clearHistory),O=(0,a.useRef)(null),P=(0,a.useRef)(null),[R,T]=(0,a.useState)(null),[N,M]=(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(x.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,x]),L=()=>{k(!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,A=i?r.right-i.left:r.right,l=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);T({left:Math.min(Math.max(16,A-v),u),top:Math.min(Math.max(16,"top"===s?l-b-8:c+8),d)}),M(null!=n?n:document.body),B(!!n)},t=e=>{O.current&&!O.current.contains(e.target)&&P.current&&!P.current.contains(e.target)&&k(!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),k(!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:()=>k(e=>!e),ref:P,children:null!=i?i:(0,o.jsx)(A7,{width:24,height:24})}),E&&R&&N&&(0,A3.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)(A8,{strong:!0,style:{fontSize:"16px"},children:[A," (",r.length,")"]}),(0,o.jsx)(g.Ay,{size:"small",type:"text",icon:(0,o.jsx)(A5,{width:16,height:16}),onClick:()=>k(!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:x,onChange:e=>S(e.target.value),prefix:(0,o.jsx)(A4,{width:18,height:18}),className:"search-input",allowClear:!0}),l?(0,o.jsx)(g.Ay,{type:"link",onClick:()=>{c?c():I(n),S(""),k(!1)},className:"clear-button",disabled:0===r.length,children:"Clear"}):null]})}),(0,o.jsx)("div",{className:"history-content",onScroll:()=>{j(e=>e+1)},children:0===r.length?(0,o.jsx)("div",{className:"no-results",children:(0,o.jsx)(A8,{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),x&&0===z.recent7Days.length&&0===z.recent1Year.length&&0===z.older.length&&(0,o.jsx)("div",{className:"no-results",children:(0,o.jsx)(A8,{type:"secondary",children:p})})]})})]})}),N)]})};function A9(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:le}=m.A,lt=e=>{var t,r,n,i,s,A,l;let{runButtonEnabled:c,form:u,serviceMode:d,selectedType:p,dryMode:f,stoppable:y,loading:v,onRun:b,onStop:w,clearPromptAfterRun:E=!0,actionSpace:k,hideDomAndScreenshotOptions:x=!1,deviceType:S,chrome:C}=e,[j,I]=(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?",T=(null==C?void 0:C.variant)==="minimal",N=(null==C?void 0:C.placeholder)||R,M=(l=null==C?void 0:C.primaryActionLabel)?l:AQ(p)||"Action",D=(0,a.useRef)(null),B=(0,a.useRef)(null),z=ay.A.useWatch("params",u),L=(0,a.useRef)(null),F=AU(e=>e.history),K=AU(e=>e.lastSelectedType),U=AU(e=>e.addHistory),Q=AU(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,A]=(0,a.useState)(!1),l=(0,a.useRef)(!1);(0,a.useEffect)(()=>{t&&!s&&n&&n!==o&&(l.current=!1,r.setFieldsValue({type:o,prompt:"",params:{}}),null==i||i())},[t,s,n,o,r,i]);let c=(0,a.useCallback)(()=>{t&&A(!0)},[t]),u=(0,a.useCallback)(()=>{l.current=!0},[]),d=(0,a.useCallback)(()=>!!l.current&&(l.current=!1,!0),[]);return(0,a.useMemo)(()=>({markExplicitSelection:c,skipNextRestore:u,shouldSkipRestoreOnce:d}),[c,u,d])}({enabled:T,form:u,selectedType:p,onAfterReset:(0,a.useCallback)(()=>{L.current=null,P("")},[])}),G=(0,a.useMemo)(()=>{if(k){let e=k.find(e=>e.interfaceAlias===p||e.name===p);return!!(null==e?void 0:e.paramSchema)&&(!Ax(e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0)}return!1},[p,k]),V=(0,a.useMemo)(()=>{if(k&&k.length>0){let e=k.find(e=>e.interfaceAlias===p||e.name===p);if(e){if(e.paramSchema&&Ax(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{isOptional:r}=AC(t[e]);return!r})}return!!e.paramSchema}}return!0},[p,k]),q=(0,a.useMemo)(()=>["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert"].includes(p),[p]),W=(0,a.useMemo)(()=>{if("aiAct"===p||"aiLocate"===p)return!0;if(k){let e=k.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&Ax(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{actualField:r}=AC(t[e]);return AS(r)})}}return!1},[p,k]),Y=(0,a.useMemo)(()=>"aiAct"===p,[p]),_=(0,a.useMemo)(()=>{let e="In-Browser-Extension"===d,t=q&&!x,r=AJ(S);return e||W||Y||t||r},[d,W,Y,q,x,S]),$=(0,a.useMemo)(()=>(e=>{let t=Object.keys(aX);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=aX[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)})(k),[k]),ee=(0,a.useMemo)(()=>$.filter(e=>!aH.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=aX[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=aX[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=aX[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!aX[e]}],[]),en=(0,a.useCallback)(e=>{var t;return{key:e,label:AQ(e),title:(null==(t=aX[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=aH.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(!G||!k)return{};let e=k.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&Ax(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===Ab){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,G,k]);(0,a.useEffect)(()=>{T||u.getFieldValue("type")||!K||u.setFieldValue("type",K)},[u,T,K]),(0,a.useEffect)(()=>{!T&&p&&p!==K&&Q(p)},[p,T,K,Q]);let eA=(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(T){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,T,H]),(0,a.useEffect)(()=>{let e=setTimeout(()=>{eA()},100);return()=>clearTimeout(e)},[p,eA]);let el=ay.A.useWatch("prompt",u);(0,a.useEffect)(()=>{el!==O&&P(el||"")},[el,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(!G||!k)return!1;let e=k.find(e=>e.interfaceAlias===p||e.name===p);return!!((null==e?void 0:e.paramSchema)&&Ax(e.paramSchema))&&1===Object.keys(e.paramSchema.shape||{}).length},[p,G,k]),ep=(0,a.useMemo)(()=>T?Aj(k,p):null,[k,T,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)&&Ax(t.paramSchema)){let r=t.paramSchema.shape||{};return Object.keys(r).every(t=>{let{isOptional:n}=AC(r[t]),i=e[t];return n||void 0!==i&&""!==i&&null!==i})}return!0}return o.trim().length>0})(c,!!G,z,k,p,O),[c,G,p,k,O,z]),ef=(0,a.useCallback)(()=>{let e=u.getFieldsValue(),t="";if(G&&e.params&&k){let r=k.find(e=>e.interfaceAlias===p||e.name===p);if((null==r?void 0:r.paramSchema)&&Ax(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}=AC(o[t]);AS(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(""),G){let e=es();u.setFieldValue("params",e)}else u.setFieldValue("prompt","")},[u,U,b,G,p,E,k,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(!G)return null;if(k){let e=k.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&Ax(e.paramSchema)){let t=e.paramSchema.shape||{},r=Object.keys(t);if(1===r.length){let e=r[0],{actualField:n}=AC(t[e]),i=AS(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(k){let t=k.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)(ay.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}=AC(n),{isOptional:a}=AC(i);return!o&&a?-1:o&&!a?1:0});if(i.forEach((e,r)=>{var a,s,A;let{actualField:l,isOptional:c}=AC(t[e]),u=AS(l),d=e.charAt(0).toUpperCase()+e.slice(1),h=12*(r!==i.length-1),f=(()=>{var t,r;if(null==(t=l._def)?void 0:t.description)return l._def.description;if(l.description)return l.description;if(k){let t=k.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:l,isRequired:!c,marginBottom:h,placeholder:f};u?n.push((0,o.jsx)(A$,A9({},g),e)):(null==(a=l._def)?void 0:a.typeName)==="ZodEnum"?n.push((0,o.jsx)(A0,A9({},g),e)):(null==(s=l._def)?void 0:s.typeName)==="ZodNumber"?n.push((0,o.jsx)(A1,A9({},g),e)):(null==(A=l._def)?void 0:A.typeName)==="ZodBoolean"?n.push((0,o.jsx)(A2,A9({},g),e)):n.push((0,o.jsx)(A_,A9({},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,G,k,em]),ev=(0,a.useCallback)(()=>{I(!0)},[]),eb=(0,a.useCallback)(()=>{I(!1)},[]),ew=(0,a.useCallback)(()=>{let e=e=>(0,o.jsx)(g.Ay,{type:"primary",icon:(0,o.jsx)(AI.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)(AO.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)(AP.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)(AO.A,{}),onClick:w}):e("Run")},[f,v,ef,eh,w,p,y]),ek=V?G?ep?(0,o.jsx)(ay.A.Item,{name:["params",ep.name],style:{margin:0},children:(0,o.jsx)(le,{className:"main-side-console-input-textarea",disabled:!c,rows:3,placeholder:"prompt"===ep.name?N:ep.placeholder,autoFocus:!0,onKeyDown:em})}):ed?ey():(0,o.jsx)("div",{className:"structured-params-container",children:ey()}):(0,o.jsx)(ay.A.Item,{name:"prompt",style:{margin:0},children:(0,o.jsx)(le,{className:"main-side-console-input-textarea",disabled:!c,rows:3,placeholder:N,autoFocus:!0,onKeyDown:eg,onChange:eu,ref:D})}):(0,o.jsxs)("div",{className:"no-input-method",children:['Click "Run" to execute ',AQ(p)]}),ex=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!=(A=null==C||null==(n=C.icons)?void 0:n.settings)?A:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg==",ej=null==C||null==(i=C.icons)?void 0:i.history;return T?(0,o.jsxs)("div",{className:"prompt-input-wrapper prompt-input-wrapper-minimal",children:[(0,o.jsx)(ay.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:[ek,(0,o.jsxs)("div",{className:"minimal-toolbar-row",children:[(0,o.jsxs)("div",{className:"minimal-toolbar-left",children:[(0,o.jsx)(s$.A,{menu:eo,placement:"topLeft",trigger:["click"],disabled:!c,overlayClassName:"more-apis-dropdown",children:(0,o.jsxs)("button",{"aria-label":`Select action type (current: ${M})`,className:"minimal-action-trigger",disabled:!c,type:"button",children:[(0,o.jsx)("img",{alt:"",className:"minimal-action-icon",src:ex}),(0,o.jsx)("span",{className:"minimal-action-label",children:M}),eS?(0,o.jsx)("img",{alt:"",className:"minimal-action-chevron",src:eS}):(0,o.jsx)(AN,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,o.jsx)(A6,{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:ej?(0,o.jsx)("img",{alt:"",className:"minimal-toolbar-icon minimal-toolbar-icon-history",src:ej}):(0,o.jsx)(AM,{"aria-hidden":"true",className:"minimal-toolbar-icon minimal-toolbar-icon-history",focusable:"false"})})}),_?(0,o.jsx)("div",{className:j?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ev,onMouseLeave:eb,children:(0,o.jsx)(AG,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:q,hideDomAndScreenshotOptions:x,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)(ay.A.Item,{name:"type",style:{margin:0},children:(0,o.jsx)(AT.A.Group,{buttonStyle:"solid",disabled:!c,children:aH.map(e=>{var t;return(0,o.jsx)(h.A,{title:(null==(t=aX[e])?void 0:t.title)||"",children:(0,o.jsx)(AT.A.Button,{value:e,children:AQ(e)})},e)})})}),(0,o.jsx)(s$.A,{menu:ea,placement:"bottomLeft",trigger:["click"],disabled:!c,overlayClassName:"more-apis-dropdown",children:(0,o.jsxs)(g.Ay,{className:`more-apis-button ${!aH.includes(p)?"selected-from-dropdown":""}`,children:[p&&!aH.includes(p)?AQ(p):"more",(0,o.jsx)(AR.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,o.jsxs)("div",{className:"action-icons",children:[(0,o.jsx)(A6,{onSelect:ec,history:Z,currentType:p}),_&&(0,o.jsx)("div",{className:j?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ev,onMouseLeave:eb,children:(0,o.jsx)(AG,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:q,hideDomAndScreenshotOptions:x,deviceType:S})})]})]}),(0,o.jsxs)("div",{className:`main-side-console-input ${!c?"disabled":""} ${v?"loading":""}`,children:[ek,(0,o.jsxs)("div",{className:"form-controller-wrapper",children:[null==C?void 0:C.inputActions,ew()]})]})]})};function lr(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function ln(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){lr(o,n,i,a,s,"next",e)}function s(e){lr(o,n,i,a,s,"throw",e)}a(void 0)})}}let{Text:li}=u.A,lo=new Set;function la(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 ls(e){var t,r,n;let{playgroundSDK:i,storage:s,contextProvider:A,config:l={},branding:c={},className:u="",dryMode:d=!1,showContextPreview:p=!0}=e,[h]=ay.A.useForm(),{config:f}=X(),[m,y]=(0,a.useState)(!1),v=(0,a.useRef)(null);(0,a.useEffect)(()=>{ln(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===l.persistMessages)return null;if(s)return s;if(!m)return null;let e=l.storageNamespace||(i&&i.id&&"string"==typeof i.id?`agent-${i.id}`:"playground-default"),t=sx();return console.log(`Using ${t} storage for namespace: ${e}`),sk(t,e)},[s,m,l.storageNamespace,l.persistMessages,i]),{loading:w,setLoading:E,infoList:k,setInfoList:x,actionSpace:S,actionSpaceLoading:C,uiContextPreview:j,setUiContextPreview:I,showScrollToBottomButton:O,verticalMode:P,replayCounter:R,setReplayCounter:T,messagesInitialized:N,infoListRef:M,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),[A,l]=(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),[k,x]=(0,a.useState)(0),S=(0,a.useRef)(null),C=(0,a.useRef)(null),j=(0,a.useRef)({}),I=(0,a.useRef)(),[,O]=(0,a.useState)(0);(0,a.useEffect)(()=>{let e=!1,r=null!=t?t:null,o=t=>{e||l(t)};return I.current!==r&&(t||0===A.length)&&sC(function*(){let a=sI(sj({},aG(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield sC(function*(){if(!i)return[];let e=sk(sx(),"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||(I.current=r,O(e=>e+1))})(),()=>{e=!0}},[i,t]),(0,a.useEffect)(()=>{(null==t?void 0:t.saveMessages)&&A.length>1&&t.saveMessages(A).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)})},[A,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)(()=>{sC(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)}},[]),T=(0,a.useCallback)(()=>{S.current&&(S.current.scrollTo({top:S.current.scrollHeight,behavior:"smooth"}),m(!1),v(!0))},[]);(0,a.useEffect)(()=>{A.length>0&&y&&P()},[A,P,y]),(0,a.useEffect)(()=>{let e=S.current;if(e)return e.addEventListener("scroll",R),R(),()=>{e.removeEventListener("scroll",R)}},[R]);let N=(0,a.useCallback)(()=>sC(function*(){if(l([sI(sj({},aG(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]),M=(0,a.useCallback)(()=>sC(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:A,setInfoList:l,messagesInitialized:I.current===(null!=t?t:null),actionSpace:c,actionSpaceLoading:d,uiContextPreview:h,setUiContextPreview:f,showScrollToBottomButton:g,verticalMode:w,replayCounter:k,setReplayCounter:x,infoListRef:S,currentRunningIdRef:C,interruptedFlagRef:j,clearInfoList:N,refreshContext:M,handleScrollToBottom:T,scrollToBottom:P}}(i,b,A,c.targetName,!1!==l.persistMessages&&!l.storageNamespace),{handleRun:F,handleStop:K,canStop:U}=function(e){let{playgroundSDK:t,storage:r,actionSpace:n,loading:i,setLoading:o,setInfoList:s,replayCounter:A,setReplayCounter:l,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 a8(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)}`,k={id:`user-${Date.now()}`,type:"user",content:E,timestamp:new Date};s(e=>[...e,k]),o(!0);let x=a6({},aV),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=o4(e),(o=ae(e))?`${n} - ${o}`:n),actionKind:o4(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:se(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)]})}),sr(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=a6(a9(a6({requestId:i.toString(),deepLocate:h},sr(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(x.result=yield t.executeAction(a,e,o),"object"==typeof x.result&&null!==x.result){let e=x.result;e.dump&&(x.dump=e.dump),e.reportHTML&&(x.reportHTML=e.reportHTML),e.error&&(x.error=se(e.error)),"result"in e&&(x.result=e.result)}}catch(e){x.error=se(e),console.error("Playground execution error:",e),"object"==typeof e&&null!==e&&(e.dump&&(x.dump=e.dump),e.reportHTML&&(x.reportHTML=e.reportHTML))}if(d.current[i])return;o(!1),u.current=null;let C=null,j=A;if(null==x?void 0:x.dump){let e=st(x.dump,p);e&&(l(e=>e+1),C=e,j=A+1)}s(e=>e.map(e=>e.id===`system-${i}`?a9(a6({},e),{content:"",loading:!1,loadingProgressText:""}):e));let I={id:`result-${i}`,type:"result",content:"Execution result",timestamp:new Date,result:x,loading:!1,replayScriptsInfo:C,replayCounter:j,loadingProgressText:"",verticalMode:c,actionType:a};if(s(e=>[...e,I]),null==r?void 0:r.saveResult)try{yield r.saveResult(I.id,I)}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,A,l,c,u,d,h,f,g,m,p,y,v,b,w]),k=(0,a.useCallback)(()=>a8(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}`?a9(a6({},t),{content:"",loading:!1,loadingProgressText:""}):t)),n&&(n.dump||n.reportHTML)){let t=null,r=A;(t=st(n.dump,p))&&(l(e=>e+1),r=A+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,A,p]);return{handleRun:E,handleStop:k,canStop:i&&!!u.current&&!!t&&!!t.cancelExecution}}({playgroundSDK:i,storage:b,actionSpace:S,loading:w,setLoading:E,setInfoList:x,replayCounter:R,setReplayCounter:T,verticalMode:P,currentRunningIdRef:D,interruptedFlagRef:B,deviceType:l.deviceType});(0,a.useEffect)(()=>{(null==i?void 0:i.overrideConfig)&&f&&i.overrideConfig(f).catch(e=>{console.error("Failed to override SDK config:",e),G(e,{title:"Failed to apply AI configuration"})})},[i,f]);let Q=(0,a.useCallback)(()=>ln(function*(){try{let e=h.getFieldsValue();yield F(e)}catch(e){G(e,{title:"Execution failed"})}})(),[h,F]);(0,a.useEffect)(()=>{let e=l.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:lo,lastRequestId:v.current,sdkReady:m,messagesInitialized:N})){if(v.current=e.id,lo.add(e.id),lo.size>100){let e=lo.values().next().value;e&&lo.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=>{G(e,{title:"Execution failed"})})}},[l.externalRunRequest,F,N,m]);let Z=Object.keys(f||{}).length>=1,J=l.serverMode||!d&&!C&&Z,H=ay.A.useWatch("type",h)||aH["0"],V=(0,a.useMemo)(()=>i&&"function"==typeof i.getServiceMode?i.getServiceMode():"Server",[i]),q=p&&!1!==l.showContextPreview,W=l.layout||"vertical",Y=!1!==l.showVersionInfo,_=l.deviceType,$=null!=(t=l.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=k.length>1;for(let i of k)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,k]),es=(0,a.useMemo)(()=>{for(let e=k.length-1;e>=0;e--)if("progress"===k[e].type)return k[e].id;return null},[k]),eA=void 0!==l.emptyState&&1===ea.length&&(null==(n=ea[0])?void 0:n.id)==="welcome",el=(0,a.useMemo)(()=>eA&&((e,t)=>{if(!(null==e?void 0:e.length)||!t||Aj(e,t))return!1;let r=e.find(e=>e.interfaceAlias===t||e.name===t);return!!(null==r?void 0:r.paramSchema)&&!!Ax(r.paramSchema)&&Object.keys(r.paramSchema.shape||{}).length>1})(S,H),[S,eA,H]);(0,a.useEffect)(()=>{if(!el)return;let e=()=>{let e=M.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:A=24}=e;return Math.max(0,Math.round(Math.min(t+a-(i-A),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)}},[M,H,el]);let ec=["playground-empty-state-wrapper",el?"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)(ay.A,{form:h,onFinish:Q,className:"command-form",initialValues:{type:aH["0"]},children:[q&&(0,o.jsx)("div",{className:"context-preview-section",children:(0,o.jsx)(sQ,{uiContextPreview:j,setUiContextPreview:I,showContextPreview:q})}),(0,o.jsxs)("div",{className:"middle-dialog-area",children:[!1!==l.showClearButton&&k.length>1&&(0,o.jsx)("div",{className:"clear-button-container",children:(0,o.jsx)(g.Ay,{size:"small",icon:(0,o.jsx)(aL.A,{}),onClick:z,type:"text",className:"clear-button"})}),(0,o.jsx)("div",{ref:M,className:"info-list-container",children:eA?(0,o.jsx)("div",{className:ec,children:l.emptyState}):(0,o.jsx)(aZ.A,{itemLayout:"vertical",dataSource:ea,renderItem:e=>{var t,r,n;let i,s,A,u,d,p,h,f=ee&&eo.has(e.id),g=f&&er.has(e.id);return(0,o.jsxs)(aZ.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)(aF.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(),A=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)(Ay)}(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)(aK.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,A?(0,o.jsx)("div",{className:"progress-description-wrap",children:(0,o.jsx)(sz,{text:A,className:"progress-description",disabled:!d})}):null,(null==(n=e.result)?void 0:n.error)&&(0,o.jsx)(la,{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)(li,{type:"secondary",className:"separator-text",children:e.content})})]}):(0,o.jsxs)("div",{className:"system-message-container",children:[!1!==l.showSystemMessageHeader&&(0,o.jsxs)("div",{className:"system-message-header",children:[(0,o.jsx)(aU.A,{component:c.icon||Am,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)(Ag,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:V,replayScriptsInfo:e.replayScriptsInfo||null,replayCounter:e.replayCounter||0,loadingProgressText:e.loadingProgressText||"",verticalMode:e.verticalMode||!1,fitMode:"width",actionType:e.actionType,onDownloadReport:l.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!==l.enableScrollToBottom&&(0,o.jsx)(g.Ay,{className:"scroll-to-bottom-button",type:"primary",shape:"circle",icon:(0,o.jsx)(aQ.A,{}),onClick:L,size:"large"})]}),(0,o.jsxs)("div",{className:"bottom-input-section",children:[l.showEnvConfigReminder?(0,o.jsx)(sJ,{}):null,(0,o.jsx)(lt,{runButtonEnabled:J,form:h,serviceMode:V,selectedType:H,dryMode:d,stoppable:U,loading:w,onRun:Q,onStop:K,actionSpace:S,chrome:l.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 lA=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))},ll=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,iVBORw0KGgoAAAANSUhEUgAAAM8AAABzCAYAAAA/iVZRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAGpzSURBVHgB7b1dzG3XlSU059rnc2wqdK5fEAXV8megH/optlAjNTSVGwRPCCV5QOoqqTq5UBIVGkjCn1RIyNdFo+pONYorgLoQTccWP9VSQ9l5oUU3at8SgjzwYAcEEeLH10gQoW7hG6Fu/3zfXpO95hhjrnU+O4nt2I6r1Ce5Puc7Z5999l57jTnGHGuutd0+xo94/hu37CG7tL0/YdEfM9tvWcStHrv5db9068dGYdZ3PNffeq1/HsfzDyzsQT8+a/np8X73V3O7Hg9i8/vb8fmx3QO7eOi+33nmgf3tRz2e/3zcsjfs1ht2fXk06OXRana05aX1Fnv45WhHtOxozqN1/bhuNpo+W9jw+njV9Dr/a31z8+b384ps9mo0u+/Hv09eP/zynRf8Y30N3D5Gj3jxW7f2/sbn/do/bf368wcoLl0AOADiBzJiAKXvjvciP/PA87gYCaTx6ARS6Hk85TYxtj/+j3MfOBs77sflHP/Xe2GvhbcDXHkBX47eXnVvL58e/uTLfufu70tg/eU//vrl1RtXTxw9/DL29tgBhst9jyeOBrt1nP+tzvbJprXxz8fro0ENTTra2I/3RhNjl9GdMBn/9bwSPlo+d9XM80ps473ANge4vB2vW27/8vH65X6yb59O7eUvP/vIffsYPX7q4IkXn7+124PPH234RYv9tic4EjBHoNoTL7Zf+2SRnp/ndehHfEuwjKu2h67mGWgSUD13M04WVxhgyhdhvgDG+C7eOXrC+DjGM69+Xt3w1469f9ft9PLxq7/bTp94+ZEv371vv4cef+UXX3viCPZPRD99Onq/3fsBmPBP9TzXEZdGkzviE16PFvWupjv+Plo+207vATxLUwbAk397th6A1igGLNikxx8tEmY+mnw7fhjgOV4fB7RZNnvb/F73/lx7aLv35d/66QPppwae17/z25cPXfcvHkzy1aOJPzXYxMkwCY7jdey7rcxDQASuaudnAzSBmFag6Xivk43y6oF1EkMrgBQyzQs8+oolcPL5+Pq4whNAyV8Jro2vtx9EtJePz14+/v7d3T5x3+xv3X/0az9dlvrOr3z/8vqNIaG2Tx/NeYDFn+iDWbrfOgBzHHtTc45zHC3nBE5kEx7/AeNUcwI0es+imrIz6HRAJQiHsXsXUPK5eT73BIthuwEWAaYNiBkYKZno2OGGbQaQjtfH6dizdtqe+/K/98g9+yk9PnLwXH3nL90+fvSpAxi3R+cfTEMpJjAcqQ2enSwjtkF+gvzGx2UezFOskwxDYPQFUABNhlIz4CcWfaYrTiY6ruPRWaTlxnuNmF2BY6ktjo7n2fmgN46/T9nR3E/js+NwMqQe4Nle6nF69bjq949D/EHvDx3Pcbx/uv/Gm7cePH73C+8LYC999aXLfHF9uuz9+OenW623x66TRYbk8kuL7VaCoo/YNJ5bHiOa6vi3b6P1PNb3Bsug+Zwcb32JTxS/xtC0ME82zGQbY2wa4FHrE0BH8ySkKOHASttQzgMkYQLTkHCeeRGkXDslmBJAA0it+cutxTO//M1PPmcf8eMjA8/r33n+8sL9qaMXf1EyDOC4JtNIrvFZzFKMs4CIr6EvCKrKgaZUA7DAVrFe/XyIfSDdDCnRUA3Z0Vx7yq85wDYAQUAxTAKHx1U/OuvxE0dINUTzo9MeR7Uhso/XMbTHANXGvwfw8m/X58e/+3a8dwDBMy4cGfQep+MUtkwQDomF7/btcrLGdmy/DWDk62O747sbFO343g7gHMcT+M4RHMQw+Z2FbQQgSjTFn52xRu+PHj7YpXIggma0zE6YCFgkblMrJ7A8m5t5D/jJ5j/4DuN9giclWyMTDcAk+1DSTUDdP11sd/+Zrz/ykYHoQwdPvPT8rev+0FcONvmKxfWjU47tyGumVJNsi+zw+14AC+U1/RxAyT7RF4bpUSHSesyQ2ZHbEDxuk30csZFp1JAR/CiATUi2fF5znxEGwToInccvbA72ERsNsGz5PrY7MfqPq37KK38A5WiWRvAAJAmeBMgEF8CQgDvO5yJ/I4HRm3FbgFUAGseQjOICiAlsPV8vQDH8ncTM95KZogJHNtueDdGCzJPsPD5LMEi25QVHrOlG00BSTYzEHpefOqWdT0Mhm3azDF6GXCeZyAeJJ1iScQ4ZByBto9m3noBKEA3X9CLu3PlTf+c9+5AfHyp4rl76q7cjrr91sMul917MAsm1u1hlMQmKebws6LcZBW8D0Zk5EItdHYt5QJAIRA7mSUYaF6ovsg5GgRU5WXZ+yyscyz/mPpaggUQbHRSd97jSeA8hMtD5s9MPWbfvg6UGk5wopU4AzvhOPyWD7JNpLN8TqPQ6EozYd0+W8wGmAstgHf19nMOevRpssyfzOAA5WLNLorkVC6mp7Zx5xCjpw5g+TyN62tIgLtgCnk4Cm1IGAs0CS9JGTpRkPs0DW5hnBY9tzH3SRACQ2tEMfrI0F7aL3O2z7eLi6Tt3PzxjodmH8Hj9pRcv33rpr74Ysb94NNNjbhWErF67p0Zyxv9sNDQmtsugiBZOByYDVSvRlddwdPsMRS2/wPfxjzvJf60hS81/TFJFQu71nL+DHx2P7BOp48pBmP62l6gxUpZEHjdJrWRRgZcyM/e2A7AAbwdSk2F7saPwjsTDI3tyknJ+zQO0QUDDvah0L3t9fhtxKpP+cKucJYpVwb2xOI7jt8YudM5sDPzpBZbEQ+YyLuDEcn2DBxbzu5nPhEDEf/3GezhWqxxKSrxzo/p7x2lmEBiGbIDaRrtdX+d2X+r71SvPPf3/PWUf0uMDZ563vvviV45Df+o4u0ezw4zT3uWkHfQ6LktnztPplkFoj161uGirPMteNvYxxnlSWVGuxRm7lIRjL0o26YtZ0ElAle9Y/qfTDWLYzKtSgxLBfmBL/uPgrpRWq/uW0q0kUsq2TjbICH/KSE/pFpRmhjzoBInXT5nDgEkg5fqQb9xP79p+owTj/lKu8b3cD3KeTtbJnGjkPUHj4ID/nnlVky0NK9pgUUda0YgFXeZA5Tg2zQA5bgDWGTMR26b4kc3b9FnYmfufvXGO9ei104HzbNpetrVP9kknDubB8fp0jM6dnIw0Xmd8ve8P9c/e+dVH79sH+PjAmOf17x1s8z/e+2tHT3zmaNJHp4wasdxnhJYJnP+NFb5vA7JLPVWQT77Ck2hK9KL3xDYHz5O5HH9Tqy0M5fU5pTk/c7rSbvUT9aXJi3xZjykFdWoB0DLkWzoS2iSAurBimnCxiq3gZvhVPBH4e/XgDP/ZOGQQxBb1UMYF8pxXFNeYslVn9mIdy6dkkbMxnPWZV08sFkYzwevKGhk7Cjiu74edASwqpHEbfom/xz5QrCOfCK4gmapipmfarNSZ213a9fZ/PPfrHywLfSDMc/W9/+b2QSC/c7DCo2jJmcOkcuZgpi+VArCkd3YU5T5n+U12usFatuQ5fs40vBLcj3pmX0yEuW2U3qCZkLlPdfJIt42AnwBAB8UIene6cj4ZJ3+ikZVgFKRdRHcL6m1D1O9w1vgvhnvWK0/J/Ie5y/h3cTRPMzGQHYy0DzfvYKEd+2GuA6ZBjnOabluZA8NkGIyTDEObmseH/MbnAGizKY04jhNzcFQ8DFW45D7ZRGfACmQ6MATESNl2LiMhPzPYBVbGgSWZ5whQLKZmGgc5vpPqm0qd+Q/dtzGIelAN2GkwDpgI35OhMAZaD5F354NgoZ+Yea6+998+deDhyG/i0coHDG5kEsfQOYjT+Axv4srYwgLIYWLmLGASz3zFFwIoZmHrMdqRpSz0t808ypXu8LtpKePNqGhZpKbEBppkhlKnw0qSWsKjMgGPYplCnbvYxWeeBKMi0cp8emWbEfqDNTDZ13oxCWKKBWINcx0kMczKaxzZKsQXO+CQ8qArDzJ9ziMr97AOxed3dEgTODh5spvNtgPV13gPr36RpWwEiboJROVuPOY+h+wiQS4TtYc8oWyqvfM9FJMcgYf5UGYGntv0jNdx+7juL37r6689YT/h432DJ1556dab//N/9/xxUHcTHPMTM2gatLMvuuwAQvgNobZ08No2jYTZ+HiLIBpgmt/xAkXuoAEPvgDQCcoBGIEM20yzQlaGS9c1L7lHLPAyU/qV9iyGQlDI04ZPBXqS372E5bLIs52YyPN/U3tE6ZnODtbLEh7JCAvJ1BMTVGfSSglJwoqVEqFxqXkCfcnvKO2yImCcOtli2s4mTM4rjQqDMGG1L9vr7AOu9irTsI+AMVG4hh4wuXZ4PcyInvvbDRJt78yhxICy0yONixx3p6CJAZzxfj73Knl87Mj1XvqP/swPvmo/weN9gef1733n8q0333zxaNrPkaQRk02dSBddmp8PxSWxROUtjGhiDZpWAzDZ/xsZZgLjjLUGP1euY0vuY8t7fv4aCBp5UTtnJquvxTxEY/+aO4hZq4NTq7xMzUDYEUTo4bzKZWwwPrOtYkkIio2wbzhu44HI68VIdNNMrNKZaadX4hwAxRn0cuVi+Tlf5ValbWuuY6YOD6ADNLqkNsduDAOmEOUAECQdHTVfQBh5qI4WEJPFBGaaklG1czvyNByOxqFoUO7lNIJhBuMMgI3n62ODwTjXWSoJ8BxuXALsQNo3nvuN958HvWfwvP7Kdy6PTv3icRpPeHWSfNB+JSIkt4zD8PlK27qv/X+QUZsWdtjUeerGSkS9rOdz6WaLUUD2adOilkJLoFisYMqfajy8HPNsYiBbtzFbORRa1EGxQURNgjLW0M3t+d9+1pZuC+OwSKzaSqqQvbhLS9UvLK1HBYQOJDcRzO1K7Yp5JhAWsIaOslN7iRlsuuA4TNJYsQg2G8ZBMgNDXwbNzuC5yDSdmRfZufk0LdwX4lXDT1Y0x5h55V3O4AE2Simqz9MxRFOs8o6VYHa9D4Adacfe737rN37wvgD0nsAzgNOuthePtrhkO6gfqV10QQw1IXz4DNKl2rykUqh3ogbDnP6krx2YI2JR+k5jO87t6WkCMD7zmPH3mZRrLoDoPfT6lmzEjMao+Uws5ZJrAPZkS0beYC4UMZOkGc+d4qrazELWusu26yUic4xG+U/1OLZrYBA+v5+5EX5TdBDMX9Y8ZjmaWTUhMJm5DIEuUERZy66qgMAR6oJSXgFidfFNxoATIDEl3NyHBlNJriSTPCPEjy6ToQOtY4MdORpkHEBysEj3fL8vzhpYqeSdpJrGgVjMwmcA6nqPu9/6d947gN41eEaO41cXL9oAji9XxGbHscrdGQmX77OfrxlPVJ6gDRIHW5BwwBTo/OI10tUNUCkfsgUwvgIpBwdQqZuDqqAML8A02dZ17LX/CvaugzRfVePZJ6bYyWe8IcOAlfj4eQ6+k22sor/isb7OZFxmFOb7ZRKfnQSERGCN7VlCwzHKSqFm2Z9HjVMZ84Y4z0fMKgZKitUgagepMbmTV+ETDEMtmjRmBUaCEecak1FKAmK8COCyihUYa+pk0k45KUnJkqIothoSDvYgcilWi6v2eHx23fFcJsOecSyur+Pun//6D75i7+HxrsHz1t6/dZzyJaXG0nccp148w56m/rXkN9UdvMXSEc86q+gaH6lHynGTFCvg6DWMg6o08GIvI7Ph/Sa6Q0VhjfvwRVtBOfWYL7kSLbflMBHPxSwgBvYsvFEf4WRmr2QOgV5UdCAA8f2YqAqGekk8tHxk/tORRHu3WUkgbyJ/h8ULo5PvzHvEEmdM5MWoufM5zWBhj0DyXgwVOqzKX21pkJjbeJmAynloMJChwGZI/MOlJzkQO01JPmdlgZGF+DcZJ38o93NssHMUZN/hyO38d4wF+eG++ZBwKNaPb/yHv/HabXuXj3cFnqv//aWnjl/9PNuikmE4aiEppjQ1AaFnBFlj/zRRkDqlNsQPFf6cJkCLKdHIQGZ02AjAbaP7htLbc1YyKxCVqdDOADKrdsh24wcbcxn8NAG6tohPUnK5dMbvLURaMdcqecDrrLdR2GCsrw3x6MIQzbugq43hKlQ57FR/zH9uzsQggKJynOUnYsl/epzLupWJcCjm2peVfzifTYe3gMzIGthPyL9wbeNONpy2dyxSMn97NwIr6MDpWEMWdrlnCRRY0wKQQC4JRyubOc+eYILBkIzFPOjYzfPf+sZrl/YuHj8WPK+/8tLlcVZPzQQ5BT65IbwkTBA7jFw2M3PzM1mFi92cwdndCyx2xh75C5i4oe2Y9wgorRG7cswaTQHta7NiJPP5naz1EBPhsyHblAehsLN5gWlhoJi6dMmb+LQk8cUeJplVXYQt4aGySTCPLGvmNBYr/hZggftDHY+fo/lbAWJ+dVq5tKnPQCO5xXI4OzMH5ncpdcUStjBFH1MHMjdihTVyFAJn91n3NqUgGMOEdx0nK6/NGCP0+zoeHkvJtwLOIunScfMa+5EjN/KbPbctuQYW2rPIP99H/mO3rq78W/ZBgKf1YwCU4zbzaqpXzMhJNol6bxnwXHlF9nNUFsTh4oUxtA1ylxuGgJMhBDAwCmWakq4CV5wBa7ILP8d+lPsE5R48BZ4Q2EnnGF7sSafO57kVu1pgdNvWEy8mFhJmiDVbaMImzqw6W5XcqCeVBWbs5F0DmiaCEgOdWdKwtX1im9vryiJZzxMhHtPMg7yC9JrHhVxnAKEUpqSYgBZWOQ2YqexpzTCljMNh0N6WRY2Dw29nhSOkaTdNZgnUynZPy7rDsCALlVGwB42FPY0CmAUAUVaWD5m3g42CTtxn/oM/89qPHQP6keC5euWQa0eeowscFNHN50AlI2RUP2linBJjFsoXOF4znr0tLlvJqaboPt0yW0DRVgk2xmi2mFXVZKW2LTY2D0NsJKA1AXNzR20nWWdKuphAXt/zOVQ1/45Fk+qrKPXB2VuR8/ioScwHSVvSfhVVzvaen1LSYBO3FWTZE8hC2bkKt5UrOKqs3ZjX1HF3q/q0mAULSNwjFqYJ+Ge7z9wEecsEXZ8uiC1RlHiPYiOBAoffCTavwVHlQHOwVCZEgiLAUlXT5lPOyYVjfgc3bTJRSbtkm7jm+A/YZ7BQ+E4H7mq3p/7cr/9o+Xb6YR8MuZbVA+OP5kxQHbwuwGR9c4ma5dt83TB5A0VhDc85fbkvWqeZM/Y4sYxmbKaukPNvO2NYSjWODmSPbGhhmJsQT5BzmDM0QILqask7iWX8XEDC1YDAEu8zrVJCQO8hH5QLzhEoYhzV2d1rDItw0vdTaKGL8dzEZ47fIW9Pfq+gNRnH0KFdYVpJf051EstkDRuZYtTAHZtj3QGwU9fCHqbB0AYLmbmFiowmM+CSnjGJz46dr0FK87tlUdOc8JIgsbKSoofkG/ZG1guE3WD7MW/zpYflMUNcYxKWIoi6UOuhsipkyehOrggDmPsS6NFljy50K072jeOtL9gPefxQ5tnMnyo4qKajpBcHsTLSeng5Wuwwc+pMYs69BkDneSfLtBoQ1eszJpl/h2033m+sEhx/b/la7AVrOhlmmwzVFuYBG4m1KtfB7iYDChRRbp4XY9qMGTH9BD/TamvnEJucocKKXapZ5N+ilzjZCrDKt9XL4BWbxjW41xojgGTjdGlKRPYdM5ppnb1F+cJKfwRslBwzOwOOcF2JPKUbrJAp3fRdbTvYJx0yAA5OnOrgyFSdxDwE4x7FcthnTLJlAWtKOOQzWVWQZThgkCnfaBREbkO7emfN8mCeTgNhv05XDgx0bZ//d3/9h7tv78g8r7/yvUuLt764XmRGbAh9ls/oqhO7FTXRW6J0DC51w6m3tE2NWzhWewDxAwA9ZztqnA1s0hm9GxnG8zKBYToKF3P3GYvnpVUg7wuTZb7TFcoRA8FmDM0ZotIM4296BoMcsePoTYv1J9yXIuu8wmdsBFdxHELLAXLniXsVeTLAV1RlE/oyMFo2LVDDshvkOBxBR3n+TMq5n8AvqMONg0cnRjLenc6dGAwAc+LStbAXOzWmX5uknywP5lPrwh9kjs6rfD4tW9tQes1uU86bUesYS3twRCb9a2v/E9XlmiJjbw1tAccClxSDbJYU3FiU0mjMNObC4xjHpc4if2mZsKeOTe/ZOzzekXku2tVT5mKMup7FOuszCYgKV2Tq4qC1TIcdrc3SGXq7eaAVzdexGkmgqjnX4KfPHGZ9liM3mCrZJsg6PplnZSgny2hWFbZx5V9iO5yTqeLBNag6x5CmVce8B+frU2ZMJqPiCpGVVY4w26nSGbCBch183Ku3OwHBjoE2L7NgulyxDCzWKP102nxx3BjXCijcbmdcyFkRrkJQ00BpsVGRHr43P7eFMUyOXY37+GQwdOi+ggzsWfnQfj5gOs83WDjKZ47/lFWdec1w1DrY6Zrvj7zneoehcDBP5kI7/o2g95lv/FvvzD5vY57BOhHXXxSqXfm/nJagPZ0xC2oBb1GBC0kNvWSUtVYnzT5ClV6qOcdv6pKZjNES+owwldNs2G5IMoTzvES2OdKmzcCQ+Ay8jByIjEimAmOZ6jrGpA8uM4ParCQqdqumYzHT7DCYGlB0nao5ZzrAsYfMU3pYiqxsLpyYGwkasbeHlqydDGQYMJ9Svot5p1zTcfVqQlc9m1PWWbFKTPcLbOCSVn62Io7PdA+dnwE+MEDR5XwFT9mqck+OWfaeCRzlODJYIMzWXKd42B35GhcXWdqPTS97MIzWbcAfNCaBIdGQfUHebDA5WwZD8itt7ttkoI7Xm6mKYxRAv5193sY8m13dxinUQTvcYq7JUOX8dNwWaeYrc9Qhz0MNafKK4rKZdSqqCpBz1uJtjDHzF85w4t9rjuM13jOdNuesKXyXeZDe24rBAjnSHB8qS7tlQHD8bcqRKn11ndb6HhnHKOHc2I5FOiZxj36MrLrgxeJOphOEHBcipKxby1XojvEzSMQlV+F7c9VPfqcmqPZyvDJyxwQZI74YgMbCPkEWM3+Zwnm3kLcCFezlpOU2e0xmqeoFS1sZwNT+jLkVjjkdt7HNNZ5ToqGSGsy6Zw7kcd3neNB+aMqDXWr8Z/13PZy3ntuzfAdu3NWx0+tkq/jS3buv3bqJlbfnPO5fsSWnYRVBKuCUYMwVdIGBkxZYvEIRGzAH+hshDTZAhN9TlyYryHnK/KAPBmH4FOXo0nvtNwdOx7MYQfN1ejUxSwAUFlvUNAA5aMYhxhFq2waWIRGW5mnKg1y+kwCQLZULAjTyMpJSNynOhugvwIxFg8DYrjRIkdqowAK5DG1qdSrBTH5D2CRm2VfGFW/oXvDwa3koLfewZ5fdzlmmAOe0kBvXLjCxBiSUGNDp4rkXm6AeTZMrZBYoOaVLjt8IW5aqilWaMZdSh7Pz/EdMxV2KHVz9LPn9OK7QYMewo8eqOsGuk76QoVgUNA9iQ+KArsBuCtkYWC57dJUt/FOnrX/p+POZHwqeIdnc9ydwuYIYAl4aLWafGoqEAwuaKUqCiGSIbhJMnoXHTOi2qA6eHZhzfxSlAeIoWUXbJt/TAmNpWyMm53Tu8d3NccqsR688XFrFOYixmRYdIVjLS/WqdwH4jk6f03pzgwTLeK1Ef5xFy5/C0GKjOZYGQ5UeTTubLqXrmh5typ8tXQ+3wgpA7DjUx5WDltyqKmJbHKjssBAyY4Cw+2a1rFQBBWyQV6tzwDJUUqOqaSdY8NNVoOnotTQWZm0bWoFyEMMRaRi0YkVKt7K8S772gsvCRMzmNaJLfClX4DexxwRLywFSoB52dP5Wa+gu3tiYTkHQQK9jRCX3eSb5QkjO8zkA9Lmb4DmTbdspPqdAZ4shMF1ZyRMHC7UtnEWWvkg4LCqc4TdS5lC6+awvA5L0WaPVrNKbknO0nUtabaOWDd87DtZUmLadKK+2KdU2fgdlNl77WLfF9lG/1SjvKA+HhPNN5UC5OJhkYZoG0eZ5OWWg0zZnY+ACy5KXZM2F/KDp5NRlVcUMHMZGj6pARpboGjyknHKO34iJYpVN+NdK8gyw7FT1uW1n0abPXKgTDNcMm5BYsJcHm+wEyA5ZlfIpJZiDWXZIsuDIGuVZjM9pYcesSnDtQ2M/ZVsXUDg4q89kKNjO39ppU+McuAymCl8hLIJTE4L1br5INk+5xoqDYSRcZ6FojNdjoDSLSncMpt6+Kd1O50jyz6/yyJXrinUSuig3Rzjp6BgI62SHTtbosrXDyn0rPE6RLpFfg5+BDi0Gk5xjvAFLuX6b7MLgHOFlWQdlmTut8Vi/77CrHYQfOC9qOpeJmf0yJDDUZU00FVXZyQGTjFvH1WpbQ9kn+AkIaFj6EsM2eI3ZPGCgncSHNmO5m/If5IJIofmewBJrbkDrV67VnuACWc8cAzMv8dtjIcSQPY3CzbEAIt20zogYJkOhrinG+61ydMqqlILgEC/1G3BUp6cY7AP822U4kJQLONoHWUa9x9AT5FZSwiWlzzlRQSbyKW6TbsVCkOSMGkOsjKSJJm5JPR7XOKMRhu3NNA6eext4Xv/+MbZzbZ8JBEXi3XWkTic0/5PlORmTZHTog/Fqyw6EM6AUw1QauFmQbAiDGqZjZ7Q5PdmLExMQ6qFysSBvWDlgM0cjN8813QRuNH06b7oiDdt3cjcBO8gtNAGmJf5G7RQ5Opj1MAwC3PzAwCsjHdudzOmy1o10bmxcqcT8Xb3O6Nl0eOy4MctlFMmTNRoriIH/gAPmBXEyAz47dn/NtenAIK2S9bpNSO03JgsROOhjsYAk13cL5GRc9s45AIvvw+1zxSDlU/qOMweyVaDCoUM3n25aaW8N/PGgvPoHnr3QFY2ZJwAlp9g4CSnmTyL/gbrLIcZABt5I6Q1MyTTtYKx++x3Bc3HVnhjxiL8FyaXO6+xoOvDMd1pUhp1aEoyQh9nSMw7mD2Kd0THZsY0Ws0+ArQBozF1iRnw2EBgl2Owu9jDGOPbMClk+wWfKctl0meH7OExjgqAmnsBK/BFQXA1JE1zopEVohLLpalpdN6tEn0wzenIybP0bBdyO+AMgaR4EBjPda38u1mmBfMejKgyOv3evfGfKNOY2Q4KBKdoyzqLxF0ixznxIOQ0LL0ta8ZngGfvtPiVlVU5nR99tMgX4v2s7Xq4+IbMwStg5wMBsUrOhDAepSFhZwkGIu4zKmBzF1S8YhYDbHMqbl9E0mDpUd945kASYV8So0hFfx7ScO28Dz3ERP1OZnev/YlnZKYEOXBNyGU2Nul4rc5r0fcuXqmuf3Ws2F4KQ5FmiipeKHTx4GFGyDvyal7aZCk4SCIm93Yt9cjH1Dsah5IACYzVD7mawISUoWn4dP0KHHiuebk3jQNmkwSw5zZJts9keDLW4ygRrY1EGQYIxMJSzZX/FYOxkIOYljs8Gy+SKn0zGd+QYAIzbnH/jCaIyD2gVY/YQVzVVfiOw1QCpzVKejovmc5yHXiPYqQZFR8oEUCMuqZqAUhINJCmHGEer4Bw4Jee4Xa8QrUCkLshtU9HNagaihyxjKliwFUguALK7sRJEjAOPrrNr7WYqAR7t0gKK49j01le/+v3LZ5752ftn4DnQdhud2UPTfMM0IBq44L3zOLaQw2Y1aGqV79aoPPOFkHMFm9mofaZM84onK17NajBTf8fs5OaFUdMgaZJNtgJXDaBsy5xtz2rJQLWgabZYysgxtBw+j1nCl8VT+UOZCfA3ey1Rgzwmw+5k3mAMgC2dV8gDbBrUWGk2DEDk2NIo5OwAVScL7Q41H8xNMske0gygSlbie/lvfG+Mu+TYy0iSIa2y0qkWLjQm0ASN8iKYEWEqxSlTwpckfim9ofuW83gIrvxE9W3Bax7VwRduAWhlZBFENShq6/sl4mav4AWnjYZ29oJZQdJmoI56f4KIu2wec+IMnNiAVZXBHGxjeZ5ZoT1Y6PTQw585Nr9/Bp7jq592sgdLSfLeAAJ1sFM5PWwvR2n6iOhoQFFRZ7JALJGfZMx9oO+H1TIvZpRm4dMFl3bOOICOnZ+xaPJMFJipchvz+eU9eRYYE4C0qFCvXjlV+pMDr3smzvCNZIZIytlZHsXwoKBmJUmtYofh7gmGjk/Q5Jk23mPHId/yDgs5ioqprNn5CZzKd+r9cTSQcJBt7tdBR21o9eM3MBPTWYwJxihQ2WIwmBjFmCshfIc+w9iNujctaSBgbXkNlOKCdAz8uNE+0LYkDhOT2dLLbGUmapWSa7UtGGFWS0fF0gU1BRpOIDKXODbBcsFUxlMlN6LLphJLCCEsNHIVTxrzngTP1ff/19tW406lsBZp1gVZdnbj4GeXn4WPxqKGUU0prkRuwFCEc5B6tmWfvX4xh4FdXxdb57QGjiOhUbFoR2ce0vVjpsLVzOH0nWItsSvLdHRCdOh6hzmALKORZToQjmwfw9RNnaFjFLDVlZi2NK8qmlMOCCxuLdELQLnjcBrrUUezbtk9OmUcLOYGB81RsLk8Yybk2C40fTl9C1Ylt8A+sD0YiDlRQ6dX4SbZhzYM7GdlnYCMVsBaSm+8Pp8BRVdkkVudRoE6ezFYwBmLSmrYK4a/x9wjlr5OVoTOUM5Tre90sOpSY/9egVYXJyfQgQ8UXg3SLUdfwIYOC/JQ7a7Pf14/dcJ5+KWhegCTKkcE7KwQGLttG0Qf1S2yMFisZRm2OgVShZwHM23jTNyzbqQiRJhyefxVBkNFFDRkaUJTXEI7bQwbZKSYIB9/p73KhXNGh00uylu/Ic/BVUvXzaNynWYyO3Tj+WD9MfMlZhkSzjxyvFPXOpjTII1LdsE9vAo844MNUu3IVvcOqXYcCgsbyTACULpxknat8hd+nhY0cplj7IKsAqbJRTUKXBrzUWHlOETIPQ0tc0GOZLmOlNXLHfOdXbzGkxQUi32U+zDxp8uFAE7liqtXgp0T5IwqcoJFLt7i3MXcEAAS5tB/6QV0UxWHXDYEeGP/OBttIANIOeKkcnCr4abdiW+k2I+fgefA1RPNYk0i0NGFeeX60k8iESsDpGIPh3H9zCzXnWDd5phOtj4jBKVgQWUz5TpHLtOkf2CBt8lEBB/13WjK5jURJW3o8YMtHQt1/o4JckktaQRkOrPjcm3URtq9cq1ROZW3A1EbRQnufB7HNVryWlzqoHiZfxAMkGMAEm4NMsoVcrLeYJgBrpY3q+pkoj7Ato8xIHw+zgBMQyDloKWj1ssm83QXw8A0SMkWNgc20ZmCZ+3lvvnMYcpZM5gTKzAkIiTDRu+qvIcxrpfzNKuxFRolrwUidAV2qNUIKGChJyK2BO/7KjBZZQNSEZUdVBC1ZczGSVccGxfV9ZCfAxh1mzE3WLWFLn3rVw7T4LcO0wA5T/NPT3JMqgFYnVfeJXWixkkqIWFijI+lKVuNRmUk1nwZY9MEAQkzLkxhOp+CqG3VhF7ED5MWZdwauA3aMbmmMVsK+B1ldIgmmcfgYusiQvYRCKNCAPNvMb7b6XGOcN3JfIb3jfhJcu3U/oHKyCreHmEp69lsan3It7ynz2Cehruy5a0P2wZGmrLt6LANcutox573/LECkJjmeoCEQIJ0g1GQAAsNjB7bWaaKLtbB6L7z7zlPh+NCpkppgAXqVhJLSqCkWZRGUAh11r75XCuLlxwXWKgI44B7kESkJ8qsJHNZsR6mYWv8pRQKXTrXkFAZCOw20nbaM2kMo9eUf+zxypHM6OcG4nOnlZ267M2LUcIG8DTfPqXTUyVBtxpTUlJTOnKmdY1xtlwDgl/WVavtsU2fWXWpnY7pDBERq5MGDJOdDHlL49XU74c8flwdWRzGAVJsQ3HReA410a5zzKWn7FNe0mEcAEhyFLcGqce51ilp05GRpUK73OpQYO+mAsQUaeY2ySZ5m0VKsHGrkHGLxfF6H7c7TMkGada3o4NfyyDYEiyd1QgFHMtSGuQ9meOQjZqjBIWZX87btyqjwcoxNiep4Y6wnNYAfYpjVgdvbFaYxMFZzAB7dkyYRIGJ5ujA+g4joLJhQa3IAtrA5t/8PvtS1LAOklQBl5ghLshMZRppG6/ILC2l/NjVDfPL8KLHpo19EGdqurO9ikz9LdsvMz7ygj+phAbZsrnyKiwFHcKgVx9Rx3KxBZN3Uz7jBRIrRtmI8kx8qE03bpPjMhPzbDhvZNRtk7RDqKGEcsEppwvKDg94hZhtOgqbeCE6zb9lLQX0cMY8AEdjSBAGWIpy7Acs1esSgonQHDU6HqEJasgfoCan673h7mx9SxcOd4fb8lbPkGuRIKI50NJFGyC5bjlwaZNt9K9NtmmWgEApPsCR2wTrz4zMg0JQ66tkI0hkFOCqT1et8hsAYM1VXCI2jOO2hAAMAlyNKAlsZV/HGnAEOP6umQSKifdttrakhfIbBIiEsvuyVwnHmAUI1CLgg1lRbSW8JgipITVwyu5xPF3bZYInXnvl1jXuH+XMnHDUzRm9iVeBViw062dqPk9NFSBkqcf4PTQFR+hdA5ko3S8Ry5KKhi9CwpGX0R1BhF41b13t0hi9HMvW9I4xnAz7G2vVJjPBEMihmW3mPLksbwfLydOxtuRsIyxlhSGaHh0ulgpi5jiSFEB256nkWEzKNIcZcEiyvfEmVCw0HcAZLHTd53ZDwhEoyncOEDnZJu3sSNCEcexnAAnMA/v5sLEHk8QWZVEbQIXC0VpTwGgtkz2XZJ+tocHPsKjzlMfGrLbmF1mBsNf4e4Glurfek0EF8AUli2ztzHsW17mGQrQffgvQ0ddt/mhFc4ObZvNz2m3RlJNbFNYcs/ThM47vDcGy+WMJnmt7+AmV7RXEXXKKhVvq+zoKlKXwOG06bkRyyDhgVOLorYuJZi612cxflFtRiAWN0WqJQHGlg/VCZUNuJeWgYTmA23g5G2NM7xK14ISABMvfqXq5QPTIjoyBVFjQzcpvcqrg7IIbAYQbDYN1QhHcwVvGqUZQjJFVvj7YBnekHrnNVndyO1jkAFSCZIzTDBnXPPOX47x2ss41GSUB1Mg6e8q1km7XFrktchyaDB3VCLy7KwdKi3FMA5tzgFSfrSUzBAgYKUJxUmxkWYMXE1jFJuQj2tVuZ8xjVrVrohWPaR7MGH72XzGaLyiENUP1w6LMWNlq0pUkm7LxBc2iCYdQCWcxSy4IFX6Z4MHBu+QVYTv+3IJJshc0TbkX+YzA0XQEm1SsxC+0P02PhvysZuPnod/AwCckW2nQZCdWVncBdOaYJqOCiRPzGrSP7vOJtRTIONSo472e0q1R8XVY31uvKdlknbFwnnGqNowCTu3m2v55RrMU3rRaFu8dk/lLhs5crX9ruGvZ+P02bqw7wLIlC4ExCJ5jcCGl2wGqlGtLXgRDYAHRyINMrGM5I5LmwPE+2D3zHcg4XwdGc2Yqc5fiWBNAzFhJQADRbjFazUlemk7NXln5jgJxFKWwrSY1s6euy5Etsk1AmwBEosO/OYJeHh96fOeOE0T1S92rU7C3EM9EXI4XwLuOCZ7xwAQafDQu/+bxqQTP9W6XJ83m9JIcM7lXJ2nVVZ3AFMMUEII60sBHOBcBzFaq9sVrMHZofhfjRZyAhr3C5dtEsYxQBEoeU58SMRN5qyuVSjLHrOAuTPWrvXTIskx1MBiKmaPKmbaMxaH79UHPWhkHyIXoV2gOCcGEMAGGyYZPKYY5IgmSkftsiVPJs0MTwDQYQIlVrh1SbjDKAEYg17k+3rtCvpPfySnEjXNVjv2PeSmcYwPTwCL3kWaFzTUMMOaDq7kLMLg85FueHy5d6RRAyKsbU6qdscvaYxT8CjTVha1ctRmAtW8qdnSWdJo13aCYYiGe9e+ztxd2kqmwcgYUIQbOualEE86A8o0R/PEET/N2acuUYe6Og4hWe6kPhBszueBlWohC526mMRlRbGX1SUUlzSzF/vANW1JPgoZTHViBQCswMkcShwEewW1hwWKGJyvGWR1NcMFjN47hNFYjwFpn7pOAOfL4nklLlqexmjwri+UoNSsId1ReVElN5+TW7NjIeXAz3WQdACgBdWx4nQbBYKBTjGkE10cUuW4JnPzuKtdy9Zc0EzxXvczvGnOhbmQozu23NBNCbJJjQQg8+WwJ1socyDKavKbUVxJNxZ6QOipaEq+U+lnq4VbWqD6hSTUR0yowbhMY04mYQKvw21BitKQ27I+xUJrTvubHy/HC56KMw38mtIQddj0nt3la+1jBfPSpP/4r3788ZTEiPhMg0LVXMAWtZi9+8RmHABr3qv/0OtlQnuPVXFanNyOMlfx0W8aBJstoUBmRvVhIViiuN9dYtYW5OP1B+VGHEWKMdxAaIyFpGD/KlWkaGAajXH0CdXSh9BY6BztpUBSgoqI3qgDgEvZkmJ4WdUqtsDQDIiWbEvvm1wmClsZgsoxcNpoE1zARxEIJFMg1B+sExm2u6YMAXHDSrhsMFMwIpVxD7lMDonnWjOa0rKujV+7hxspp9E7VYKjfTDaZfUBhNyoMx7Jdr3FMWd8zVLu+y9hMxlnAp2utXp9/qMKACqwXJq0ejceI7ctmPmMqNwJPXYZ9RmnFG29kzuOXJDJJLTPzyjuAXuY5wQ8WfNMpM8k4IogdX+lYDbha1Fjvej7gGSwCSGYDs2BbmgqM8S7gZE+sC8MxH49zNmS7ag6QZLhNpyyPda/ZqhPYwzTAsgxpCtiZZZ0rQ4y97oI75riY1hSLGpRMQ8BQI5bRfsPktGQg5DmScQBJMg2eB+CuunMawgEaA9NcBSTacNhybOfoNFc7xl1GjrM7ikFrWkIC01ClQOCYYYo0XbSak4N1B5zS00pR9AUWUe6LZBwDWF0LmxnLsr3XmEiI/PmVmOoFwx4C4ISlKhkE7BmXeYyz1q0pEFuZFvg1Vml49Ys48xucDMVQzn2XHitgHcgZzONLruY0ANgvizHU02MmY7WzoGSaGhQ1RQCVoCYcB/o/KDaKM6vgk9gjm2WLUSbQX+Fyj9F7DcL5bLzzxpbUW/ZG4LrAbsa1uZwyQGSZXkEilOYAZJzypCzY3ploO9o8yDg7yvUxvhJe8g1FnZw6kLnJIsMk3RI0A0ib7ZJrI385bOYrGgXJQAUwFHweww2R+xnmRlYTlFU9y3POZomGFgFh7qM8zWQWlMNmOj9qNnplZ63NqemMW1G6yHQ9y9D2iryaVXvOWezBjLXKAmorjLxULw70VUm0knD7sk+GUUHJzJaf8wU7wcnDpvhNOJEVc4Ip4/UwZ04HV1+iA3OJUs7BjkmjJCKHTaa1CXT0NBQjJkPNQwkUFbLhTLZeHl5bfkNKM4rmXUHI1Irq+MQjC1lNtigHXidoui4DG25Kx3qVRgDfY1WBLcIimSeQB1WWldZ2z/th+mbV8Tq7mmRavoZ8yg6Vd2PmYGkl9Zm7pHtmKbsO+3ow0pBmV5Rp1yXd4MSN966SUVCeg8+zLCcHUnOlSy97OjAlAd2tKqod6RsNAqf6RE5j5bK5mKVu977azipFCpoDalNYuSE7aXZbU94rNYTQ6VFsVddf5kHJRpFQunjY5+isXFknqifOPAbdVgm/urHRJMKYDjku1jR955EJUePoG7OgHSEYrnUH86h/OnNwMJZkECfviy5iqTmzRWPpl7BxVAITcuRKxFlU3pQzOcnuzoWdCcJ+bl2azXhlknJW58wOz4l22Hf9JsiO6yT0LmEJixpqrDNt7cyuyhQgyBrPSvVzWy7oFGnxplMXHN/BajKjVi0FncGe9qBJwFuaH4C5bskQw1HzK0oy5DNG5hl5zxgMHYbBAB/k2CHl4LbZYKGxH5gC1wTkdVNelUaF82ZOyK86wD2X3M2RMa5NzQCgYlZThQCmW1fyr+5pYpxQsFfHNAy5Vq9dGQwAcLMaG6xi42lGZJ+WJssL24sfagCpVJUCKn3p6jXTenIrf61AtfOYnSM/XngXitHfm5az8ioGYFW6xanA4FY/nbtNA6pTpbqOugRqQUU45xAi5Zx8MpczzB8GuznzhilaKfk4PpNf2RT/l6MyW76zXsYF3CHxxbZlyRAGmiT1fE41SBDTnQNIuoBFYdJVtcAFwVCS4vSjGtdNg1CFRAvj1AGtVDOroI9TL0u5ZT6D3KW3lHBX+ZqMw3GdzHHScGgYIB3PAaYZSyelOYD38/XO7yPHCoAIv8lbGWIujm5k1RkqUD0QAgHcSitmCbVGfo6mmOYQQ87UEvVugSWK9tk7FDdn+LPZxapH+gKa+tunUcXaXfrKfC5w8igWNOXOcjGjyq/UF9UbraYByfUT9jxQNj3a+USxuJxWUaznoCBOerHGayQYOZIVy9jSxYEubzG1rr7exBqrbJN00thNya8FNJRrZjODA4vpN0R2Zw3n0zQYG/ZirfEepyZ05CioAWE+xDshoEK4EXgNN86lVMUiGEE7umFh8cx9TPVkBA4lXEa8KqvJOTdVSnMA+KpjIHSwSLLPkedcbynp8r3Md5jnTEnnMg5yBulelrgtuZUFq6ody9EaFy5MFoouy1l5q2MwMHxxTtOi7XVRck6ywBLqVsxz2BnZYaWOcC1K2VN9YN8IipqYFqXAaC9LxlXnLwCCI2JKkJJRCwXph4SIBuYpsFnMvk3QFiPZtK4blcT47yiwPh395tbk2EkmAhA7e3VWrtZDfTgtAYBl2tbo1FM5FkZ4mtOlm5KwT+xL3iV7hs3GsCgoEpTKaBzVAlMb8mesClF5IFHpMfVyxVWnIMwRYVgjvRLhkByFZMspCFuuyBmOaXVa2YAL/4GBfC7WgZo0Wcmj40cBgY5bAgisA9AMpw2u22SkzHka2ScB2VhZMN7jXQSSbUbFNRYQ4RrOKcvyVupRy+cyz6EM07m28i0LQJjEx3BNtSRmWd2xujryB3wGVVs+8/V9BmJ1crw7/z7LWaucatmW++GQi02DQBir/ueLIpw5Eb+jzjTOrFXOhQ7al/2++aY9NqzqW1zmlftusTbCwrU2gZJVuIz0jjiWpfeyG0vgmk5GeQ5NGzqWspRF3owjdXI8DXXsXvqWb7PRa7TBF9YJgN80qn3Ko8LUAi44USEzpmwoE6KBXxg8IEmiJF9wrlJH9bXkGkGkxLxYh9MIMKcODJJMYZBwZB1MJQjKMYz1JIgO6banpIOLxu9fu2SaEYQYGB1wz9tkNJw7C1JHsIsa32Er7Yx7VYpjHPREly3gKDWNctHCJ+OsHXjVGV5qRl3CJ9tgPRZ9j0Dp6h3GeEachC3iZaGmiShtKreYg6wm1rHK6wm4M6ctv4Mu5NPxNUm2BYgE1/HvxKyGe3fmNZPG+pJx0Eumnc2ZZtmxmppTvD1Bo3ObbASpFNWO1eGd4svQ+byCBKcY27S7ybRzJVPaqBXUBDNMVchzE9thMXVF2Oo0xVTcLpbPQ5MteA4dVdABFurMeXeeB5gmauJZzwFNLhU1nbbDKIiqkEbCPye4HXKNFQZpFDiZCCAkK6VR0FnfBqnoletsjvvRmC3HYSrFyYuzYxqTF+tM8BiHEkpz9AUWYpbZl20VLEUK4fOPOczqVuQERgxbgeBlBK2/UVoOM0kLcnUM87BCUmIekC0AsjgbrskSYZ9sWdvntixHqTyL7QMD4RjqyepigrxwjE7azxmCv56Rtzp8nULuoNUkqSjzYnBa0zJnYKUSfnivz31MRaxzrh+G6ybQuUDuG+8sMO91WmBD/Mz/VEGpmEX78ph3Jqh02TEpjtOsNb+e+dW46ij4NLKQxyzrB2gCdnGnRRzIcYy3wjDkI2OsIB01w0zQrBog8+zMcyjpwBzBtZUJsGSp8MqlxndznKfLKOC07MDcvp1OXJXoYI4QmMetVvW0KVdKAkflSIKWLtO0lE22tYsxguSULY6+BGHo63iQep0gZpNSKuJrEJaUgf2EL4MfU4Lxg2jVdcPPceFRBjqMnOpo6p6uwzauE+W4Zo0UMT45ddOPW8mcYlba6ZCkuv2FV2ee/btOWSCbsSGQKBsPBJuDUw00sLJitePM+WfzhWsN6bp9BseWSIK1Ju6UYpp31EWJpnMiXAL1b6DDZV4O10Wo71rM+ToJKA4jGmdg8ntZpVy5TsNI/5BtNljBJOGQqyQ4goOgE0jXWUmQUwqichsVk25zmjXs6qzUzjk7vWlZKRR75qS4zuoBWtXhtq5nnV1d82/EwOgLUdJKncxk8XhdFraMsvtYQiKTfTlMuIGZFxG1GbBM+68OEFUTkCoEl37KeV5urRRmE+deipPyWdXUUxAVO4Qto4ulRqfOKjbUlO82uSPZ+qTgTgaf3wyVEQHdyHNsaZwFHeqgamMrPbxsZ5W+ZARbVhe12SY8AF+/lO9L2RnmEpmOe7zbV9CHZCeOm78DqmesY78IdRZNwu5it5J+xvMiO0XIfYRFzffnErY5ao/ylyDjRAJqLhE1ZJdFLVA4AJMMMm5jrnxo3Gy2tZJtnGaA+T0dFQzXnEGaxaVjXzsnvcm8sFmUWje1bXa2DvUq11Tc2Wf+CNl2VnKjS6SpAJJsXMfWZyiNYgYwU599wIgBo5xXsAyv3InMUEzF/qCr3Hhw4BhXR69w7layvD4rQ5x7U15VdFCyET3aK3eGcU3QlYQ7/jz1ahhDiIG2wXvr6woZgtfCFkui3kMAWh9s0l6JXo7oS8o5ZZWIGxGm4UpFNUP+cqj+TdGy85LhS0FJsCSaUbK7V+TDNRHDJVi4umjPkUMscJfnw0XKWDHtsTDQcPeyE5KBhkzbVxZKhom6g9ou0JRNHchXBuBawJK2uU6BZooe8i1YHc3p2xgOTDvaCZINldWZ0zQzjSV1lejkgjxYq6ys6cDUk858MNh0ZJ7FejnvdgIHh7uKeRh3igaWrslLFtUfhB0zhX06qkiBXL0Nra84rZwn1O2wVdiZJa0de/OKwZXHu6QZjq10U+UssKS71dqVAFarREO2uY+c5/7xxqW+iH1pTysIZgDgdl6JUnglict+bHkyo+zNw8ycofs0SxC2cPIFZJ+Xonmsh1d/xPJbdPmCQUC/z2AmydkFnCVOArhQtjXrwXqVwxcbpd0bi7TjICgvF2Z8yigYEb/bumINijZpW+NZixiiOtrCJelyO+Q6wTWlc0Jd34vB4NxZjelQttGqzvNKVsqlG0J1bQ0r0LCLVhV1sG8SOEa5VcBgfCg/CD4Rt+9spnWOjQk68435GS/YBFjuu0csaFv7EuWUY9aurCkk7k7jweYoOY9DEkM/pnhQlEj+FCfJ8FUOlH5yfsFFjaZZqrH5a6de/cwLIFE9cLzVZgLSJ/MoIvQZZgQSunEzX5qod1xIVBkskWh2+H4DFGlCaKCWx1nkUa1rVWDdoxIu12aMqrQfGZsEjEC06/OUUa5jmyzwkMTURDetSRDGxBz7y6lUOyurMR1gzATtYCACbjfNAB1jMCjR4Q2YtIxU4rgklnOglbdHTwbJ24v4WHjHKafHylqsbIDM1Y15x3hNfr9jHCzf53Wc83eM4zuqMpjd2uaoGKUQNoSBywvX3JfcRVcboBO4SvCIIPSkX0cHEQiw61C3nIYVF2F0ZjTVh9yk9KDamIHJ86aJUVJcNnYtxeF1aOrRXizDbpd8w5q+09Z/cIJ+r29jfooYhZ0w1rMONZ3HzDWYk1SzsJVjMcvMcEvSbEv6qct+V8DQCAjmTq7lD3TWjI48PyuJpWCjaxLL8RcwTEBSYsxDnfI0x274PdasOWWaWAb9ofel81oOSurens6CTCzO0TuTfEq5rgULwTD53cbK5wSRVeVB5k5dIPKqV+vDOLgmkAbjNUTKHpz8ltID/SwnyOb61cxvmXyDfawCh0CyELeVgSAwqAKD/tvcSq9Iw4zkZLEpXHSxbUo2dgoxiky0JbQyd9JF8nLKcBJmpqLkymxIAjAGcsPpsnkNzuCYRXcEGE+B0s649pSfbTuGak5H49/nbLhlHIaVBL6cpkEfS+7U+E/Y+YnS4YvuN5q2zl2bL8wguq+PQpIBYAa3khAnktjBdcGNjlmI7brYBfucdXV5TJJ4jNTB7cB0nJFdMrDzh7iEFCqRk6QohzrlWsz73lxjea0DCLl4ByajORgo7WkDW+A9mAmYym1aQ5oLiOBUa2FCsutYbmEsxpeVzEy8O1klWCRexsH4WtN51nngXNk/632f16J3tTar6RfesNqWoDmP764VbyQCwqcq8MltUA2tonVxQBQeKvqfcdfZj7IDMSYzoSnHLGrf2nuFfZM0W0DHOygIYc5TUIlQBpzrV099ZKm6peFsBZ2toj8IMwoPTNL8rCNmMSk/nJ+PLyH5DysTxNfksaI+QONoXIF5KSI1RS63mHLQJ3PwNPK7XsdllHrBPiCwErhgEjp6GZn7jfcKQBzzIYh3dqzOc+sCQ4fr1jEGNUpm6HLluEtgAJWV1h2LBO6NTh1H/7WUHIpOKT0pyebUb8ilbKOs1kYn6GJYDy0UxHOWc4n3WZ6TyCr57oa6NnZfOV6hrsFOX+GrguCEEduceQxtaaZLdfmWSGnVT2p3CriuaLx+Jgoj2/gqFWlzEXZxbtf5osYWa1ldWqlEFo3ilwl+lOosQItRsHLkPO3+GQeqg7qSavZPSTObrRaraeDQ7ezDhmkFi8V8/j3KAMikc1Zx9WifLp4rDMXCGNyfCDCvQMnHIGKWbb3P86rcKFg2jI6VFzv3MfM1duDAxLYI5UfL3ziAYM1YjfVggDJWBy7Hb/J27W6suPa5iie7zAIqrDkfM5exCRydZjYk1hng8jy64wDkWg4ycUSjJFmtZT++W7dgZQ7bKJ+quzuXaIFUDr25dDzqI+THC8BcNrXPvCaiRrC9DGd1jnWv6o9WDFTpiyilvoZa7/poyivXcRlbwIu0iErouZjFRI60gfuJAg6W0clh8dPpdP90xKz7vVbA8TnWolAj8J+dzjwjM9aJKTsDHlBUGJU/KcITBZxpKt5VO5oRTK0s6Uro8aELfPPi8iDM65CCnZsKr3IzMopcJMof1Ap1XsNOmzqnHmCE0MkuYhmTBMxiy16AcuUOO6O8Vu3sDpt850Wl2wabO4GSc2aQn6CzO+bVkBncTYsGJvNtxcbJXiVKMAia+1QHSprbMhqQXRjjdaujCiiLieJLTsjObpNtIH7IGZQaSkpmbhCVU+YAaRkKdp5DmdTNGRKqfzE9YRQja8yhzfC6j5pJqoFtmjuNDlxYrksOFFM+OkWmfjuLz2WEOIpM5a7xPazifry+NxZ6v7L2oM1ON4Fj1QaKNhpU4tyX0r8CC09tUoFYROKz6sxkNrCh8Jl6v94gK/HIQ/mLGngCPQQI/S4uGn4nGK3Y+b1XHmS2gohyjKyzSDVemChw0BDoAPZqWStf2glc2MYZRXCb9eCKntmxW92BjQu3e3V6deSSaahcMLbZGEnN02s+gxivhfEWkdWmXm2sUgl0lTYDF/+tYzyYluhFMy6A+TKIxwXddRUdjqfAIXipfs3Ufdxm7oOTEnB8AkZBURi1lVkWQywg0xY9Bkx0UiDrGqbGd1pykqSL7bFtOMnGqRGSaQOgSToM8G2zV8fzad+uXrb9VG0SC2jmGOmUJ2cdN2yRdiSrCg+UXc7bbZSYZYdQaxUoolq89gkFK8vYxDZ1kDIUiFda2kK0Oq2VgjfZ3ujwsKCDgCmQMIfBYdAQKMZLMhrLRWkfIdctl6Iy3hbxsI7njaG6AOdYYD0/Z1dAkWpDKuZRC8LjPDvvCs5qFQXSDIHGwje2Vd0WlUlVi9kluWpyvqcT0UVTJ28zmGX/jirb4fgNvtOthBk6XixA8IVRKpZGWac2L53Vb7ktasKqM1Pta68KyAIRHYdeNEEQClzu2rPrtxZ282JI5jHaKDAf0gs4MMAl28bbW/55P8Hz+KOP3P8//8b1g6OhbpnWMVBwAWAxdVnMy7GPajA11bm0Q4Oybi3KDOFnoaBUuYdPCoqz6xtVeYCQlccXzsLMM0CVJcK6t6Ukh1Zz5UvwJHQ6lFuJ9D09NCs3USwkubb3PsEWQAcWbEe+g22Y48wcqBgsLWfM4+AdiGhs+LxoOGQ6aFhvfsqMxsYaNLahx/NA6/7GebezWCgCcczLFeguQZPN2gGYktl9du0pzWZSj06h3Ve5oal/O9M6OkBijUkZtv6X+3HJVFsfuPZdm04HymMeY1ozM9CjN66LIrrb9NxKinHjzA877ohjkolj6hLsCDyDefK2Tgmu+G6Ch0f58rGr21ZSCwc3K6TZiRmZzWxaw17RRJbyYj1DUpW0MOUfvrT2wix1rVd24vXeeSw2f3iWpjsZQ1rNK+fpRGLuY/mZvSvHMVrQ6FACgHIaElWOUY1z6YGpCPn7XZ1NeY/K/Z2stJTvsBKb99NGuzm9HOT6ppsueAufIdkYXZhTsEnyfrN7WDHTjKXkPp5o83I+ck95gzAGX4JfOGJPBKDmqEV2pz4VxcxQqEhsYRyearmZqwEdBB4HXNwqLa3YmEfQl2EcYzVBqKc1JoeuPGj2EtfMGCd62zQQvGRXLMyC31Se44uBUIyT+3VKN9wd7lB39ws8x4G9fBzQ7ZiRw6R3K7IrfSEi6pCZl/CosFyL0bv3uW0oUpstwMHBrVJLZoG0uH63LGMpOl0Z9ovep9Egppm/PcGlYynmIFC4b4GJRgIcQxgHct4iz1GWtWWxZsjmru9kjjRMh+S7xpyrkmVTl0sCbA2JVi3ICNfKt+OtHavu6FqTQlyKB2TD5HZ8qir1Ua+z5T27xnSFPEDX8ArLMSTn3GOOjRntXSbCPRYWUlxnBFqDm0loFeap1ATaBXIxg2Re/UJKRFUEmM3MRkJRbFPV1OJG/nq2iZPqXMWqdVw2QbT84y811q4lwziBQsBtTqMt70t2OG0eLxd4riK+i/UQQrEmGB5dA0RVuKkOaTopP5dwBQ3JIZ1lcODVlykBNuWZfnLa3fnfvlcjFhvVMZB6AB5cWib081hiJvvllPECCtBdDGUs248CGHsAFU/nwCX93LFjTtKr/AiHFTbL/NuUi1yjodpvLKC4c/CxLRoLQMJ6jJxloTUeG2kLwzfISxp+G6ZcLoB6/MZYp5+r+3mzkv/OSNuBadm/6EFhpnxhuQTLo7DjIZAXXwTf5tUik2m37C7BM2R3Z8fW96nKnDelsMm0NoES9bf6fqFbB1eO2wRI/t2sCmcYfcg4rsiCAMR2HF2fwBkyLu/weezjwX/99T94b+wjwbNdXLzQr/a/EEry+xwEuyHXSkYunVOfe8xnIyXIYCtnjPavpJlxnAfJ+9iwV3RO+qixmR2ddGUP/T5YIih7ooAw2UVAcUXTei6J1gkkAWcCzBem4vZG+9o58Bi1XTFLTHNsNEEaBKVHcEVDpgzFRsap5lq3pyxOXM1cZxGsR/dn7Lg1DufU8TLB2MftiUhimWiZ4mDuXfcxNq7rmFG5Kb0Kpt7oQBHVw91i+dviBsjOezyQMJMRU9K+YJLN5FI4XlLwHDgRRS6kH2Yty65MtrMvks/FKC7gZZ5jApNNFkp1Vs4a7k6D93Ltl7wj9vHey/rBBM/jj/qD/+3/uX712OXllBbs2Dx6dozKX9hxwRg1CW4B0GwgSR3EI3VC5VU0T4wOVckyY2fnj6njhwl0BYqYMsvKomXaw7o3rlXGc+C+MzDsMfV5cEXzAlA9xyo/AeIuBmGiGwKjzXEkxtNiV6rhvuZzinwRXoGwOYDSwFZDQuDm3Ik23E5otNW43SMmhOO4Dd73hp6KeQxeN/g2BmQYCt009hD8G3u/2amX9Ly6n02MCFOQ6GwcfZ9LU9UM3smtdY3tvP8vyY6Z6Mz97EcnB0X9NMG0jsu4AGWm3IWs20iYGUwEmpJrWCB2m+/lPZe3DcsMHuzz7TPwsLW+ffzyvySGWEDjAo2CQ3W2MhgqyqpzYY8zH8J4iEp23VdLGNt2dejKk+0cgNRG8/UEtNVAKKoBAFSCZc1/JOnQ/nuN+YA9qtzmxliQcL/3xUAhWFUcyt6CcFLsqLaxEutazLFx8cGNbp9uj5pRcnSizTG3fo+51tzmtQI7A9dIa8KYn44LrgmwrVEHZQ/prrbPY+rQ7uiMjEQNt+3qrMNHEuQUrGtnB6LozkNeadUi9FYm7FNJUWnUHhYmg/hTfr2CpjiEbde8gvkivUp94Q86bQuTTM+areEYMM0bV87tskUHEyXDULYRLDnGO24uOJhnO9k9uwme49hfOH7hK7r5k6RNydsMt2i5irY80WCR2yrtoiJzWZnBC4NndPQgMLWA99yWx0VQ+GSYYhtIK/bsaTcXa9DmtJJbHPkvkFeVMd/XdGytf1ByMFwmQunXvrArfzqN515tVvlgJYU5muzlSsE4ysOH1mptaQMOcIbeM9cM2lExh87kCFAj+dk2CJ3x0YbIAZDmT3OoBwYCrgmZJ0HcmT+hk+Y+MSxghQGXdGKhp9wu8zJoIEL9DDS4vsUS0IhWgClr2MwXz7tKeawe9eEcrSkQqcnPATNBhJSm/s5zYKVAgHWybHA4/9UmGwCTABvvp2Rr9up/effnzmXbePyhn7249798//q14+WjCgiGC5a/UmMmUVGCnTmM88Zc2h8nO42BXqcnUBWjmdnZHJwzeVQAJngFEKZGM8fo83s9zvZZZgEBuljTC7PEEpVtZR44NxzkxY5j5l1uGmhVHHXsRPIj1k7AUe1FGzHfywPignrjoO9fhz/b+v7dAwcPmu+3jpj3ueNCfil1Bngw++82zJSTZyn3OM5tSbDRFsNFAvq4RiEZWbkVrEHDnCI1THFEWr292lOuHHIXsQnCBglpMjlt3pKn6usUIwBiizkWwzwrJmBJStWAduZX8G8ptGTsGqvh+1yAlgyDxN8HMAQanEFrqCBqMATslAxkYKAEUVYfHO3bv23L47T+cXSEbx57e0q5mS5uBIMRQ41ZRXi+rsQ+wiRZwhcgnMkgXIxzENXn3c6kWJDEBYSxzd6nGlglnMrRY612ZiTIzzuXWboBHn537n8GCsP5aACRPBFn4NKhkHJnOyhcC1mS4ZCuVj0uGO13i9+8+7lPftXe/njhq7/92tOt+4vHdx5DR2M/Yk7HZpVEzBRnlLSNu2qN/W85qAW91bBGOER/m1Jg9M2h73ufQd+xhBVnNE+TFLTKkG5LkACjTfYhC/Mm40jWITSrLxhxW3LM1Ae82rX5VDpaPKSO0adGbCxdSwlmiyyT5WxReQ0HPtM7SZbZElgGtkkZfIAmWceHYn7kdHpmvSgr8dkrr8StNx5K9tEwWw0EGvMFw9oCtkgoRODpQ9IgmGpZHbtkXbEKepMkVoDvVlnnBQqBrtuZ2xY39r+AdM2D8rH3yTp92bZ+S/Nf5PhNsJekM2oyAc01PGJi3agLKonHM2VH6IraSr4oc+3pX/2nHnnafsTjq9967VZ7yF862uCxnDTXc+EPrMCzRz7n2tXHZ7no4fh7Ry6X23SQ1ADDnn97zUfCIiEJHA0xyN7HnSdrwJwBsi4mIRu2qgTTtqyzq4euDUti/EzrM+dnk+m/iLDeas9e41poP0i1TAkhx9qSx9w0A/j3BqnG3OaQbDAEBlCCzAPGcZgHB4ju/Re/+nOfXa9HW/94/HF/cBz8PUXVM+DUeWTDleWFE5/TmPkdmk043y5GIWvsmi/To8ZNdKGOzoCLye303R3/fHXCeAeAWh1Gf+d+lm3G8/Xcb4GnA2AxPtvr+1z5ZtkO++AszQhUG8TKZqHcTIEZyYhGtI3X3Epra7Qa+tvi1TevH/5N+zGPZ+48+uBghjsjiYUOR4Q8DakxouY2LnzMC59jEw4Nn8+N0mR0lIZkmNrFOZbhlCxKFPLjho7HkzBJJQQTWuPqsG3J4ul8ORORSuSpIb1axXG36RZn1nH9azAhXIOVGP3Heei89DsN4zvj32kwRps5S7YbmCTy+WR+Ouj5tKU0y3+nLbfJdjxe28XRrheHPnvoYnv25vXwm2987/tXt4/O+iKjocnyBaOwa6zRf8YDfs4SlWIGryjdJX+UR5RkW+znlRV4DOOxM8pLeple32QkK+aaDDNZZo7R9DP20veXJYMRGdbciqg4i6QKte6l0fNZn6EzZK4ypQbzhDIfut/51//JR561d/n41/7igxcPW//2LjYRA+1YvjdXzsnXuKnvdQalg4165A20xEYZLHYGCAUNrr+LWajTId05JtGZ5C95oVqB51LdQY4Gmcb8bNuywue3VXYTfTESrLKr1SDQAKgrpyHTYCCTMq1MgJRluHNtSxZxmwCbrARgVWBKBkrmOfn93/5X/t7Hb16H0803/vBhHHzv/766d7TcZ4Kitc6XCbBaR/8xr3aRaaA8g4OJwWSclbrL2Aojdq0HoI7aw+bAKn7TywQYv7PzhrTsuzSRigEoDaclvgBn/e0zsMpcsKjPJuGGrHI8KLg412oNQr6+gB6P9eJX7RT5+f6/+h6AMx6f2OLpq7DbN0cc0xTcObZkuPFDjvmU3W0+78aGBsCa9igOTWthA3Aa11/qyGnwmectWzV2swQJSjHkdVSoJVpEOuwuc+zQkC2xhcFIEWQhBqHFlbMy5lA6A/axmddk7uJBNqUJAKazkbNsHPDcJNcMLuWGHMfJ0Jn/JHCOvxNcLZ5+p+vQ3vHq7NdPU9dWoKRjMC9UcP0sNy4aEhz0ZO8zlcTMcpvehSpb8g2s2k93zljiLwAZb8OeQKCUGlEvrueuJO2wrhmicGp+yKwzCRaUdEEJKHnn+iz0WV/kIauji2lDEVdGQgWWMFstUo3X5TSbkkFMVmmD9ne8MD/q8af+6UfvnY7xhiEr8h9cooyUedEhQ+xUHQOdCBE3Zv0WO4rTUWIErglfy3mw8DT94DmBBr07sYoRfCcjYOPWZn2YOj0+Q14CduDvUe41RP78yVbWMRN7dOSUXjOPWZij5RhOMghlrJ1Smo1//JvOWUqy47MLtSG2jSHRLk7H58c/PNv9//hrP/fsO12H0zu9+Yf/4CP3/qf/680Xjq7w+cp5GXCycyBsekkPiZUC2/lAMCJ+UEqFxAxNBvTCs2nP6QzRKi/2mvJpkWjOvMMWRrHCaC/gzXGfBbjrPiVB5ilMecZ4YDUtRbaTFxWxMfp02NgCGogzq6GZct2Ov1/+k//4J5+19/G4uLY7B628gl9HW/BO13W4SQco37EtdW7Oys4l+sc2DbI8oy7u53UcE+opcbFZJ5Rs46j6bjQLmvsiX9k1nMxhc5zMaxIbegN23udYkc1cSs9hRjCW7cx25bNxQNPPTQGUz9gyNhPTLGiYBUoT4AgyCCQZaCjvNuZI7ch5Lo4fGrnPsbe7P+watB/2wVtv9a8dTw/Utep+nxlp9Zrtpcs1W1NaeF2eit+ghu41Cr8uhSvXLvu05uz0lWXmjNJcHabMBzIM5dlM+rudl9vYZCD+hkwLRw4VWEKKF3/Nv1JacjUfAlDJmmtgkWOF2bDS4QLRjO58Hf41e5+Pu7/w6P3T1p45HZntESEzcqZRMDoC/oFZ0kTITj/ujTc6xzAGlFT75jAT4FbBeTJfiyoho0waKt+vzD5RUaYDzrUkaoNdkPfBYp1YmQqtzIrwYhcXGy1sI6Yyya+Zl6gCAOMweB4sUqZAE6O4nuMiGcdzm9F29Rm+m4zzUEsj4XgvnvvWv/Czz/2wa/BDwfPk44/cP+LD02iQ8g9Xq9+Al6i/bHmHkXztaGcRHoBUtJfVrPcqpp+pJH4sCXY2yKpOvoKp134Xh63TIVucuxVwnVMl6zijflu5Hs/US7Z4DWErUoSkTkW8lCDZeVFlc0S+Z7/8Tzxyz36Chx+S75AOD0aHOi5+XEiyJWCyQ3jarA7Zgg4K16kcOHbMZB/SYpM7Zi1aJeUAFh2tlHpZWNmgImyRqwKT2TLiP2VsDvVowmblJQvAtiY72ZCXwAkMjvLbdNBmcq/3xv7y3E901iTJKNWGdBPIhqM22iwBc3G4agcAL0a+cxoOm9/fWnv6R7V/+1EffvrnHn5mWNfGUhOzCR1kNZBV7GkKvLiwusButnj5zjRJDW6maVtn+bgmo3HeTIdtXqykDj+BYDfA5THNgVgYZx3jkbMWZ7lMyR5I0XIOl5CBF6ikVL7Hb2DkvnKEQGGhx2SisSDV8cZF2I+8MO/mcfcLjz44fuqbJ1qrCZoESw74RXa+zSqf2ZAsZ2dm/VYWPcLeXSqITWMjmeKc5z8mI6QKWckQczxFAVc5i5f2MljiPpN8AXP5vBy03McG9sFxR7Q2GZyMk2AdgKlch2BiACmwDKCAeYYFTZZqeH+0HVlp5D0DrHd/68s/e/9HtX/7cRfo+jruHP3ivsUcGKNeg+YSnziSZ7m8UcySLRkaSYQsZtkPEECzIaqjriZDTMnGcRWZCkv1AEkrF9folfzXIucJrl4gipWJINFiYSmsnoOVceJ8QJZf7oELm0foM6fxGvgMCnQlz6OoMIKDc6PRn7vz2Ufu2wfwODTRM0d/+UFp/E2De0isE0wDEJtpLASg4jYEkuaw4OBrHGV8t5Xta+bnZgiZAmBSI1SbgLvc3wY0AMfPWOpG8g83jMDJZzClt6wyT3Y1sdFp46DmBgDh32Aan6yTDJPjOKZ/FyeM4ZwAJoeEy2P45p/75364XNPjx4JnyLejE93JjTmWsV67aXv2mpqCdzyUU0ZVECBfwlrQU8YRXVUlSVUHBulkkZi1bblPq1t6JHTpwvkEWeVF+Vt71NgPXUHzyThuC6PxvESiOizkdnVOxoG+G4OH6arZlCOu6l2rRHbk5U/bB/QY7DNyn4yujmi7rdFZ0jE7o8cqiTxzBidbGhgHg6yuTjxaZjsbT6ltkf4DFsrqMdBq8JLxHmYmOOkMQDMOqvo5aJjHQOLy2PV79RzFOqdFwqWzOPMcP/niOnLAc7TNBdnpgkCZeVCB6dWHLt68+27a/seCZzwOAN07OurX5KZZNlf1rdK3USXjVcYy9c58v0L1lEIzttdQkruqPixWaWU3Bj81kY27I8hqPs/KTsVGsbBN4HaEoYFgQ3mWWKrcCVVJT8t+nti0FLKyunHdAEXm1kxyY9gjv/ZBsY4ev/q5Tz19dIz7dJuqsoAzHzEYaDISjAbBzC0aqgjQwb0cwmkKcGAFuc7NHMZrUhkqB26AhBsjp6GEazU+U2UDqCJgTZrAvzhmW4MjdnR2r7GZba20kAwb2wVNgyiAnMhQCRwBaZgtKeVcEu6V49p99pk7jz94N+3+rsAzHk8+9vAzR794WrQeNqkY6Y/AQWcu5ui6V8cmpsym0VAAwm7W9xeptDJVMZNyFGP+UrNUbVYfEDBgrr6w1fJvaj9bC17TTK36PCNFzcNVBHAZKnM0kA6Sa3CP+Y/Zq3bdnrUP4xH2NZXryFGrDrj5Wa7gLNHx6boNOekzwnsBgyDwYhaXNGNO09A4qmDGeWuMBrpQ6z77NAcC6wEs82cKQ3LbvOTbxuPdZC+D4QJOYQIB4KAxciIYLgYDbXp/YSqaB8NRg2wb27cHx/H8Y8/c+dF5zvp41+AZjycf/8TdPfqvWWiwK+rKJYj6sro7bCr9mUW1Gh9KCLnPDIqyzMk2tbZaSSiygLn1qqh2U360s6TGOK1oMRDOx3VsAY0O0gqELP7k8RjyK2M+ZjzmaZgwcmLvU9NXB4szSQJ5tN39oFlHj3/jC4++cPSTeycOMs4RcxY2OjvjNnOeZso/bIn8lYOUhTyZhrVq7mVDYzBTPporWFC6mioBwucY11n5W5kH09QAgIxGSzJMU33aAEzWn83iTeQ/knEXBNMFDIQ4bTISpkR7aAOYLjCoPMB2ME377HsBzni8J/CMxz/4+CN3j+j9NH0BN1sHCtEb+WYxlFWAL0dX8oc9r3Ij63GeU3WOpok5DGDiooOTJfIOodNoKJbKz1SnM4GYv7XPch8ry1xHajgRPPnCgDETHP6Xsp85gM1nvtdQrHj/i3/soefsw3wcuRQctRoPudk5R/WNN5oGJeEaJsMpR/P5ndGRWVAwpRhPFgBD6xTgaMvnNaeblGufsZKgHLgzdnGZBMrPUJw6Cj5xDsFzSROkBkFRxAlLHrIL7IT8J+CiwcJHntPITI1sc0rp9+AUAzh/18vvtbnfM3jGYwDoOJOn6ZqEpEo2Kzbx5ZkSp8pXdKEhgzjAaBNopiRd73fdqckqp1l2gTouiwm+fcqv4kZJNQIRGtGyqmdlo5mmzXq9eU+vOoZiGg0cVlkKWBkl7zIL2IGftg/58atfePTe0VnuVR6wRPQ1t2mTSVQTpnNwUgPNjiXhz+9jMKjNmZiVGy0SL+G0zcUCxWCT5ZTbCKTgLVn8BbJNk9Tqb01M00AopVha9QAD8hs+k2ko41CSw+9e4Dv3PxH+5G+8D+CMx/sCz3g8+dgnnna7/sJxzj8AJWtkJMw1KSH74mIy6O+1wLTyJCtwRVStnKRfKa1F6k3t1WfCXzlVRP1bKgyWaRZmBRwZGMs/TWMG8jXfv/KamLkNBkF1KpIaAA6XELB49U/8I++t+PP9PmJP9kGJvWt+yjK46NMqPpsesTpqBgntJeeKlWx14QgeGCOskfOoAIpVN1mFUEAyLGhSA8d018Y60U22elOpTcvCzVmjNy1oMAz+lS2f4zqBsZwGx02slH+zvu2h480DV9+9eMg++6ffo1RbH+8bPOPx5OM/88LREE+OzsH2wWL0pnyAEsaY41RN2NxGEklvLSmFLUDwpdZMrtrMW5g/ERi+rudW9rctOxarkPnGp720mpn5MoA7szhfIkJ+R+cq5LdlMJB5DzpJ+B37iB6DfY7O91wSSCv72dqZOZCYmKzU5Ap65SdK3p3rLrhxQk3VogkUvjKZL+fvU/qZeZvbaHENt2mdj+kCi72e/SidM6fEbA1TBlxOGxhmAOdigKGpasAxB2epKrigOcA8ZxgIz3zyD7z52T/9C+8fOONxsp/wMcaBXnrltSe7P/LUcU5f7aoXrcp7lh0EOlcvO9sqj0BdiCmdqFo344zBfG5cmipmrbsSfRaiBqY8VEX2zH9u3DGbi5MEf0cuwJwKzNwpf5p3+FX0HL/VpE8MU3pN1cJ5NON/3VTfdlzkF37pH374nn2Ej8E+Ryf63BFMHk2AhMtlCxV6Zgfus3pgspChV6MyQvOsa0yYCxMxEcxfY1v51MJWRB1UcXi4R6l84K7KdFwmgmRdMbjB5Mg+ADbleI8vk9xmOVIOEmeBZ2hawRggHix0MRy1037n67/4sy/YB/D4iZhHjycff/TBH/n7H/7a0Zp3jpa8r4ZYRBYhhIFURqAcjcetWxTAOTKvTrmwQay3pZvUVVJuVj8sjKQ0BfkU85kaSFrOQCXz+rKf7ShxRQqdV16A65wXP8mUpTiR0wQ83nfx5/t9HOxz/ziub6qQcnH+KIvQOX3ToGbMJB4ybOY/xSrTIitTRLjwkrQ0Emoqwtl3a30Bl9s3B1fl9JF5ynUj20CmceCTUwgCdXycijGk3SldtkOqhV2slQQDOCe/d7roT379F/+eDwQ44/GBgEePf+gfeOTZT1x84skjPj1dwutttVGsyl4K2VwctQyispN7nFc0jIe6d+Jh3Biq3sSXlfRDfieEOOwks8BgFa6sw2xtMetidTdKwPk6mu5WYyJ1rhhJD3oJz/3CH/1wrOkf9/g7rD1zHN8DVxV1oyzLXAxBawMZ2UZ7TJFeFQVM3MJauaI1+cxLg625k61GQo3vlJvmLdbyHAxyznwMUq2FBng3LMjhpyq7Ye0e1xkY/y6Y0www6TVlHG1ou38YCZ/9s7/0d//EMu3m4wMFz3g8+bg/+KN/6JG7hyR4/GiDZ9Xh9LlyIUieOQag/IOvJZ+yG7vXGCl3gcwlwaG/rKQZZaGjvG7JjdbBVhPKKOeCdWlA4hwAFbU5YWg3C4vKLOGqLKY+N+5m/eE7bD/s8bUvPPrg6GTPoLLaczpCO+vI6v+IJcv7YBUuTVXpCnvKzcFQgs7ne1MCrvkQzAGysnIsW8d2mPugPq9KcMqidqMlzUoB2M+sHMDaDadZZTDctgfHfp7+1B9448k/+0s/e88+hIfbh/x48XuvX27Wnjrs4y9htJ83nO2OW6IbZ26yknqse15TA4z3Oc1nLNJh3F7v1U2muvIcreypyuy6C0JoIFTjU31OtLCFuzjiqjGbedG9bF/8vdRXcb581IIcF609+yf+2Cfu2E/xcff5126dIl56a7fL459d5b+wq2u8vubfue5BrsKDBVhyFZ7I11pVZ1wr3DSYdU/rgLPZ0oaIR3yz1DUD2swdb6gRAk7gKnsfK9kQfOW4ScYtdvV87a8dAPxmszeeebdlNu/38aGDR48BoiO+3T06+Re5Eg0vjC81ZmUf15TrvUBUhaEFnmvc2iPWNQpm/ZrMBIuz6uiYRLUvq1XIsB4vWHEiSzZJbPOybCGBMLEsgTTGEDQBDeUgcd8u7LN3fkqSbX3828+/9qXrPf7Cm4fZcrW7vXWgYgKHi4YAOPhbi4cw6OR09h5n9YS6uTFmy2uGsGWjZVIT64xZMyvHdZG9s4RpcSdvLhWFtdNYFZGuYUo258S3paZtVAlsEb95On34oNHjIwOPHgNE+749dVyk20eDX2IqANYSq7uoBab84g5rTjC49Tlpzee6BHNh9mUinE8A6a7VuvjlNJdc8zhbEScoVYwD6TUCn4WdnNBGKRGqzaoloPIC96fv/KM/c9c+Jo9f+53XXry6jtuDfW6C52oCJ665nlsyEdZ3y3KoXe2et4pk+ZOdLWoZ9A8mFTEgNfYwh/blzNNprNwEUJttu5TsLKzT7LyievN7R+x67uGLN174qECjx0cOnvXxX/0Pb37+6PBfPK7J58k6LOgEUFKqpSngZ0DpmAjn+4yGacbt3ZY5QV7rJShyUq3ZUtqzOnMkHkbIqDGLWBcF3zD+kP2AC2/ke8PdGXcWfWjzV+78/MN/n32MHnef/+u3+376aweAfIBnBY6ANKTaFeXbzuWrOoHENfEwH6oviyGa+XRKb/5qSKJhLMJoqBjAQdOAr28uTGKL66Z/sJxH7nY4ag+Oa/Kbx3b3/vyXP5x85t08fqrg0eMvv/T65ZVtBxP5F48Ld1ug6MxfxETFUlpFJ+a6BfuS70zAYPyo7r3To0zzCL/JPHLxnJZggQfuE5w01IRFzBKYSDlx8qpovvPP/vxHU03wXh53f+f/ffHqym4P8LzVD8l7ACnBwvznqnNlUQJqF2DG6qOdVepQAoGVk9Z8Jzjccz4mJl9ndd4cpkqKu6bBWhgVIYsbtXe6H46kmT84ru6zfuHf/k9+ioBZHx8L8KyP5weQ+nb7MBQ+d1y8I2LarQITHO7gCqHFPPuyTNQi40KzQ9cbV3Ve69VJO3+o3AYfVERMm7fnxdVCeSeV/ycL5boE93/5Mw8/bh/Dx92/9NdvX8fBPjvYB4zjMBBusI8WUTxbVJFF7h3OztnyxvmI1dznfKZ8SUfSkSeOLRuqHyCBvcp00JaQxWKd+8dI7rePv1/4i//ixwMw6+NjB56bj9/+769uX1/Fl3Zrnzku3OXqvMkcKPmmzxgJNc06bLnvaJxNPUDGi9Fxn/YziGhc061hE2nxHBdxTrbiBd9wn8rj9falX/7Mh1w5/RM8/s3//LXnr67i8wMgVzdzn57LDg+Z5vtceTSZZ8kvo9aUWIBD3LiIHMxtKhxJ1abZoc3PBmRv5jqjTX935DEPm3/7P/va+yvY/KgeP3F5zof9+IU/cnHveBr/7Fvfef3S+8Xt42J97nC6nzja/DHTgB6uIIIdTQWzqoaGb/Z2YU6FhhSId2BXduQaOm18eymGXB4c6ziC+8cZOONxAP7OAZDLgySfmAWuKHvJNG51xZjrIWlhkNGaFTlYWvWAKjZgiQ2bvZ0VhE7LXyzOGbdH8PnuEeJ+96Ejf7HtzXsvfO2jTfp/ksfHnnl+1OPff/GtA0DtkHl++7gWnz4Y59MHEG7VIiBc15pjRmUcjM4xp/jkw1d9Thv1bErBqsnBPFqVP0tBvvorn/3xC7V/HB5j7OdvvtG/cYz1fHEscA+XzUb+E8NQ2Gut67nw/SgpJANpIckaJl4mLeZD4JK71mzNHePVQ6a9fDTkvS327z785hsvv3D39w5Ybj5+T4PnnR7f+CtvPXHtfmvfT58+rvjjB2gOUB2A2uOJG2M9nMxH2LDKQQ3CJJdanIWKhjsQ1Ij3Fve27fprf/Kzn/xYy4t3evzL/+lrX7q66k8dgeexHCi95uBod96ahM5b1BgcjReu/5B3UmRdYmCFdkrdHxxMfd9HvtL3V1trL28X9vLP/K2/ef/3MlDe6fH7Djw/6nH3+bi1na6fGMvSHix1Gft2mRPdPC6PS3/rAMotDq1e0lu9lBuExTviwWGVvrpt7V5r19/+2k+4aOHH4fHPf+tvfGnf/TPHGNATB/M8caX79+Sz/eBopwdcYOV+jvtY3I/eDpDtrx7h47UW+w9OB1iuT9f37c03Htz7fQaQH/X4/wH+7zkJyd02dQAAAABJRU5ErkJggg==",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 lc(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function lu(){return(0,o.jsx)(lA,{"aria-hidden":"true",className:"session-setup-select-icon"})}let ld="Create Agent";function lp(e){var t,r,n,i;let{form:a,sessionSetup:s,sessionSetupError:A,sessionViewState:l,sessionLoading:c,sessionMutating:u,onCreateSession:d}=e,p=u||c||"blocked"===l.setupState,h=null!=(t=null==s?void 0:s.primaryActionLabel)?t:ld,f=null!=(r=null==s?void 0:s.title)?r:ld,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)(ll,{"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"===l.setupState&&l.setupBlockingReason&&(0,o.jsx)(y.A,{type:"error",showIcon:!0,message:"Setup blocked",description:l.setupBlockingReason,className:"session-setup-alert"}),A?(0,o.jsx)(y.A,{type:"error",showIcon:!0,message:"Failed to load setup",description:A,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)(ay.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)(ay.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)(Aq.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let i=lc(t),a=function(e,t){var r;if(lc(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)(AT.A.Group,{className:"platform-selector-group",children:(a||[]).map(e=>(0,o.jsxs)(AT.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)(AV.A,{placeholder:e.placeholder,suffixIcon:(0,o.jsx)(lu,{}),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 lh(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 lf(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 lg(e,t,r,n,i,o,a){try{var s=e[o](a),A=s.value}catch(e){r(e);return}s.done?t(A):Promise.resolve(A).then(n,i)}function lm(e){var t,r,n,i,a,s;let A,{controller:l,appVersion:c,title:u="Playground",branding:d,playgroundConfig:p,header:h,className:m,playgroundClassName:v,notConnectedFallback:b}=e,{state:w,actions:E}=l,k=lf(lh({},A={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:lh({},A.executionFlow,null==p?void 0:p.executionFlow),executionUx:lh({},A.executionUx,null==p?void 0:p.executionUx)}),x=(t=w.runtimeInfo,r=w.deviceType,lf(lh({},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)(ls,{playgroundSDK:w.playgroundSDK,config:k,branding:x,className:["playground-container","playground-conversation-skin",v].filter(Boolean).join(" ")}):void 0!==b?(0,o.jsx)(o.Fragment,{children:b}):(0,o.jsx)(lp,{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){lg(o,n,i,a,s,"next",e)}function s(e){lg(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:ly}=Y.A;function lv(e){var t;let{serverUrl:r,appVersion:n,title:i="Playground",defaultDeviceType:s="web",branding:l,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:A,onCountdownFinish:l}=e,{message:c}=p.A.useApp(),[u]=ay.A.useForm(),d=(0,a.useRef)(A);(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=ay.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),[k,x]=(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]),j=aD(m),I="string"==typeof j?h[j]:void 0,O=(0,a.useMemo)(()=>new am({type:"remote-execution",serverUrl:r}),[r]),{serverOnline:P,isUserOperating:R,deviceType:T,runtimeInfo:N,executionUxHints:M,refreshServerState:D}=function(e,t,r){let[n,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(!1),[A,l]=(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),l(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),l(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){aw(o,n,i,a,s,"next",e)}function s(e){aw(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:A,runtimeInfo:c,executionUxHints:d,refreshServerState:g}}(O,n,i),B=(0,a.useMemo)(()=>{let e,t;return t=(e=(null==N?void 0:N.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}},[N]),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),V=(0,a.useRef)(null),q=(0,a.useCallback)(()=>aN(function*(){if(!ak(S))return J.current=null,V.current=null,!0;if(J.current===C)return!0;let e=V.current;if((null==e?void 0:e.signature)===C)return e.promise;let t={promise:Promise.resolve(!0),signature:C},r=aN(function*(){try{var e;return yield(e=function*(){return!!ak(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){aE(o,n,i,a,s,"next",e)}function s(e){aE(o,n,i,a,s,"throw",e)}a(void 0)})})(),J.current=C,!0}catch(e){return G(e,{title:"Failed to apply AI configuration"}),!1}finally{V.current===t&&(V.current=null)}})();return t.promise=r,V.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==l||l())},[l]),Y=(0,a.useCallback)(()=>aN(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)(()=>M.includes("countdown-before-run")?(O.setBeforeActionHook(()=>aN(function*(){yield Y()})()),()=>{O.setBeforeActionHook(void 0)}):void O.setBeforeActionHook(void 0),[M,O,Y]);let _=(0,a.useCallback)(e=>aN(function*(){let t=aM({},u.getFieldsValue(!0),e||{});E(!0);try{let r=yield O.getSessionSetup(e);y(r),b(null);let n=aD(r);K.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(av(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)=>aN(function*(){if(H.current)return H.current;let r=aN(function*(){var r;let n;try{if(Z.current=!0,x(!0),!(yield q()))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=ax(n),!1;return G(e,null!=(r=function(e){let t;if(t=aI(e).toLowerCase(),aj.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,o.jsx)(aR,{error:e}),duration:0,title:"Failed to create Agent"}}(e))?r:{title:"Failed to create Agent"}),!1}finally{Z.current=!1,x(!1)}})(),n={promise:null};return n.promise=r.finally(()=>{H.current===n.promise&&(H.current=null)}),H.current=n.promise,n.promise})(),[q,u,c,O,D]),ee=(0,a.useCallback)(()=>aN(function*(){try{Q.current=ax(ab(m,u.getFieldsValue(!0))),Z.current=!0,x(!0),yield O.destroySession(),c.success("Session disconnected"),yield D(),yield _()}catch(e){G(e,{title:"Failed to disconnect session"})}finally{Z.current=!1,x(!1)}})(),[u,c,O,D,_,m]);return(0,a.useEffect)(()=>{P&&q()},[q,P]),(0,a.useEffect)(()=>{if(!P||B.connected)return;let e=!1,t=!1,r=()=>aN(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||!I)return;let e=aD(m);if(e&&K.current!==I){var t,r;_((t=aM({},u.getFieldsValue(!0)),r=r={[e]: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))}},[u,_,I,P,m,B.connected]),(0,a.useEffect)(()=>{if(B.connected){U.current=null;return}if(!P||w||k||Z.current||v)return;let e=ab(m,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,i=ax(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,aN(function*(){(yield $(null!=e?e:void 0,{silent:!0}))||(U.current=null)})()},[$,u,P,w,k,m,v,B.connected]),{state:{playgroundSDK:O,form:u,formValues:h,serverOnline:P,isUserOperating:R,deviceType:T,runtimeInfo:N,executionUxHints:M,sessionViewState:B,sessionSetup:m,sessionSetupError:v,sessionLoading:w,sessionMutating:k,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)(eT,{children:(0,o.jsx)(Y.A,{className:"app-container playground-container",children:(0,o.jsx)(ly,{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)(A,{}),(0,o.jsx)(W,{showTooltipWhenEmpty:!1,showModelName:!1,playgroundSDK:m.state.playgroundSDK})]})}),(0,o.jsx)("div",{className:"playground-panel-playground",children:(0,o.jsx)(lm,{controller:m,appVersion:n,branding:l,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)(eT,{children:(0,o.jsx)("div",{className:"server-offline-container",children:(0,o.jsxs)("div",{className:"server-offline-message",children:[(0,o.jsx)(A,{}),(0,o.jsxs)("div",{className:"server-offline-content",children:[(0,o.jsxs)("div",{className:"server-offline-icon",children:[(0,o.jsx)(aB,{className:"icon-background"}),(0,o.jsx)(az,{className:"icon-foreground"})]}),(0,o.jsx)("h1",{children:u}),(0,o.jsx)("p",{className:"connection-status",children:d})]})]})})})}let lb=document.getElementById("root");if(!lb)throw Error("Root element not found");(0,s.createRoot)(lb).render((0,o.jsx)(a.StrictMode,{children:(0,o.jsx)(function(){return(0,o.jsx)(lv,{serverUrl:"",appVersion:"1.10.1",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),A=r(6987),l=r(9152),c=r(5409);let u="midscene_run",d=e=>{if(!l.$9)return"";let t=(()=>{if(!l.$9)return"";let e=a().resolve(c.cwd(),l.$9?(0,s.j)(A.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:()=>el,DL:()=>ev,El:()=>B,FU:()=>d,G0:()=>i,HR:()=>o,I2:()=>n,IQ:()=>p,JM:()=>I,Jq:()=>E,Km:()=>m,Lg:()=>ew,Lh:()=>J,M1:()=>b,NF:()=>P,OK:()=>eo,OY:()=>ed,Od:()=>j,Pm:()=>H,Sk:()=>N,T4:()=>U,TN:()=>L,Tr:()=>F,UH:()=>eC,V7:()=>V,VM:()=>v,Vb:()=>ep,W4:()=>g,WH:()=>es,Wh:()=>em,XE:()=>eE,YK:()=>z,Yf:()=>Q,Yg:()=>G,Z$:()=>eA,Z7:()=>X,ZX:()=>l,_j:()=>ex,_q:()=>K,aK:()=>y,aO:()=>ef,ag:()=>ea,b6:()=>x,c$:()=>ey,d8:()=>D,fS:()=>ee,ho:()=>M,iw:()=>u,jG:()=>k,j_:()=>T,kX:()=>Z,mZ:()=>er,n0:()=>A,nc:()=>$,pp:()=>R,rd:()=>eb,sg:()=>ec,tk:()=>ek,u1:()=>eh,v:()=>Y,v4:()=>a,vC:()=>q,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",A="MIDSCENE_DEBUG_MODE",l="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",k="OPENAI_BASE_URL",x="MIDSCENE_OPENAI_INIT_CONFIG_JSON",S="MIDSCENE_OPENAI_HTTP_PROXY",C="MIDSCENE_OPENAI_SOCKS_PROXY",j="MIDSCENE_CACHE",I="MIDSCENE_USE_VLM_UI_TARS",O="MIDSCENE_USE_QWEN_VL",P="MIDSCENE_USE_QWEN3_VL",R="MIDSCENE_USE_DOUBAO_VISION",T="MIDSCENE_USE_GEMINI",N="MATCH_BY_POSITION",M="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",G="MIDSCENE_INSIGHT_MODEL_TIMEOUT",V="MIDSCENE_INSIGHT_MODEL_TEMPERATURE",q="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",eA="MIDSCENE_PLANNING_MODEL_TIMEOUT",el="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=[A,a,s,F],ey=[j,l,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",M,B,N,"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,I,O,P,R,T,"MIDSCENE_USE_VL_MODEL",E,k,x,S,C,K,U,Q,Z,J,X,H,G,V,q,W,Y,_,$,ee,et,er,en,ei,eo,ea,es,eA,el,ec,eu,ed,ep,eh,ef,eg],ek=["MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",...em,...ew,...eE],ex=["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"),A=n.getMilliseconds().toString().padStart(3,"0"),l=n.getTimezoneOffset(),c=Math.floor(Math.abs(l)/60).toString().padStart(2,"0"),p=(Math.abs(l)%60).toString().padStart(2,"0"),f=`${l<=0?"+":"-"}${c}:${p}`,g=`${o}T${s}.${A}${f}`;r.write(`[${g}] ${t}
954
- `)}(t,A().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),A=r.n(s),l=r(7617),c=r.n(l),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:()=>l,NB:()=>v,Qd:()=>E,gQ:()=>h,gV:()=>w,ht:()=>s,rS:()=>A,tD:()=>d,uR:()=>c,vA:()=>p,x3:()=>b});var n,i=r(7086),o=r(3961),a=r(5409);let s="undefined"!=typeof window,A="undefined"!=typeof WorkerGlobalScope,l=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(){}},A={};function l(e){var t=A[e];if(void 0!==t)return t.exports;var r=A[e]={exports:{}};return s[e].call(r.exports,r,r.exports,l),r.exports}l.m=s,l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.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);l.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,l.d(i,o),i},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,r)=>(l.f[r](e,t),t),[])),l.u=e=>"static/js/async/"+e+"."+({195:"0366f6e8",236:"a5d2c1b1",271:"72510be8",467:"710fa05a",985:"c09263d7"})[e]+".js",l.miniCssF=e=>""+e+".css",l.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},l.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"),A=0;A<s.length;A++){var c=s[A];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="playground:"+n){o=c;break}}o||(a=!0,(o=document.createElement("script")).timeout=120,l.nc&&o.setAttribute("nonce",l.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)},l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n=[],l.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,A=0;A<t.length;A++)(!1&i||a>=i)&&Object.keys(l.O).every(e=>l.O[e](t[A]))?t.splice(A--,1):(s=!1,i<a&&(a=i));if(s){n.splice(o--,1);var c=r();void 0!==c&&(e=c)}}return e},l.p="/",l.b=document.baseURI||self.location.href,i={410:0},l.f.j=function(e,t){var r=l.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=l.p+l.u(e),a=Error();l.l(o,function(t){if(l.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)}},l.O.j=e=>0===i[e],o=(e,t)=>{var r,n,[o,a,s]=t,A=0;if(o.some(e=>0!==i[e])){for(r in a)l.o(a,r)&&(l.m[r]=a[r]);if(s)var c=s(l)}for(e&&e(t);A<o.length;A++)n=o[A],l.o(i,n)&&i[n]&&i[n][0](),i[n]=0;return l.O(c)},(a=self.webpackChunkplayground=self.webpackChunkplayground||[]).forEach(o.bind(null,0)),a.push=o.bind(null,a.push.bind(a));var c=l.O(void 0,["783","905"],()=>l(8087));c=l.O(c)})();
955
- //# sourceMappingURL=index.3146a384.js.map
953
+ `,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};a1();let a2={result:void 0,dump:null,reportHTML:null,error:null},a3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABfCAYAAACgCTpnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAS6ADAAQAAAABAAAAXwAAAAARa1b5AAAaTElEQVR4AeVcB7iUxbme3T2FKl1BlKZgFDWo2JCiPCpgohQBsRB7iTwmJrZriD0RSACDBb3Gq6i5sWCEq6KiCNhBrKBIUzw0KYfqKbtn233f2X1/5vzssntOaJrveWa/mW/6+38z883882+osrLyTwcddNCX06ZNCxhjiuCKHcdwYdoVgIfSLgjO9HLwVvMz/NOjWCw2NxqNvv/JJ5/0QO8awzVxHMON4PaDawBXD64uHAEliAIwE3iI/olReXn5E0lQPB4vWbJkySXo3v6OawF/c7imcATOBY2AUfP+YwALAqyl6LAJBoNtOnbs+NjatWtHnnHGGdQmAuF3rjYRJGqUX6s4NEnuEE1Jfuy/n3322QBqlktbtmx5c9y4caehbx3g2sG1gTsIriUctY2aRi2rD/efMywnT57cLZFIVLhg0R8Oh7974403rgYYh8F1hCNwbeFawx0A1wyOGqi57Cc/jwWXL19egUm+FJ020RfH4CdMrykuLm57+umnT1i4cOH1xx9/POerOhQ7zl0ptUqS/2SHZah58+aNzz777LMKCwtbRv9vvIm996wJHX6KCdRvbAKBQEGLFi26nnPOOR0ikciijz76qAJgcC4iICTNS+QiyRimP5nmDJPctCnJj+W3ZcuW7TBHvWWH3t9/kyy/5tBkxfVdkrFPp1cbmVgISiZNmjQC/ToG7kg4Ds/2cJzL/MPyJzmPBbH6JTA/bUCHTbD5wWQmGS4zkUdHmOi/RhuTiFtZvXr12lx00UVj3nvvveGtW7duCKE7LLVqarWUOfGTGpZ2foHWrCUigTRYFh38RGf8jwmPv9Akt6yzolAoVP+UU0753TvvvDNyyJAh1CgBRi7ANJcJMNYhpyEoznJdP8P7LFmwNm/e/D1amPCDxVYnvvnEhP98jokv+sDrRIcOHX7xxBNPPPjkk0/2glCAafIXWH4tE2C2TuRzQXL9Xj37mocNN2vWrFkH8yEabE5zakdKlm0ykfsvNdHXJmKMcr6GgVW/frsLLrjgz2+++eaQZs2a0d4SaNIwguUH7Ec9LNn4xm3btg327t17cLBew+Lo6w97gCDOoaRJLJ5jEt99YUKde5lAUR1a/UXQsu5Dhw5tDRNk4eLFi2l3UEtcpzL82uOGs/mVd5/gBKsR5qzkZZddNqygsLBBbO4UYyq2Zm1cckOJic97xYQ6HGsCTWjQA+3GjTtii3RUkyZNlr/11lubIBJYjJZfgIgzjuQPZ5PZxHvzh8Mw+dVXX0WqqqrWsyFaEXfWqCSmuPC4YSY2+2kvGey1n994440TXn/99XNhs9F04LB0h2a+w1JlZgJRcXuFW7AAVALatZItyDTJZ2xZPGaqnrvbRB77LUyNcpsEIDU688wzb/3iiy9uOO2007iH9AOmyZ8rZbbVkiAJKNdv69ibPxYsNCC5devWNFiZJ/lsjYx/8qqJjB5oEmuW2CSw+gOHH374ec8///xfbr/99s4QCjByd/IXYDsDTdUKPIX3CvfA2rhxowUrn2Hob2li3XITHjPYxOZO9aIwLI+99dZbJ+AE9hwINRxlXpDvTMukUS5Irt+rZ096PLDWrVtn56y8h6G/lVWVpmrSTabqn7cZE6uysXXq1GnWr1+/2z7//PMR2JRzS+SCJrBc84JaxjbJ+UFT2Ja/p39CqJBHLKFevXo1PfbYY38RLK5TGHvj0Vq3I7HiSxP/6u3UZrxeI27GA9h/dgFonXG6sXjOnDnbULg6La76GCaJ+/020hcv2W7nnmatWLFiM87itwTYQbh/hxIrvjLheweY+Py3vGJwenHcPffcMw5W/2kQah7TsNRcpnmMD5GO7ROg4hBZcgGVbLdyNojWN0yswuB5553Xt6ioaP/4p69hxrejsvaVxyIm/sk0Y6rCJnTYSehy0KDs/Y466qjeOPIpnD179iLMkwlUIBDEWacLhOtXeyRz8yhut3E+OVJy1qxZZdAsa43Wet5KlbX9F1ujKIZ0+G/DAb492KDVX3jcccddgc34mN///vedkDiTlrk2mbRMmuZqm+oSeArvFu4NQ5SexAEfre+8DNOatCaxdB6GJTbjS+Z62Q444IBud99997innnpKm/GdTf6ZgPJr1W4HzAUrgdOHEvYm0CJ1ruX1bBd4kttKTWTCxSY6/b/xWLzN+MEXXnjhaEz6lzZt2lSb8Uyg5TuX+QHcBS3fXoQLVnLDhg0rGRXIcvqwPVstfThIjE4dayITrzLJ9P4Tw7L4xBNPHIGXvHdcfPHFbVGyOyw18cvMkAHrahr7QHI1y/WnYnfBbzWwVq1atQZnyYnaGKY1aUv8y9kYlv1NomSBl61du3Z977///vGPP/54Dwhd7XINWNlkBEuAERj2w69VuxywamDNnTt3FSqNB5oeiOrZlt1HyY2rTXgsNuPvPONVst9++x0yfPjwUR9++OEl8GtYuuaFO/H7tUxgibNc1+/VU1sPEeFTJC/AUUsRzqbOgR3RMDbnXziqof24GwnDMv7lLJNc/50JHdGTBoxdLXFR5YTBgwc3w6Hksq+//roSLVCnxdUohl1yw9n8bvoa+TXeOeMm169fH8HLizUsIdupaY1KzzNxbN7L2FsOMom133g5cJVgIIbkfRMnToSRVm0e07B05zFpGfsjlwtYr658PdWGIV6ohisqKtYy826b5LO0LPH9MhMePcgeLCoJhmKnyy+/fBTOyAbVrVuXN3jcuUxgaR4TYO5ctksBqwYW7KzEDz/8sJqN3R3mg0DIyiMVJvL470zVs3dhMx61yWD1N+7Tp89IbMZvwarJKwMELBNoBEuASbvIBRg5SeFUqAa/1cBCvuSmTZvSw3DX21r5tiv29j/s5J/cZJ+bzdapU6dBr7766t/uu+++rhC4gFHDpGUCbGegqRkCT+GcnGCROGdxn0awSmk+7LItD0uvBSVK5lvzgmaGCIbr0ddcc80ogNYfMgGWS8t22bCUZrE9dpLHClTKWzV7GyzboPKt1oCNvnSf92YcZ2TN+/bt+8dFixbd1LVr16Zp0HKZF+ynnIahNEthVrlTIupUYWs6kHfu3Lluz549zy6oW79BbOYk7yAPcXuNEsvmmcSyj9G4niZQXM+ekeEktjMutHTCcdmyDz74gDaOOi2u9rqg+GUKkyudK6vmF1hEnf5QWVkZX4sNxJFNk9RRTeq0oFquvRBIblyFlfIlE2r3c2ONZrShYcOGB3fv3v0UnGJswpl/CUQCSh3Pxf09UXq/3IY1DO0QhCSJVacSb3s2M3ZfGIq2lekfHvOE77vIRN98zBPjwsqBAwYMuAtmzw0Yllot3WGpyZ8mhlUI8ExDUkCRy+/VQw8zsxBPs+AvuO66607GUzssiSPixDefQrQPEU4sEl+/bxKrvk69GS8s5rAM4ST2KAzLQ2H+LME9sh/QYnVanJ1wQcgmV2fdtFZGkESedsHWWkPhnjZM1ZB8ePyLGanN+MqFXvJWrVp1HzNmzP0Ykn0g1Grpt/ipHDItqCzEQMCJQ2SpGmBM6IGU9iew7VnBpPvaMGSbXEqWrjThvw41sfef98Qclueee+6dOBS4HLYZXya4oAk4AuYOy52B5gGYcRji3kITnJUPYKrYrKe8huyTHm7G5880XABCR3THxFLIYVmAC3fH9+/fvw32uss+/vjjMrTd67TjdzXHH08lqhZPsKSS1DIbxiux+lhlhgTqNAhFX38Eusd8+zYlVi0y8QUz8XLkZBNowI9EcOOlUaMOPXr0OAbArXzttdf4BkaAiDOZCwjDoh3kBIgkNOyQxCFgGVbEjSZU4N2USSXbt38TqxdjMz7Q0OQRAbBOv/71r8dj0r88fXStlVJDUqultkpUGDpiI1AtV4QiyQuwEhbgXKsPrnfvn0irOOQ/DsIG3NqHldtM6Gfd0OWgPSPjsDz//PPbYDu3GBdXdOvaBSNn/yw4SEUUvWG4bdu2IJ7GaZgs2/GaJF+a/tgosfwLE4eJETqihwnU5X1hOywPOfXUU7tg1SzBsY//xahGV9auEiA79FwO9GOYGO2HBPv6ipi1Z4hILP88tRlf+K6XDBfujhgxYsQE3Lq+EEIOQQ3DnCYFwfITweN9LYv87n554a98V4eTZZtN5MErTPSV+6EWPFjBPFNQwFvXN3777bcjMd3wwormKy12HHF0xEdD1QYQ3lG7SktLV0G+149q2Lh/mwBSdNoDJvLAZYaXiUXt27cf/Oijj47D0fVRkAkocoLkOgsYBRqr1YbjahCOaiL7shWPtteIOIfZV3Dfbt/CYbU85oorrpg4b968IShM2iTuahZua6RoB8AWLFjwPcCqCtTHrZr0BFmjlu2jiZOb19oPIdxXcDhhaY5N+D3Qjz/icJEfo2roudwKZfZT/ein/VGHW4X58+e/QfPBPg1nD4b4PUt4hxkoxmvEOvXteZaBPwC/4dkWXEqeik/J3LRIY9MyL+XMA57lvSiOqN6bOXPm3bD+P0cnY2kXB48ToGrDT2F8AhzGDn4NwbIr4h4AK9D4AFN8JSZiCwbu2AkMnCzUlPAZcxSOt7Ar+UEEqDJWFQvHK8sq4/GtlbhYx08H6XhwWI6+boZ/K64TVEDTiMsOlEnogYfXYqvxOqoLV0RCu7uJ3wgl8MK14KRBtio0PoYv1jYnk9vojaPDYfxbQAU6Vo62lWHFroAmlMFfCVaOj7a2godh+lQiTRTyKC4WhwFYHOVEcJpShbgwZLzHSa3hKyRx+iknpyNperKBrJrFhDBOv8cVxz16VBOdMtaEuvSxQwcaEb/zzjufx6d73wCYCNqkYeFyO0QQR7vAdXro9kWME6f05G459Cs/8yqfyvFMB8RVG442IW7mrWDEnnyHmNy2wcRefZDV8qZgMY64TwJQfNLqnDSA4NGF4fiKn1uYTI5xrmN65XU1ScAJTIHkcf9qiHK2g/Y9iII9bZhGZz1p7z+w7i6gO+6443B4/WCxowKLALigZQJPgCltNsAEFnk17RJYkG8HKe1PYA7YgkmyItC0ddbVgxnzIpxgFA66Ja+kfBtdNfnPNi0m3NDVV199FjbCnDIEGLWAYAkwgSZAqGHyu1xAiSs/uTSLXEC5w9IOQ6qZSH6reiUlJfYGsz2qadxSaWrFC3/5W1N4xhUmdMyZeeXny1VeESdh49vu3nvvPQFeNt4FzD8kpS0EwwVJfoGkdOQEiuXQuUCxHm8I0i/NkhCy7Qnwnw9buSBR+O8MxeChXU1hn6tYjCk69w+w5vIzBax24Rsh0qBBg/rjzkNTeNnWbKBJU1wwsvmZ1gVKYLmAuZrlgYV8lqqB9vbbb/MQ0IJV20kep62m+JKxWCWCBkM6VtWgeWXh6Zervp3yJD5zic6cZNM0aNCgKT5v6Y1PjxkWYAJN2iYNIRcY0h4BKbmbln6CJKDcYShMsoJlEwAofmxuTx9qu0csHHaHCTRrjXYYg5cI82AGvFTY95q8T2Bjrz4EG8aeFhmcFPTDZ3qH2sJSP+qIHzR1XCAIGMpdmdIRHDlpE7nKJ/fmLAkpIymcgDFnzYfaDMPQsf1MwYkDbIEwCLfiKveMG2644cNV6zd+WzTwFivP9cN/AohO/atNhqOVupjsB+HVPbdl3LeJvPZC4AInjRMoLhc44i5IAkqc9excs5gA1m7qELCG1725dSm68B5WYmBcJp555pmXp0+fvho2U+WECRNeTB7Ttyp4yHE2PtdPbM4UXNadb5Phou4JY8eO7YYA51u6aptdmyj1sN3OExCGXZ4NJAGkByBuK0uXb7WJfkVajgOy5akrSG2ULjcPBEzRr8Z43wDhBGMeNOo9ZLTzBsD6El/Pzi0aepudy3IWiLdLVc8BeHC+fcbnLENgfu2HfJzA6Fzg3OLcvrjgUe6G5XfT0y+yclZCUoTLbQIcv64CWDiqwd+tYLLOhwpOHW6/CmNaaOYGTMxTsGfj8m3B4h5v9OjRU6r2P2RrQbfB+RRpj4j1PSOOhg99+OGHmZG2F8EiZ18EnLQNouoPPx0mOLZ/eXIkS1VgPc5PtUKWLl1ajlWMdwfyekMdbHmIKRp4s4pLTpky5SW8s1sFAVcl2jl2KX/22WeXv//++y8XDrgh7/Myzl36xPjoo4/uiyPhA1Ee5y+CJeD82qahiiQeufOdJ8zlkWYxnQuSF4YVX4XdOzube48IK73o0nGeHYXzsA/wlmg2slqNAhdg1jiExr2yLR4qKfzFdYjKTbxFE3vtIZsQb56a33XXXb9CgGC5zgVNQEnTagWSWuaCJRm5Bxy+Q4zgWGQNhbmue7PTwTadmdTgxKIUnZkC08PTJohlQVuOo9wN+JRucqjXRYlgyw42X64f2l38uwQSrn+filMJnp/739D4AfODxuw1Bo6FEBiSB5Drx5IfxwdQK5lgZ6/Fgh2OgZV+NZNhHk5y9XvuxRdfXIGgtKoaUJDbMF5Lvb6udOO8wiF/ZNbc5OwbYaDWufLKKy/GCsnJ1A+YhqPmMQGWu44sKVgASYClQj7gANhaRmQFq7iuKb4EtlD6qBbz3KcYYh8gi4Cy8xTC4gTK+nHuXfbyyy8/E/jZKVWho3tDnJviC2Zh3/iOTXjggQd2HTVqVE8ENHeJU7vYPzl3KNZYq1gZC3JJ2kUZ/XbVwLmWfX+UzTAtGvRfmM/a2nIAbOnIkSP/F9qo1c8PmIASj1x11VUfLlu2bFrR4D9gmmZfc1N08p9gNdHGNOass866CG5/eF2gpFnsowsUs4hqBJofLBayA2CY5NdjRSyzRzXeC6FUfXw9XtDzAhuA7RmbOnXqC6AVELggZfK7sgi+CHs62qjVxsLel6YKzvHLv0fguRcJR98H33zzzX3gpTbJCSx3GDJ5jQBiBpELFkESCTDLcY26FKcPZXzq+v8ZJuSH50XDRymPgXZ8fO21186CgPsvgiHHISd/Rv7QQw8tx4WN5wr6XWsCjVogeW6KTXvQ2zeefPLJQ7Fv7IhcmUDya1etAHPBYusEkutP4m+fSqlZFLpD0W6Ssa0h4QXBNnz98ELa+MwFjsAk9xy0Y3J5LPlt4YAbbZm5flL7xrE2GY6gG+Gd3xB848OhyH5JowiM62z6tEz+vLgfLGUSaJbjXKsSVnfqqCb97208xCs4/mybHqtf8pVXXvnnI488sgSCTJrjAYJ4+TnhyG85zIhNuN0yMXTCgFiw/c9t2bl+YnNe9PaN7du3Px2v4rsijzSJXP5MgOUqvlp8PmBxkudRzWrm5IoYaNDUFJ1/t1fQypUr511//fVvQOAHqhoYiHd3/a5f6apgxL69obT046Kht6OyPEYL5tDEioW2LfyyH9e8r8IHUXiL6mkT4/wF+cM2f64fgVVNk9KZXBmPakooD7ZoA6DuMoGGvHIOYykc3oil+zHeFkQw0/AjEC4w2u2LK86mw4WUMGy0h5MHdy4vOHEgq8hKwVaHmjo3P28KegyzaWjf4VTj+yOPPFKbWPZBVCuAlJmcK0cmqgYUEiSwIU5pVrODTLB9Fy8PNtocft9AoE672iWNYZzAseYIwmy8OsOHxjRMH7rpppvm4/X5jLYDb+wf/3y6tx9EXIpgz/E8v/CXv0EPaIsawxt9M2bMeBZf80/HYkSzhfWI1B+Fa8WlWW5mdYAy+u0wxB/7rOR1HV50FcH++gx/xzkV4Xw1ypalMsEFoMC0gGF+jIwfP/7vkaKGawv6jVB1lgdbdbTaZBcBAAVNKsXx99PdunW7Gf948haAUlluXW6fqpVXk4AfLBVK7gEFfxz/6bc2vmB2vKD7ebZ8rI7l+Cz3bwCxHAJpk0CTRpELEHK3A34/O2nBAo8+8MADJdiIP13Y+5KkNXipTTiOrvOHqSbY9mgDTCpgakzD3xvcgquP/8D/DW5L5xdYbn3qj8uRvPbEYUHwODT5+oWTJC/dN4dr9cLvhp4d2bSef2VgCR0ZDznHIx2Xrs5wh8EdAtcGrhUcJzYe0uGqiy2TyzrL57JOzjDrYjzTMT3ztYXrdNJJJ52IufJT/NNIMv7dfFWdxIIy97bbbrseafrAnQ7XC64b3HFwR8J1gmMZbhvYH9bFOl2zAsH8iA3ORHoCevrxf60NLT2rTgO+vGiFLc1Hw4YNexp+ahSJ6aRB1CZpiPt0mUblkoso54NSGczLhxbEP4lswd8WTML3hXwgAdS7FPPSM9g8v4spgOlYDutQfWyPtJqybPUjquaUCSx1hI1no1lh4N133/0B2xncaEmW40DvHnyF9QPlcEzPtHRsoBrJfHKMYzrXIegR42094CyTzhLmxDfxhcTTWHUj2Jy/gO3UFkQonuWpDj0kAea2xa2f5aod9OdNqlQZCA5l9smCU101ZEJYER9CozfgT3fGpNOAeRWr0eIuaGysv8HMy7r89fEB0mnIilOm9qjdKpd1ChxyAScZ0zGN2wYCRhJPhXby69csZmRDhDy5KjJ4nf8CzqgWQMbGqKNKq8YILHUkUwOR3RLzklSGV1dKvIOcYKle5VMe1SuAFFY7VIfqTFeRP9MTUg41JJOGSdvElVeNUKPUeDesNGooufKrTnKWTUDEPa1Oy1Q3gpZUruoUQOLZ2uC2Q2Xl5H7NUga3MPpZuRpGzka4JJm4GunmoZ/kcgKksOLcspWf9Qsogaz0TKP6XK42U6ZyxJm3xpQPWKxMDVTDGHZlaoTiFXYbysZRno2Ul/HKL06gVKfqVTnKJ646/Vzluvnkz4v7K1bYbVgmv79wdSoTZ1rKSeKpUOrXXyelfnDcsJuXfrdOAeTKVKe48vjLyRlWQ5VQ4UycMr+c+dQIl9Pvht109PvJX67qcjnzKJ2b31+Xwv76mUcyN3/e/kyVSybOwuj3h1WJ2wD5s3Hl8fNMZUvm5/68DLO+XHUqPlP+vGRqiJvYL3PDrt/NQ7/bGNfvj/PnU9hftht2/Urvcrc+1880/rCbr0b+bI3IJM8k81eWqWGZZP58Cu+sjmxx2crPJlddNeb/D/KyIM/aYvSmAAAAAElFTkSuQmCC",a5="data:image/png;base64,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";function a7(e){return"object"==typeof e&&null!==e}let a4=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 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}let a6=(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)}},a9=(e,t)=>a6({left:0,top:0,width:e,height:t},e,t),se=(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}},st=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}),sr=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=[],(st((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=st((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=sn(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}},sn=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=a8({},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=al(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=ai(e),a=al(e),c=e.uiContext,h=null==c?void 0:c.screenshot;if(c&&h){let{width:u,height:d}=se(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:a4(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=a8({},a6(a4(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=a7(v=null==e?void 0:e.log)&&a7(y=v.dump)&&"string"==typeof y.type&&a7(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}=se(e,r,n);l.push(s({type:"img",duration:900,title:ai(e),subTitle:al(e),imageWidth:i,imageHeight:o,taskId:w},t))}}else if("Action Space"===e.type){let t=ai(e),i=al(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:a3,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}=se(e,r,n);l.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?a9(a,c):void 0,title:t,subTitle:i,imageWidth:a,imageHeight:c,taskId:w},o))}else{let t=ai(e),i=al(e),o=null==(m=e.recorder)||null==(g=m[e.recorder.length-1])?void 0:g.screenshot;if(o){let{width:a,height:A}=se(e,r,n);l.push(s({type:"img",duration:900,camera:a9(a,A),title:t,subTitle:i,imageWidth:a,imageHeight:A,taskId:w},o))}}if("finished"!==e.status){let t=ai(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}=se(e,r,n);l.push(s({type:"img",camera:a9(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?se(a[a.length-1],r,n):{width:r,height:n};return l.push({title:"End",subTitle:c,type:"img",duration:200,camera:a9(u.width,u.height),taskId:void 0}),l};function si(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 so(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){si(o,n,i,a,s,"next",e)}function s(e){si(o,n,i,a,s,"throw",e)}a(void 0)})}}function sa(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 ss(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 sl(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 sA(e,t){return e?Array.isArray(null==e?void 0:e.executions)?sr(e):e.tasks&&Array.isArray(e.tasks)?sr({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function sc(e){return"aiAct"===e||"runMarkdown"===e}function su(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class sd{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){su(this,"dbPromise",void 0),su(this,"dbName",void 0),su(this,"version",void 0),su(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let sp=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}},sh=(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 sf(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 sg(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sf(o,n,i,a,s,"next",e)}function s(e){sf(o,n,i,a,s,"throw",e)}a(void 0)})}}function sm(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function sy(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){sm(e,t,r[t])})}return e}function sv(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 sb="playground_messages",sw="playground_results";class sE{saveMessages(e){return sg(function*(){yield sp(()=>sg(function*(){yield this.dbManager.clear(sb);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=sv(sy({},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(sb,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return sg(function*(){return(yield sp(()=>sg(function*(){let e=yield this.dbManager.getAll(sb,!0);return 0===e.length?[]:Promise.all(e.map(e=>sg(function*(){let t=e.data,r=sv(sy({},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 sg(function*(){yield sp(()=>sg(function*(){yield Promise.all([this.dbManager.clear(sb),this.dbManager.clear(sw)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return sg(function*(){yield sp(()=>sg(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(sw,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return sg(function*(){return(yield sp(()=>sg(function*(){let t=yield this.dbManager.get(sw,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)?sv(sy({},e),{result:sv(sy({},t),{dump:sv(sy({},r),{executions:r.executions.map(e=>sv(sy({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?sv(sy({},e),{result:sv(sy({},t),{dump:sv(sy({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return sv(sy({},e),{uiContext:e.uiContext?sv(sy({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>sv(sy({},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 sg(function*(){return(yield sp(()=>sg(function*(){let[e,t]=yield Promise.all([this.dbManager.count(sb),this.dbManager.count(sw)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return sg(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){sm(this,"dbManager",void 0),sm(this,"namespace",void 0),sm(this,"messagesCleanup",void 0),sm(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new sd(`midscene_playground_${e}`,1,[{name:sb,keyPath:"id"},{name:sw,keyPath:"id"}]),this.messagesCleanup=sh(this.dbManager,sb,100),this.resultsCleanup=sh(this.dbManager,sw,50)}}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,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function sC(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){sS(e,t,r[t])})}return e}function sI(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 sj{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 sk(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>sI(sC({},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=>sI(sC({},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 sk(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>sk(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 sC({},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 sk(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 sk(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 sk(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"){sS(this,"messagesKey",void 0),sS(this,"resultsKey",void 0),sS(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class sO{saveMessages(e){return sk(function*(){this.messages=[...e]}).call(this)}loadMessages(){return sk(function*(){return[...this.messages]}).call(this)}clearMessages(){return sk(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return sk(function*(){this.results.set(e,t)}).call(this)}constructor(){sS(this,"messages",[]),sS(this,"results",new Map)}}class sP{saveMessages(e){return sk(function*(){})()}loadMessages(){return sk(function*(){return[]})()}clearMessages(){return sk(function*(){})()}saveResult(e,t){return sk(function*(){})()}}function sR(){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 sE(t);return console.warn("IndexedDB not available, falling back to localStorage"),sR("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new sj(t);return console.warn("localStorage not available, falling back to memory storage"),sR("memory",t);case"memory":return new sO;case"none":return new sP;default:throw Error(`Unknown storage type: ${e}`)}}function sM(){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 sT(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 sN(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){sT(o,n,i,a,s,"next",e)}function s(e){sT(o,n,i,a,s,"throw",e)}a(void 0)})}}function sD(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 sB(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 sz=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=>a4(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=a4(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 sL=r(9783),sF=r(7294),sK=r(4985),sU=r(1090),sQ=r(2946),sZ=r(90),sJ=r(3776);let sX=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})},sH=(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"})]}),sG=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:sH;return(0,o.jsx)("div",{className:"server-tip",children:(0,o.jsx)(y.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},sV=(0,o.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,o.jsx)(sX,{disabled:!0,text:"The result will be shown here"})});var sq=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 sW=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)(sz,{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)(sL.A,{})});case"finishedWithWarning":return(0,o.jsx)("span",{style:{color:"#f7bb05"},children:(0,o.jsx)(sF.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,o.jsx)("span",{style:{color:"#FF0A0A"},children:(0,o.jsx)(sK.A,{})});case"pending":return(0,o.jsx)(sU.A,{});case"cancelled":case"skipped":return(0,o.jsx)("span",{style:{color:"#8c8c8c"},children:(0,o.jsx)(sQ.A,{})});case"running":return(0,o.jsx)(sZ.A,{});default:return(0,o.jsx)(sJ.A,{})}})("failed")," No UI context",(0,o.jsx)(g.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(sq)},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 sY=r(4291);let s_=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)(sY.A,{className:"reminder-icon"}),(0,o.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,o.jsx)(q,{mode:"text",showTooltipWhenEmpty:!1})]})};var s$=r(7062),s0=r(6130),s1=r(2297),s2=r(5862),s3=r(7615),s5=r(2107),s7=r(4544),s4=r(3616),s8=r(1879),s6=r(9876),s9=r(1269);let le=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))},lt=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 lr(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 ln(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 li(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function lo(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=li(i,o);e.camera=ln({},t),e.prevCamera=ln({},t),e.pointerMoved=!1}}function la(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function ls(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 ll(e,t,r,n,i){let o=li(r,n),a={img:"",imgW:r,imgH:n,camera:ln({},o),prevCamera:ln({},o),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:a3,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){lo(e,t,n,i);let o=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=ln({},e.camera),e.camera=ln({},t.cameraTarget),e.pointerMoved=la(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(lo(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=ln({},e.camera),e.camera=ln({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=la(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=ln({},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=ln({},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 lA(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 lc(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function lu(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 ld(e){return lc(e,"imageWidth"),lu(Math.max(1,Math.sqrt(e/1920)))}function lp(e){let t=e.height;return{size:t,centerOffset:t/2}}let lh=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)(()=>ll(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}=lA(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,G=(T-D)/X*K,V=ls(x,m,y,h,f),q=ld(h),W=lp(q),Y=q.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=a4(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:a5,style:{position:"absolute",left:H-W.centerOffset,top:G-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))"}}),V&&!b&&(0,o.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:H-q.hotspotX,top:G-q.hotspotY,width:q.width,height:q.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};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 lg(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)})}}let lm=!1;function ly(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function lv(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 lb(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 lw(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){lb(o,n,i,a,s,"next",e)}function s(e){lb(o,n,i,a,s,"throw",e)}a(void 0)})}}function lE(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 lx(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=ll(v.scriptFrames,e,v.imageWidth,v.imageHeight,v.fps)).img?t:null):null},[v,S.currentFrame]),O=(0,a.useCallback)(()=>lw(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){lr(o,n,i,a,s,"next",e)}function s(e){lr(o,n,i,a,s,"throw",e)}a(void 0)})})())}catch(e){G(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),V=(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 q=(0,a.useCallback)(()=>lw(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)),lg(function*(){if(lm)throw Error("Video export is already in progress");lm=!0;try{var r,n,i;yield(r=v,n=e,i=t,lg(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=>lg(function*(){try{l.set(e,(yield ly(e)))}catch(e){}})()));let A=new Set([a3]);for(let e of r.scriptFrames)e.pointerImg&&A.add(e.pointerImg);let c=new Map;yield Promise.all([...A].map(e=>lg(function*(){try{c.set(e,(yield ly(e)))}catch(e){}})()));let u=null;try{u=yield ly(a5)}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=ll(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:G,camWidth:V}=(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}),q=(l=D.pointerLeft,A=N.pointerLeft,l+(A-l)*X),W=(c=D.pointerTop,u=N.pointerTop,c+(u-c)*X),Y=M/V,{offsetX:_,offsetY:$,contentWidth:ee,contentHeight:et}=lA(960,540,M,T),er=-(ee/M*H),en=-(et/T*G),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=lv(a4(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=lv(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*V,es=_+(q-H)/V*ee,el=$+(W-G)/ea*et,eA=(lc(ee,"contentWidth"),lu(ld(M).scale*(ee/M))),ec=lp(eA),eu=null!=(s=i.get(Q))?s:i.get(a3),ed=ls(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{lm=!1}})()),l.success("Video exported")}catch(e){console.error("Export failed:",e),G(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)(s$.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)(lh,{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)(s0.A,{}):(0,o.jsx)(s1.A,{})}),(0,o.jsxs)("span",{className:"time-display",children:[lE(Math.min(S.currentFrame,C),v.fps)," ","/ ",lE(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)(s$.A,{})})}):null,(0,o.jsx)(s8.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:q,children:[(0,o.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:M?(0,o.jsx)(s6.A,{type:"circle",percent:N,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,o.jsx)(s2.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)(le,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,o.jsx)(s9.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)(s3.A,{style:{width:"16px",height:"16px"}}),(0,o.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,o.jsx)(s9.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)(s5.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)(lt,{style:{width:"16px",height:"16px"}})})}),(0,o.jsx)("div",{className:"status-icon",onClick:V,children:X?(0,o.jsx)(s7.A,{}):(0,o.jsx)(s4.A,{})})]})]})]})})}let lk=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=sV,y=p&&iX.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)(aV.A,{spin:!0})}),(0,o.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,o.jsx)(sX,{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)(lx,{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)(lx,{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)(lx,{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)(lx,{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)(lx,{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=sG(c);return(0,o.jsx)("div",{className:g,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:m})},lS=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 lC(){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 lI="ZodOptional",lj="ZodDefault",lO="ZodNullable",lP="ZodObject",lR="midscene_location_field_flag",lM=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),lT=e=>{var t,r,n;if((null==(t=e._def)?void 0:t.typeName)===lP){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&&lR 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},lN=e=>{var t,r,n,i,o;let a=e,s=!1,l=!1;for(;(null==(t=a._def)?void 0:t.typeName)===lI||(null==(r=a._def)?void 0:r.typeName)===lj||(null==(n=a._def)?void 0:n.typeName)===lO;)(null==(i=a._def)?void 0:i.typeName)===lI&&(s=!0),(null==(o=a._def)?void 0:o.typeName)===lj&&(l=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:l}},lD=(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)||!lM(i.paramSchema))return null;let o=i.paramSchema.shape||{},a=Object.keys(o);if(1!==a.length)return null;let[s]=a,{actualField:l}=lN(o[s]),A=lT(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 lB=r(8460),lz=r(3896),lL=r(3246),lF=r(1631),lK=r(4665);let lU=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))},lQ=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 lZ={};lZ.d=(e,t)=>{for(var r in t)lZ.o(t,r)&&!lZ.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},lZ.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),lZ.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var lJ={};function lX(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}lZ.r(lJ),lZ.d(lJ,{create:()=>v.vt});let{create:lH}=lJ,lG="midscene-prompt-history-v2",lV="midscene-last-selected-type",lq=lH((e,t)=>{let r;return{history:(r=localStorage.getItem(lG))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(lV)||"aiAct",clearHistory:r=>{let n=lX({},t().history);delete n[r],e({history:n}),localStorage.setItem(lG,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=lX({},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(lG,JSON.stringify(c))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(lV,t)}}}),lW=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 lY(e){return{supportsImeStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function l_(e){return Object.values(lY(e)).some(Boolean)}var l$=r(6356);let l0=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))},l1=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=lY(l),R=l_(l);if(!i&&!r&&!n&&!a&&!R)return null;let M=(t=[],i&&t.push({label:(0,o.jsx)(l$.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)(l$.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)(lK.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)(lK.A,{value:"unset",children:"Auto"})}),(0,o.jsx)(lK.A,{value:!0,children:"On"}),(0,o.jsx)(lK.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),a&&!s&&(t.push({label:(0,o.jsx)(l$.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)(lK.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,o.jsx)(lK.A,{value:!1,children:"Off"}),(0,o.jsx)(lK.A,{value:!0,children:"All"}),(0,o.jsx)(lK.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)(lK.A.Group,{size:"small",value:E,onChange:e=>x(e.target.value),children:[(0,o.jsx)(lK.A,{value:"always-yadb",children:"Always YADB"}),(0,o.jsx)(lK.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),P.supportsAutoDismissKeyboard&&t.push({label:(0,o.jsx)(l$.A,{onChange:e=>S(e.target.checked),checked:k,children:a_}),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)(lK.A.Group,{size:"small",value:C,onChange:e=>I(e.target.value),children:[(0,o.jsx)(lK.A,{value:"esc-first",children:"ESC first"}),(0,o.jsx)(lK.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),P.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,o.jsx)(l$.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)(l$.A,{onChange:e=>S(e.target.checked),checked:k,children:a_}),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)(l0,{width:24,height:24})});return(0,o.jsx)("div",{className:"selector-trigger",children:(0,o.jsx)(s8.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:M},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:c,trigger:["click"],children:T})})};var l2=r(7991),l3=r(2752);let{TextArea:l5}=m.A,l7=(e,t)=>`${e}${t?" (Optional)":""}`,l4=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e,s=a||`Enter ${t}`;return(0,o.jsx)(aC.A.Item,{name:["params",t],label:l7(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(m.A,{placeholder:s})},t)},l8=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)(aC.A.Item,{name:["params",t],label:l7(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(l5,{rows:2,placeholder:s})},t)},l6=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)(aC.A.Item,{name:["params",r],label:n,rules:a?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:s},colon:!1,children:(0,o.jsx)(l2.A,{placeholder:l||`Select ${r}`,options:A})},r)},l9=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)(aC.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)(l3.A,{placeholder:l.toString(),min:0,max:A,step:"distance"===t?10:1,style:{width:"100%"}})},t)},Ae=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:a}=e;return(0,o.jsx)(aC.A.Item,{name:["params",t],label:l7(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,o.jsx)(l2.A,{placeholder:a||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var At=r(316);let Ar=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))},An=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))},Ai=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:Ao}=u.A,Aa=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=lq(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)(An,{width:24,height:24})}),E&&R&&T&&(0,At.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)(Ao,{strong:!0,style:{fontSize:"16px"},children:[l," (",r.length,")"]}),(0,o.jsx)(g.Ay,{size:"small",type:"text",icon:(0,o.jsx)(Ar,{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)(Ai,{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)(Ao,{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)(Ao,{type:"secondary",children:p})})]})})]})}),T)]})};function As(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:Al}=m.A,AA=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:lW(p)||"Action",D=(0,a.useRef)(null),B=(0,a.useRef)(null),z=aC.A.useWatch("params",u),L=(0,a.useRef)(null),F=lq(e=>e.history),K=lq(e=>e.lastSelectedType),U=lq(e=>e.addHistory),Q=lq(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("")},[])}),G=(0,a.useMemo)(()=>{if(x){let e=x.find(e=>e.interfaceAlias===p||e.name===p);return!!(null==e?void 0:e.paramSchema)&&(!lM(e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0)}return!1},[p,x]),V=(0,a.useMemo)(()=>{if(x&&x.length>0){let e=x.find(e=>e.interfaceAlias===p||e.name===p);if(e){if(e.paramSchema&&lM(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{isOptional:r}=lN(t[e]);return!r})}return!!e.paramSchema}}return!0},[p,x]),q=(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)&&lM(e.paramSchema)){let t=e.paramSchema.shape||{};return Object.keys(t).some(e=>{let{actualField:r}=lN(t[e]);return lT(r)})}}return!1},[p,x]),Y=(0,a.useMemo)(()=>"aiAct"===p,[p]),_=(0,a.useMemo)(()=>{let e="In-Browser-Extension"===d,t=q&&!k,r=l_(S);return e||W||Y||t||r},[d,W,Y,q,k,S]),$=(0,a.useMemo)(()=>(e=>{let t=Object.keys(a$);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=a$[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=>!a0.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=a$[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=a$[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=a$[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!a$[e]}],[]),en=(0,a.useCallback)(e=>{var t;return{key:e,label:lW(e),title:(null==(t=a$[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=a0.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(!G||!x)return{};let e=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&lM(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===lj){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,G,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=aC.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(!G||!x)return!1;let e=x.find(e=>e.interfaceAlias===p||e.name===p);return!!((null==e?void 0:e.paramSchema)&&lM(e.paramSchema))&&1===Object.keys(e.paramSchema.shape||{}).length},[p,G,x]),ep=(0,a.useMemo)(()=>M?lD(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)&&lM(t.paramSchema)){let r=t.paramSchema.shape||{};return Object.keys(r).every(t=>{let{isOptional:n}=lN(r[t]),i=e[t];return n||void 0!==i&&""!==i&&null!==i})}return!0}return o.trim().length>0})(c,!!G,z,x,p,O),[c,G,p,x,O,z]),ef=(0,a.useCallback)(()=>{let e=u.getFieldsValue(),t="";if(G&&e.params&&x){let r=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==r?void 0:r.paramSchema)&&lM(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}=lN(o[t]);lT(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(""),G){let e=es();u.setFieldValue("params",e)}else u.setFieldValue("prompt","")},[u,U,b,G,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(!G)return null;if(x){let e=x.find(e=>e.interfaceAlias===p||e.name===p);if((null==e?void 0:e.paramSchema)&&lM(e.paramSchema)){let t=e.paramSchema.shape||{},r=Object.keys(t);if(1===r.length){let e=r[0],{actualField:n}=lN(t[e]),i=lT(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)(aC.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}=lN(n),{isOptional:a}=lN(i);return!o&&a?-1:o&&!a?1:0});if(i.forEach((e,r)=>{var a,s,l;let{actualField:A,isOptional:c}=lN(t[e]),u=lT(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)(l8,As({},g),e)):(null==(a=A._def)?void 0:a.typeName)==="ZodEnum"?n.push((0,o.jsx)(l6,As({},g),e)):(null==(s=A._def)?void 0:s.typeName)==="ZodNumber"?n.push((0,o.jsx)(l9,As({},g),e)):(null==(l=A._def)?void 0:l.typeName)==="ZodBoolean"?n.push((0,o.jsx)(Ae,As({},g),e)):n.push((0,o.jsx)(l4,As({},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,G,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)(lB.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)(lz.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)(lL.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)(lz.A,{}),onClick:w}):e("Run")},[f,v,ef,eh,w,p,y]),ex=V?G?ep?(0,o.jsx)(aC.A.Item,{name:["params",ep.name],style:{margin:0},children:(0,o.jsx)(Al,{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)(aC.A.Item,{name:"prompt",style:{margin:0},children:(0,o.jsx)(Al,{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 ',lW(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)(aC.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)(s8.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)(lU,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,o.jsx)(Aa,{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)(lQ,{"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)(l1,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:q,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)(aC.A.Item,{name:"type",style:{margin:0},children:(0,o.jsx)(lK.A.Group,{buttonStyle:"solid",disabled:!c,children:a0.map(e=>{var t;return(0,o.jsx)(h.A,{title:(null==(t=a$[e])?void 0:t.title)||"",children:(0,o.jsx)(lK.A.Button,{value:e,children:lW(e)})},e)})})}),(0,o.jsx)(s8.A,{menu:ea,placement:"bottomLeft",trigger:["click"],disabled:!c,overlayClassName:"more-apis-dropdown",children:(0,o.jsxs)(g.Ay,{className:`more-apis-button ${!a0.includes(p)?"selected-from-dropdown":""}`,children:[p&&!a0.includes(p)?lW(p):"more",(0,o.jsx)(lF.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,o.jsxs)("div",{className:"action-icons",children:[(0,o.jsx)(Aa,{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)(l1,{enableTracking:"In-Browser-Extension"===d,showDeepLocateOption:W,showDeepThinkOption:Y,showDataExtractionOptions:q,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 Ac(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 Au(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){Ac(o,n,i,a,s,"next",e)}function s(e){Ac(o,n,i,a,s,"throw",e)}a(void 0)})}}let{Text:Ad}=u.A,Ap=new Set;function Ah(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 Af(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]=aC.A.useForm(),{config:f}=X(),[m,y]=(0,a.useState)(!1),v=(0,a.useRef)(null);(0,a.useEffect)(()=>{Au(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=sM();return console.log(`Using ${t} storage for namespace: ${e}`),sR(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)&&sN(function*(){let a=sB(sD({},a1(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield sN(function*(){if(!i)return[];let e=sR(sM(),"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)(()=>{sN(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)(()=>sN(function*(){if(A([sB(sD({},a1(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)(()=>sN(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 so(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=sa({},a2),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=ai(e),(o=al(e))?`${n} - ${o}`:n),actionKind:ai(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:sl(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)]})}),sc(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=sa(ss(sa({requestId:i.toString(),deepLocate:h},sc(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=sl(e.error)),"result"in e&&(k.result=e.result)}}catch(e){k.error=sl(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=sA(k.dump,p);e&&(A(e=>e+1),C=e,I=l+1)}s(e=>e.map(e=>e.id===`system-${i}`?ss(sa({},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)(()=>so(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}`?ss(sa({},t),{content:"",loading:!1,loadingProgressText:""}):t)),n&&(n.dump||n.reportHTML)){let t=null,r=l;(t=sA(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),G(e,{title:"Failed to apply AI configuration"})})},[i,f]);let Q=(0,a.useCallback)(()=>Au(function*(){try{let e=h.getFieldsValue();yield F(e)}catch(e){G(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:Ap,lastRequestId:v.current,sdkReady:m,messagesInitialized:T})){if(v.current=e.id,Ap.add(e.id),Ap.size>100){let e=Ap.values().next().value;e&&Ap.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=>{G(e,{title:"Execution failed"})})}},[A.externalRunRequest,F,T,m]);let Z=Object.keys(f||{}).length>=1,J=A.serverMode||!d&&!C&&Z,H=aC.A.useWatch("type",h)||a0["0"],V=(0,a.useMemo)(()=>i&&"function"==typeof i.getServiceMode?i.getServiceMode():"Server",[i]),q=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||lD(e,t))return!1;let r=e.find(e=>e.interfaceAlias===t||e.name===t);return!!(null==r?void 0:r.paramSchema)&&!!lM(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)(aC.A,{form:h,onFinish:Q,className:"command-form",initialValues:{type:a0["0"]},children:[q&&(0,o.jsx)("div",{className:"context-preview-section",children:(0,o.jsx)(sW,{uiContextPreview:I,setUiContextPreview:j,showContextPreview:q})}),(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)(aH.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)(aY.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)(aY.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)(aG.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)(lC)}(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)(aV.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)(sX,{text:l,className:"progress-description",disabled:!d})}):null,(null==(n=e.result)?void 0:n.error)&&(0,o.jsx)(Ah,{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)(Ad,{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)(aq.A,{component:c.icon||lS,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)(lk,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:V,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)(aW.A,{}),onClick:L,size:"large"})]}),(0,o.jsxs)("div",{className:"bottom-input-section",children:[A.showEnvConfigReminder?(0,o.jsx)(s_,{}):null,(0,o.jsx)(AA,{runButtonEnabled:J,form:h,serviceMode:V,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 Ag=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))},Am=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,iVBORw0KGgoAAAANSUhEUgAAAM8AAABzCAYAAAA/iVZRAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAGpzSURBVHgB7b1dzG3XlSU059rnc2wqdK5fEAXV8megH/optlAjNTSVGwRPCCV5QOoqqTq5UBIVGkjCn1RIyNdFo+pONYorgLoQTccWP9VSQ9l5oUU3at8SgjzwYAcEEeLH10gQoW7hG6Fu/3zfXpO95hhjrnU+O4nt2I6r1Ce5Puc7Z5999l57jTnGHGuutd0+xo94/hu37CG7tL0/YdEfM9tvWcStHrv5db9068dGYdZ3PNffeq1/HsfzDyzsQT8+a/np8X73V3O7Hg9i8/vb8fmx3QO7eOi+33nmgf3tRz2e/3zcsjfs1ht2fXk06OXRana05aX1Fnv45WhHtOxozqN1/bhuNpo+W9jw+njV9Dr/a31z8+b384ps9mo0u+/Hv09eP/zynRf8Y30N3D5Gj3jxW7f2/sbn/do/bf368wcoLl0AOADiBzJiAKXvjvciP/PA87gYCaTx6ARS6Hk85TYxtj/+j3MfOBs77sflHP/Xe2GvhbcDXHkBX47eXnVvL58e/uTLfufu70tg/eU//vrl1RtXTxw9/DL29tgBhst9jyeOBrt1nP+tzvbJprXxz8fro0ENTTra2I/3RhNjl9GdMBn/9bwSPlo+d9XM80ps473ANge4vB2vW27/8vH65X6yb59O7eUvP/vIffsYPX7q4IkXn7+124PPH234RYv9tic4EjBHoNoTL7Zf+2SRnp/ndehHfEuwjKu2h67mGWgSUD13M04WVxhgyhdhvgDG+C7eOXrC+DjGM69+Xt3w1469f9ft9PLxq7/bTp94+ZEv371vv4cef+UXX3viCPZPRD99Onq/3fsBmPBP9TzXEZdGkzviE16PFvWupjv+Plo+207vATxLUwbAk397th6A1igGLNikxx8tEmY+mnw7fhjgOV4fB7RZNnvb/F73/lx7aLv35d/66QPppwae17/z25cPXfcvHkzy1aOJPzXYxMkwCY7jdey7rcxDQASuaudnAzSBmFag6Xivk43y6oF1EkMrgBQyzQs8+oolcPL5+Pq4whNAyV8Jro2vtx9EtJePz14+/v7d3T5x3+xv3X/0az9dlvrOr3z/8vqNIaG2Tx/NeYDFn+iDWbrfOgBzHHtTc45zHC3nBE5kEx7/AeNUcwI0es+imrIz6HRAJQiHsXsXUPK5eT73BIthuwEWAaYNiBkYKZno2OGGbQaQjtfH6dizdtqe+/K/98g9+yk9PnLwXH3nL90+fvSpAxi3R+cfTEMpJjAcqQ2enSwjtkF+gvzGx2UezFOskwxDYPQFUABNhlIz4CcWfaYrTiY6ruPRWaTlxnuNmF2BY6ktjo7n2fmgN46/T9nR3E/js+NwMqQe4Nle6nF69bjq949D/EHvDx3Pcbx/uv/Gm7cePH73C+8LYC999aXLfHF9uuz9+OenW623x66TRYbk8kuL7VaCoo/YNJ5bHiOa6vi3b6P1PNb3Bsug+Zwcb32JTxS/xtC0ME82zGQbY2wa4FHrE0BH8ySkKOHASttQzgMkYQLTkHCeeRGkXDslmBJAA0it+cutxTO//M1PPmcf8eMjA8/r33n+8sL9qaMXf1EyDOC4JtNIrvFZzFKMs4CIr6EvCKrKgaZUA7DAVrFe/XyIfSDdDCnRUA3Z0Vx7yq85wDYAQUAxTAKHx1U/OuvxE0dINUTzo9MeR7Uhso/XMbTHANXGvwfw8m/X58e/+3a8dwDBMy4cGfQep+MUtkwQDomF7/btcrLGdmy/DWDk62O747sbFO343g7gHMcT+M4RHMQw+Z2FbQQgSjTFn52xRu+PHj7YpXIggma0zE6YCFgkblMrJ7A8m5t5D/jJ5j/4DuN9giclWyMTDcAk+1DSTUDdP11sd/+Zrz/ykYHoQwdPvPT8rev+0FcONvmKxfWjU47tyGumVJNsi+zw+14AC+U1/RxAyT7RF4bpUSHSesyQ2ZHbEDxuk30csZFp1JAR/CiATUi2fF5znxEGwToInccvbA72ERsNsGz5PrY7MfqPq37KK38A5WiWRvAAJAmeBMgEF8CQgDvO5yJ/I4HRm3FbgFUAGseQjOICiAlsPV8vQDH8ncTM95KZogJHNtueDdGCzJPsPD5LMEi25QVHrOlG00BSTYzEHpefOqWdT0Mhm3azDF6GXCeZyAeJJ1iScQ4ZByBto9m3noBKEA3X9CLu3PlTf+c9+5AfHyp4rl76q7cjrr91sMul917MAsm1u1hlMQmKebws6LcZBW8D0Zk5EItdHYt5QJAIRA7mSUYaF6ovsg5GgRU5WXZ+yyscyz/mPpaggUQbHRSd97jSeA8hMtD5s9MPWbfvg6UGk5wopU4AzvhOPyWD7JNpLN8TqPQ6EozYd0+W8wGmAstgHf19nMOevRpssyfzOAA5WLNLorkVC6mp7Zx5xCjpw5g+TyN62tIgLtgCnk4Cm1IGAs0CS9JGTpRkPs0DW5hnBY9tzH3SRACQ2tEMfrI0F7aL3O2z7eLi6Tt3PzxjodmH8Hj9pRcv33rpr74Ysb94NNNjbhWErF67p0Zyxv9sNDQmtsugiBZOByYDVSvRlddwdPsMRS2/wPfxjzvJf60hS81/TFJFQu71nL+DHx2P7BOp48pBmP62l6gxUpZEHjdJrWRRgZcyM/e2A7AAbwdSk2F7saPwjsTDI3tyknJ+zQO0QUDDvah0L3t9fhtxKpP+cKucJYpVwb2xOI7jt8YudM5sDPzpBZbEQ+YyLuDEcn2DBxbzu5nPhEDEf/3GezhWqxxKSrxzo/p7x2lmEBiGbIDaRrtdX+d2X+r71SvPPf3/PWUf0uMDZ563vvviV45Df+o4u0ezw4zT3uWkHfQ6LktnztPplkFoj161uGirPMteNvYxxnlSWVGuxRm7lIRjL0o26YtZ0ElAle9Y/qfTDWLYzKtSgxLBfmBL/uPgrpRWq/uW0q0kUsq2TjbICH/KSE/pFpRmhjzoBInXT5nDgEkg5fqQb9xP79p+owTj/lKu8b3cD3KeTtbJnGjkPUHj4ID/nnlVky0NK9pgUUda0YgFXeZA5Tg2zQA5bgDWGTMR26b4kc3b9FnYmfufvXGO9ei104HzbNpetrVP9kknDubB8fp0jM6dnIw0Xmd8ve8P9c/e+dVH79sH+PjAmOf17x1s8z/e+2tHT3zmaNJHp4wasdxnhJYJnP+NFb5vA7JLPVWQT77Ck2hK9KL3xDYHz5O5HH9Tqy0M5fU5pTk/c7rSbvUT9aXJi3xZjykFdWoB0DLkWzoS2iSAurBimnCxiq3gZvhVPBH4e/XgDP/ZOGQQxBb1UMYF8pxXFNeYslVn9mIdy6dkkbMxnPWZV08sFkYzwevKGhk7Cjiu74edASwqpHEbfom/xz5QrCOfCK4gmapipmfarNSZ213a9fZ/PPfrHywLfSDMc/W9/+b2QSC/c7DCo2jJmcOkcuZgpi+VArCkd3YU5T5n+U12usFatuQ5fs40vBLcj3pmX0yEuW2U3qCZkLlPdfJIt42AnwBAB8UIene6cj4ZJ3+ikZVgFKRdRHcL6m1D1O9w1vgvhnvWK0/J/Ie5y/h3cTRPMzGQHYy0DzfvYKEd+2GuA6ZBjnOabluZA8NkGIyTDEObmseH/MbnAGizKY04jhNzcFQ8DFW45D7ZRGfACmQ6MATESNl2LiMhPzPYBVbGgSWZ5whQLKZmGgc5vpPqm0qd+Q/dtzGIelAN2GkwDpgI35OhMAZaD5F354NgoZ+Yea6+998+deDhyG/i0coHDG5kEsfQOYjT+Axv4srYwgLIYWLmLGASz3zFFwIoZmHrMdqRpSz0t808ypXu8LtpKePNqGhZpKbEBppkhlKnw0qSWsKjMgGPYplCnbvYxWeeBKMi0cp8emWbEfqDNTDZ13oxCWKKBWINcx0kMczKaxzZKsQXO+CQ8qArDzJ9ziMr97AOxed3dEgTODh5spvNtgPV13gPr36RpWwEiboJROVuPOY+h+wiQS4TtYc8oWyqvfM9FJMcgYf5UGYGntv0jNdx+7juL37r6689YT/h432DJ1556dab//N/9/xxUHcTHPMTM2gatLMvuuwAQvgNobZ08No2jYTZ+HiLIBpgmt/xAkXuoAEPvgDQCcoBGIEM20yzQlaGS9c1L7lHLPAyU/qV9iyGQlDI04ZPBXqS372E5bLIs52YyPN/U3tE6ZnODtbLEh7JCAvJ1BMTVGfSSglJwoqVEqFxqXkCfcnvKO2yImCcOtli2s4mTM4rjQqDMGG1L9vr7AOu9irTsI+AMVG4hh4wuXZ4PcyInvvbDRJt78yhxICy0yONixx3p6CJAZzxfj73Knl87Mj1XvqP/swPvmo/weN9gef1733n8q0333zxaNrPkaQRk02dSBddmp8PxSWxROUtjGhiDZpWAzDZ/xsZZgLjjLUGP1euY0vuY8t7fv4aCBp5UTtnJquvxTxEY/+aO4hZq4NTq7xMzUDYEUTo4bzKZWwwPrOtYkkIio2wbzhu44HI68VIdNNMrNKZaadX4hwAxRn0cuVi+Tlf5ValbWuuY6YOD6ADNLqkNsduDAOmEOUAECQdHTVfQBh5qI4WEJPFBGaaklG1czvyNByOxqFoUO7lNIJhBuMMgI3n62ODwTjXWSoJ8BxuXALsQNo3nvuN958HvWfwvP7Kdy6PTv3icRpPeHWSfNB+JSIkt4zD8PlK27qv/X+QUZsWdtjUeerGSkS9rOdz6WaLUUD2adOilkJLoFisYMqfajy8HPNsYiBbtzFbORRa1EGxQURNgjLW0M3t+d9+1pZuC+OwSKzaSqqQvbhLS9UvLK1HBYQOJDcRzO1K7Yp5JhAWsIaOslN7iRlsuuA4TNJYsQg2G8ZBMgNDXwbNzuC5yDSdmRfZufk0LdwX4lXDT1Y0x5h55V3O4AE2Simqz9MxRFOs8o6VYHa9D4Adacfe737rN37wvgD0nsAzgNOuthePtrhkO6gfqV10QQw1IXz4DNKl2rykUqh3ogbDnP6krx2YI2JR+k5jO87t6WkCMD7zmPH3mZRrLoDoPfT6lmzEjMao+Uws5ZJrAPZkS0beYC4UMZOkGc+d4qrazELWusu26yUic4xG+U/1OLZrYBA+v5+5EX5TdBDMX9Y8ZjmaWTUhMJm5DIEuUERZy66qgMAR6oJSXgFidfFNxoATIDEl3NyHBlNJriSTPCPEjy6ToQOtY4MdORpkHEBysEj3fL8vzhpYqeSdpJrGgVjMwmcA6nqPu9/6d947gN41eEaO41cXL9oAji9XxGbHscrdGQmX77OfrxlPVJ6gDRIHW5BwwBTo/OI10tUNUCkfsgUwvgIpBwdQqZuDqqAML8A02dZ17LX/CvaugzRfVePZJ6bYyWe8IcOAlfj4eQ6+k22sor/isb7OZFxmFOb7ZRKfnQSERGCN7VlCwzHKSqFm2Z9HjVMZ84Y4z0fMKgZKitUgagepMbmTV+ETDEMtmjRmBUaCEecak1FKAmK8COCyihUYa+pk0k45KUnJkqIothoSDvYgcilWi6v2eHx23fFcJsOecSyur+Pun//6D75i7+HxrsHz1t6/dZzyJaXG0nccp148w56m/rXkN9UdvMXSEc86q+gaH6lHynGTFCvg6DWMg6o08GIvI7Ph/Sa6Q0VhjfvwRVtBOfWYL7kSLbflMBHPxSwgBvYsvFEf4WRmr2QOgV5UdCAA8f2YqAqGekk8tHxk/tORRHu3WUkgbyJ/h8ULo5PvzHvEEmdM5MWoufM5zWBhj0DyXgwVOqzKX21pkJjbeJmAynloMJChwGZI/MOlJzkQO01JPmdlgZGF+DcZJ38o93NssHMUZN/hyO38d4wF+eG++ZBwKNaPb/yHv/HabXuXj3cFnqv//aWnjl/9PNuikmE4aiEppjQ1AaFnBFlj/zRRkDqlNsQPFf6cJkCLKdHIQGZ02AjAbaP7htLbc1YyKxCVqdDOADKrdsh24wcbcxn8NAG6tohPUnK5dMbvLURaMdcqecDrrLdR2GCsrw3x6MIQzbugq43hKlQ57FR/zH9uzsQggKJynOUnYsl/epzLupWJcCjm2peVfzifTYe3gMzIGthPyL9wbeNONpy2dyxSMn97NwIr6MDpWEMWdrlnCRRY0wKQQC4JRyubOc+eYILBkIzFPOjYzfPf+sZrl/YuHj8WPK+/8tLlcVZPzQQ5BT65IbwkTBA7jFw2M3PzM1mFi92cwdndCyx2xh75C5i4oe2Y9wgorRG7cswaTQHta7NiJPP5naz1EBPhsyHblAehsLN5gWlhoJi6dMmb+LQk8cUeJplVXYQt4aGySTCPLGvmNBYr/hZggftDHY+fo/lbAWJ+dVq5tKnPQCO5xXI4OzMH5ncpdcUStjBFH1MHMjdihTVyFAJn91n3NqUgGMOEdx0nK6/NGCP0+zoeHkvJtwLOIunScfMa+5EjN/KbPbctuQYW2rPIP99H/mO3rq78W/ZBgKf1YwCU4zbzaqpXzMhJNol6bxnwXHlF9nNUFsTh4oUxtA1ylxuGgJMhBDAwCmWakq4CV5wBa7ILP8d+lPsE5R48BZ4Q2EnnGF7sSafO57kVu1pgdNvWEy8mFhJmiDVbaMImzqw6W5XcqCeVBWbs5F0DmiaCEgOdWdKwtX1im9vryiJZzxMhHtPMg7yC9JrHhVxnAKEUpqSYgBZWOQ2YqexpzTCljMNh0N6WRY2Dw29nhSOkaTdNZgnUynZPy7rDsCALlVGwB42FPY0CmAUAUVaWD5m3g42CTtxn/oM/89qPHQP6keC5euWQa0eeowscFNHN50AlI2RUP2linBJjFsoXOF4znr0tLlvJqaboPt0yW0DRVgk2xmi2mFXVZKW2LTY2D0NsJKA1AXNzR20nWWdKuphAXt/zOVQ1/45Fk+qrKPXB2VuR8/ioScwHSVvSfhVVzvaen1LSYBO3FWTZE8hC2bkKt5UrOKqs3ZjX1HF3q/q0mAULSNwjFqYJ+Ge7z9wEecsEXZ8uiC1RlHiPYiOBAoffCTavwVHlQHOwVCZEgiLAUlXT5lPOyYVjfgc3bTJRSbtkm7jm+A/YZ7BQ+E4H7mq3p/7cr/9o+Xb6YR8MuZbVA+OP5kxQHbwuwGR9c4ma5dt83TB5A0VhDc85fbkvWqeZM/Y4sYxmbKaukPNvO2NYSjWODmSPbGhhmJsQT5BzmDM0QILqask7iWX8XEDC1YDAEu8zrVJCQO8hH5QLzhEoYhzV2d1rDItw0vdTaKGL8dzEZ47fIW9Pfq+gNRnH0KFdYVpJf051EstkDRuZYtTAHZtj3QGwU9fCHqbB0AYLmbmFiowmM+CSnjGJz46dr0FK87tlUdOc8JIgsbKSoofkG/ZG1guE3WD7MW/zpYflMUNcYxKWIoi6UOuhsipkyehOrggDmPsS6NFljy50K072jeOtL9gPefxQ5tnMnyo4qKajpBcHsTLSeng5Wuwwc+pMYs69BkDneSfLtBoQ1eszJpl/h2033m+sEhx/b/la7AVrOhlmmwzVFuYBG4m1KtfB7iYDChRRbp4XY9qMGTH9BD/TamvnEJucocKKXapZ5N+ilzjZCrDKt9XL4BWbxjW41xojgGTjdGlKRPYdM5ppnb1F+cJKfwRslBwzOwOOcF2JPKUbrJAp3fRdbTvYJx0yAA5OnOrgyFSdxDwE4x7FcthnTLJlAWtKOOQzWVWQZThgkCnfaBREbkO7emfN8mCeTgNhv05XDgx0bZ//d3/9h7tv78g8r7/yvUuLt764XmRGbAh9ls/oqhO7FTXRW6J0DC51w6m3tE2NWzhWewDxAwA9ZztqnA1s0hm9GxnG8zKBYToKF3P3GYvnpVUg7wuTZb7TFcoRA8FmDM0ZotIM4296BoMcsePoTYv1J9yXIuu8wmdsBFdxHELLAXLniXsVeTLAV1RlE/oyMFo2LVDDshvkOBxBR3n+TMq5n8AvqMONg0cnRjLenc6dGAwAc+LStbAXOzWmX5uknywP5lPrwh9kjs6rfD4tW9tQes1uU86bUesYS3twRCb9a2v/E9XlmiJjbw1tAccClxSDbJYU3FiU0mjMNObC4xjHpc4if2mZsKeOTe/ZOzzekXku2tVT5mKMup7FOuszCYgKV2Tq4qC1TIcdrc3SGXq7eaAVzdexGkmgqjnX4KfPHGZ9liM3mCrZJsg6PplnZSgny2hWFbZx5V9iO5yTqeLBNag6x5CmVce8B+frU2ZMJqPiCpGVVY4w26nSGbCBch183Ku3OwHBjoE2L7NgulyxDCzWKP102nxx3BjXCijcbmdcyFkRrkJQ00BpsVGRHr43P7eFMUyOXY37+GQwdOi+ggzsWfnQfj5gOs83WDjKZ47/lFWdec1w1DrY6Zrvj7zneoehcDBP5kI7/o2g95lv/FvvzD5vY57BOhHXXxSqXfm/nJagPZ0xC2oBb1GBC0kNvWSUtVYnzT5ClV6qOcdv6pKZjNES+owwldNs2G5IMoTzvES2OdKmzcCQ+Ay8jByIjEimAmOZ6jrGpA8uM4ParCQqdqumYzHT7DCYGlB0nao5ZzrAsYfMU3pYiqxsLpyYGwkasbeHlqydDGQYMJ9Svot5p1zTcfVqQlc9m1PWWbFKTPcLbOCSVn62Io7PdA+dnwE+MEDR5XwFT9mqck+OWfaeCRzlODJYIMzWXKd42B35GhcXWdqPTS97MIzWbcAfNCaBIdGQfUHebDA5WwZD8itt7ttkoI7Xm6mKYxRAv5193sY8m13dxinUQTvcYq7JUOX8dNwWaeYrc9Qhz0MNafKK4rKZdSqqCpBz1uJtjDHzF85w4t9rjuM13jOdNuesKXyXeZDe24rBAjnSHB8qS7tlQHD8bcqRKn11ndb6HhnHKOHc2I5FOiZxj36MrLrgxeJOphOEHBcipKxby1XojvEzSMQlV+F7c9VPfqcmqPZyvDJyxwQZI74YgMbCPkEWM3+Zwnm3kLcCFezlpOU2e0xmqeoFS1sZwNT+jLkVjjkdt7HNNZ5ToqGSGsy6Zw7kcd3neNB+aMqDXWr8Z/13PZy3ntuzfAdu3NWx0+tkq/jS3buv3bqJlbfnPO5fsSWnYRVBKuCUYMwVdIGBkxZYvEIRGzAH+hshDTZAhN9TlyYryHnK/KAPBmH4FOXo0nvtNwdOx7MYQfN1ejUxSwAUFlvUNAA5aMYhxhFq2waWIRGW5mnKg1y+kwCQLZULAjTyMpJSNynOhugvwIxFg8DYrjRIkdqowAK5DG1qdSrBTH5D2CRm2VfGFW/oXvDwa3koLfewZ5fdzlmmAOe0kBvXLjCxBiSUGNDp4rkXm6AeTZMrZBYoOaVLjt8IW5aqilWaMZdSh7Pz/EdMxV2KHVz9LPn9OK7QYMewo8eqOsGuk76QoVgUNA9iQ+KArsBuCtkYWC57dJUt/FOnrX/p+POZHwqeIdnc9ydwuYIYAl4aLWafGoqEAwuaKUqCiGSIbhJMnoXHTOi2qA6eHZhzfxSlAeIoWUXbJt/TAmNpWyMm53Tu8d3NccqsR688XFrFOYixmRYdIVjLS/WqdwH4jk6f03pzgwTLeK1Ef5xFy5/C0GKjOZYGQ5UeTTubLqXrmh5typ8tXQ+3wgpA7DjUx5WDltyqKmJbHKjssBAyY4Cw+2a1rFQBBWyQV6tzwDJUUqOqaSdY8NNVoOnotTQWZm0bWoFyEMMRaRi0YkVKt7K8S772gsvCRMzmNaJLfClX4DexxwRLywFSoB52dP5Wa+gu3tiYTkHQQK9jRCX3eSb5QkjO8zkA9Lmb4DmTbdspPqdAZ4shMF1ZyRMHC7UtnEWWvkg4LCqc4TdS5lC6+awvA5L0WaPVrNKbknO0nUtabaOWDd87DtZUmLadKK+2KdU2fgdlNl77WLfF9lG/1SjvKA+HhPNN5UC5OJhkYZoG0eZ5OWWg0zZnY+ACy5KXZM2F/KDp5NRlVcUMHMZGj6pARpboGjyknHKO34iJYpVN+NdK8gyw7FT1uW1n0abPXKgTDNcMm5BYsJcHm+wEyA5ZlfIpJZiDWXZIsuDIGuVZjM9pYcesSnDtQ2M/ZVsXUDg4q89kKNjO39ppU+McuAymCl8hLIJTE4L1br5INk+5xoqDYSRcZ6FojNdjoDSLSncMpt6+Kd1O50jyz6/yyJXrinUSuig3Rzjp6BgI62SHTtbosrXDyn0rPE6RLpFfg5+BDi0Gk5xjvAFLuX6b7MLgHOFlWQdlmTut8Vi/77CrHYQfOC9qOpeJmf0yJDDUZU00FVXZyQGTjFvH1WpbQ9kn+AkIaFj6EsM2eI3ZPGCgncSHNmO5m/If5IJIofmewBJrbkDrV67VnuACWc8cAzMv8dtjIcSQPY3CzbEAIt20zogYJkOhrinG+61ydMqqlILgEC/1G3BUp6cY7AP822U4kJQLONoHWUa9x9AT5FZSwiWlzzlRQSbyKW6TbsVCkOSMGkOsjKSJJm5JPR7XOKMRhu3NNA6eext4Xv/+MbZzbZ8JBEXi3XWkTic0/5PlORmTZHTog/Fqyw6EM6AUw1QauFmQbAiDGqZjZ7Q5PdmLExMQ6qFysSBvWDlgM0cjN8813QRuNH06b7oiDdt3cjcBO8gtNAGmJf5G7RQ5Opj1MAwC3PzAwCsjHdudzOmy1o10bmxcqcT8Xb3O6Nl0eOy4MctlFMmTNRoriIH/gAPmBXEyAz47dn/NtenAIK2S9bpNSO03JgsROOhjsYAk13cL5GRc9s45AIvvw+1zxSDlU/qOMweyVaDCoUM3n25aaW8N/PGgvPoHnr3QFY2ZJwAlp9g4CSnmTyL/gbrLIcZABt5I6Q1MyTTtYKx++x3Bc3HVnhjxiL8FyaXO6+xoOvDMd1pUhp1aEoyQh9nSMw7mD2Kd0THZsY0Ws0+ArQBozF1iRnw2EBgl2Owu9jDGOPbMClk+wWfKctl0meH7OExjgqAmnsBK/BFQXA1JE1zopEVohLLpalpdN6tEn0wzenIybP0bBdyO+AMgaR4EBjPda38u1mmBfMejKgyOv3evfGfKNOY2Q4KBKdoyzqLxF0ixznxIOQ0LL0ta8ZngGfvtPiVlVU5nR99tMgX4v2s7Xq4+IbMwStg5wMBsUrOhDAepSFhZwkGIu4zKmBzF1S8YhYDbHMqbl9E0mDpUd945kASYV8So0hFfx7ScO28Dz3ERP1OZnev/YlnZKYEOXBNyGU2Nul4rc5r0fcuXqmuf3Ws2F4KQ5FmiipeKHTx4GFGyDvyal7aZCk4SCIm93Yt9cjH1Dsah5IACYzVD7mawISUoWn4dP0KHHiuebk3jQNmkwSw5zZJts9keDLW4ygRrY1EGQYIxMJSzZX/FYOxkIOYljs8Gy+SKn0zGd+QYAIzbnH/jCaIyD2gVY/YQVzVVfiOw1QCpzVKejovmc5yHXiPYqQZFR8oEUCMuqZqAUhINJCmHGEer4Bw4Jee4Xa8QrUCkLshtU9HNagaihyxjKliwFUguALK7sRJEjAOPrrNr7WYqAR7t0gKK49j01le/+v3LZ5752ftn4DnQdhud2UPTfMM0IBq44L3zOLaQw2Y1aGqV79aoPPOFkHMFm9mofaZM84onK17NajBTf8fs5OaFUdMgaZJNtgJXDaBsy5xtz2rJQLWgabZYysgxtBw+j1nCl8VT+UOZCfA3ey1Rgzwmw+5k3mAMgC2dV8gDbBrUWGk2DEDk2NIo5OwAVScL7Q41H8xNMske0gygSlbie/lvfG+Mu+TYy0iSIa2y0qkWLjQm0ASN8iKYEWEqxSlTwpckfim9ofuW83gIrvxE9W3Bax7VwRduAWhlZBFENShq6/sl4mav4AWnjYZ29oJZQdJmoI56f4KIu2wec+IMnNiAVZXBHGxjeZ5ZoT1Y6PTQw585Nr9/Bp7jq592sgdLSfLeAAJ1sFM5PWwvR2n6iOhoQFFRZ7JALJGfZMx9oO+H1TIvZpRm4dMFl3bOOICOnZ+xaPJMFJipchvz+eU9eRYYE4C0qFCvXjlV+pMDr3smzvCNZIZIytlZHsXwoKBmJUmtYofh7gmGjk/Q5Jk23mPHId/yDgs5ioqprNn5CZzKd+r9cTSQcJBt7tdBR21o9eM3MBPTWYwJxihQ2WIwmBjFmCshfIc+w9iNujctaSBgbXkNlOKCdAz8uNE+0LYkDhOT2dLLbGUmapWSa7UtGGFWS0fF0gU1BRpOIDKXODbBcsFUxlMlN6LLphJLCCEsNHIVTxrzngTP1ff/19tW406lsBZp1gVZdnbj4GeXn4WPxqKGUU0prkRuwFCEc5B6tmWfvX4xh4FdXxdb57QGjiOhUbFoR2ce0vVjpsLVzOH0nWItsSvLdHRCdOh6hzmALKORZToQjmwfw9RNnaFjFLDVlZi2NK8qmlMOCCxuLdELQLnjcBrrUUezbtk9OmUcLOYGB81RsLk8Yybk2C40fTl9C1Ylt8A+sD0YiDlRQ6dX4SbZhzYM7GdlnYCMVsBaSm+8Pp8BRVdkkVudRoE6ezFYwBmLSmrYK4a/x9wjlr5OVoTOUM5Tre90sOpSY/9egVYXJyfQgQ8UXg3SLUdfwIYOC/JQ7a7Pf14/dcJ5+KWhegCTKkcE7KwQGLttG0Qf1S2yMFisZRm2OgVShZwHM23jTNyzbqQiRJhyefxVBkNFFDRkaUJTXEI7bQwbZKSYIB9/p73KhXNGh00uylu/Ic/BVUvXzaNynWYyO3Tj+WD9MfMlZhkSzjxyvFPXOpjTII1LdsE9vAo844MNUu3IVvcOqXYcCgsbyTACULpxknat8hd+nhY0cplj7IKsAqbJRTUKXBrzUWHlOETIPQ0tc0GOZLmOlNXLHfOdXbzGkxQUi32U+zDxp8uFAE7liqtXgp0T5IwqcoJFLt7i3MXcEAAS5tB/6QV0UxWHXDYEeGP/OBttIANIOeKkcnCr4abdiW+k2I+fgefA1RPNYk0i0NGFeeX60k8iESsDpGIPh3H9zCzXnWDd5phOtj4jBKVgQWUz5TpHLtOkf2CBt8lEBB/13WjK5jURJW3o8YMtHQt1/o4JckktaQRkOrPjcm3URtq9cq1ROZW3A1EbRQnufB7HNVryWlzqoHiZfxAMkGMAEm4NMsoVcrLeYJgBrpY3q+pkoj7Ato8xIHw+zgBMQyDloKWj1ssm83QXw8A0SMkWNgc20ZmCZ+3lvvnMYcpZM5gTKzAkIiTDRu+qvIcxrpfzNKuxFRolrwUidAV2qNUIKGChJyK2BO/7KjBZZQNSEZUdVBC1ZczGSVccGxfV9ZCfAxh1mzE3WLWFLn3rVw7T4LcO0wA5T/NPT3JMqgFYnVfeJXWixkkqIWFijI+lKVuNRmUk1nwZY9MEAQkzLkxhOp+CqG3VhF7ED5MWZdwauA3aMbmmMVsK+B1ldIgmmcfgYusiQvYRCKNCAPNvMb7b6XGOcN3JfIb3jfhJcu3U/oHKyCreHmEp69lsan3It7ynz2Cehruy5a0P2wZGmrLt6LANcutox573/LECkJjmeoCEQIJ0g1GQAAsNjB7bWaaKLtbB6L7z7zlPh+NCpkppgAXqVhJLSqCkWZRGUAh11r75XCuLlxwXWKgI44B7kESkJ8qsJHNZsR6mYWv8pRQKXTrXkFAZCOw20nbaM2kMo9eUf+zxypHM6OcG4nOnlZ267M2LUcIG8DTfPqXTUyVBtxpTUlJTOnKmdY1xtlwDgl/WVavtsU2fWXWpnY7pDBERq5MGDJOdDHlL49XU74c8flwdWRzGAVJsQ3HReA410a5zzKWn7FNe0mEcAEhyFLcGqce51ilp05GRpUK73OpQYO+mAsQUaeY2ySZ5m0VKsHGrkHGLxfF6H7c7TMkGada3o4NfyyDYEiyd1QgFHMtSGuQ9meOQjZqjBIWZX87btyqjwcoxNiep4Y6wnNYAfYpjVgdvbFaYxMFZzAB7dkyYRIGJ5ujA+g4joLJhQa3IAtrA5t/8PvtS1LAOklQBl5ghLshMZRppG6/ILC2l/NjVDfPL8KLHpo19EGdqurO9ikz9LdsvMz7ygj+phAbZsrnyKiwFHcKgVx9Rx3KxBZN3Uz7jBRIrRtmI8kx8qE03bpPjMhPzbDhvZNRtk7RDqKGEcsEppwvKDg94hZhtOgqbeCE6zb9lLQX0cMY8AEdjSBAGWIpy7Acs1esSgonQHDU6HqEJasgfoCan673h7mx9SxcOd4fb8lbPkGuRIKI50NJFGyC5bjlwaZNt9K9NtmmWgEApPsCR2wTrz4zMg0JQ66tkI0hkFOCqT1et8hsAYM1VXCI2jOO2hAAMAlyNKAlsZV/HGnAEOP6umQSKifdttrakhfIbBIiEsvuyVwnHmAUI1CLgg1lRbSW8JgipITVwyu5xPF3bZYInXnvl1jXuH+XMnHDUzRm9iVeBViw062dqPk9NFSBkqcf4PTQFR+hdA5ko3S8Ry5KKhi9CwpGX0R1BhF41b13t0hi9HMvW9I4xnAz7G2vVJjPBEMihmW3mPLksbwfLydOxtuRsIyxlhSGaHh0ulgpi5jiSFEB256nkWEzKNIcZcEiyvfEmVCw0HcAZLHTd53ZDwhEoyncOEDnZJu3sSNCEcexnAAnMA/v5sLEHk8QWZVEbQIXC0VpTwGgtkz2XZJ+tocHPsKjzlMfGrLbmF1mBsNf4e4Glurfek0EF8AUli2ztzHsW17mGQrQffgvQ0ddt/mhFc4ObZvNz2m3RlJNbFNYcs/ThM47vDcGy+WMJnmt7+AmV7RXEXXKKhVvq+zoKlKXwOG06bkRyyDhgVOLorYuJZi612cxflFtRiAWN0WqJQHGlg/VCZUNuJeWgYTmA23g5G2NM7xK14ISABMvfqXq5QPTIjoyBVFjQzcpvcqrg7IIbAYQbDYN1QhHcwVvGqUZQjJFVvj7YBnekHrnNVndyO1jkAFSCZIzTDBnXPPOX47x2ss41GSUB1Mg6e8q1km7XFrktchyaDB3VCLy7KwdKi3FMA5tzgFSfrSUzBAgYKUJxUmxkWYMXE1jFJuQj2tVuZ8xjVrVrohWPaR7MGH72XzGaLyiENUP1w6LMWNlq0pUkm7LxBc2iCYdQCWcxSy4IFX6Z4MHBu+QVYTv+3IJJshc0TbkX+YzA0XQEm1SsxC+0P02PhvysZuPnod/AwCckW2nQZCdWVncBdOaYJqOCiRPzGrSP7vOJtRTIONSo472e0q1R8XVY31uvKdlknbFwnnGqNowCTu3m2v55RrMU3rRaFu8dk/lLhs5crX9ruGvZ+P02bqw7wLIlC4ExCJ5jcCGl2wGqlGtLXgRDYAHRyINMrGM5I5LmwPE+2D3zHcg4XwdGc2Yqc5fiWBNAzFhJQADRbjFazUlemk7NXln5jgJxFKWwrSY1s6euy5Etsk1AmwBEosO/OYJeHh96fOeOE0T1S92rU7C3EM9EXI4XwLuOCZ7xwAQafDQu/+bxqQTP9W6XJ83m9JIcM7lXJ2nVVZ3AFMMUEII60sBHOBcBzFaq9sVrMHZofhfjRZyAhr3C5dtEsYxQBEoeU58SMRN5qyuVSjLHrOAuTPWrvXTIskx1MBiKmaPKmbaMxaH79UHPWhkHyIXoV2gOCcGEMAGGyYZPKYY5IgmSkftsiVPJs0MTwDQYQIlVrh1SbjDKAEYg17k+3rtCvpPfySnEjXNVjv2PeSmcYwPTwCL3kWaFzTUMMOaDq7kLMLg85FueHy5d6RRAyKsbU6qdscvaYxT8CjTVha1ctRmAtW8qdnSWdJo13aCYYiGe9e+ztxd2kqmwcgYUIQbOualEE86A8o0R/PEET/N2acuUYe6Og4hWe6kPhBszueBlWohC526mMRlRbGX1SUUlzSzF/vANW1JPgoZTHViBQCswMkcShwEewW1hwWKGJyvGWR1NcMFjN47hNFYjwFpn7pOAOfL4nklLlqexmjwri+UoNSsId1ReVElN5+TW7NjIeXAz3WQdACgBdWx4nQbBYKBTjGkE10cUuW4JnPzuKtdy9Zc0EzxXvczvGnOhbmQozu23NBNCbJJjQQg8+WwJ1socyDKavKbUVxJNxZ6QOipaEq+U+lnq4VbWqD6hSTUR0yowbhMY04mYQKvw21BitKQ27I+xUJrTvubHy/HC56KMw38mtIQddj0nt3la+1jBfPSpP/4r3788ZTEiPhMg0LVXMAWtZi9+8RmHABr3qv/0OtlQnuPVXFanNyOMlfx0W8aBJstoUBmRvVhIViiuN9dYtYW5OP1B+VGHEWKMdxAaIyFpGD/KlWkaGAajXH0CdXSh9BY6BztpUBSgoqI3qgDgEvZkmJ4WdUqtsDQDIiWbEvvm1wmClsZgsoxcNpoE1zARxEIJFMg1B+sExm2u6YMAXHDSrhsMFMwIpVxD7lMDonnWjOa0rKujV+7hxspp9E7VYKjfTDaZfUBhNyoMx7Jdr3FMWd8zVLu+y9hMxlnAp2utXp9/qMKACqwXJq0ejceI7ctmPmMqNwJPXYZ9RmnFG29kzuOXJDJJLTPzyjuAXuY5wQ8WfNMpM8k4IogdX+lYDbha1Fjvej7gGSwCSGYDs2BbmgqM8S7gZE+sC8MxH49zNmS7ag6QZLhNpyyPda/ZqhPYwzTAsgxpCtiZZZ0rQ4y97oI75riY1hSLGpRMQ8BQI5bRfsPktGQg5DmScQBJMg2eB+CuunMawgEaA9NcBSTacNhybOfoNFc7xl1GjrM7ikFrWkIC01ClQOCYYYo0XbSak4N1B5zS00pR9AUWUe6LZBwDWF0LmxnLsr3XmEiI/PmVmOoFwx4C4ISlKhkE7BmXeYyz1q0pEFuZFvg1Vml49Ys48xucDMVQzn2XHitgHcgZzONLruY0ANgvizHU02MmY7WzoGSaGhQ1RQCVoCYcB/o/KDaKM6vgk9gjm2WLUSbQX+Fyj9F7DcL5bLzzxpbUW/ZG4LrAbsa1uZwyQGSZXkEilOYAZJzypCzY3ploO9o8yDg7yvUxvhJe8g1FnZw6kLnJIsMk3RI0A0ib7ZJrI385bOYrGgXJQAUwFHweww2R+xnmRlYTlFU9y3POZomGFgFh7qM8zWQWlMNmOj9qNnplZ63NqemMW1G6yHQ9y9D2iryaVXvOWezBjLXKAmorjLxULw70VUm0knD7sk+GUUHJzJaf8wU7wcnDpvhNOJEVc4Ip4/UwZ04HV1+iA3OJUs7BjkmjJCKHTaa1CXT0NBQjJkPNQwkUFbLhTLZeHl5bfkNKM4rmXUHI1Irq+MQjC1lNtigHXidoui4DG25Kx3qVRgDfY1WBLcIimSeQB1WWldZ2z/th+mbV8Tq7mmRavoZ8yg6Vd2PmYGkl9Zm7pHtmKbsO+3ow0pBmV5Rp1yXd4MSN966SUVCeg8+zLCcHUnOlSy97OjAlAd2tKqod6RsNAqf6RE5j5bK5mKVu977azipFCpoDalNYuSE7aXZbU94rNYTQ6VFsVddf5kHJRpFQunjY5+isXFknqifOPAbdVgm/urHRJMKYDjku1jR955EJUePoG7OgHSEYrnUH86h/OnNwMJZkECfviy5iqTmzRWPpl7BxVAITcuRKxFlU3pQzOcnuzoWdCcJ+bl2azXhlknJW58wOz4l22Hf9JsiO6yT0LmEJixpqrDNt7cyuyhQgyBrPSvVzWy7oFGnxplMXHN/BajKjVi0FncGe9qBJwFuaH4C5bskQw1HzK0oy5DNG5hl5zxgMHYbBAB/k2CHl4LbZYKGxH5gC1wTkdVNelUaF82ZOyK86wD2X3M2RMa5NzQCgYlZThQCmW1fyr+5pYpxQsFfHNAy5Vq9dGQwAcLMaG6xi42lGZJ+WJssL24sfagCpVJUCKn3p6jXTenIrf61AtfOYnSM/XngXitHfm5az8ioGYFW6xanA4FY/nbtNA6pTpbqOugRqQUU45xAi5Zx8MpczzB8GuznzhilaKfk4PpNf2RT/l6MyW76zXsYF3CHxxbZlyRAGmiT1fE41SBDTnQNIuoBFYdJVtcAFwVCS4vSjGtdNg1CFRAvj1AGtVDOroI9TL0u5ZT6D3KW3lHBX+ZqMw3GdzHHScGgYIB3PAaYZSyelOYD38/XO7yPHCoAIv8lbGWIujm5k1RkqUD0QAgHcSitmCbVGfo6mmOYQQ87UEvVugSWK9tk7FDdn+LPZxapH+gKa+tunUcXaXfrKfC5w8igWNOXOcjGjyq/UF9UbraYByfUT9jxQNj3a+USxuJxWUaznoCBOerHGayQYOZIVy9jSxYEubzG1rr7exBqrbJN00thNya8FNJRrZjODA4vpN0R2Zw3n0zQYG/ZirfEepyZ05CioAWE+xDshoEK4EXgNN86lVMUiGEE7umFh8cx9TPVkBA4lXEa8KqvJOTdVSnMA+KpjIHSwSLLPkedcbynp8r3Md5jnTEnnMg5yBulelrgtuZUFq6ody9EaFy5MFoouy1l5q2MwMHxxTtOi7XVRck6ywBLqVsxz2BnZYaWOcC1K2VN9YN8IipqYFqXAaC9LxlXnLwCCI2JKkJJRCwXph4SIBuYpsFnMvk3QFiPZtK4blcT47yiwPh395tbk2EkmAhA7e3VWrtZDfTgtAYBl2tbo1FM5FkZ4mtOlm5KwT+xL3iV7hs3GsCgoEpTKaBzVAlMb8mesClF5IFHpMfVyxVWnIMwRYVgjvRLhkByFZMspCFuuyBmOaXVa2YAL/4GBfC7WgZo0Wcmj40cBgY5bAgisA9AMpw2u22SkzHka2ScB2VhZMN7jXQSSbUbFNRYQ4RrOKcvyVupRy+cyz6EM07m28i0LQJjEx3BNtSRmWd2xujryB3wGVVs+8/V9BmJ1crw7/z7LWaucatmW++GQi02DQBir/ueLIpw5Eb+jzjTOrFXOhQ7al/2++aY9NqzqW1zmlftusTbCwrU2gZJVuIz0jjiWpfeyG0vgmk5GeQ5NGzqWspRF3owjdXI8DXXsXvqWb7PRa7TBF9YJgN80qn3Ko8LUAi44USEzpmwoE6KBXxg8IEmiJF9wrlJH9bXkGkGkxLxYh9MIMKcODJJMYZBwZB1MJQjKMYz1JIgO6banpIOLxu9fu2SaEYQYGB1wz9tkNJw7C1JHsIsa32Er7Yx7VYpjHPREly3gKDWNctHCJ+OsHXjVGV5qRl3CJ9tgPRZ9j0Dp6h3GeEachC3iZaGmiShtKreYg6wm1rHK6wm4M6ctv4Mu5NPxNUm2BYgE1/HvxKyGe3fmNZPG+pJx0Eumnc2ZZtmxmppTvD1Bo3ObbASpFNWO1eGd4svQ+byCBKcY27S7ybRzJVPaqBXUBDNMVchzE9thMXVF2Oo0xVTcLpbPQ5MteA4dVdABFurMeXeeB5gmauJZzwFNLhU1nbbDKIiqkEbCPye4HXKNFQZpFDiZCCAkK6VR0FnfBqnoletsjvvRmC3HYSrFyYuzYxqTF+tM8BiHEkpz9AUWYpbZl20VLEUK4fOPOczqVuQERgxbgeBlBK2/UVoOM0kLcnUM87BCUmIekC0AsjgbrskSYZ9sWdvntixHqTyL7QMD4RjqyepigrxwjE7azxmCv56Rtzp8nULuoNUkqSjzYnBa0zJnYKUSfnivz31MRaxzrh+G6ybQuUDuG+8sMO91WmBD/Mz/VEGpmEX78ph3Jqh02TEpjtOsNb+e+dW46ij4NLKQxyzrB2gCdnGnRRzIcYy3wjDkI2OsIB01w0zQrBog8+zMcyjpwBzBtZUJsGSp8MqlxndznKfLKOC07MDcvp1OXJXoYI4QmMetVvW0KVdKAkflSIKWLtO0lE22tYsxguSULY6+BGHo63iQep0gZpNSKuJrEJaUgf2EL4MfU4Lxg2jVdcPPceFRBjqMnOpo6p6uwzauE+W4Zo0UMT45ddOPW8mcYlba6ZCkuv2FV2ee/btOWSCbsSGQKBsPBJuDUw00sLJitePM+WfzhWsN6bp9BseWSIK1Ju6UYpp31EWJpnMiXAL1b6DDZV4O10Wo71rM+ToJKA4jGmdg8ntZpVy5TsNI/5BtNljBJOGQqyQ4goOgE0jXWUmQUwqichsVk25zmjXs6qzUzjk7vWlZKRR75qS4zuoBWtXhtq5nnV1d82/EwOgLUdJKncxk8XhdFraMsvtYQiKTfTlMuIGZFxG1GbBM+68OEFUTkCoEl37KeV5urRRmE+deipPyWdXUUxAVO4Qto4ulRqfOKjbUlO82uSPZ+qTgTgaf3wyVEQHdyHNsaZwFHeqgamMrPbxsZ5W+ZARbVhe12SY8AF+/lO9L2RnmEpmOe7zbV9CHZCeOm78DqmesY78IdRZNwu5it5J+xvMiO0XIfYRFzffnErY5ao/ylyDjRAJqLhE1ZJdFLVA4AJMMMm5jrnxo3Gy2tZJtnGaA+T0dFQzXnEGaxaVjXzsnvcm8sFmUWje1bXa2DvUq11Tc2Wf+CNl2VnKjS6SpAJJsXMfWZyiNYgYwU599wIgBo5xXsAyv3InMUEzF/qCr3Hhw4BhXR69w7layvD4rQ5x7U15VdFCyET3aK3eGcU3QlYQ7/jz1ahhDiIG2wXvr6woZgtfCFkui3kMAWh9s0l6JXo7oS8o5ZZWIGxGm4UpFNUP+cqj+TdGy85LhS0FJsCSaUbK7V+TDNRHDJVi4umjPkUMscJfnw0XKWDHtsTDQcPeyE5KBhkzbVxZKhom6g9ou0JRNHchXBuBawJK2uU6BZooe8i1YHc3p2xgOTDvaCZINldWZ0zQzjSV1lejkgjxYq6ys6cDUk858MNh0ZJ7FejnvdgIHh7uKeRh3igaWrslLFtUfhB0zhX06qkiBXL0Nra84rZwn1O2wVdiZJa0de/OKwZXHu6QZjq10U+UssKS71dqVAFarREO2uY+c5/7xxqW+iH1pTysIZgDgdl6JUnglict+bHkyo+zNw8ycofs0SxC2cPIFZJ+Xonmsh1d/xPJbdPmCQUC/z2AmydkFnCVOArhQtjXrwXqVwxcbpd0bi7TjICgvF2Z8yigYEb/bumINijZpW+NZixiiOtrCJelyO+Q6wTWlc0Jd34vB4NxZjelQttGqzvNKVsqlG0J1bQ0r0LCLVhV1sG8SOEa5VcBgfCg/CD4Rt+9spnWOjQk68435GS/YBFjuu0csaFv7EuWUY9aurCkk7k7jweYoOY9DEkM/pnhQlEj+FCfJ8FUOlH5yfsFFjaZZqrH5a6de/cwLIFE9cLzVZgLSJ/MoIvQZZgQSunEzX5qod1xIVBkskWh2+H4DFGlCaKCWx1nkUa1rVWDdoxIu12aMqrQfGZsEjEC06/OUUa5jmyzwkMTURDetSRDGxBz7y6lUOyurMR1gzATtYCACbjfNAB1jMCjR4Q2YtIxU4rgklnOglbdHTwbJ24v4WHjHKafHylqsbIDM1Y15x3hNfr9jHCzf53Wc83eM4zuqMpjd2uaoGKUQNoSBywvX3JfcRVcboBO4SvCIIPSkX0cHEQiw61C3nIYVF2F0ZjTVh9yk9KDamIHJ86aJUVJcNnYtxeF1aOrRXizDbpd8w5q+09Z/cIJ+r29jfooYhZ0w1rMONZ3HzDWYk1SzsJVjMcvMcEvSbEv6qct+V8DQCAjmTq7lD3TWjI48PyuJpWCjaxLL8RcwTEBSYsxDnfI0x274PdasOWWaWAb9ofel81oOSurens6CTCzO0TuTfEq5rgULwTD53cbK5wSRVeVB5k5dIPKqV+vDOLgmkAbjNUTKHpz8ltID/SwnyOb61cxvmXyDfawCh0CyELeVgSAwqAKD/tvcSq9Iw4zkZLEpXHSxbUo2dgoxiky0JbQyd9JF8nLKcBJmpqLkymxIAjAGcsPpsnkNzuCYRXcEGE+B0s649pSfbTuGak5H49/nbLhlHIaVBL6cpkEfS+7U+E/Y+YnS4YvuN5q2zl2bL8wguq+PQpIBYAa3khAnktjBdcGNjlmI7brYBfucdXV5TJJ4jNTB7cB0nJFdMrDzh7iEFCqRk6QohzrlWsz73lxjea0DCLl4ByajORgo7WkDW+A9mAmYym1aQ5oLiOBUa2FCsutYbmEsxpeVzEy8O1klWCRexsH4WtN51nngXNk/632f16J3tTar6RfesNqWoDmP764VbyQCwqcq8MltUA2tonVxQBQeKvqfcdfZj7IDMSYzoSnHLGrf2nuFfZM0W0DHOygIYc5TUIlQBpzrV099ZKm6peFsBZ2toj8IMwoPTNL8rCNmMSk/nJ+PLyH5DysTxNfksaI+QONoXIF5KSI1RS63mHLQJ3PwNPK7XsdllHrBPiCwErhgEjp6GZn7jfcKQBzzIYh3dqzOc+sCQ4fr1jEGNUpm6HLluEtgAJWV1h2LBO6NTh1H/7WUHIpOKT0pyebUb8ilbKOs1kYn6GJYDy0UxHOWc4n3WZ6TyCr57oa6NnZfOV6hrsFOX+GrguCEEduceQxtaaZLdfmWSGnVT2p3CriuaLx+Jgoj2/gqFWlzEXZxbtf5osYWa1ldWqlEFo3ilwl+lOosQItRsHLkPO3+GQeqg7qSavZPSTObrRaraeDQ7ezDhmkFi8V8/j3KAMikc1Zx9WifLp4rDMXCGNyfCDCvQMnHIGKWbb3P86rcKFg2jI6VFzv3MfM1duDAxLYI5UfL3ziAYM1YjfVggDJWBy7Hb/J27W6suPa5iie7zAIqrDkfM5exCRydZjYk1hng8jy64wDkWg4ycUSjJFmtZT++W7dgZQ7bKJ+quzuXaIFUDr25dDzqI+THC8BcNrXPvCaiRrC9DGd1jnWv6o9WDFTpiyilvoZa7/poyivXcRlbwIu0iErouZjFRI60gfuJAg6W0clh8dPpdP90xKz7vVbA8TnWolAj8J+dzjwjM9aJKTsDHlBUGJU/KcITBZxpKt5VO5oRTK0s6Uro8aELfPPi8iDM65CCnZsKr3IzMopcJMof1Ap1XsNOmzqnHmCE0MkuYhmTBMxiy16AcuUOO6O8Vu3sDpt850Wl2wabO4GSc2aQn6CzO+bVkBncTYsGJvNtxcbJXiVKMAia+1QHSprbMhqQXRjjdaujCiiLieJLTsjObpNtIH7IGZQaSkpmbhCVU+YAaRkKdp5DmdTNGRKqfzE9YRQja8yhzfC6j5pJqoFtmjuNDlxYrksOFFM+OkWmfjuLz2WEOIpM5a7xPazifry+NxZ6v7L2oM1ON4Fj1QaKNhpU4tyX0r8CC09tUoFYROKz6sxkNrCh8Jl6v94gK/HIQ/mLGngCPQQI/S4uGn4nGK3Y+b1XHmS2gohyjKyzSDVemChw0BDoAPZqWStf2glc2MYZRXCb9eCKntmxW92BjQu3e3V6deSSaahcMLbZGEnN02s+gxivhfEWkdWmXm2sUgl0lTYDF/+tYzyYluhFMy6A+TKIxwXddRUdjqfAIXipfs3Ufdxm7oOTEnB8AkZBURi1lVkWQywg0xY9Bkx0UiDrGqbGd1pykqSL7bFtOMnGqRGSaQOgSToM8G2zV8fzad+uXrb9VG0SC2jmGOmUJ2cdN2yRdiSrCg+UXc7bbZSYZYdQaxUoolq89gkFK8vYxDZ1kDIUiFda2kK0Oq2VgjfZ3ujwsKCDgCmQMIfBYdAQKMZLMhrLRWkfIdctl6Iy3hbxsI7njaG6AOdYYD0/Z1dAkWpDKuZRC8LjPDvvCs5qFQXSDIHGwje2Vd0WlUlVi9kluWpyvqcT0UVTJ28zmGX/jirb4fgNvtOthBk6XixA8IVRKpZGWac2L53Vb7ktasKqM1Pta68KyAIRHYdeNEEQClzu2rPrtxZ282JI5jHaKDAf0gs4MMAl28bbW/55P8Hz+KOP3P8//8b1g6OhbpnWMVBwAWAxdVnMy7GPajA11bm0Q4Oybi3KDOFnoaBUuYdPCoqz6xtVeYCQlccXzsLMM0CVJcK6t6Ukh1Zz5UvwJHQ6lFuJ9D09NCs3USwkubb3PsEWQAcWbEe+g22Y48wcqBgsLWfM4+AdiGhs+LxoOGQ6aFhvfsqMxsYaNLahx/NA6/7GebezWCgCcczLFeguQZPN2gGYktl9du0pzWZSj06h3Ve5oal/O9M6OkBijUkZtv6X+3HJVFsfuPZdm04HymMeY1ozM9CjN66LIrrb9NxKinHjzA877ohjkolj6hLsCDyDefK2Tgmu+G6Ch0f58rGr21ZSCwc3K6TZiRmZzWxaw17RRJbyYj1DUpW0MOUfvrT2wix1rVd24vXeeSw2f3iWpjsZQ1rNK+fpRGLuY/mZvSvHMVrQ6FACgHIaElWOUY1z6YGpCPn7XZ1NeY/K/Z2stJTvsBKb99NGuzm9HOT6ppsueAufIdkYXZhTsEnyfrN7WDHTjKXkPp5o83I+ck95gzAGX4JfOGJPBKDmqEV2pz4VxcxQqEhsYRyearmZqwEdBB4HXNwqLa3YmEfQl2EcYzVBqKc1JoeuPGj2EtfMGCd62zQQvGRXLMyC31Se44uBUIyT+3VKN9wd7lB39ws8x4G9fBzQ7ZiRw6R3K7IrfSEi6pCZl/CosFyL0bv3uW0oUpstwMHBrVJLZoG0uH63LGMpOl0Z9ovep9Egppm/PcGlYynmIFC4b4GJRgIcQxgHct4iz1GWtWWxZsjmru9kjjRMh+S7xpyrkmVTl0sCbA2JVi3ICNfKt+OtHavu6FqTQlyKB2TD5HZ8qir1Ua+z5T27xnSFPEDX8ArLMSTn3GOOjRntXSbCPRYWUlxnBFqDm0loFeap1ATaBXIxg2Re/UJKRFUEmM3MRkJRbFPV1OJG/nq2iZPqXMWqdVw2QbT84y811q4lwziBQsBtTqMt70t2OG0eLxd4riK+i/UQQrEmGB5dA0RVuKkOaTopP5dwBQ3JIZ1lcODVlykBNuWZfnLa3fnfvlcjFhvVMZB6AB5cWib081hiJvvllPECCtBdDGUs248CGHsAFU/nwCX93LFjTtKr/AiHFTbL/NuUi1yjodpvLKC4c/CxLRoLQMJ6jJxloTUeG2kLwzfISxp+G6ZcLoB6/MZYp5+r+3mzkv/OSNuBadm/6EFhpnxhuQTLo7DjIZAXXwTf5tUik2m37C7BM2R3Z8fW96nKnDelsMm0NoES9bf6fqFbB1eO2wRI/t2sCmcYfcg4rsiCAMR2HF2fwBkyLu/weezjwX/99T94b+wjwbNdXLzQr/a/EEry+xwEuyHXSkYunVOfe8xnIyXIYCtnjPavpJlxnAfJ+9iwV3RO+qixmR2ddGUP/T5YIih7ooAw2UVAcUXTei6J1gkkAWcCzBem4vZG+9o58Bi1XTFLTHNsNEEaBKVHcEVDpgzFRsap5lq3pyxOXM1cZxGsR/dn7Lg1DufU8TLB2MftiUhimWiZ4mDuXfcxNq7rmFG5Kb0Kpt7oQBHVw91i+dviBsjOezyQMJMRU9K+YJLN5FI4XlLwHDgRRS6kH2Yty65MtrMvks/FKC7gZZ5jApNNFkp1Vs4a7k6D93Ltl7wj9vHey/rBBM/jj/qD/+3/uX712OXllBbs2Dx6dozKX9hxwRg1CW4B0GwgSR3EI3VC5VU0T4wOVckyY2fnj6njhwl0BYqYMsvKomXaw7o3rlXGc+C+MzDsMfV5cEXzAlA9xyo/AeIuBmGiGwKjzXEkxtNiV6rhvuZzinwRXoGwOYDSwFZDQuDm3Ik23E5otNW43SMmhOO4Dd73hp6KeQxeN/g2BmQYCt009hD8G3u/2amX9Ly6n02MCFOQ6GwcfZ9LU9UM3smtdY3tvP8vyY6Z6Mz97EcnB0X9NMG0jsu4AGWm3IWs20iYGUwEmpJrWCB2m+/lPZe3DcsMHuzz7TPwsLW+ffzyvySGWEDjAo2CQ3W2MhgqyqpzYY8zH8J4iEp23VdLGNt2dejKk+0cgNRG8/UEtNVAKKoBAFSCZc1/JOnQ/nuN+YA9qtzmxliQcL/3xUAhWFUcyt6CcFLsqLaxEutazLFx8cGNbp9uj5pRcnSizTG3fo+51tzmtQI7A9dIa8KYn44LrgmwrVEHZQ/prrbPY+rQ7uiMjEQNt+3qrMNHEuQUrGtnB6LozkNeadUi9FYm7FNJUWnUHhYmg/hTfr2CpjiEbde8gvkivUp94Q86bQuTTM+areEYMM0bV87tskUHEyXDULYRLDnGO24uOJhnO9k9uwme49hfOH7hK7r5k6RNydsMt2i5irY80WCR2yrtoiJzWZnBC4NndPQgMLWA99yWx0VQ+GSYYhtIK/bsaTcXa9DmtJJbHPkvkFeVMd/XdGytf1ByMFwmQunXvrArfzqN515tVvlgJYU5muzlSsE4ysOH1mptaQMOcIbeM9cM2lExh87kCFAj+dk2CJ3x0YbIAZDmT3OoBwYCrgmZJ0HcmT+hk+Y+MSxghQGXdGKhp9wu8zJoIEL9DDS4vsUS0IhWgClr2MwXz7tKeawe9eEcrSkQqcnPATNBhJSm/s5zYKVAgHWybHA4/9UmGwCTABvvp2Rr9up/effnzmXbePyhn7249798//q14+WjCgiGC5a/UmMmUVGCnTmM88Zc2h8nO42BXqcnUBWjmdnZHJwzeVQAJngFEKZGM8fo83s9zvZZZgEBuljTC7PEEpVtZR44NxzkxY5j5l1uGmhVHHXsRPIj1k7AUe1FGzHfywPignrjoO9fhz/b+v7dAwcPmu+3jpj3ueNCfil1Bngw++82zJSTZyn3OM5tSbDRFsNFAvq4RiEZWbkVrEHDnCI1THFEWr292lOuHHIXsQnCBglpMjlt3pKn6usUIwBiizkWwzwrJmBJStWAduZX8G8ptGTsGqvh+1yAlgyDxN8HMAQanEFrqCBqMATslAxkYKAEUVYfHO3bv23L47T+cXSEbx57e0q5mS5uBIMRQ41ZRXi+rsQ+wiRZwhcgnMkgXIxzENXn3c6kWJDEBYSxzd6nGlglnMrRY612ZiTIzzuXWboBHn537n8GCsP5aACRPBFn4NKhkHJnOyhcC1mS4ZCuVj0uGO13i9+8+7lPftXe/njhq7/92tOt+4vHdx5DR2M/Yk7HZpVEzBRnlLSNu2qN/W85qAW91bBGOER/m1Jg9M2h73ufQd+xhBVnNE+TFLTKkG5LkACjTfYhC/Mm40jWITSrLxhxW3LM1Ae82rX5VDpaPKSO0adGbCxdSwlmiyyT5WxReQ0HPtM7SZbZElgGtkkZfIAmWceHYn7kdHpmvSgr8dkrr8StNx5K9tEwWw0EGvMFw9oCtkgoRODpQ9IgmGpZHbtkXbEKepMkVoDvVlnnBQqBrtuZ2xY39r+AdM2D8rH3yTp92bZ+S/Nf5PhNsJekM2oyAc01PGJi3agLKonHM2VH6IraSr4oc+3pX/2nHnnafsTjq9967VZ7yF862uCxnDTXc+EPrMCzRz7n2tXHZ7no4fh7Ry6X23SQ1ADDnn97zUfCIiEJHA0xyN7HnSdrwJwBsi4mIRu2qgTTtqyzq4euDUti/EzrM+dnk+m/iLDeas9e41poP0i1TAkhx9qSx9w0A/j3BqnG3OaQbDAEBlCCzAPGcZgHB4ju/Re/+nOfXa9HW/94/HF/cBz8PUXVM+DUeWTDleWFE5/TmPkdmk043y5GIWvsmi/To8ZNdKGOzoCLye303R3/fHXCeAeAWh1Gf+d+lm3G8/Xcb4GnA2AxPtvr+1z5ZtkO++AszQhUG8TKZqHcTIEZyYhGtI3X3Epra7Qa+tvi1TevH/5N+zGPZ+48+uBghjsjiYUOR4Q8DakxouY2LnzMC59jEw4Nn8+N0mR0lIZkmNrFOZbhlCxKFPLjho7HkzBJJQQTWuPqsG3J4ul8ORORSuSpIb1axXG36RZn1nH9azAhXIOVGP3Heei89DsN4zvj32kwRps5S7YbmCTy+WR+Ouj5tKU0y3+nLbfJdjxe28XRrheHPnvoYnv25vXwm2987/tXt4/O+iKjocnyBaOwa6zRf8YDfs4SlWIGryjdJX+UR5RkW+znlRV4DOOxM8pLeple32QkK+aaDDNZZo7R9DP20veXJYMRGdbciqg4i6QKte6l0fNZn6EzZK4ypQbzhDIfut/51//JR561d/n41/7igxcPW//2LjYRA+1YvjdXzsnXuKnvdQalg4165A20xEYZLHYGCAUNrr+LWajTId05JtGZ5C95oVqB51LdQY4Gmcb8bNuywue3VXYTfTESrLKr1SDQAKgrpyHTYCCTMq1MgJRluHNtSxZxmwCbrARgVWBKBkrmOfn93/5X/t7Hb16H0803/vBhHHzv/766d7TcZ4Kitc6XCbBaR/8xr3aRaaA8g4OJwWSclbrL2Aojdq0HoI7aw+bAKn7TywQYv7PzhrTsuzSRigEoDaclvgBn/e0zsMpcsKjPJuGGrHI8KLg412oNQr6+gB6P9eJX7RT5+f6/+h6AMx6f2OLpq7DbN0cc0xTcObZkuPFDjvmU3W0+78aGBsCa9igOTWthA3Aa11/qyGnwmectWzV2swQJSjHkdVSoJVpEOuwuc+zQkC2xhcFIEWQhBqHFlbMy5lA6A/axmddk7uJBNqUJAKazkbNsHPDcJNcMLuWGHMfJ0Jn/JHCOvxNcLZ5+p+vQ3vHq7NdPU9dWoKRjMC9UcP0sNy4aEhz0ZO8zlcTMcpvehSpb8g2s2k93zljiLwAZb8OeQKCUGlEvrueuJO2wrhmicGp+yKwzCRaUdEEJKHnn+iz0WV/kIauji2lDEVdGQgWWMFstUo3X5TSbkkFMVmmD9ne8MD/q8af+6UfvnY7xhiEr8h9cooyUedEhQ+xUHQOdCBE3Zv0WO4rTUWIErglfy3mw8DT94DmBBr07sYoRfCcjYOPWZn2YOj0+Q14CduDvUe41RP78yVbWMRN7dOSUXjOPWZij5RhOMghlrJ1Smo1//JvOWUqy47MLtSG2jSHRLk7H58c/PNv9//hrP/fsO12H0zu9+Yf/4CP3/qf/680Xjq7w+cp5GXCycyBsekkPiZUC2/lAMCJ+UEqFxAxNBvTCs2nP6QzRKi/2mvJpkWjOvMMWRrHCaC/gzXGfBbjrPiVB5ilMecZ4YDUtRbaTFxWxMfp02NgCGogzq6GZct2Ov1/+k//4J5+19/G4uLY7B628gl9HW/BO13W4SQco37EtdW7Oys4l+sc2DbI8oy7u53UcE+opcbFZJ5Rs46j6bjQLmvsiX9k1nMxhc5zMaxIbegN23udYkc1cSs9hRjCW7cx25bNxQNPPTQGUz9gyNhPTLGiYBUoT4AgyCCQZaCjvNuZI7ch5Lo4fGrnPsbe7P+watB/2wVtv9a8dTw/Utep+nxlp9Zrtpcs1W1NaeF2eit+ghu41Cr8uhSvXLvu05uz0lWXmjNJcHabMBzIM5dlM+rudl9vYZCD+hkwLRw4VWEKKF3/Nv1JacjUfAlDJmmtgkWOF2bDS4QLRjO58Hf41e5+Pu7/w6P3T1p45HZntESEzcqZRMDoC/oFZ0kTITj/ujTc6xzAGlFT75jAT4FbBeTJfiyoho0waKt+vzD5RUaYDzrUkaoNdkPfBYp1YmQqtzIrwYhcXGy1sI6Yyya+Zl6gCAOMweB4sUqZAE6O4nuMiGcdzm9F29Rm+m4zzUEsj4XgvnvvWv/Czz/2wa/BDwfPk44/cP+LD02iQ8g9Xq9+Al6i/bHmHkXztaGcRHoBUtJfVrPcqpp+pJH4sCXY2yKpOvoKp134Xh63TIVucuxVwnVMl6zijflu5Hs/US7Z4DWErUoSkTkW8lCDZeVFlc0S+Z7/8Tzxyz36Chx+S75AOD0aHOi5+XEiyJWCyQ3jarA7Zgg4K16kcOHbMZB/SYpM7Zi1aJeUAFh2tlHpZWNmgImyRqwKT2TLiP2VsDvVowmblJQvAtiY72ZCXwAkMjvLbdNBmcq/3xv7y3E901iTJKNWGdBPIhqM22iwBc3G4agcAL0a+cxoOm9/fWnv6R7V/+1EffvrnHn5mWNfGUhOzCR1kNZBV7GkKvLiwusButnj5zjRJDW6maVtn+bgmo3HeTIdtXqykDj+BYDfA5THNgVgYZx3jkbMWZ7lMyR5I0XIOl5CBF6ikVL7Hb2DkvnKEQGGhx2SisSDV8cZF2I+8MO/mcfcLjz44fuqbJ1qrCZoESw74RXa+zSqf2ZAsZ2dm/VYWPcLeXSqITWMjmeKc5z8mI6QKWckQczxFAVc5i5f2MljiPpN8AXP5vBy03McG9sFxR7Q2GZyMk2AdgKlch2BiACmwDKCAeYYFTZZqeH+0HVlp5D0DrHd/68s/e/9HtX/7cRfo+jruHP3ivsUcGKNeg+YSnziSZ7m8UcySLRkaSYQsZtkPEECzIaqjriZDTMnGcRWZCkv1AEkrF9folfzXIucJrl4gipWJINFiYSmsnoOVceJ8QJZf7oELm0foM6fxGvgMCnQlz6OoMIKDc6PRn7vz2Ufu2wfwODTRM0d/+UFp/E2De0isE0wDEJtpLASg4jYEkuaw4OBrHGV8t5Xta+bnZgiZAmBSI1SbgLvc3wY0AMfPWOpG8g83jMDJZzClt6wyT3Y1sdFp46DmBgDh32Aan6yTDJPjOKZ/FyeM4ZwAJoeEy2P45p/75364XNPjx4JnyLejE93JjTmWsV67aXv2mpqCdzyUU0ZVECBfwlrQU8YRXVUlSVUHBulkkZi1bblPq1t6JHTpwvkEWeVF+Vt71NgPXUHzyThuC6PxvESiOizkdnVOxoG+G4OH6arZlCOu6l2rRHbk5U/bB/QY7DNyn4yujmi7rdFZ0jE7o8cqiTxzBidbGhgHg6yuTjxaZjsbT6ltkf4DFsrqMdBq8JLxHmYmOOkMQDMOqvo5aJjHQOLy2PV79RzFOqdFwqWzOPMcP/niOnLAc7TNBdnpgkCZeVCB6dWHLt68+27a/seCZzwOAN07OurX5KZZNlf1rdK3USXjVcYy9c58v0L1lEIzttdQkruqPixWaWU3Bj81kY27I8hqPs/KTsVGsbBN4HaEoYFgQ3mWWKrcCVVJT8t+nti0FLKyunHdAEXm1kxyY9gjv/ZBsY4ev/q5Tz19dIz7dJuqsoAzHzEYaDISjAbBzC0aqgjQwb0cwmkKcGAFuc7NHMZrUhkqB26AhBsjp6GEazU+U2UDqCJgTZrAvzhmW4MjdnR2r7GZba20kAwb2wVNgyiAnMhQCRwBaZgtKeVcEu6V49p99pk7jz94N+3+rsAzHk8+9vAzR794WrQeNqkY6Y/AQWcu5ui6V8cmpsym0VAAwm7W9xeptDJVMZNyFGP+UrNUbVYfEDBgrr6w1fJvaj9bC17TTK36PCNFzcNVBHAZKnM0kA6Sa3CP+Y/Zq3bdnrUP4xH2NZXryFGrDrj5Wa7gLNHx6boNOekzwnsBgyDwYhaXNGNO09A4qmDGeWuMBrpQ6z77NAcC6wEs82cKQ3LbvOTbxuPdZC+D4QJOYQIB4KAxciIYLgYDbXp/YSqaB8NRg2wb27cHx/H8Y8/c+dF5zvp41+AZjycf/8TdPfqvWWiwK+rKJYj6sro7bCr9mUW1Gh9KCLnPDIqyzMk2tbZaSSiygLn1qqh2U360s6TGOK1oMRDOx3VsAY0O0gqELP7k8RjyK2M+ZjzmaZgwcmLvU9NXB4szSQJ5tN39oFlHj3/jC4++cPSTeycOMs4RcxY2OjvjNnOeZso/bIn8lYOUhTyZhrVq7mVDYzBTPporWFC6mioBwucY11n5W5kH09QAgIxGSzJMU33aAEzWn83iTeQ/knEXBNMFDIQ4bTISpkR7aAOYLjCoPMB2ME377HsBzni8J/CMxz/4+CN3j+j9NH0BN1sHCtEb+WYxlFWAL0dX8oc9r3Ij63GeU3WOpok5DGDiooOTJfIOodNoKJbKz1SnM4GYv7XPch8ry1xHajgRPPnCgDETHP6Xsp85gM1nvtdQrHj/i3/soefsw3wcuRQctRoPudk5R/WNN5oGJeEaJsMpR/P5ndGRWVAwpRhPFgBD6xTgaMvnNaeblGufsZKgHLgzdnGZBMrPUJw6Cj5xDsFzSROkBkFRxAlLHrIL7IT8J+CiwcJHntPITI1sc0rp9+AUAzh/18vvtbnfM3jGYwDoOJOn6ZqEpEo2Kzbx5ZkSp8pXdKEhgzjAaBNopiRd73fdqckqp1l2gTouiwm+fcqv4kZJNQIRGtGyqmdlo5mmzXq9eU+vOoZiGg0cVlkKWBkl7zIL2IGftg/58atfePTe0VnuVR6wRPQ1t2mTSVQTpnNwUgPNjiXhz+9jMKjNmZiVGy0SL+G0zcUCxWCT5ZTbCKTgLVn8BbJNk9Tqb01M00AopVha9QAD8hs+k2ko41CSw+9e4Dv3PxH+5G+8D+CMx/sCz3g8+dgnnna7/sJxzj8AJWtkJMw1KSH74mIy6O+1wLTyJCtwRVStnKRfKa1F6k3t1WfCXzlVRP1bKgyWaRZmBRwZGMs/TWMG8jXfv/KamLkNBkF1KpIaAA6XELB49U/8I++t+PP9PmJP9kGJvWt+yjK46NMqPpsesTpqBgntJeeKlWx14QgeGCOskfOoAIpVN1mFUEAyLGhSA8d018Y60U22elOpTcvCzVmjNy1oMAz+lS2f4zqBsZwGx02slH+zvu2h480DV9+9eMg++6ffo1RbH+8bPOPx5OM/88LREE+OzsH2wWL0pnyAEsaY41RN2NxGEklvLSmFLUDwpdZMrtrMW5g/ERi+rudW9rctOxarkPnGp720mpn5MoA7szhfIkJ+R+cq5LdlMJB5DzpJ+B37iB6DfY7O91wSSCv72dqZOZCYmKzU5Ap65SdK3p3rLrhxQk3VogkUvjKZL+fvU/qZeZvbaHENt2mdj+kCi72e/SidM6fEbA1TBlxOGxhmAOdigKGpasAxB2epKrigOcA8ZxgIz3zyD7z52T/9C+8fOONxsp/wMcaBXnrltSe7P/LUcU5f7aoXrcp7lh0EOlcvO9sqj0BdiCmdqFo344zBfG5cmipmrbsSfRaiBqY8VEX2zH9u3DGbi5MEf0cuwJwKzNwpf5p3+FX0HL/VpE8MU3pN1cJ5NON/3VTfdlzkF37pH374nn2Ej8E+Ryf63BFMHk2AhMtlCxV6Zgfus3pgspChV6MyQvOsa0yYCxMxEcxfY1v51MJWRB1UcXi4R6l84K7KdFwmgmRdMbjB5Mg+ADbleI8vk9xmOVIOEmeBZ2hawRggHix0MRy1037n67/4sy/YB/D4iZhHjycff/TBH/n7H/7a0Zp3jpa8r4ZYRBYhhIFURqAcjcetWxTAOTKvTrmwQay3pZvUVVJuVj8sjKQ0BfkU85kaSFrOQCXz+rKf7ShxRQqdV16A65wXP8mUpTiR0wQ83nfx5/t9HOxz/ziub6qQcnH+KIvQOX3ToGbMJB4ybOY/xSrTIitTRLjwkrQ0Emoqwtl3a30Bl9s3B1fl9JF5ynUj20CmceCTUwgCdXycijGk3SldtkOqhV2slQQDOCe/d7roT379F/+eDwQ44/GBgEePf+gfeOTZT1x84skjPj1dwutttVGsyl4K2VwctQyispN7nFc0jIe6d+Jh3Biq3sSXlfRDfieEOOwks8BgFa6sw2xtMetidTdKwPk6mu5WYyJ1rhhJD3oJz/3CH/1wrOkf9/g7rD1zHN8DVxV1oyzLXAxBawMZ2UZ7TJFeFQVM3MJauaI1+cxLg625k61GQo3vlJvmLdbyHAxyznwMUq2FBng3LMjhpyq7Ye0e1xkY/y6Y0www6TVlHG1ou38YCZ/9s7/0d//EMu3m4wMFz3g8+bg/+KN/6JG7hyR4/GiDZ9Xh9LlyIUieOQag/IOvJZ+yG7vXGCl3gcwlwaG/rKQZZaGjvG7JjdbBVhPKKOeCdWlA4hwAFbU5YWg3C4vKLOGqLKY+N+5m/eE7bD/s8bUvPPrg6GTPoLLaczpCO+vI6v+IJcv7YBUuTVXpCnvKzcFQgs7ne1MCrvkQzAGysnIsW8d2mPugPq9KcMqidqMlzUoB2M+sHMDaDadZZTDctgfHfp7+1B9448k/+0s/e88+hIfbh/x48XuvX27Wnjrs4y9htJ83nO2OW6IbZ26yknqse15TA4z3Oc1nLNJh3F7v1U2muvIcreypyuy6C0JoIFTjU31OtLCFuzjiqjGbedG9bF/8vdRXcb581IIcF609+yf+2Cfu2E/xcff5126dIl56a7fL459d5b+wq2u8vubfue5BrsKDBVhyFZ7I11pVZ1wr3DSYdU/rgLPZ0oaIR3yz1DUD2swdb6gRAk7gKnsfK9kQfOW4ScYtdvV87a8dAPxmszeeebdlNu/38aGDR48BoiO+3T06+Re5Eg0vjC81ZmUf15TrvUBUhaEFnmvc2iPWNQpm/ZrMBIuz6uiYRLUvq1XIsB4vWHEiSzZJbPOybCGBMLEsgTTGEDQBDeUgcd8u7LN3fkqSbX3828+/9qXrPf7Cm4fZcrW7vXWgYgKHi4YAOPhbi4cw6OR09h5n9YS6uTFmy2uGsGWjZVIT64xZMyvHdZG9s4RpcSdvLhWFtdNYFZGuYUo258S3paZtVAlsEb95On34oNHjIwOPHgNE+749dVyk20eDX2IqANYSq7uoBab84g5rTjC49Tlpzee6BHNh9mUinE8A6a7VuvjlNJdc8zhbEScoVYwD6TUCn4WdnNBGKRGqzaoloPIC96fv/KM/c9c+Jo9f+53XXry6jtuDfW6C52oCJ665nlsyEdZ3y3KoXe2et4pk+ZOdLWoZ9A8mFTEgNfYwh/blzNNprNwEUJttu5TsLKzT7LyievN7R+x67uGLN174qECjx0cOnvXxX/0Pb37+6PBfPK7J58k6LOgEUFKqpSngZ0DpmAjn+4yGacbt3ZY5QV7rJShyUq3ZUtqzOnMkHkbIqDGLWBcF3zD+kP2AC2/ke8PdGXcWfWjzV+78/MN/n32MHnef/+u3+376aweAfIBnBY6ANKTaFeXbzuWrOoHENfEwH6oviyGa+XRKb/5qSKJhLMJoqBjAQdOAr28uTGKL66Z/sJxH7nY4ag+Oa/Kbx3b3/vyXP5x85t08fqrg0eMvv/T65ZVtBxP5F48Ld1ug6MxfxETFUlpFJ+a6BfuS70zAYPyo7r3To0zzCL/JPHLxnJZggQfuE5w01IRFzBKYSDlx8qpovvPP/vxHU03wXh53f+f/ffHqym4P8LzVD8l7ACnBwvznqnNlUQJqF2DG6qOdVepQAoGVk9Z8Jzjccz4mJl9ndd4cpkqKu6bBWhgVIYsbtXe6H46kmT84ru6zfuHf/k9+ioBZHx8L8KyP5weQ+nb7MBQ+d1y8I2LarQITHO7gCqHFPPuyTNQi40KzQ9cbV3Ve69VJO3+o3AYfVERMm7fnxdVCeSeV/ycL5boE93/5Mw8/bh/Dx92/9NdvX8fBPjvYB4zjMBBusI8WUTxbVJFF7h3OztnyxvmI1dznfKZ8SUfSkSeOLRuqHyCBvcp00JaQxWKd+8dI7rePv1/4i//ixwMw6+NjB56bj9/+769uX1/Fl3Zrnzku3OXqvMkcKPmmzxgJNc06bLnvaJxNPUDGi9Fxn/YziGhc061hE2nxHBdxTrbiBd9wn8rj9falX/7Mh1w5/RM8/s3//LXnr67i8wMgVzdzn57LDg+Z5vtceTSZZ8kvo9aUWIBD3LiIHMxtKhxJ1abZoc3PBmRv5jqjTX935DEPm3/7P/va+yvY/KgeP3F5zof9+IU/cnHveBr/7Fvfef3S+8Xt42J97nC6nzja/DHTgB6uIIIdTQWzqoaGb/Z2YU6FhhSId2BXduQaOm18eymGXB4c6ziC+8cZOONxAP7OAZDLgySfmAWuKHvJNG51xZjrIWlhkNGaFTlYWvWAKjZgiQ2bvZ0VhE7LXyzOGbdH8PnuEeJ+96Ejf7HtzXsvfO2jTfp/ksfHnnl+1OPff/GtA0DtkHl++7gWnz4Y59MHEG7VIiBc15pjRmUcjM4xp/jkw1d9Thv1bErBqsnBPFqVP0tBvvorn/3xC7V/HB5j7OdvvtG/cYz1fHEscA+XzUb+E8NQ2Gut67nw/SgpJANpIckaJl4mLeZD4JK71mzNHePVQ6a9fDTkvS327z785hsvv3D39w5Ybj5+T4PnnR7f+CtvPXHtfmvfT58+rvjjB2gOUB2A2uOJG2M9nMxH2LDKQQ3CJJdanIWKhjsQ1Ij3Fve27fprf/Kzn/xYy4t3evzL/+lrX7q66k8dgeexHCi95uBod96ahM5b1BgcjReu/5B3UmRdYmCFdkrdHxxMfd9HvtL3V1trL28X9vLP/K2/ef/3MlDe6fH7Djw/6nH3+bi1na6fGMvSHix1Gft2mRPdPC6PS3/rAMotDq1e0lu9lBuExTviwWGVvrpt7V5r19/+2k+4aOHH4fHPf+tvfGnf/TPHGNATB/M8caX79+Sz/eBopwdcYOV+jvtY3I/eDpDtrx7h47UW+w9OB1iuT9f37c03Htz7fQaQH/X4/wH+7zkJyd02dQAAAABJRU5ErkJggg==",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 Ay(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function Av(){return(0,o.jsx)(Ag,{"aria-hidden":"true",className:"session-setup-select-icon"})}let Ab="Create Agent";function Aw(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:Ab,f=null!=(r=null==s?void 0:s.title)?r:Ab,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)(Am,{"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)(aC.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)(aC.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)(l3.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let i=Ay(t),a=function(e,t){var r;if(Ay(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)(lK.A.Group,{className:"platform-selector-group",children:(a||[]).map(e=>(0,o.jsxs)(lK.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)(l2.A,{placeholder:e.placeholder,suffixIcon:(0,o.jsx)(Av,{}),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 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}function Ax(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 Ak(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 AS(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=Ax(AE({},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:AE({},l.executionFlow,null==p?void 0:p.executionFlow),executionUx:AE({},l.executionUx,null==p?void 0:p.executionUx)}),k=(t=w.runtimeInfo,r=w.deviceType,Ax(AE({},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)(Af,{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)(Aw,{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){Ak(o,n,i,a,s,"next",e)}function s(e){Ak(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:AC}=Y.A;function AI(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]=aC.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=aC.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=aZ(m),j="string"==typeof I?h[I]:void 0,O=(0,a.useMemo)(()=>new aS({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){aO(o,n,i,a,s,"next",e)}function s(e){aO(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),V=(0,a.useRef)(null),q=(0,a.useCallback)(()=>aU(function*(){if(!aR(S))return J.current=null,V.current=null,!0;if(J.current===C)return!0;let e=V.current;if((null==e?void 0:e.signature)===C)return e.promise;let t={promise:Promise.resolve(!0),signature:C},r=aU(function*(){try{var e;return yield(e=function*(){return!!aR(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){aP(o,n,i,a,s,"next",e)}function s(e){aP(o,n,i,a,s,"throw",e)}a(void 0)})})(),J.current=C,!0}catch(e){return G(e,{title:"Failed to apply AI configuration"}),!1}finally{V.current===t&&(V.current=null)}})();return t.promise=r,V.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)(()=>aU(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(()=>aU(function*(){yield Y()})()),()=>{O.setBeforeActionHook(void 0)}):void O.setBeforeActionHook(void 0),[N,O,Y]);let _=(0,a.useCallback)(e=>aU(function*(){let t=aQ({},u.getFieldsValue(!0),e||{});E(!0);try{let r=yield O.getSessionSetup(e);y(r),b(null);let n=aZ(r);K.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(aI(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)=>aU(function*(){if(H.current)return H.current;let r=aU(function*(){var r;let n;try{if(Z.current=!0,k(!0),!(yield q()))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=aM(n),!1;return G(e,null!=(r=function(e){let t;if(t=aB(e).toLowerCase(),aD.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,o.jsx)(aF,{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})(),[q,u,c,O,D]),ee=(0,a.useCallback)(()=>aU(function*(){try{Q.current=aM(aj(m,u.getFieldsValue(!0))),Z.current=!0,k(!0),yield O.destroySession(),c.success("Session disconnected"),yield D(),yield _()}catch(e){G(e,{title:"Failed to disconnect session"})}finally{Z.current=!1,k(!1)}})(),[u,c,O,D,_,m]);return(0,a.useEffect)(()=>{P&&q()},[q,P]),(0,a.useEffect)(()=>{if(!P||B.connected)return;let e=!1,t=!1,r=()=>aU(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=aZ(m);if(e&&K.current!==j){var t,r;_((t=aQ({},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=aj(m,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,i=aM(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,aU(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)(AC,{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)(AS,{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)(aJ,{className:"icon-background"}),(0,o.jsx)(aX,{className:"icon-foreground"})]}),(0,o.jsx)("h1",{children:u}),(0,o.jsx)("p",{className:"connection-status",children:d})]})]})})})}let Aj=document.getElementById("root");if(!Aj)throw Error("Root element not found");(0,s.createRoot)(Aj).render((0,o.jsx)(a.StrictMode,{children:(0,o.jsx)(function(){return(0,o.jsx)(AI,{serverUrl:"",appVersion:"1.10.2",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:()=>V,VM:()=>v,Vb:()=>ep,W4:()=>g,WH:()=>es,Wh:()=>em,XE:()=>eE,YK:()=>z,Yf:()=>Q,Yg:()=>G,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:()=>q,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",G="MIDSCENE_INSIGHT_MODEL_TIMEOUT",V="MIDSCENE_INSIGHT_MODEL_TEMPERATURE",q="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,G,V,q,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}
954
+ `)}(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","905"],()=>A(8087));c=A.O(c)})();
955
+ //# sourceMappingURL=index.f720647c.js.map