@midscene/harmony 1.12.7-beta-20260914023554.0 → 1.12.7
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.
- package/dist/es/cli.mjs +1 -1
- package/dist/lib/cli.js +1 -1
- package/package.json +4 -4
- package/static/index.html +1 -1
- package/static/static/js/{index.f5a66af7.js → index.1b760d4c.js} +36 -36
- package/static/static/js/index.1b760d4c.js.map +1 -0
- package/static/static/js/index.f5a66af7.js.map +0 -1
- /package/static/static/js/{index.f5a66af7.js.LICENSE.txt → index.1b760d4c.js.LICENSE.txt} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/*! For license information please see index.
|
|
2
|
-
(()=>{var e,t,r,n,i,o,a,s={95902(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=95902,e.exports=t},75845(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=75845,e.exports=t},57125(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=57125,e.exports=t},39545(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=39545,e.exports=t},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},51560(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=51560,e.exports=t},2170(e,t,r){"use strict";let n,i,o;var a,s,l,A=r(65723),c=r(22155),u=r(58997);let d=e=>{let{hideLogo:t=!1}=e,{isDarkMode:r}=function(){let[e,t]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let e=()=>{var e;t("dark"===(null==(e=document.querySelector("[data-theme]"))?void 0:e.getAttribute("data-theme")))};e();let r=new MutationObserver(e),n=document.querySelector("[data-theme]")||document.documentElement;return r.observe(n,{attributes:!0,attributeFilter:["data-theme"]}),()=>r.disconnect()},[]),{isDarkMode:e}}();return t?null:(0,A.jsx)("div",{className:"logo",children:(0,A.jsx)("a",{href:"https://midscenejs.com/",target:"_blank",rel:"noreferrer",children:(0,A.jsx)("img",{alt:"Midscene_logo",src: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 p=r(4177),h=r(56766),f=r(66419),m=r(28594),g=r(49488),y=r(18926),v={};v.d=(e,t)=>{for(var r in t)v.o(t,r)&&!v.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},v.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),v.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var b={};v.r(b),v.d(b,{create:()=>y.vt});let{create:w}=b,E="midscene-auto-zoom",x="midscene-background-visible",k="midscene-elements-visible",S="midscene-model-call-details",C="midscene-dark-mode",I="midscene-playback-speed",j="midscene-subtitle-enabled",O=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},P=w(e=>{let t="false"!==localStorage.getItem(E),r="false"!==localStorage.getItem(x),n="false"!==localStorage.getItem(k),i="true"===localStorage.getItem(S),o="true"===localStorage.getItem(C),a=Number.parseFloat(localStorage.getItem(I)||"1"),s=Number.isNaN(a)?1:a,l="false"!==localStorage.getItem(j),A=O("focusOnCursor"),c=O("showElementMarkers"),u=O("darkMode"),d=void 0===u?o:u;return void 0!==u&&localStorage.setItem(C,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(x,t.toString())},setElementsVisible:t=>{e({elementsVisible:t}),localStorage.setItem(k,t.toString())},setAutoZoom:t=>{e({autoZoom:t}),localStorage.setItem(E,t.toString())},setModelCallDetailsEnabled:t=>{e({modelCallDetailsEnabled:t}),localStorage.setItem(S,t.toString())},setDarkModeEnabled:t=>{e({darkModeEnabled:t}),localStorage.setItem(C,t.toString())},setPlaybackSpeed:t=>{e({playbackSpeed:t}),localStorage.setItem(I,t.toString())},subtitleEnabled:l,setSubtitleEnabled:t=>{e({subtitleEnabled:t}),localStorage.setItem(j,t.toString())}}}),R="midscene-env-config",M="midscene-service-mode",T="midscene-tracking-active-tab",N="midscene-deep-locate",D="midscene-deep-think",B="midscene-screenshot-included",z="midscene-dom-included",F="midscene-ime-strategy",L="midscene-screenshot-strategy",U="midscene-auto-dismiss-keyboard",K="midscene-keyboard-dismiss-strategy",Q="midscene-always-refresh-screen-info",J=()=>localStorage.getItem(R)||"",Z=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=w((e,t)=>{let r=J(),n=Z(r),i=window.location.href.startsWith("chrome-extension"),o=localStorage.getItem(M),a="false"!==localStorage.getItem(T),s="true"===localStorage.getItem(N),l=localStorage.getItem(D),A="false"!==localStorage.getItem(B),c=localStorage.getItem(z)||"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(M,t)},config:n,configString:r,setConfig:t=>e({config:t}),loadConfig:t=>{e({config:Z(t),configString:t}),localStorage.setItem(R,t)},syncFromStorage:()=>{let t=J();e({config:Z(t),configString:t})},forceSameTabNavigation:a,setForceSameTabNavigation:t=>{e({forceSameTabNavigation:t}),localStorage.setItem(T,t.toString())},deepLocate:s,setDeepLocate:t=>{e({deepLocate:t}),localStorage.setItem(N,t.toString())},deepThink:"true"===l||"false"!==l&&"unset",setDeepThink:t=>{e({deepThink:t}),localStorage.setItem(D,t.toString())},screenshotIncluded:A,setScreenshotIncluded:t=>{e({screenshotIncluded:t}),localStorage.setItem(B,t.toString())},domIncluded:"visible-only"===c?"visible-only":"true"===c,setDomIncluded:t=>{e({domIncluded:t}),localStorage.setItem(z,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)},screenshotStrategy:localStorage.getItem(L)||"auto",setScreenshotStrategy:t=>{e({screenshotStrategy:t}),localStorage.setItem(L,t)},autoDismissKeyboard:"false"!==localStorage.getItem(U),setAutoDismissKeyboard:t=>{e({autoDismissKeyboard:t}),localStorage.setItem(U,t.toString())},keyboardDismissStrategy:localStorage.getItem(K)||"esc-first",setKeyboardDismissStrategy:t=>{e({keyboardDismissStrategy:t}),localStorage.setItem(K,t)},alwaysRefreshScreenInfo:"true"===localStorage.getItem(Q),setAlwaysRefreshScreenInfo:t=>{e({alwaysRefreshScreenInfo:t}),localStorage.setItem(Q,t.toString())}}});var q=r(64174),H=r(68928),W=r(65584),G=r(7991),V=r(56620),Y=r(25656);function $(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 _(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){$(o,n,i,a,s,"next",e)}function s(e){$(o,n,i,a,s,"throw",e)}a(void 0)})}}let{TextArea:ee}=q.A,et={},er=[{key:"MIDSCENE_MODEL_BASE_URL",placeholder:"https://dashscope.aliyuncs.com/compatible-mode/v1"},{key:"MIDSCENE_MODEL_API_KEY",placeholder:"sk-..."},{key:"MIDSCENE_MODEL_NAME",placeholder:"qwen3-vl-plus"},{key:"MIDSCENE_MODEL_FAMILY",placeholder:"qwen3-vl"}],en=[{key:"replanningCycleLimit",label:"Replanning Cycle Limit",placeholder:"Model default"},{key:"waitAfterAction",label:"Wait After Action (ms)",placeholder:"Default: 300"},{key:"screenshotShrinkFactor",label:"Screenshot Shrink Factor",placeholder:"Default: 1"}];function ei(e){var t,r,n,i,o,a;return{replanningCycleLimit:null!=(i=null==(t=e.replanningCycleLimit)?void 0:t.toString())?i:"",waitAfterAction:null!=(o=null==(r=e.waitAfterAction)?void 0:r.toString())?o:"",screenshotShrinkFactor:null!=(a=null==(n=e.screenshotShrinkFactor)?void 0:n.toString())?a:""}}function eo(e){let t={};for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith("#"))continue;let n=e.indexOf("=");if(n<=0)continue;let i=e.slice(0,n).trim(),o=e.slice(n+1).trim();i&&(t[i]=o.replace(/^['"]|['"]$/g,""))}return t}function ea(e,t,r){let n=e.split(/\r?\n/).filter(Boolean),i=n.findIndex(e=>e.trim().startsWith(`${t}=`));return r?i>=0?n[i]=`${t}=${r}`:n.push(`${t}=${r}`):i>=0&&n.splice(i,1),n.join("\n")}function es(){return(0,A.jsx)("svg",{"aria-hidden":"true",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,A.jsx)("path",{d:"M5 8.00002V3.95856L8.5 5.97929L12 8.00002L8.5 10.0208L5 12.0415V8.00002Z",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:"1.33333"})})}function el(e){let{isLoading:t}=e;return(0,A.jsx)("span",{className:"midscene-config-modal-verify-icon",children:t?(0,A.jsx)("svg",{"aria-hidden":"true",className:"midscene-config-modal-spinner",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,A.jsx)("path",{d:"M8 1.5A6.5 6.5 0 1 0 14.5 8",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.5"})}):(0,A.jsx)(es,{})})}function eA(e){var t,r,n;let{open:i,className:o,width:a=640,textValue:s="",agentOptionsValue:l=et,initialTab:u="text",showEnvStyleSelect:d=!1,envTextareaMinRows:p=7,envTextareaAutoSize:h=!0,showAgentOptions:m=!0,envFields:g=er,parseEnvText:y=eo,setEnvFieldValue:v=ea,validateEnvText:b,onClose:w,onSave:E,onVerify:x}=e,[k,S]=(0,c.useState)(u),[C,I]=(0,c.useState)(s),[j,O]=(0,c.useState)(()=>ei(l)),[P,R]=(0,c.useState)({kind:"idle"}),[M,T]=(0,c.useState)(!1),[N,D]=(0,c.useState)(null),B=(0,c.useRef)(0);(0,c.useEffect)(()=>{i&&(B.current+=1,S(u),I(s),O(ei(l)),R({kind:"idle"}),D(null))},[l,u,i,s]);let z=(0,c.useMemo)(()=>y(C),[y,C]),F=(0,c.useMemo)(()=>(function(e){let t={},r=e.replanningCycleLimit.trim(),n=e.waitAfterAction.trim(),i=e.screenshotShrinkFactor.trim();if(r){let e=Number(r);if(!Number.isInteger(e)||e<0)return{options:null,error:"Replanning cycle limit must be an integer greater than or equal to 0."};t.replanningCycleLimit=e}if(n){let e=Number(n);if(!Number.isFinite(e)||e<0)return{options:null,error:"Wait after action must be a number greater than or equal to 0."};t.waitAfterAction=e}if(i){let e=Number(i);if(!Number.isFinite(e)||e<1)return{options:null,error:"Screenshot shrink factor must be a number greater than or equal to 1."};t.screenshotShrinkFactor=e}return{options:t,error:null}})(j),[j]),L=null!=(t=null==b?void 0:b(C))?t:null,U=null!=L?L:"error"===P.kind?P.message:null,K=()=>{B.current+=1,R(e=>"idle"===e.kind?e:{kind:"idle"}),D(null)};return(0,A.jsx)(H.A,{centered:!0,className:["midscene-config-modal",`midscene-config-modal--${k}`,o].filter(Boolean).join(" "),destroyOnClose:!0,footer:(0,A.jsxs)("div",{className:"midscene-config-modal-footer-actions",children:[(0,A.jsx)(W.Ay,{onClick:w,children:"Cancel"}),(0,A.jsx)(W.Ay,{disabled:!F.options,loading:M,onClick:()=>void _(function*(){if(F.options&&!M){T(!0),D(null);try{yield E({text:C,agentOptions:F.options})}catch(e){D(e instanceof Error?e.message:String(e))}finally{T(!1)}}})(),type:"primary",children:"Save"})]}),maskClosable:!0,onCancel:w,open:i,title:"Config",width:a,children:(0,A.jsxs)("div",{className:"midscene-config-modal-body-content",children:[(0,A.jsxs)("section",{className:"midscene-config-modal-env-section",children:[(0,A.jsxs)("div",{className:"midscene-config-modal-section-heading",children:[(0,A.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,A.jsx)(f.A.Text,{strong:!0,children:"Model Env Config"}),(0,A.jsxs)(f.A.Text,{type:"secondary",children:["The format is KEY=VALUE and separated by new lines. These data will be saved ",(0,A.jsx)("strong",{children:"locally in your browser"}),"."]})]}),d?(0,A.jsx)(G.A,{"aria-label":"Model env config style",className:"midscene-config-modal-env-style-select",onChange:e=>{K(),S(e)},options:[{label:".env Style",value:"text"},{label:"Form Style",value:"form"}],value:k}):null]}),"form"===k&&d?(0,A.jsx)("div",{className:"midscene-config-modal-env-fields",children:g.map(e=>{var t;return(0,A.jsxs)("div",{className:"midscene-config-modal-env-field",children:[(0,A.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,A.jsx)(f.A.Text,{children:e.key})}),(0,A.jsx)(q.A,{"aria-label":`${e.key} value`,id:`config-modal-${e.key}`,onChange:t=>{K(),I(v(C,e.key,t.target.value))},placeholder:e.placeholder,value:null!=(t=z[e.key])?t:""})]},e.key)})}):(0,A.jsx)(ee,{"aria-label":"Model environment configuration",className:"midscene-config-modal-env-textarea",onChange:e=>{K(),I(e.target.value)},autoSize:!!h&&{minRows:p},placeholder:"MIDSCENE_MODEL_BASE_URL=...\nMIDSCENE_MODEL_API_KEY=...\nMIDSCENE_MODEL_NAME=...\nMIDSCENE_MODEL_FAMILY=...",rows:p,value:C,wrap:"off"}),(0,A.jsxs)("div",{className:`midscene-config-modal-verify-row${U?" midscene-config-modal-verify-row--error":""}`,children:["success"===P.kind?(0,A.jsx)(V.A,{className:"midscene-config-modal-verify-alert",message:"Verified",showIcon:!0,type:"success"}):U?(0,A.jsx)(V.A,{className:"midscene-config-modal-verify-alert",message:U,showIcon:!0,type:"error"}):(0,A.jsx)("span",{}),x?(0,A.jsx)(W.Ay,{className:"midscene-config-modal-verify-button",disabled:!!L||"running"===P.kind,icon:(0,A.jsx)(el,{isLoading:"running"===P.kind}),onClick:()=>void _(function*(){if(!x||L||"running"===P.kind)return;let e=B.current+1;B.current=e,R({kind:"running"});try{let t=yield x(z);if(B.current!==e)return;if(t.passed)return void R({kind:"success"});R({kind:"error",message:t.message||"Connectivity test failed without details."})}catch(t){if(B.current!==e)return;R({kind:"error",message:t instanceof Error?t.message:String(t)})}})(),children:"running"===P.kind?"Verifying":"Verify"}):null]})]}),m?(0,A.jsxs)("section",{className:"midscene-config-modal-agent-options",children:[(0,A.jsx)(Y.A,{}),(0,A.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,A.jsx)(f.A.Text,{strong:!0,children:"Agent Option Config"}),(0,A.jsx)(f.A.Text,{type:"secondary",children:"Leave a field empty to use the default value. Changes apply on the next Agent connection."})]}),(0,A.jsx)("div",{className:"midscene-config-modal-option-fields",children:en.map(e=>(0,A.jsxs)("div",{className:"midscene-config-modal-option-field",children:[(0,A.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,A.jsx)(f.A.Text,{children:e.label})}),(0,A.jsx)(q.A,{"aria-label":e.label,id:`config-modal-${e.key}`,min:+("screenshotShrinkFactor"===e.key),onChange:t=>{K(),O(r=>{var n,i;return n=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},r),i=i={[e.key]:t.target.value},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})},placeholder:e.placeholder,type:"number",value:j[e.key]})]},e.key))}),(null!=(r=F.error)?r:N)?(0,A.jsx)(V.A,{message:null!=(n=F.error)?n:N,showIcon:!0,type:"error"}):null]}):null]})})}function ec(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 eu(e){let{showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:i="icon",playgroundSDK:o,onVerify:a,agentOptions:s,onAgentOptionsSave:l,configModalClassName:u,configModalWidth:d,envTextareaAutoSize:p,envTextareaMinRows:h}=e,{config:f,configString:y,loadConfig:v,syncFromStorage:b}=X(),[w,E]=(0,c.useState)(!1),x=f.MIDSCENE_MODEL_NAME,k=(0,c.useRef)(null),S=null!=a?a:(null==o?void 0:o.runConnectivityTest)?o.runConnectivityTest.bind(o):void 0,C=e=>{b(),E(!0),e.preventDefault(),e.stopPropagation()};return(0,c.useEffect)(()=>{w&&b()},[w,b]),(0,A.jsxs)("div",{ref:k,style:{alignItems:"center",display:"flex",gap:"10px",height:"100%",justifyContent:"flex-end",minHeight:"32px"},children:[r?x:null,(0,A.jsx)(g.A,{align:{offset:[-10,5]},getPopupContainer:()=>k.current,open:!w&&(t?0===Object.keys(f).length:void 0),placement:n,title:"Please set up your environment variables before using.",children:"icon"===i?(0,A.jsx)(m.A,{onClick:C}):(0,A.jsx)("span",{onClick:C,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,A.jsx)(eA,{agentOptionsValue:s,className:u,envTextareaAutoSize:p,envTextareaMinRows:h,width:d,onClose:()=>E(!1),onSave:e=>{var t;let{text:r,agentOptions:n}=e;return(t=function*(){let e=!1,t=!1;try{yield null==l?void 0:l(n),e=!!l,t=!0,v(r),E(!1)}catch(n){let r=[];if(t)try{v(y)}catch(e){r.push(e)}if(e)try{yield null==l?void 0:l(null!=s?s:{})}catch(e){r.push(e)}if(r.length>0)throw Error(`Saving configuration failed and rollback was incomplete. Original error: ${String(n)}. Rollback errors: ${r.map(String).join("; ")}`);throw n}},function(){var e=this,r=arguments;return new Promise(function(n,i){var o=t.apply(e,r);function a(e){ec(o,n,i,a,s,"next",e)}function s(e){ec(o,n,i,a,s,"throw",e)}a(void 0)})})()},onVerify:S?e=>S(e):void 0,open:w,parseEnvText:Z,showAgentOptions:!!l,textValue:y})]})}function ed(e){let{showEnvConfig:t=!0,showTooltipWhenEmpty:r=!1,showModelName:n=!1,githubUrl:i="https://github.com/web-infra-dev/midscene",helpUrl:o="https://midscenejs.com/quick-start.html#chrome-extension",className:a="",playgroundSDK:s,onVerify:l,agentOptions:c,onAgentOptionsSave:u,configModalClassName:d,configModalWidth:m,envTextareaAutoSize:g,envTextareaMinRows:y}=e;return(0,A.jsxs)("div",{className:`nav-actions ${a}`,children:[(0,A.jsx)(f.A.Link,{href:i,target:"_blank",children:(0,A.jsx)(p.A,{className:"nav-icon"})}),(0,A.jsx)(f.A.Link,{href:o,target:"_blank",children:(0,A.jsx)(h.A,{className:"nav-icon"})}),t&&(0,A.jsx)(eu,{showTooltipWhenEmpty:r,showModelName:n,playgroundSDK:s,onVerify:l,agentOptions:c,configModalClassName:d,configModalWidth:m,envTextareaAutoSize:g,envTextareaMinRows:y,onAgentOptionsSave:u})]})}var ep=r(46453),eh=r(34458);let ef=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:24,height:24,fill:"none",viewBox:"0 0 24 24"},e),r=r={children:[(0,A.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M22 9.483A14.53 14.53 0 0 0 9.75 5.674M19 12.9a9.85 9.85 0 0 0-4.75-2.642M5 12.9a10 10 0 0 1 2.18-1.65M8 16.157a5.63 5.63 0 0 1 2.5-1.455"}),(0,A.jsx)("path",{fill:"#6D6D6D",fillRule:"evenodd",d:"M12 20a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5",clipRule:"evenodd"}),(0,A.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20 20 4 4M2 9.483a15 15 0 0 1 1.75-1.42"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function em(e){let{title:t="Connect to a device"}=e;return(0,A.jsx)("div",{style:{display:"flex",height:"100%",width:"100%",alignItems:"center",justifyContent:"center"},children:(0,A.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:4},children:[(0,A.jsx)(ef,{"aria-hidden":"true",style:{width:24,height:24,objectFit:"contain"}}),(0,A.jsx)("h2",{style:{margin:0,whiteSpace:"nowrap",textAlign:"center",fontSize:13,lineHeight:"24px",fontWeight:400,color:"rgba(0, 0, 0, 0.85)"},children:t})]})})}var eg=r(1352),ey=r(80955),ev=r(16921);function eb(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 ew(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eb(o,n,i,a,s,"next",e)}function s(e){eb(o,n,i,a,s,"throw",e)}a(void 0)})}}function eE(e){let{getScreenshot:t,getInterfaceInfo:r,serverOnline:n,isUserOperating:i=!1,mjpegUrl:o,mode:a="default",contentRef:s}=e,[l,u]=(0,c.useState)(null),[d,p]=(0,c.useState)(!1),[h,f]=(0,c.useState)(null),[m,y]=(0,c.useState)(0),[v,b]=(0,c.useState)(null),[w,E]=(0,c.useState)(()=>String(Date.now())),x=(0,c.useRef)(null),k=!!(o&&n),S=["screenshot-viewer","screen-only"===a&&"screen-only"].filter(Boolean).join(" "),C=(0,c.useRef)(null),I=(0,c.useRef)(!1);(0,c.useEffect)(()=>{if(!k)return;let e=()=>{let e=x.current;!e||e.naturalWidth>0||e.naturalHeight>0||E(String(Date.now()))},t=window.setTimeout(e,2500),r=window.setInterval(e,2500);return()=>{window.clearTimeout(t),window.clearInterval(r)}},[k,w,o]);let j=(0,c.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return ew(function*(){if(n){p(!0),e&&f(null);try{let e=yield t();if(console.log("Screenshot API response:",e),null==e?void 0:e.screenshot){let t=e.screenshot.toString().trim();t?(u(t),f(null),y(Date.now())):f("Empty screenshot data received")}else f("No screenshot data in response")}catch(e){console.error("Screenshot fetch error:",e),f(e instanceof Error?e.message:"Failed to fetch screenshot")}finally{p(!1)}}})()},[t,n]),O=(0,c.useCallback)(()=>ew(function*(){if(n&&r)try{let e=yield r();e&&b(e)}catch(e){console.error("Interface info fetch error:",e)}})(),[r,n]),P=(0,c.useCallback)(()=>{C.current&&clearInterval(C.current),console.log("Starting screenshot polling (5s interval)"),C.current=setInterval(()=>{!I.current&&n&&j(!1)},5e3)},[j,n]),R=(0,c.useCallback)(()=>{C.current&&(console.log("Stopping screenshot polling"),clearInterval(C.current),C.current=null)},[]),M=(0,c.useCallback)(()=>{console.log("Pausing screenshot polling"),I.current=!0},[]),T=(0,c.useCallback)(()=>{console.log("Resuming screenshot polling"),I.current=!1},[]),N=(0,c.useCallback)(()=>{j(!0)},[j]);if((0,c.useEffect)(()=>{if(!n){u(null),f(null),b(null),R();return}return(O(),k)?void R():(j(!1),P(),()=>{R()})},[n,k,P,R,j,O]),(0,c.useEffect)(()=>{n&&!k&&(i?M():(T(),j(!1)))},[i,M,T,j,n,k]),(0,c.useEffect)(()=>()=>{R()},[R]),!n)return(0,A.jsx)("div",{className:`${S} offline`,children:(0,A.jsxs)("div",{className:"screenshot-placeholder",children:[(0,A.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,A.jsx)("p",{children:"Start the playground server to see real-time screenshots"})]})});if(!k&&d&&!l)return(0,A.jsxs)("div",{className:`${S} loading`,children:[(0,A.jsx)(ev.A,{size:"large"}),(0,A.jsx)("p",{children:"Loading screenshot..."})]});if(!k&&h&&!l)return(0,A.jsx)("div",{className:`${S} error`,children:(0,A.jsxs)("div",{className:"screenshot-placeholder",children:[(0,A.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,A.jsx)("p",{className:"error-message",children:h})]})});let D=(0,A.jsx)("div",{className:"screenshot-content",ref:s,children:k?(0,A.jsx)("div",{className:"screenshot-image-shell",children:(0,A.jsx)("img",{ref:x,src:w?`${o}${(null==o?void 0:o.includes("?"))?"&":"?"}_mjpegRetry=${encodeURIComponent(w)}`:o,alt:"Device Live Stream",className:"screenshot-image",onError:()=>{window.setTimeout(()=>E(String(Date.now())),500)}},w||"initial")}):l?(0,A.jsx)("div",{className:"screenshot-image-shell",children:(0,A.jsx)("img",{src:l.startsWith("data:image/")?l:`data:image/png;base64,${l}`,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:",l.substring(0,100)),f("Failed to load screenshot image")}})}):(0,A.jsx)("div",{className:"screenshot-placeholder",children:(0,A.jsx)("p",{children:"No screenshot available"})})});return"screen-only"===a?(0,A.jsx)("div",{className:S,children:D}):(0,A.jsxs)("div",{className:S,children:[(0,A.jsx)("div",{className:"screenshot-header",children:(0,A.jsx)("div",{className:"screenshot-title",children:(0,A.jsx)("h3",{children:(null==v?void 0:v.type)?v.type:"Device Name"})})}),(0,A.jsxs)("div",{className:"screenshot-container",children:[(0,A.jsxs)("div",{className:"screenshot-overlay",children:[(0,A.jsxs)("div",{className:"device-name-overlay",children:["Device Name",(0,A.jsx)(g.A,{title:null==v?void 0:v.description,children:(0,A.jsx)(eg.A,{size:16,className:"info-icon"})})]}),!k&&(0,A.jsxs)("div",{className:"screenshot-controls",children:[m>0&&(0,A.jsxs)("span",{className:"last-update-time",children:["Last updated ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:new Date(e).toLocaleTimeString()})(m)]}),(0,A.jsx)(g.A,{title:"Refresh screenshot",children:(0,A.jsx)(W.Ay,{icon:(0,A.jsx)(ey.A,{}),onClick:N,loading:d,size:"small"})}),i&&(0,A.jsxs)("span",{className:"operation-indicator",children:[(0,A.jsx)(ev.A,{size:"small"})," Operating..."]})]})]}),D]})]})}var ex=r(43393),ek=r(2651),eS=r(22397);let eC=new Set(["Backspace","Delete","Enter","Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]),eI=new Set(["Alt","Control","Meta","Shift"]);function ej(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 eO(e){let{enabled:t,deviceSize:r,onTap:n,onSwipe:i,scrollEnabled:o=!1,onWheelScroll:a,keyboardEnabled:s=!1,onTextInput:l,onKeyboardPress:u,contentRef:d,tapMaxDistance:p=8,tapMaxDurationMs:h=250,style:f}=e,m=(0,c.useRef)(null),g=(0,c.useRef)(null),y=(0,c.useRef)(null),v=(0,c.useRef)(!1),b=(0,c.useRef)(!1),w=(0,c.useRef)(0),E=(0,c.useRef)(null),x=(0,c.useRef)(null),k=(0,c.useRef)(null),S=(0,c.useCallback)(()=>{if(s){b.current=!0;let e=g.current;e&&document.activeElement!==e&&e.focus({preventScroll:!0})}},[s]),C=(0,c.useCallback)((e,t)=>{s&&Promise.resolve(t).catch(()=>void 0).then(()=>{window.setTimeout(()=>{b.current&&w.current===e&&S()},0)})},[S,s]),I=(0,c.useCallback)((e,t)=>{let r=m.current,n=g.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,c.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,c.useCallback)(e=>{var n;if(!t||!r||!m.current||0!==e.button&&"mouse"===e.pointerType)return;let i=ej((null!=(n=null==d?void 0:d.current)?n:m.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{m.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,c.useCallback)((e,t)=>{let r=y.current;if(y.current=null,!r)return;try{var o;null==(o=m.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,c.useCallback)(e=>P(e,!1),[P]),M=(0,c.useCallback)(e=>P(e,!0),[P]),T=(0,c.useCallback)(()=>{let e=x.current;x.current=null,k.current&&(clearTimeout(k.current),k.current=null),e&&(null==a||a(e.point,{deltaX:e.deltaX,deltaY:e.deltaY}))},[a]),N=(0,c.useCallback)(e=>{var n;if(!t||!o||!r||!m.current)return;let i=ej((null!=(n=null==d?void 0:d.current)?n:m.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 a=j(e.clientX,e.clientY,i);if(!a)return;e.preventDefault(),e.stopPropagation();let s=x.current;x.current={point:a,deltaX:((null==s?void 0:s.deltaX)||0)+e.deltaX,deltaY:((null==s?void 0:s.deltaY)||0)+e.deltaY},k.current&&clearTimeout(k.current),k.current=setTimeout(T,80)},[d,r,t,T,j,o]),D=(0,c.useCallback)(()=>{var e;(null==(e=g.current)?void 0:e.value)&&(g.current.value="")},[]),B=(0,c.useCallback)(e=>{var t;if(s&&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)}(m.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)&&(eC.has(e.key)||e.altKey||e.ctrlKey||e.metaKey)){let r=function(e){if(eI.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)}}},[s,u]),z=(0,c.useCallback)(e=>{var t;if(!s||!b.current)return;let r=e.clipboardData.getData("text");r&&(e.preventDefault(),e.stopPropagation(),null==l||l(r,null!=(t=E.current)?t:void 0))},[s,l]),F=(0,c.useCallback)(e=>{var t,r,n,i,o;if(!s||!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 A=a.data||(null==(t=g.current)?void 0:t.value)||"";D(),A&&(e.preventDefault(),e.stopPropagation(),null==l||l(A,null!=(o=E.current)?o:void 0))},[D,s,u,l]);return((0,c.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,c.useEffect)(()=>{if(!t||!s){b.current=!1;return}let e=e=>{let t=m.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,s]),(0,c.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[]),(0,c.useEffect)(()=>{let e=m.current;if(e&&t&&o)return e.addEventListener("wheel",N,{passive:!1}),()=>{e.removeEventListener("wheel",N)}},[t,N,o]),t&&r)?(0,A.jsx)("div",{ref:m,onPointerDown:O,onPointerUp:R,onPointerCancel:M,onContextMenu:e=>e.preventDefault(),"data-midscene-device-interaction-layer":"true",style:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({position:"absolute",inset:0,zIndex:5,cursor:s?"default":"crosshair",outline:"none",color:"transparent",caretColor:"transparent",touchAction:"none",userSelect:"none"},f),children:s?(0,A.jsx)("textarea",{ref:g,"data-midscene-keyboard-sink":"true",tabIndex:-1,onPaste:z,onCompositionStart:()=>{b.current=!0,v.current=!0},onCompositionEnd:e=>{var t,r;if(!s||!b.current)return;v.current=!1;let n=e.data||(null==(t=g.current)?void 0:t.value)||"";D(),n&&(null==l||l(n,null!=(r=E.current)?r:void 0))},onInput:F,style:{position:"absolute",left:0,top:0,width:32,height:24,opacity:0,pointerEvents:"none",appearance:"none",boxShadow:"none",overflow:"hidden",resize:"none",border:0,padding:0,margin:0,outline:"none",background:"transparent",color:"transparent",caretColor:"transparent",fontSize:16,lineHeight:"20px",transform:"translate(-50%, -50%)"}}):null}):null}var eP=r(94093),eR=r(96418),eM=r(34452),eT=r(72644);let eN=[1e3,2e3,3e3,3e3];function eD(){return"Preparing Android device connection…"}function eB(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 ez(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eB(o,n,i,a,s,"next",e)}function s(e){eB(o,n,i,a,s,"throw",e)}a(void 0)})}}function eF(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:eL}=f.A;function eU(e){let{connectingOverlay:t,deviceId:r,onIntrinsicSize:n,onStatusChange:i,renderErrorOverlay:o,serverUrl:a,metadataTimeoutMs:s=55e3,viewportStyle:l,contentRef:u}=e,d=(0,c.useRef)(null),p=(0,c.useRef)(null),h=(0,c.useRef)(null),f=(0,c.useRef)(null),m=(0,c.useRef)(null),g=(0,c.useRef)(null),y=(0,c.useRef)(!1),v=(0,c.useRef)(0),[b,w]=(0,c.useState)("connecting"),[E,x]=(0,c.useState)(null),[k,S]=(0,c.useState)(()=>eD()),[C,I]=(0,c.useState)(!0),[j,O]=(0,c.useState)(0),P=(0,c.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:eD();switch(e){case"connected":return"Live scrcpy preview connected";case"waiting-for-stream":case"recovering":return t;case"error":return"Unable to start scrcpy preview";case"disconnected":return"scrcpy preview disconnected, retrying…";default:return"Connecting to scrcpy preview server…"}})(b,k),[b,k]),R=("error"===b||"disconnected"===b)&&!!o,M=(0,c.useCallback)(()=>{w("connecting"),x(null),S(eD()),O(e=>e+1)},[]);(0,c.useEffect)(()=>{null==i||i(b,P)},[i,b,P]);let T=()=>{let e=d.current;e&&e.replaceChildren()},N=()=>{h.current&&(h.current.dispose(),h.current=null)},D=()=>{f.current&&(clearTimeout(f.current),f.current=null)};return(0,c.useEffect)(()=>{if(!a){w("error"),x("scrcpy preview metadata is missing a server URL.");return}if(!ex.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=Date.now(),o=1,l=()=>{t&&(clearTimeout(t),t=null),D(),g.current&&(clearTimeout(g.current),g.current=null),m.current&&(clearTimeout(m.current),m.current=null),p.current&&(p.current.disconnect(),p.current=null),N(),T(),null==n||n(null)},A=function(t){var r,a;let s,A=!(arguments.length>1)||void 0===arguments[1]||arguments[1],u=o+1,d=Date.now()-i;if(e||m.current)return;if(!A||!(u<=5)||!(d<15e3)){w("error"),x(t),S(eD()),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(a=p.current)||a.disconnect(),p.current=null,N(),T(),null==n||n(null);return}let h=(s=Math.max(0,Math.min(o-1,eN.length-1)),eN[s]);w("recovering"),x(null),S(`Preview interrupted. Recovering (${u}/5)…`),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(r=p.current)||r.disconnect(),p.current=null,N(),T(),null==n||n(null),m.current=setTimeout(()=>{m.current=null,l(),o=u,c()},h)},c=()=>{if(e)return;let t=v.current+1;v.current=t;let l=()=>!e&&v.current===t;y.current=!1,w("connecting"),x(null),S(eD());let c=(0,eT.io)(a,{withCredentials:!0,reconnection:!1,timeout:1e4,transports:["websocket"]});p.current=c;let u=function(e){let t,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=!1,o=!1,a=[];return new ReadableStream({start(s){let l=()=>{if(!o){var e;o=!0,null==(e=n.onFirstDataPacket)||e.call(n)}},A=e=>{try{var t;let n=(t=e.data)instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength),o="configuration"===e.type?{type:"configuration",data:n}:{type:"data",data:n,keyframe:e.keyFrame};if("configuration"===o.type){i=!0,s.enqueue(o),a.length>0&&l(),a.forEach(e=>s.enqueue(e)),a=[];return}if(!i)return void(o.keyframe?a=[o]:a.length<2&&a.push(o));null===s.desiredSize||s.desiredSize>0?(l(),s.enqueue(o)):o.keyframe&&(r=o)}catch(e){s.error(e)}},c=()=>s.close(),u=e=>s.error(e);t=()=>{e.off("video-data",A),e.off("disconnect",c),e.off("error",u)},e.on("video-data",A),e.on("disconnect",c),e.on("error",u)},pull(e){(null===e.desiredSize||e.desiredSize>0)&&r&&(null===e.desiredSize||e.desiredSize>0)&&(e.enqueue(r),r=void 0)},cancel(){null==t||t(),r=void 0,a=[]}},{highWaterMark:4})}(c,{onFirstDataPacket:()=>{l()&&!g.current&&(D(),S("Verifying video stream stability…"),g.current=setTimeout(()=>{g.current=null,l()&&(i=Date.now(),o=1,x(null),S(eD()),w("connected"))},2e3))}});c.on("connect",()=>{if(l()){var e,t;w("waiting-for-stream"),S(eD()),D(),f.current=setTimeout(()=>{l()&&(y.current=!0,A(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:55e3,t=Math.max(1,Math.round(e/1e3));return`Timed out waiting ${t}s for scrcpy video stream data.`}(s)))},s),c.emit("connect-device",(e=eF({},"string"==typeof r&&r.trim()?{deviceId:r.trim()}:{}),t=t={maxSize:1600,videoBitRate:8e6},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e))}}),c.on("preview-status",e=>{var t;l()&&"object"==typeof(t=e)&&null!==t&&"message"in t&&"string"==typeof t.message&&(w("waiting-for-stream"),S(e.message))}),c.on("video-metadata",e=>ez(function*(){try{if(!l())return;N(),S("Starting video decoder…"),"number"==typeof e.width&&e.width>0&&"number"==typeof e.height&&e.height>0&&(null==n||n({width:e.width,height:e.height}));let t=e.codec?e.codec:eP.n.H264,r=yield ez(function*(){var e;let r=eR.p.isSupported?new eR.p:new eM.x,n=r.canvas;return n.style.width="100%",n.style.height="100%",n.style.objectFit="contain",T(),null==(e=d.current)||e.appendChild(n),new ex.p({codec:t,renderer:r})})();h.current=r,u.pipeTo(r.writable).catch(e=>{l()&&A(e.message)}),w("waiting-for-stream")}catch(e){if(!l())return;A(e instanceof Error?e.message:"Failed to start decoder.")}})()),c.on("disconnect",()=>{if(l()){if(D(),y.current){y.current=!1;return}A("scrcpy preview disconnected.")}}),c.on("connect_error",e=>{l()&&(D(),A(e.message))}),c.on("preview-error",e=>{l()&&"object"==typeof e&&null!==e&&"string"==typeof e.message&&"string"==typeof e.reason&&"boolean"==typeof e.recoverable&&"string"==typeof e.sessionId&&A(e.message,e.recoverable)}),c.on("error",e=>{l()&&(D(),A(e.message))})};return t=setTimeout(()=>{t=null,c()},0),()=>{e=!0,l()}},[r,s,j,a]),(0,A.jsxs)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:[E&&!R?(0,A.jsx)(V.A,{type:"warning",showIcon:!0,style:{marginBottom:12},message:P,description:E}):null,(0,A.jsxs)("div",{className:["scrcpy-panel-viewport","connected"===b&&"scrcpy-panel-viewport-connected"].filter(Boolean).join(" "),ref:u,style:eF({position:"relative",flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",background:"#111827",borderRadius:8,overflow:"hidden"},l),children:[(0,A.jsx)("div",{ref:d,style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center"}}),"connected"!==b?R&&o?(0,A.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:o({errorMessage:E,retry:M,status:b,statusText:P})}):"error"!==b&&"disconnected"!==b&&t?(0,A.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:t}):(0,A.jsxs)("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#fff",background:"rgba(17, 24, 39, 0.78)",textAlign:"center",padding:24,zIndex:1},children:["error"===b?null:(0,A.jsx)(ev.A,{spinning:!0}),(0,A.jsx)(eL,{style:{color:"#fff"},children:P}),"error"===b?(0,A.jsx)(eL,{style:{color:"#d1d5db"},children:"Reconnect the preview to try again."}):null,!C&&(0,A.jsx)(eL,{style:{color:"#d1d5db"},children:"Please use a modern Chromium browser to view the stream."})]}):null]})]})}let eK=["android","ios","web","harmony","computer"],eQ=["countdown-before-run"];function eJ(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 eZ(e){return((null==e?void 0:e.executionUxHints)||[]).filter(e=>eQ.includes(e))}function eX(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 eq(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eX(o,n,i,a,s,"next",e)}function s(e){eX(o,n,i,a,s,"throw",e)}a(void 0)})}}function eH(e){var t,r;let{connectingOverlay:n,onDeviceSizeChange:i,onScrcpyStatusChange:o,renderErrorOverlay:a,scrcpyViewportStyle:s,screenshotViewerMode:l,playgroundSDK:u,runtimeInfo:d,serverUrl:p,serverOnline:h,isUserOperating:f}=e,{message:m}=ek.A.useApp(),g=function(e,t){let r=null==e?void 0:e.preview;if(!r||"none"===r.kind||"custom"===r.kind)return{type:"none"};let n=t||"undefined"!=typeof window&&window.location.origin||"";if("mjpeg"===r.kind){let e=r.mjpegPath||"/mjpeg";return n?{type:"mjpeg",mjpegUrl:new URL(e,`${n}/`).toString()}:{type:"screenshot"}}if("scrcpy"===r.kind){var i,o;let t="string"==typeof(null==e||null==(i=e.metadata)?void 0:i.deviceId)?e.metadata.deviceId.trim():void 0;if("string"==typeof t&&/^\d+\.\d+\.\d+\.\d+:\d+$/.test(t))return{type:"screenshot"};let a=Number(null==(o=r.custom)?void 0:o.scrcpyPort),s=Number.isFinite(a)?a:void 0,l=s&&n?(()=>{let e=new URL(n);if(["localhost","127.0.0.1","[::1]"].includes(e.hostname)){var t;let n="string"==typeof(null==(t=r.custom)?void 0:t.scrcpyHost)?r.custom.scrcpyHost.trim():"";n&&"0.0.0.0"!==n&&"::"!==n?e.hostname=n.includes(":")&&!n.startsWith("[")?`[${n}]`:n:"::"===n?e.hostname="[::1]":("0.0.0.0"===n||"localhost"===e.hostname)&&(e.hostname="127.0.0.1")}return e.port=String(s),e.pathname="/",e.search="",e.hash="",e.toString()})():void 0;return{deviceId:t,type:"scrcpy",scrcpyPort:s,scrcpyUrl:l}}return{type:"screenshot"}}(d,p),[y,v]=(0,c.useState)(null),[b,w]=(0,c.useState)(null),[E,x]=(0,c.useState)(null),[k,S]=(0,c.useState)("connecting"),C=(0,c.useRef)(Promise.resolve()),I=(0,c.useRef)(""),j=(0,c.useRef)(null),O=(0,c.useRef)(null),P=(0,c.useRef)(null),R=(0,c.useRef)(null),M=null!=(t=null==E?void 0:E.includes("Tap"))&&t,T=(null==E?void 0:E.includes("Swipe"))?"Swipe":"DragAndDrop",N=(null==E?void 0:E.includes("KeyboardPress"))||(null==E?void 0:E.includes("Input"))||!1,D=null!=(r=null==E?void 0:E.includes("Scroll"))&&r,B=(0,c.useCallback)(e=>{let t=C.current.then(e,e);return C.current=t.catch(()=>void 0),t},[m]);(0,c.useEffect)(()=>{if(!h){v(null),x(null);return}let e=!1,t=()=>eq(function*(){var t;let r;try{r=yield u.getInterfaceInfo()}catch(e){return}if(e)return;if((null==r||null==(t=r.size)?void 0:t.width)&&r.size.height){let{size:e}=r;v(t=>t&&t.width===e.width&&t.height===e.height?t:{width:e.width,height:e.height})}let n=Array.isArray(null==r?void 0:r.actionTypes)?r.actionTypes:null;x(e=>null===e&&null===n||e&&n&&e.length===n.length&&e.every((e,t)=>e===n[t])?e:n)})();t();let r=setInterval(t,5e3);return()=>{e=!0,clearInterval(r)}},[u,h]),(0,c.useEffect)(()=>{null==i||i(null!=b?b:y)},[y,i,b]);let z="scrcpy"===g.type&&ex.p.isSupported,F="screenshot"===g.type||"scrcpy"===g.type&&!z,L="scrcpy"===g.type&&!ex.p.isSupported&&function(){try{let{protocol:e,hostname:t}=window.location;if("http:"!==e)return!1;return"localhost"!==t&&"127.0.0.1"!==t&&"::1"!==t}catch(e){return!1}}(),U="none"!==g.type&&(!z||"connected"===k),K=(0,c.useCallback)((e,t)=>{m.open({type:"error",content:t||e,key:"manual-control-error"})},[]),Q=(0,c.useCallback)(()=>{O.current&&(clearTimeout(O.current),O.current=null)},[]),J=(0,c.useCallback)(()=>{var e,t;Q();let r=I.current,n=j.current;if(!r)return null!=(e=P.current)?e:Promise.resolve();I.current="",j.current=null;let i=(null!=(t=P.current)?t:Promise.resolve()).catch(()=>void 0).then(()=>eq(function*(){let e=yield B(()=>u.interact(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({actionType:"Input",value:r,mode:"typeOnly"},n?{x:n.x,y:n.y}:{})));e.ok||K("Input failed",e.error)})()).finally(()=>{P.current===i&&(P.current=null)});return P.current=i,P.current},[Q,B,u,K]),Z=(0,c.useCallback)(e=>eq(function*(){yield J();let t=yield B(()=>u.interact({actionType:"Tap",x:e.x,y:e.y}));t.ok||K("Tap failed",t.error)})(),[B,J,u,K]),X=(0,c.useCallback)((e,t,r)=>eq(function*(){yield J();let n=yield B(()=>{var n,i,o,a,s,l;let A;return u.interact((n=T,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||K(`${T} failed`,n.error)})(),[B,J,T,u,K]),q=(0,c.useCallback)((e,t)=>{e&&(I.current+=e,t&&(j.current=t),Q(),O.current=setTimeout(()=>{J()},120))},[Q,J]);(0,c.useEffect)(()=>{h&&U&&N||(Q(),I.current="",j.current=null)},[Q,N,U,h]),(0,c.useEffect)(()=>()=>{h&&U&&N&&I.current?J():(Q(),j.current=null)},[Q,J,N,g.type,U,d,h,p]);let H=(0,c.useCallback)(e=>eq(function*(){if(!e)return;yield J();let t=yield B(()=>u.interact({actionType:"KeyboardPress",keyName:e}));t.ok||K("Keyboard press failed",t.error)})(),[B,J,u,K]),W=(0,c.useCallback)((e,t)=>eq(function*(){yield J();let r=yield B(()=>{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||K("Scroll failed",r.error)})(),[B,J,u,K]),G=(0,c.useCallback)((e,t)=>{S(e),null==o||o(e,t)},[o]);return(0,A.jsxs)("div",{style:{flex:1,minHeight:0,height:"100%",position:"relative"},children:[L&&(0,A.jsx)(eS.A,{content:(0,A.jsxs)("div",{style:{maxWidth:360},children:[(0,A.jsx)("p",{style:{margin:"0 0 8px"},children:"Live scrcpy streaming is unavailable because WebCodecs API is disabled in non-secure (HTTP) contexts with non-localhost addresses."}),(0,A.jsx)("p",{style:{margin:"0 0 8px"},children:"Currently using screenshot polling as fallback. To enable scrcpy streaming:"}),(0,A.jsxs)("ol",{style:{margin:0,paddingLeft:18},children:[(0,A.jsxs)("li",{children:["Open"," ",(0,A.jsx)("code",{children:"chrome://flags/#unsafely-treat-insecure-origin-as-secure"})]}),(0,A.jsxs)("li",{children:["Add ",(0,A.jsx)("code",{children:window.location.origin})]}),(0,A.jsxs)("li",{children:["Set to ",(0,A.jsx)("b",{children:"Enabled"})," and relaunch Chrome"]})]})]}),title:"Screenshot polling mode",trigger:"click",placement:"bottomRight",children:(0,A.jsx)("button",{type:"button",style:{position:"absolute",top:8,right:8,zIndex:10,background:"#faad14",border:"none",borderRadius:"50%",width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",boxShadow:"0 2px 6px rgba(0,0,0,0.2)"},children:(0,A.jsx)("span",{style:{color:"#fff",fontSize:14,fontWeight:"bold",lineHeight:1},children:"!"})})}),"none"===g.type?(0,A.jsx)(V.A,{type:"warning",showIcon:!0,message:"Preview unavailable",description:"This session did not expose a preview capability in runtime metadata."}):z?(0,A.jsx)(eU,{connectingOverlay:n,deviceId:g.deviceId,onIntrinsicSize:w,onStatusChange:G,renderErrorOverlay:a,serverUrl:g.scrcpyUrl,viewportStyle:s,contentRef:R}):(0,A.jsx)(eE,{getScreenshot:()=>F?u.getScreenshot():Promise.resolve(null),getInterfaceInfo:()=>u.getInterfaceInfo(),serverOnline:h,isUserOperating:f,mjpegUrl:g.mjpegUrl,mode:null!=l?l:"screen-only",contentRef:R}),(0,A.jsx)(eO,{enabled:M&&h&&U,deviceSize:y,contentRef:R,onTap:Z,onSwipe:X,scrollEnabled:D,onWheelScroll:W,keyboardEnabled:N,onTextInput:q,onKeyboardPress:H})]})}function eW(e){return(0,A.jsx)(eH,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 eG=r(22770);function eV(e){let{children:t}=e;return(0,A.jsx)(eG.Ay,{theme:{token:{colorPrimary:"#2B83FF"},components:{Layout:{headerHeight:60,headerPadding:"0 30px",headerBg:"#FFF",bodyBg:"#FFF"}}},children:(0,A.jsx)(ek.A,{component:!1,children:t})})}var eY=r(87086),e$=r(63961),e_=r(85409);let e0="undefined"!=typeof window,e1="undefined"!=typeof WorkerGlobalScope,e2=void 0!==e_&&(null==(s=e_.versions)?void 0:s.node);function e3(){return(0,e$.A)()}let e5={};function e4(e,t){if(!e)throw Error(t||"Assertion failed")}function e7(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];console.log(...t)}let e6=/</g,e8=/>/g,e9="__midscene_lt__",te="__midscene_gt__",tt=e=>e.replace(e6,e9).replace(e8,te),tr=e=>{let t=RegExp(e9,"g"),r=RegExp(te,"g");return e.replace(t,"<").replace(r,">")};var tn=r(13353);function ti(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 to(e){if(!e||"object"!=typeof e||Array.isArray(e)){let t=Array.isArray(e)?"array":null===e?"null":typeof e;throw Error(`LLM response is valid JSON but does not match the expected schema. Expected to be a JSON object, got ${t}: ${JSON.stringify(e)}.`)}}function ta(e){try{return JSON.parse(e)}catch{return JSON.parse((0,tn.m)(e))}}function ts(e,t){let r,n=ti(e);try{r=ta(n)}catch(i){let t=n;if(t===n)throw Error(`failed to parse LLM response into JSON. Error - ${String(i)}. Response -
|
|
1
|
+
/*! For license information please see index.1b760d4c.js.LICENSE.txt */
|
|
2
|
+
(()=>{var e,t,r,n,i,o,a,s={95902(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=95902,e.exports=t},75845(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=75845,e.exports=t},57125(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=57125,e.exports=t},39545(e){function t(e){return Promise.resolve().then(function(){var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=39545,e.exports=t},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},51560(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=51560,e.exports=t},2170(e,t,r){"use strict";let n,i,o;var a,s,l,A=r(65723),c=r(22155),u=r(58997);let d=e=>{let{hideLogo:t=!1}=e,{isDarkMode:r}=function(){let[e,t]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{let e=()=>{var e;t("dark"===(null==(e=document.querySelector("[data-theme]"))?void 0:e.getAttribute("data-theme")))};e();let r=new MutationObserver(e),n=document.querySelector("[data-theme]")||document.documentElement;return r.observe(n,{attributes:!0,attributeFilter:["data-theme"]}),()=>r.disconnect()},[]),{isDarkMode:e}}();return t?null:(0,A.jsx)("div",{className:"logo",children:(0,A.jsx)("a",{href:"https://midscenejs.com/",target:"_blank",rel:"noreferrer",children:(0,A.jsx)("img",{alt:"Midscene_logo",src: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 p=r(4177),h=r(56766),f=r(66419),m=r(28594),g=r(49488),y=r(18926),v={};v.d=(e,t)=>{for(var r in t)v.o(t,r)&&!v.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},v.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),v.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var b={};v.r(b),v.d(b,{create:()=>y.vt});let{create:w}=b,E="midscene-auto-zoom",x="midscene-background-visible",k="midscene-elements-visible",S="midscene-model-call-details",C="midscene-dark-mode",I="midscene-playback-speed",j="midscene-subtitle-enabled",O=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},P=w(e=>{let t="false"!==localStorage.getItem(E),r="false"!==localStorage.getItem(x),n="false"!==localStorage.getItem(k),i="true"===localStorage.getItem(S),o="true"===localStorage.getItem(C),a=Number.parseFloat(localStorage.getItem(I)||"1"),s=Number.isNaN(a)?1:a,l="false"!==localStorage.getItem(j),A=O("focusOnCursor"),c=O("showElementMarkers"),u=O("darkMode"),d=void 0===u?o:u;return void 0!==u&&localStorage.setItem(C,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(x,t.toString())},setElementsVisible:t=>{e({elementsVisible:t}),localStorage.setItem(k,t.toString())},setAutoZoom:t=>{e({autoZoom:t}),localStorage.setItem(E,t.toString())},setModelCallDetailsEnabled:t=>{e({modelCallDetailsEnabled:t}),localStorage.setItem(S,t.toString())},setDarkModeEnabled:t=>{e({darkModeEnabled:t}),localStorage.setItem(C,t.toString())},setPlaybackSpeed:t=>{e({playbackSpeed:t}),localStorage.setItem(I,t.toString())},subtitleEnabled:l,setSubtitleEnabled:t=>{e({subtitleEnabled:t}),localStorage.setItem(j,t.toString())}}}),R="midscene-env-config",M="midscene-service-mode",T="midscene-tracking-active-tab",N="midscene-deep-locate",D="midscene-deep-think",B="midscene-screenshot-included",z="midscene-dom-included",F="midscene-ime-strategy",L="midscene-screenshot-strategy",U="midscene-auto-dismiss-keyboard",K="midscene-keyboard-dismiss-strategy",Q="midscene-always-refresh-screen-info",J=()=>localStorage.getItem(R)||"",Z=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=w((e,t)=>{let r=J(),n=Z(r),i=window.location.href.startsWith("chrome-extension"),o=localStorage.getItem(M),a="false"!==localStorage.getItem(T),s="true"===localStorage.getItem(N),l=localStorage.getItem(D),A="false"!==localStorage.getItem(B),c=localStorage.getItem(z)||"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(M,t)},config:n,configString:r,setConfig:t=>e({config:t}),loadConfig:t=>{e({config:Z(t),configString:t}),localStorage.setItem(R,t)},syncFromStorage:()=>{let t=J();e({config:Z(t),configString:t})},forceSameTabNavigation:a,setForceSameTabNavigation:t=>{e({forceSameTabNavigation:t}),localStorage.setItem(T,t.toString())},deepLocate:s,setDeepLocate:t=>{e({deepLocate:t}),localStorage.setItem(N,t.toString())},deepThink:"true"===l||"false"!==l&&"unset",setDeepThink:t=>{e({deepThink:t}),localStorage.setItem(D,t.toString())},screenshotIncluded:A,setScreenshotIncluded:t=>{e({screenshotIncluded:t}),localStorage.setItem(B,t.toString())},domIncluded:"visible-only"===c?"visible-only":"true"===c,setDomIncluded:t=>{e({domIncluded:t}),localStorage.setItem(z,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)},screenshotStrategy:localStorage.getItem(L)||"auto",setScreenshotStrategy:t=>{e({screenshotStrategy:t}),localStorage.setItem(L,t)},autoDismissKeyboard:"false"!==localStorage.getItem(U),setAutoDismissKeyboard:t=>{e({autoDismissKeyboard:t}),localStorage.setItem(U,t.toString())},keyboardDismissStrategy:localStorage.getItem(K)||"esc-first",setKeyboardDismissStrategy:t=>{e({keyboardDismissStrategy:t}),localStorage.setItem(K,t)},alwaysRefreshScreenInfo:"true"===localStorage.getItem(Q),setAlwaysRefreshScreenInfo:t=>{e({alwaysRefreshScreenInfo:t}),localStorage.setItem(Q,t.toString())}}});var q=r(64174),H=r(68928),W=r(65584),G=r(7991),V=r(56620),Y=r(25656);function $(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 _(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){$(o,n,i,a,s,"next",e)}function s(e){$(o,n,i,a,s,"throw",e)}a(void 0)})}}let{TextArea:ee}=q.A,et={},er=[{key:"MIDSCENE_MODEL_BASE_URL",placeholder:"https://dashscope.aliyuncs.com/compatible-mode/v1"},{key:"MIDSCENE_MODEL_API_KEY",placeholder:"sk-..."},{key:"MIDSCENE_MODEL_NAME",placeholder:"qwen3-vl-plus"},{key:"MIDSCENE_MODEL_FAMILY",placeholder:"qwen3-vl"}],en=[{key:"replanningCycleLimit",label:"Replanning Cycle Limit",placeholder:"Model default"},{key:"waitAfterAction",label:"Wait After Action (ms)",placeholder:"Default: 300"},{key:"screenshotShrinkFactor",label:"Screenshot Shrink Factor",placeholder:"Default: 1"}];function ei(e){var t,r,n,i,o,a;return{replanningCycleLimit:null!=(i=null==(t=e.replanningCycleLimit)?void 0:t.toString())?i:"",waitAfterAction:null!=(o=null==(r=e.waitAfterAction)?void 0:r.toString())?o:"",screenshotShrinkFactor:null!=(a=null==(n=e.screenshotShrinkFactor)?void 0:n.toString())?a:""}}function eo(e){let t={};for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith("#"))continue;let n=e.indexOf("=");if(n<=0)continue;let i=e.slice(0,n).trim(),o=e.slice(n+1).trim();i&&(t[i]=o.replace(/^['"]|['"]$/g,""))}return t}function ea(e,t,r){let n=e.split(/\r?\n/).filter(Boolean),i=n.findIndex(e=>e.trim().startsWith(`${t}=`));return r?i>=0?n[i]=`${t}=${r}`:n.push(`${t}=${r}`):i>=0&&n.splice(i,1),n.join("\n")}function es(){return(0,A.jsx)("svg",{"aria-hidden":"true",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,A.jsx)("path",{d:"M5 8.00002V3.95856L8.5 5.97929L12 8.00002L8.5 10.0208L5 12.0415V8.00002Z",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:"1.33333"})})}function el(e){let{isLoading:t}=e;return(0,A.jsx)("span",{className:"midscene-config-modal-verify-icon",children:t?(0,A.jsx)("svg",{"aria-hidden":"true",className:"midscene-config-modal-spinner",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:(0,A.jsx)("path",{d:"M8 1.5A6.5 6.5 0 1 0 14.5 8",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.5"})}):(0,A.jsx)(es,{})})}function eA(e){var t,r,n;let{open:i,className:o,width:a=640,textValue:s="",agentOptionsValue:l=et,initialTab:u="text",showEnvStyleSelect:d=!1,envTextareaMinRows:p=7,envTextareaAutoSize:h=!0,showAgentOptions:m=!0,envFields:g=er,parseEnvText:y=eo,setEnvFieldValue:v=ea,validateEnvText:b,onClose:w,onSave:E,onVerify:x}=e,[k,S]=(0,c.useState)(u),[C,I]=(0,c.useState)(s),[j,O]=(0,c.useState)(()=>ei(l)),[P,R]=(0,c.useState)({kind:"idle"}),[M,T]=(0,c.useState)(!1),[N,D]=(0,c.useState)(null),B=(0,c.useRef)(0);(0,c.useEffect)(()=>{i&&(B.current+=1,S(u),I(s),O(ei(l)),R({kind:"idle"}),D(null))},[l,u,i,s]);let z=(0,c.useMemo)(()=>y(C),[y,C]),F=(0,c.useMemo)(()=>(function(e){let t={},r=e.replanningCycleLimit.trim(),n=e.waitAfterAction.trim(),i=e.screenshotShrinkFactor.trim();if(r){let e=Number(r);if(!Number.isInteger(e)||e<0)return{options:null,error:"Replanning cycle limit must be an integer greater than or equal to 0."};t.replanningCycleLimit=e}if(n){let e=Number(n);if(!Number.isFinite(e)||e<0)return{options:null,error:"Wait after action must be a number greater than or equal to 0."};t.waitAfterAction=e}if(i){let e=Number(i);if(!Number.isFinite(e)||e<1)return{options:null,error:"Screenshot shrink factor must be a number greater than or equal to 1."};t.screenshotShrinkFactor=e}return{options:t,error:null}})(j),[j]),L=null!=(t=null==b?void 0:b(C))?t:null,U=null!=L?L:"error"===P.kind?P.message:null,K=()=>{B.current+=1,R(e=>"idle"===e.kind?e:{kind:"idle"}),D(null)};return(0,A.jsx)(H.A,{centered:!0,className:["midscene-config-modal",`midscene-config-modal--${k}`,o].filter(Boolean).join(" "),destroyOnClose:!0,footer:(0,A.jsxs)("div",{className:"midscene-config-modal-footer-actions",children:[(0,A.jsx)(W.Ay,{onClick:w,children:"Cancel"}),(0,A.jsx)(W.Ay,{disabled:!F.options,loading:M,onClick:()=>void _(function*(){if(F.options&&!M){T(!0),D(null);try{yield E({text:C,agentOptions:F.options})}catch(e){D(e instanceof Error?e.message:String(e))}finally{T(!1)}}})(),type:"primary",children:"Save"})]}),maskClosable:!0,onCancel:w,open:i,title:"Config",width:a,children:(0,A.jsxs)("div",{className:"midscene-config-modal-body-content",children:[(0,A.jsxs)("section",{className:"midscene-config-modal-env-section",children:[(0,A.jsxs)("div",{className:"midscene-config-modal-section-heading",children:[(0,A.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,A.jsx)(f.A.Text,{strong:!0,children:"Model Env Config"}),(0,A.jsxs)(f.A.Text,{type:"secondary",children:["The format is KEY=VALUE and separated by new lines. These data will be saved ",(0,A.jsx)("strong",{children:"locally in your browser"}),"."]})]}),d?(0,A.jsx)(G.A,{"aria-label":"Model env config style",className:"midscene-config-modal-env-style-select",onChange:e=>{K(),S(e)},options:[{label:".env Style",value:"text"},{label:"Form Style",value:"form"}],value:k}):null]}),"form"===k&&d?(0,A.jsx)("div",{className:"midscene-config-modal-env-fields",children:g.map(e=>{var t;return(0,A.jsxs)("div",{className:"midscene-config-modal-env-field",children:[(0,A.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,A.jsx)(f.A.Text,{children:e.key})}),(0,A.jsx)(q.A,{"aria-label":`${e.key} value`,id:`config-modal-${e.key}`,onChange:t=>{K(),I(v(C,e.key,t.target.value))},placeholder:e.placeholder,value:null!=(t=z[e.key])?t:""})]},e.key)})}):(0,A.jsx)(ee,{"aria-label":"Model environment configuration",className:"midscene-config-modal-env-textarea",onChange:e=>{K(),I(e.target.value)},autoSize:!!h&&{minRows:p},placeholder:"MIDSCENE_MODEL_BASE_URL=...\nMIDSCENE_MODEL_API_KEY=...\nMIDSCENE_MODEL_NAME=...\nMIDSCENE_MODEL_FAMILY=...",rows:p,value:C,wrap:"off"}),(0,A.jsxs)("div",{className:`midscene-config-modal-verify-row${U?" midscene-config-modal-verify-row--error":""}`,children:["success"===P.kind?(0,A.jsx)(V.A,{className:"midscene-config-modal-verify-alert",message:"Verified",showIcon:!0,type:"success"}):U?(0,A.jsx)(V.A,{className:"midscene-config-modal-verify-alert",message:U,showIcon:!0,type:"error"}):(0,A.jsx)("span",{}),x?(0,A.jsx)(W.Ay,{className:"midscene-config-modal-verify-button",disabled:!!L||"running"===P.kind,icon:(0,A.jsx)(el,{isLoading:"running"===P.kind}),onClick:()=>void _(function*(){if(!x||L||"running"===P.kind)return;let e=B.current+1;B.current=e,R({kind:"running"});try{let t=yield x(z);if(B.current!==e)return;if(t.passed)return void R({kind:"success"});R({kind:"error",message:t.message||"Connectivity test failed without details."})}catch(t){if(B.current!==e)return;R({kind:"error",message:t instanceof Error?t.message:String(t)})}})(),children:"running"===P.kind?"Verifying":"Verify"}):null]})]}),m?(0,A.jsxs)("section",{className:"midscene-config-modal-agent-options",children:[(0,A.jsx)(Y.A,{}),(0,A.jsxs)("div",{className:"midscene-config-modal-heading-copy",children:[(0,A.jsx)(f.A.Text,{strong:!0,children:"Agent Option Config"}),(0,A.jsx)(f.A.Text,{type:"secondary",children:"Leave a field empty to use the default value. Changes apply on the next Agent connection."})]}),(0,A.jsx)("div",{className:"midscene-config-modal-option-fields",children:en.map(e=>(0,A.jsxs)("div",{className:"midscene-config-modal-option-field",children:[(0,A.jsx)("label",{htmlFor:`config-modal-${e.key}`,children:(0,A.jsx)(f.A.Text,{children:e.label})}),(0,A.jsx)(q.A,{"aria-label":e.label,id:`config-modal-${e.key}`,min:+("screenshotShrinkFactor"===e.key),onChange:t=>{K(),O(r=>{var n,i;return n=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},r),i=i={[e.key]:t.target.value},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})},placeholder:e.placeholder,type:"number",value:j[e.key]})]},e.key))}),(null!=(r=F.error)?r:N)?(0,A.jsx)(V.A,{message:null!=(n=F.error)?n:N,showIcon:!0,type:"error"}):null]}):null]})})}function ec(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 eu(e){let{showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:i="icon",playgroundSDK:o,onVerify:a,agentOptions:s,onAgentOptionsSave:l,configModalClassName:u,configModalWidth:d,envTextareaAutoSize:p,envTextareaMinRows:h}=e,{config:f,configString:y,loadConfig:v,syncFromStorage:b}=X(),[w,E]=(0,c.useState)(!1),x=f.MIDSCENE_MODEL_NAME,k=(0,c.useRef)(null),S=null!=a?a:(null==o?void 0:o.runConnectivityTest)?o.runConnectivityTest.bind(o):void 0,C=e=>{b(),E(!0),e.preventDefault(),e.stopPropagation()};return(0,c.useEffect)(()=>{w&&b()},[w,b]),(0,A.jsxs)("div",{ref:k,style:{alignItems:"center",display:"flex",gap:"10px",height:"100%",justifyContent:"flex-end",minHeight:"32px"},children:[r?x:null,(0,A.jsx)(g.A,{align:{offset:[-10,5]},getPopupContainer:()=>k.current,open:!w&&(t?0===Object.keys(f).length:void 0),placement:n,title:"Please set up your environment variables before using.",children:"icon"===i?(0,A.jsx)(m.A,{onClick:C}):(0,A.jsx)("span",{onClick:C,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,A.jsx)(eA,{agentOptionsValue:s,className:u,envTextareaAutoSize:p,envTextareaMinRows:h,width:d,onClose:()=>E(!1),onSave:e=>{var t;let{text:r,agentOptions:n}=e;return(t=function*(){let e=!1,t=!1;try{yield null==l?void 0:l(n),e=!!l,t=!0,v(r),E(!1)}catch(n){let r=[];if(t)try{v(y)}catch(e){r.push(e)}if(e)try{yield null==l?void 0:l(null!=s?s:{})}catch(e){r.push(e)}if(r.length>0)throw Error(`Saving configuration failed and rollback was incomplete. Original error: ${String(n)}. Rollback errors: ${r.map(String).join("; ")}`);throw n}},function(){var e=this,r=arguments;return new Promise(function(n,i){var o=t.apply(e,r);function a(e){ec(o,n,i,a,s,"next",e)}function s(e){ec(o,n,i,a,s,"throw",e)}a(void 0)})})()},onVerify:S?e=>S(e):void 0,open:w,parseEnvText:Z,showAgentOptions:!!l,textValue:y})]})}function ed(e){let{showEnvConfig:t=!0,showTooltipWhenEmpty:r=!1,showModelName:n=!1,githubUrl:i="https://github.com/web-infra-dev/midscene",helpUrl:o="https://midscenejs.com/quick-start.html#chrome-extension",className:a="",playgroundSDK:s,onVerify:l,agentOptions:c,onAgentOptionsSave:u,configModalClassName:d,configModalWidth:m,envTextareaAutoSize:g,envTextareaMinRows:y}=e;return(0,A.jsxs)("div",{className:`nav-actions ${a}`,children:[(0,A.jsx)(f.A.Link,{href:i,target:"_blank",children:(0,A.jsx)(p.A,{className:"nav-icon"})}),(0,A.jsx)(f.A.Link,{href:o,target:"_blank",children:(0,A.jsx)(h.A,{className:"nav-icon"})}),t&&(0,A.jsx)(eu,{showTooltipWhenEmpty:r,showModelName:n,playgroundSDK:s,onVerify:l,agentOptions:c,configModalClassName:d,configModalWidth:m,envTextareaAutoSize:g,envTextareaMinRows:y,onAgentOptionsSave:u})]})}var ep=r(46453),eh=r(34458);let ef=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:24,height:24,fill:"none",viewBox:"0 0 24 24"},e),r=r={children:[(0,A.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M22 9.483A14.53 14.53 0 0 0 9.75 5.674M19 12.9a9.85 9.85 0 0 0-4.75-2.642M5 12.9a10 10 0 0 1 2.18-1.65M8 16.157a5.63 5.63 0 0 1 2.5-1.455"}),(0,A.jsx)("path",{fill:"#6D6D6D",fillRule:"evenodd",d:"M12 20a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5",clipRule:"evenodd"}),(0,A.jsx)("path",{stroke:"#6D6D6D",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20 20 4 4M2 9.483a15 15 0 0 1 1.75-1.42"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function em(e){let{title:t="Connect to a device"}=e;return(0,A.jsx)("div",{style:{display:"flex",height:"100%",width:"100%",alignItems:"center",justifyContent:"center"},children:(0,A.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:4},children:[(0,A.jsx)(ef,{"aria-hidden":"true",style:{width:24,height:24,objectFit:"contain"}}),(0,A.jsx)("h2",{style:{margin:0,whiteSpace:"nowrap",textAlign:"center",fontSize:13,lineHeight:"24px",fontWeight:400,color:"rgba(0, 0, 0, 0.85)"},children:t})]})})}var eg=r(1352),ey=r(80955),ev=r(16921);function eb(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 ew(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eb(o,n,i,a,s,"next",e)}function s(e){eb(o,n,i,a,s,"throw",e)}a(void 0)})}}function eE(e){let{getScreenshot:t,getInterfaceInfo:r,serverOnline:n,isUserOperating:i=!1,mjpegUrl:o,mode:a="default",contentRef:s}=e,[l,u]=(0,c.useState)(null),[d,p]=(0,c.useState)(!1),[h,f]=(0,c.useState)(null),[m,y]=(0,c.useState)(0),[v,b]=(0,c.useState)(null),[w,E]=(0,c.useState)(()=>String(Date.now())),x=(0,c.useRef)(null),k=!!(o&&n),S=["screenshot-viewer","screen-only"===a&&"screen-only"].filter(Boolean).join(" "),C=(0,c.useRef)(null),I=(0,c.useRef)(!1);(0,c.useEffect)(()=>{if(!k)return;let e=()=>{let e=x.current;!e||e.naturalWidth>0||e.naturalHeight>0||E(String(Date.now()))},t=window.setTimeout(e,2500),r=window.setInterval(e,2500);return()=>{window.clearTimeout(t),window.clearInterval(r)}},[k,w,o]);let j=(0,c.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return ew(function*(){if(n){p(!0),e&&f(null);try{let e=yield t();if(console.log("Screenshot API response:",e),null==e?void 0:e.screenshot){let t=e.screenshot.toString().trim();t?(u(t),f(null),y(Date.now())):f("Empty screenshot data received")}else f("No screenshot data in response")}catch(e){console.error("Screenshot fetch error:",e),f(e instanceof Error?e.message:"Failed to fetch screenshot")}finally{p(!1)}}})()},[t,n]),O=(0,c.useCallback)(()=>ew(function*(){if(n&&r)try{let e=yield r();e&&b(e)}catch(e){console.error("Interface info fetch error:",e)}})(),[r,n]),P=(0,c.useCallback)(()=>{C.current&&clearInterval(C.current),console.log("Starting screenshot polling (5s interval)"),C.current=setInterval(()=>{!I.current&&n&&j(!1)},5e3)},[j,n]),R=(0,c.useCallback)(()=>{C.current&&(console.log("Stopping screenshot polling"),clearInterval(C.current),C.current=null)},[]),M=(0,c.useCallback)(()=>{console.log("Pausing screenshot polling"),I.current=!0},[]),T=(0,c.useCallback)(()=>{console.log("Resuming screenshot polling"),I.current=!1},[]),N=(0,c.useCallback)(()=>{j(!0)},[j]);if((0,c.useEffect)(()=>{if(!n){u(null),f(null),b(null),R();return}return(O(),k)?void R():(j(!1),P(),()=>{R()})},[n,k,P,R,j,O]),(0,c.useEffect)(()=>{n&&!k&&(i?M():(T(),j(!1)))},[i,M,T,j,n,k]),(0,c.useEffect)(()=>()=>{R()},[R]),!n)return(0,A.jsx)("div",{className:`${S} offline`,children:(0,A.jsxs)("div",{className:"screenshot-placeholder",children:[(0,A.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,A.jsx)("p",{children:"Start the playground server to see real-time screenshots"})]})});if(!k&&d&&!l)return(0,A.jsxs)("div",{className:`${S} loading`,children:[(0,A.jsx)(ev.A,{size:"large"}),(0,A.jsx)("p",{children:"Loading screenshot..."})]});if(!k&&h&&!l)return(0,A.jsx)("div",{className:`${S} error`,children:(0,A.jsxs)("div",{className:"screenshot-placeholder",children:[(0,A.jsx)("h3",{children:"\uD83D\uDCF1 Screen Preview"}),(0,A.jsx)("p",{className:"error-message",children:h})]})});let D=(0,A.jsx)("div",{className:"screenshot-content",ref:s,children:k?(0,A.jsx)("div",{className:"screenshot-image-shell",children:(0,A.jsx)("img",{ref:x,src:w?`${o}${(null==o?void 0:o.includes("?"))?"&":"?"}_mjpegRetry=${encodeURIComponent(w)}`:o,alt:"Device Live Stream",className:"screenshot-image",onError:()=>{window.setTimeout(()=>E(String(Date.now())),500)}},w||"initial")}):l?(0,A.jsx)("div",{className:"screenshot-image-shell",children:(0,A.jsx)("img",{src:l.startsWith("data:image/")?l:`data:image/png;base64,${l}`,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:",l.substring(0,100)),f("Failed to load screenshot image")}})}):(0,A.jsx)("div",{className:"screenshot-placeholder",children:(0,A.jsx)("p",{children:"No screenshot available"})})});return"screen-only"===a?(0,A.jsx)("div",{className:S,children:D}):(0,A.jsxs)("div",{className:S,children:[(0,A.jsx)("div",{className:"screenshot-header",children:(0,A.jsx)("div",{className:"screenshot-title",children:(0,A.jsx)("h3",{children:(null==v?void 0:v.type)?v.type:"Device Name"})})}),(0,A.jsxs)("div",{className:"screenshot-container",children:[(0,A.jsxs)("div",{className:"screenshot-overlay",children:[(0,A.jsxs)("div",{className:"device-name-overlay",children:["Device Name",(0,A.jsx)(g.A,{title:null==v?void 0:v.description,children:(0,A.jsx)(eg.A,{size:16,className:"info-icon"})})]}),!k&&(0,A.jsxs)("div",{className:"screenshot-controls",children:[m>0&&(0,A.jsxs)("span",{className:"last-update-time",children:["Last updated ",(e=>{if(!e)return"";let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:new Date(e).toLocaleTimeString()})(m)]}),(0,A.jsx)(g.A,{title:"Refresh screenshot",children:(0,A.jsx)(W.Ay,{icon:(0,A.jsx)(ey.A,{}),onClick:N,loading:d,size:"small"})}),i&&(0,A.jsxs)("span",{className:"operation-indicator",children:[(0,A.jsx)(ev.A,{size:"small"})," Operating..."]})]})]}),D]})]})}var ex=r(43393),ek=r(2651),eS=r(22397);let eC=new Set(["Backspace","Delete","Enter","Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]),eI=new Set(["Alt","Control","Meta","Shift"]);function ej(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 eO(e){let{enabled:t,deviceSize:r,onTap:n,onSwipe:i,scrollEnabled:o=!1,onWheelScroll:a,keyboardEnabled:s=!1,onTextInput:l,onKeyboardPress:u,contentRef:d,tapMaxDistance:p=8,tapMaxDurationMs:h=250,style:f}=e,m=(0,c.useRef)(null),g=(0,c.useRef)(null),y=(0,c.useRef)(null),v=(0,c.useRef)(!1),b=(0,c.useRef)(!1),w=(0,c.useRef)(0),E=(0,c.useRef)(null),x=(0,c.useRef)(null),k=(0,c.useRef)(null),S=(0,c.useCallback)(()=>{if(s){b.current=!0;let e=g.current;e&&document.activeElement!==e&&e.focus({preventScroll:!0})}},[s]),C=(0,c.useCallback)((e,t)=>{s&&Promise.resolve(t).catch(()=>void 0).then(()=>{window.setTimeout(()=>{b.current&&w.current===e&&S()},0)})},[S,s]),I=(0,c.useCallback)((e,t)=>{let r=m.current,n=g.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,c.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,c.useCallback)(e=>{var n;if(!t||!r||!m.current||0!==e.button&&"mouse"===e.pointerType)return;let i=ej((null!=(n=null==d?void 0:d.current)?n:m.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{m.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,c.useCallback)((e,t)=>{let r=y.current;if(y.current=null,!r)return;try{var o;null==(o=m.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,c.useCallback)(e=>P(e,!1),[P]),M=(0,c.useCallback)(e=>P(e,!0),[P]),T=(0,c.useCallback)(()=>{let e=x.current;x.current=null,k.current&&(clearTimeout(k.current),k.current=null),e&&(null==a||a(e.point,{deltaX:e.deltaX,deltaY:e.deltaY}))},[a]),N=(0,c.useCallback)(e=>{var n;if(!t||!o||!r||!m.current)return;let i=ej((null!=(n=null==d?void 0:d.current)?n:m.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 a=j(e.clientX,e.clientY,i);if(!a)return;e.preventDefault(),e.stopPropagation();let s=x.current;x.current={point:a,deltaX:((null==s?void 0:s.deltaX)||0)+e.deltaX,deltaY:((null==s?void 0:s.deltaY)||0)+e.deltaY},k.current&&clearTimeout(k.current),k.current=setTimeout(T,80)},[d,r,t,T,j,o]),D=(0,c.useCallback)(()=>{var e;(null==(e=g.current)?void 0:e.value)&&(g.current.value="")},[]),B=(0,c.useCallback)(e=>{var t;if(s&&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)}(m.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)&&(eC.has(e.key)||e.altKey||e.ctrlKey||e.metaKey)){let r=function(e){if(eI.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)}}},[s,u]),z=(0,c.useCallback)(e=>{var t;if(!s||!b.current)return;let r=e.clipboardData.getData("text");r&&(e.preventDefault(),e.stopPropagation(),null==l||l(r,null!=(t=E.current)?t:void 0))},[s,l]),F=(0,c.useCallback)(e=>{var t,r,n,i,o;if(!s||!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 A=a.data||(null==(t=g.current)?void 0:t.value)||"";D(),A&&(e.preventDefault(),e.stopPropagation(),null==l||l(A,null!=(o=E.current)?o:void 0))},[D,s,u,l]);return((0,c.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,c.useEffect)(()=>{if(!t||!s){b.current=!1;return}let e=e=>{let t=m.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,s]),(0,c.useEffect)(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null)},[]),(0,c.useEffect)(()=>{let e=m.current;if(e&&t&&o)return e.addEventListener("wheel",N,{passive:!1}),()=>{e.removeEventListener("wheel",N)}},[t,N,o]),t&&r)?(0,A.jsx)("div",{ref:m,onPointerDown:O,onPointerUp:R,onPointerCancel:M,onContextMenu:e=>e.preventDefault(),"data-midscene-device-interaction-layer":"true",style:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({position:"absolute",inset:0,zIndex:5,cursor:s?"default":"crosshair",outline:"none",color:"transparent",caretColor:"transparent",touchAction:"none",userSelect:"none"},f),children:s?(0,A.jsx)("textarea",{ref:g,"data-midscene-keyboard-sink":"true",tabIndex:-1,onPaste:z,onCompositionStart:()=>{b.current=!0,v.current=!0},onCompositionEnd:e=>{var t,r;if(!s||!b.current)return;v.current=!1;let n=e.data||(null==(t=g.current)?void 0:t.value)||"";D(),n&&(null==l||l(n,null!=(r=E.current)?r:void 0))},onInput:F,style:{position:"absolute",left:0,top:0,width:32,height:24,opacity:0,pointerEvents:"none",appearance:"none",boxShadow:"none",overflow:"hidden",resize:"none",border:0,padding:0,margin:0,outline:"none",background:"transparent",color:"transparent",caretColor:"transparent",fontSize:16,lineHeight:"20px",transform:"translate(-50%, -50%)"}}):null}):null}var eP=r(94093),eR=r(96418),eM=r(34452),eT=r(72644);let eN=[1e3,2e3,3e3,3e3];function eD(){return"Preparing Android device connection…"}function eB(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 ez(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eB(o,n,i,a,s,"next",e)}function s(e){eB(o,n,i,a,s,"throw",e)}a(void 0)})}}function eF(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:eL}=f.A;function eU(e){let{connectingOverlay:t,deviceId:r,onIntrinsicSize:n,onStatusChange:i,renderErrorOverlay:o,serverUrl:a,metadataTimeoutMs:s=55e3,viewportStyle:l,contentRef:u}=e,d=(0,c.useRef)(null),p=(0,c.useRef)(null),h=(0,c.useRef)(null),f=(0,c.useRef)(null),m=(0,c.useRef)(null),g=(0,c.useRef)(null),y=(0,c.useRef)(!1),v=(0,c.useRef)(0),[b,w]=(0,c.useState)("connecting"),[E,x]=(0,c.useState)(null),[k,S]=(0,c.useState)(()=>eD()),[C,I]=(0,c.useState)(!0),[j,O]=(0,c.useState)(0),P=(0,c.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:eD();switch(e){case"connected":return"Live scrcpy preview connected";case"waiting-for-stream":case"recovering":return t;case"error":return"Unable to start scrcpy preview";case"disconnected":return"scrcpy preview disconnected, retrying…";default:return"Connecting to scrcpy preview server…"}})(b,k),[b,k]),R=("error"===b||"disconnected"===b)&&!!o,M=(0,c.useCallback)(()=>{w("connecting"),x(null),S(eD()),O(e=>e+1)},[]);(0,c.useEffect)(()=>{null==i||i(b,P)},[i,b,P]);let T=()=>{let e=d.current;e&&e.replaceChildren()},N=()=>{h.current&&(h.current.dispose(),h.current=null)},D=()=>{f.current&&(clearTimeout(f.current),f.current=null)};return(0,c.useEffect)(()=>{if(!a){w("error"),x("scrcpy preview metadata is missing a server URL.");return}if(!ex.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=Date.now(),o=1,l=()=>{t&&(clearTimeout(t),t=null),D(),g.current&&(clearTimeout(g.current),g.current=null),m.current&&(clearTimeout(m.current),m.current=null),p.current&&(p.current.disconnect(),p.current=null),N(),T(),null==n||n(null)},A=function(t){var r,a;let s,A=!(arguments.length>1)||void 0===arguments[1]||arguments[1],u=o+1,d=Date.now()-i;if(e||m.current)return;if(!A||!(u<=5)||!(d<15e3)){w("error"),x(t),S(eD()),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(a=p.current)||a.disconnect(),p.current=null,N(),T(),null==n||n(null);return}let h=(s=Math.max(0,Math.min(o-1,eN.length-1)),eN[s]);w("recovering"),x(null),S(`Preview interrupted. Recovering (${u}/5)…`),D(),g.current&&(clearTimeout(g.current),g.current=null),y.current=!0,null==(r=p.current)||r.disconnect(),p.current=null,N(),T(),null==n||n(null),m.current=setTimeout(()=>{m.current=null,l(),o=u,c()},h)},c=()=>{if(e)return;let t=v.current+1;v.current=t;let l=()=>!e&&v.current===t;y.current=!1,w("connecting"),x(null),S(eD());let c=(0,eT.io)(a,{withCredentials:!0,reconnection:!1,timeout:1e4,transports:["websocket"]});p.current=c;let u=function(e){let t,r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i="waiting-for-configuration",o=!1,a=[],s=()=>{if(!o){var e;o=!0,null==(e=n.onFirstDataPacket)||e.call(n)}};return new ReadableStream({start(n){let o=()=>null===n.desiredSize||n.desiredSize>0,l=(e,l)=>{try{var A;if("configuration"!==e.type&&"boolean"!=typeof e.keyFrame)throw Error("Scrcpy video data packet is missing keyFrame metadata");let t=(A=e.data)instanceof Uint8Array?A:A instanceof ArrayBuffer?new Uint8Array(A):new Uint8Array(A.buffer,A.byteOffset,A.byteLength),l="configuration"===e.type?{type:"configuration",data:t}:{type:"data",data:t,keyframe:e.keyFrame};if("configuration"===l.type){i="waiting-for-keyframe",r=void 0,n.enqueue(l),a.length>0&&(i="ready",s(),a.forEach(e=>n.enqueue(e))),a=[];return}if("waiting-for-configuration"===i)return void(l.keyframe?a=[l]:a.length>0&&a.length<2?a.push(l):a=[]);if("waiting-for-keyframe"===i){if(!l.keyframe){r=void 0;return}o()?(r=void 0,i="ready",s(),n.enqueue(l)):r=l;return}if(o()){s(),n.enqueue(l);return}i="waiting-for-keyframe",r=l.keyframe?l:void 0}catch(e){null==t||t(),n.error(e)}finally{null==l||l()}},A=()=>{null==t||t(),n.close()},c=e=>{null==t||t(),n.error(e)};t=()=>{e.off("video-data",l),e.off("disconnect",A),e.off("error",c)},e.on("video-data",l),e.on("disconnect",A),e.on("error",c)},pull(e){r&&(null===e.desiredSize||e.desiredSize>0)&&(s(),e.enqueue(r),r=void 0,i="ready")},cancel(){null==t||t(),r=void 0,a=[],i="waiting-for-configuration"}},{highWaterMark:4})}(c,{onFirstDataPacket:()=>{l()&&!g.current&&(D(),S("Verifying video stream stability…"),g.current=setTimeout(()=>{g.current=null,l()&&(i=Date.now(),o=1,x(null),S(eD()),w("connected"))},2e3))}});c.on("connect",()=>{if(l()){var e,t;w("waiting-for-stream"),S(eD()),D(),f.current=setTimeout(()=>{l()&&(y.current=!0,A(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:55e3,t=Math.max(1,Math.round(e/1e3));return`Timed out waiting ${t}s for scrcpy video stream data.`}(s)))},s),c.emit("connect-device",(e=eF({},"string"==typeof r&&r.trim()?{deviceId:r.trim()}:{}),t=t={maxSize:1600,videoBitRate:8e6},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e))}}),c.on("preview-status",e=>{var t;l()&&"object"==typeof(t=e)&&null!==t&&"message"in t&&"string"==typeof t.message&&(w("waiting-for-stream"),S(e.message))}),c.on("video-metadata",e=>ez(function*(){try{if(!l())return;N(),S("Starting video decoder…"),"number"==typeof e.width&&e.width>0&&"number"==typeof e.height&&e.height>0&&(null==n||n({width:e.width,height:e.height}));let t=e.codec?e.codec:eP.n.H264,r=yield ez(function*(){var e;let r=eR.p.isSupported?new eR.p:new eM.x,n=r.canvas;return n.style.width="100%",n.style.height="100%",n.style.objectFit="contain",T(),null==(e=d.current)||e.appendChild(n),new ex.p({codec:t,renderer:r})})();h.current=r,u.pipeTo(r.writable).catch(e=>{l()&&A(e.message)}),w("waiting-for-stream")}catch(e){if(!l())return;A(e instanceof Error?e.message:"Failed to start decoder.")}})()),c.on("disconnect",()=>{if(l()){if(D(),y.current){y.current=!1;return}A("scrcpy preview disconnected.")}}),c.on("connect_error",e=>{l()&&(D(),A(e.message))}),c.on("preview-error",e=>{l()&&"object"==typeof e&&null!==e&&"string"==typeof e.message&&"string"==typeof e.reason&&"boolean"==typeof e.recoverable&&"string"==typeof e.sessionId&&A(e.message,e.recoverable)}),c.on("error",e=>{l()&&(D(),A(e.message))})};return t=setTimeout(()=>{t=null,c()},0),()=>{e=!0,l()}},[r,s,j,a]),(0,A.jsxs)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:[E&&!R?(0,A.jsx)(V.A,{type:"warning",showIcon:!0,style:{marginBottom:12},message:P,description:E}):null,(0,A.jsxs)("div",{className:["scrcpy-panel-viewport","connected"===b&&"scrcpy-panel-viewport-connected"].filter(Boolean).join(" "),ref:u,style:eF({position:"relative",flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",background:"#111827",borderRadius:8,overflow:"hidden"},l),children:[(0,A.jsx)("div",{ref:d,style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center"}}),"connected"!==b?R&&o?(0,A.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:o({errorMessage:E,retry:M,status:b,statusText:P})}):"error"!==b&&"disconnected"!==b&&t?(0,A.jsx)("div",{style:{position:"absolute",inset:0,zIndex:1},children:t}):(0,A.jsxs)("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,color:"#fff",background:"rgba(17, 24, 39, 0.78)",textAlign:"center",padding:24,zIndex:1},children:["error"===b?null:(0,A.jsx)(ev.A,{spinning:!0}),(0,A.jsx)(eL,{style:{color:"#fff"},children:P}),"error"===b?(0,A.jsx)(eL,{style:{color:"#d1d5db"},children:"Reconnect the preview to try again."}):null,!C&&(0,A.jsx)(eL,{style:{color:"#d1d5db"},children:"Please use a modern Chromium browser to view the stream."})]}):null]})]})}let eK=["android","ios","web","harmony","computer"],eQ=["countdown-before-run"];function eJ(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 eZ(e){return((null==e?void 0:e.executionUxHints)||[]).filter(e=>eQ.includes(e))}function eX(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 eq(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){eX(o,n,i,a,s,"next",e)}function s(e){eX(o,n,i,a,s,"throw",e)}a(void 0)})}}function eH(e){var t,r;let{connectingOverlay:n,onDeviceSizeChange:i,onScrcpyStatusChange:o,renderErrorOverlay:a,scrcpyViewportStyle:s,screenshotViewerMode:l,playgroundSDK:u,runtimeInfo:d,serverUrl:p,serverOnline:h,isUserOperating:f}=e,{message:m}=ek.A.useApp(),g=function(e,t){let r=null==e?void 0:e.preview;if(!r||"none"===r.kind||"custom"===r.kind)return{type:"none"};let n=t||"undefined"!=typeof window&&window.location.origin||"";if("mjpeg"===r.kind){let e=r.mjpegPath||"/mjpeg";return n?{type:"mjpeg",mjpegUrl:new URL(e,`${n}/`).toString()}:{type:"screenshot"}}if("scrcpy"===r.kind){var i,o;let t="string"==typeof(null==e||null==(i=e.metadata)?void 0:i.deviceId)?e.metadata.deviceId.trim():void 0;if("string"==typeof t&&/^\d+\.\d+\.\d+\.\d+:\d+$/.test(t))return{type:"screenshot"};let a=Number(null==(o=r.custom)?void 0:o.scrcpyPort),s=Number.isFinite(a)?a:void 0,l=s&&n?(()=>{let e=new URL(n);if(["localhost","127.0.0.1","[::1]"].includes(e.hostname)){var t;let n="string"==typeof(null==(t=r.custom)?void 0:t.scrcpyHost)?r.custom.scrcpyHost.trim():"";n&&"0.0.0.0"!==n&&"::"!==n?e.hostname=n.includes(":")&&!n.startsWith("[")?`[${n}]`:n:"::"===n?e.hostname="[::1]":("0.0.0.0"===n||"localhost"===e.hostname)&&(e.hostname="127.0.0.1")}return e.port=String(s),e.pathname="/",e.search="",e.hash="",e.toString()})():void 0;return{deviceId:t,type:"scrcpy",scrcpyPort:s,scrcpyUrl:l}}return{type:"screenshot"}}(d,p),[y,v]=(0,c.useState)(null),[b,w]=(0,c.useState)(null),[E,x]=(0,c.useState)(null),[k,S]=(0,c.useState)("connecting"),C=(0,c.useRef)(Promise.resolve()),I=(0,c.useRef)(""),j=(0,c.useRef)(null),O=(0,c.useRef)(null),P=(0,c.useRef)(null),R=(0,c.useRef)(null),M=null!=(t=null==E?void 0:E.includes("Tap"))&&t,T=(null==E?void 0:E.includes("Swipe"))?"Swipe":"DragAndDrop",N=(null==E?void 0:E.includes("KeyboardPress"))||(null==E?void 0:E.includes("Input"))||!1,D=null!=(r=null==E?void 0:E.includes("Scroll"))&&r,B=(0,c.useCallback)(e=>{let t=C.current.then(e,e);return C.current=t.catch(()=>void 0),t},[m]);(0,c.useEffect)(()=>{if(!h){v(null),x(null);return}let e=!1,t=()=>eq(function*(){var t;let r;try{r=yield u.getInterfaceInfo()}catch(e){return}if(e)return;if((null==r||null==(t=r.size)?void 0:t.width)&&r.size.height){let{size:e}=r;v(t=>t&&t.width===e.width&&t.height===e.height?t:{width:e.width,height:e.height})}let n=Array.isArray(null==r?void 0:r.actionTypes)?r.actionTypes:null;x(e=>null===e&&null===n||e&&n&&e.length===n.length&&e.every((e,t)=>e===n[t])?e:n)})();t();let r=setInterval(t,5e3);return()=>{e=!0,clearInterval(r)}},[u,h]),(0,c.useEffect)(()=>{null==i||i(null!=b?b:y)},[y,i,b]);let z="scrcpy"===g.type&&ex.p.isSupported,F="screenshot"===g.type||"scrcpy"===g.type&&!z,L="scrcpy"===g.type&&!ex.p.isSupported&&function(){try{let{protocol:e,hostname:t}=window.location;if("http:"!==e)return!1;return"localhost"!==t&&"127.0.0.1"!==t&&"::1"!==t}catch(e){return!1}}(),U="none"!==g.type&&(!z||"connected"===k),K=(0,c.useCallback)((e,t)=>{m.open({type:"error",content:t||e,key:"manual-control-error"})},[]),Q=(0,c.useCallback)(()=>{O.current&&(clearTimeout(O.current),O.current=null)},[]),J=(0,c.useCallback)(()=>{var e,t;Q();let r=I.current,n=j.current;if(!r)return null!=(e=P.current)?e:Promise.resolve();I.current="",j.current=null;let i=(null!=(t=P.current)?t:Promise.resolve()).catch(()=>void 0).then(()=>eq(function*(){let e=yield B(()=>u.interact(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({actionType:"Input",value:r,mode:"typeOnly"},n?{x:n.x,y:n.y}:{})));e.ok||K("Input failed",e.error)})()).finally(()=>{P.current===i&&(P.current=null)});return P.current=i,P.current},[Q,B,u,K]),Z=(0,c.useCallback)(e=>eq(function*(){yield J();let t=yield B(()=>u.interact({actionType:"Tap",x:e.x,y:e.y}));t.ok||K("Tap failed",t.error)})(),[B,J,u,K]),X=(0,c.useCallback)((e,t,r)=>eq(function*(){yield J();let n=yield B(()=>{var n,i,o,a,s,l;let A;return u.interact((n=T,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||K(`${T} failed`,n.error)})(),[B,J,T,u,K]),q=(0,c.useCallback)((e,t)=>{e&&(I.current+=e,t&&(j.current=t),Q(),O.current=setTimeout(()=>{J()},120))},[Q,J]);(0,c.useEffect)(()=>{h&&U&&N||(Q(),I.current="",j.current=null)},[Q,N,U,h]),(0,c.useEffect)(()=>()=>{h&&U&&N&&I.current?J():(Q(),j.current=null)},[Q,J,N,g.type,U,d,h,p]);let H=(0,c.useCallback)(e=>eq(function*(){if(!e)return;yield J();let t=yield B(()=>u.interact({actionType:"KeyboardPress",keyName:e}));t.ok||K("Keyboard press failed",t.error)})(),[B,J,u,K]),W=(0,c.useCallback)((e,t)=>eq(function*(){yield J();let r=yield B(()=>{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||K("Scroll failed",r.error)})(),[B,J,u,K]),G=(0,c.useCallback)((e,t)=>{S(e),null==o||o(e,t)},[o]);return(0,A.jsxs)("div",{style:{flex:1,minHeight:0,height:"100%",position:"relative"},children:[L&&(0,A.jsx)(eS.A,{content:(0,A.jsxs)("div",{style:{maxWidth:360},children:[(0,A.jsx)("p",{style:{margin:"0 0 8px"},children:"Live scrcpy streaming is unavailable because WebCodecs API is disabled in non-secure (HTTP) contexts with non-localhost addresses."}),(0,A.jsx)("p",{style:{margin:"0 0 8px"},children:"Currently using screenshot polling as fallback. To enable scrcpy streaming:"}),(0,A.jsxs)("ol",{style:{margin:0,paddingLeft:18},children:[(0,A.jsxs)("li",{children:["Open"," ",(0,A.jsx)("code",{children:"chrome://flags/#unsafely-treat-insecure-origin-as-secure"})]}),(0,A.jsxs)("li",{children:["Add ",(0,A.jsx)("code",{children:window.location.origin})]}),(0,A.jsxs)("li",{children:["Set to ",(0,A.jsx)("b",{children:"Enabled"})," and relaunch Chrome"]})]})]}),title:"Screenshot polling mode",trigger:"click",placement:"bottomRight",children:(0,A.jsx)("button",{type:"button",style:{position:"absolute",top:8,right:8,zIndex:10,background:"#faad14",border:"none",borderRadius:"50%",width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",boxShadow:"0 2px 6px rgba(0,0,0,0.2)"},children:(0,A.jsx)("span",{style:{color:"#fff",fontSize:14,fontWeight:"bold",lineHeight:1},children:"!"})})}),"none"===g.type?(0,A.jsx)(V.A,{type:"warning",showIcon:!0,message:"Preview unavailable",description:"This session did not expose a preview capability in runtime metadata."}):z?(0,A.jsx)(eU,{connectingOverlay:n,deviceId:g.deviceId,onIntrinsicSize:w,onStatusChange:G,renderErrorOverlay:a,serverUrl:g.scrcpyUrl,viewportStyle:s,contentRef:R}):(0,A.jsx)(eE,{getScreenshot:()=>F?u.getScreenshot():Promise.resolve(null),getInterfaceInfo:()=>u.getInterfaceInfo(),serverOnline:h,isUserOperating:f,mjpegUrl:g.mjpegUrl,mode:null!=l?l:"screen-only",contentRef:R}),(0,A.jsx)(eO,{enabled:M&&h&&U,deviceSize:y,contentRef:R,onTap:Z,onSwipe:X,scrollEnabled:D,onWheelScroll:W,keyboardEnabled:N,onTextInput:q,onKeyboardPress:H})]})}function eW(e){return(0,A.jsx)(eH,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 eG=r(22770);function eV(e){let{children:t}=e;return(0,A.jsx)(eG.Ay,{theme:{token:{colorPrimary:"#2B83FF"},components:{Layout:{headerHeight:60,headerPadding:"0 30px",headerBg:"#FFF",bodyBg:"#FFF"}}},children:(0,A.jsx)(ek.A,{component:!1,children:t})})}var eY=r(87086),e$=r(63961),e_=r(85409);let e0="undefined"!=typeof window,e1="undefined"!=typeof WorkerGlobalScope,e2=void 0!==e_&&(null==(s=e_.versions)?void 0:s.node);function e3(){return(0,e$.A)()}let e5={};function e4(e,t){if(!e)throw Error(t||"Assertion failed")}function e7(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];console.log(...t)}let e6=/</g,e8=/>/g,e9="__midscene_lt__",te="__midscene_gt__",tt=e=>e.replace(e6,e9).replace(e8,te),tr=e=>{let t=RegExp(e9,"g"),r=RegExp(te,"g");return e.replace(t,"<").replace(r,">")};var tn=r(13353);function ti(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 to(e){if(!e||"object"!=typeof e||Array.isArray(e)){let t=Array.isArray(e)?"array":null===e?"null":typeof e;throw Error(`LLM response is valid JSON but does not match the expected schema. Expected to be a JSON object, got ${t}: ${JSON.stringify(e)}.`)}}function ta(e){try{return JSON.parse(e)}catch{return JSON.parse((0,tn.m)(e))}}function ts(e,t){let r,n=ti(e);try{r=ta(n)}catch(i){let t=n;if(t===n)throw Error(`failed to parse LLM response into JSON. Error - ${String(i)}. Response -
|
|
3
3
|
${e}`);try{r=ta(t)}catch(t){throw Error(`failed to parse LLM response into JSON. First error - ${String(i)}. Second error - ${String(t)}. Response -
|
|
4
4
|
${e}`)}}return function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==t)return t;if(Array.isArray(t))return t.map(t=>e(t,r));if("object"==typeof t){let i={};for(let[o,a]of Object.entries(t)){var n;let t=o.trim(),s=(null==(n=r.preserveStringValueKeys)?void 0:n.includes(t))??!1,l="string"==typeof a?s?a:a.trim():e(a,r);i[t]=l}return i}return"string"==typeof t?t.trim():t}(r,t)}var tl=r(53244),tA=r.n(tl),tc=r(13078),tu=r.n(tc),td=r(1344),tp=r.n(td),th=r(27617),tf=r.n(th),tm=r(35207);let tg="MIDSCENE_MODEL_INIT_CONFIG_JSON",ty="MIDSCENE_MODEL_EXTRA_BODY_JSON",tv="MIDSCENE_MODEL_NAME",tb="MIDSCENE_DEBUG_MODEL_PROFILE",tw="MIDSCENE_DEBUG_MODEL_RESPONSE",tE="MIDSCENE_DEBUG_MODE",tx="MIDSCENE_LANGSMITH_DEBUG",tk="MIDSCENE_LANGFUSE_DEBUG",tS="MIDSCENE_MODEL_SOCKS_PROXY",tC="MIDSCENE_MODEL_HTTP_PROXY",tI="MIDSCENE_MODEL_API_KEY",tj="MIDSCENE_MODEL_BASE_URL",tO="MIDSCENE_MODEL_TIMEOUT",tP="MIDSCENE_MODEL_TEMPERATURE",tR="MIDSCENE_MODEL_RETRY_COUNT",tM="MIDSCENE_MODEL_RETRY_INTERVAL",tT="MIDSCENE_MODEL_REASONING_EFFORT",tN="MIDSCENE_MODEL_REASONING_ENABLED",tD="MIDSCENE_MODEL_REASONING_BUDGET",tB="MIDSCENE_MODEL_RESPONSE_FORMAT",tz="OPENAI_API_KEY",tF="OPENAI_BASE_URL",tL="MIDSCENE_OPENAI_INIT_CONFIG_JSON",tU="MIDSCENE_OPENAI_HTTP_PROXY",tK="MIDSCENE_OPENAI_SOCKS_PROXY",tQ="MIDSCENE_CACHE",tJ="MIDSCENE_USE_VLM_UI_TARS",tZ="MIDSCENE_USE_QWEN_VL",tX="MIDSCENE_USE_QWEN3_VL",tq="MIDSCENE_USE_DOUBAO_VISION",tH="MIDSCENE_USE_GEMINI",tW="MATCH_BY_POSITION",tG="MIDSCENE_REPORT_TAG_NAME",tV="MIDSCENE_REPORT_QUIET",tY="MIDSCENE_PREFERRED_LANGUAGE",t$="MIDSCENE_CACHE_MAX_FILENAME_LENGTH",t_="MIDSCENE_REPLANNING_CYCLE_LIMIT",t0="MIDSCENE_RUN_DIR",t1="MIDSCENE_RECORD_MODEL_CALL",t2="MIDSCENE_INSIGHT_MODEL_NAME",t3="MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY",t5="MIDSCENE_INSIGHT_MODEL_HTTP_PROXY",t4="MIDSCENE_INSIGHT_MODEL_BASE_URL",t7="MIDSCENE_INSIGHT_MODEL_API_KEY",t6="MIDSCENE_INSIGHT_MODEL_INIT_CONFIG_JSON",t8="MIDSCENE_INSIGHT_MODEL_EXTRA_BODY_JSON",t9="MIDSCENE_INSIGHT_MODEL_TIMEOUT",re="MIDSCENE_INSIGHT_MODEL_TEMPERATURE",rt="MIDSCENE_INSIGHT_MODEL_RETRY_COUNT",rr="MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL",rn="MIDSCENE_INSIGHT_MODEL_FAMILY",ri="MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT",ro="MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED",ra="MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET",rs="MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT",rl="MIDSCENE_PLANNING_MODEL_NAME",rA="MIDSCENE_PLANNING_MODEL_SOCKS_PROXY",rc="MIDSCENE_PLANNING_MODEL_HTTP_PROXY",ru="MIDSCENE_PLANNING_MODEL_BASE_URL",rd="MIDSCENE_PLANNING_MODEL_API_KEY",rp="MIDSCENE_PLANNING_MODEL_INIT_CONFIG_JSON",rh="MIDSCENE_PLANNING_MODEL_EXTRA_BODY_JSON",rf="MIDSCENE_PLANNING_MODEL_TIMEOUT",rm="MIDSCENE_PLANNING_MODEL_TEMPERATURE",rg="MIDSCENE_PLANNING_MODEL_RETRY_COUNT",ry="MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL",rv="MIDSCENE_PLANNING_MODEL_FAMILY",rb="MIDSCENE_PLANNING_MODEL_REASONING_EFFORT",rw="MIDSCENE_PLANNING_MODEL_REASONING_ENABLED",rE="MIDSCENE_PLANNING_MODEL_REASONING_BUDGET",rx="MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT",rk="MIDSCENE_MODEL_FAMILY",rS=[tE,tb,tw,t0,t1],rC=[tQ,tx,tk,tV],rI=[t$,t_],rj=["MIDSCENE_ADB_PATH","MIDSCENE_ADB_REMOTE_HOST","MIDSCENE_ADB_REMOTE_PORT","MIDSCENE_ANDROID_IME_STRATEGY","MIDSCENE_ANDROID_SCREENSHOT_STRATEGY","MIDSCENE_IOS_DEVICE_UDID","MIDSCENE_IOS_SIMULATOR_UDID",tG,tY,tW,"MIDSCENE_CHROME_PATH","MIDSCENE_MCP_CHROME_PATH","DOCKER_CONTAINER"],rO=[...rC,...rI,...rj],rP=[tv,tg,ty,tI,tj,tS,tC,tO,tP,tR,tM,tT,tN,tD,tB,tJ,tZ,tX,tq,tH,"MIDSCENE_USE_VL_MODEL",tz,tF,tL,tU,tK,t2,t3,t5,t4,t7,t6,t8,t9,re,rt,rr,rn,ri,ro,ra,rs,rl,rA,rc,ru,rd,rp,rh,rf,rm,rg,ry,rv,rb,rw,rE,rx,rk],rR=["MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",...rS,...rO,...rP],rM=["doubao-vision","doubao-seed","gemini","qwen2.5-vl","qwen3-vl","qwen3","qwen3.5","qwen3.6","vlm-ui-tars","vlm-ui-tars-doubao","vlm-ui-tars-doubao-1.5","glm-v","auto-glm","auto-glm-multilingual","gpt-5","gpt-6","deepseek","kimi","kimi3","xiaomi-mimo"];var rT=((a={}).V1_0="1.0",a.V1_5="1.5",a.DOUBAO_1_5_15B="doubao-1.5-15B",a.DOUBAO_1_5_20B="doubao-1.5-20B",a),rN=r(85409);let rD=e=>{if(!rS.includes(e))throw Error(`getBasicEnvValue with key ${e} is not supported.`);return rN.env[e]};var rB=r(85409);let rz="midscene_run",rF=()=>{if(!e2)return"";let e=tu().resolve(rB.cwd(),e2?n??rD(t0)??rz:"");if(!(0,tl.existsSync)(e))try{(0,tl.mkdirSync)(e,{recursive:!0})}catch(t){e=tu().join((0,tm.tmpdir)(),rz),(0,tl.mkdirSync)(e,{recursive:!0})}return e},rL=e=>{if(!e2)return"";let t=rF(),r=tu().join(t,e);return(0,tl.existsSync)(r)||(0,tl.mkdirSync)(r,{recursive:!0}),r},rU="midscene",rK=new Map,rQ=new Map,rJ=new Set,rZ=new Set,rX=new Map;function rq(e,t){let r=`${rU}:${e}`,n=(null==t?void 0:t.console)??!1,o=n?`${r}:withConsole`:r;if(!rX.has(o))if(n){let t=rq(e);rX.set(o,function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];t(...r);try{console.warn("[Midscene]",...r)}catch{}})}else{let t=tf()(r);rX.set(o,function(){for(var r=arguments.length,n=Array(r),o=0;o<r;o++)n[o]=arguments[o];e2&&function(e,t){if(!e2)return;let r=e.replace(/:/g,"-");if(rJ.has(r))return;let n=function(e){let t=e.replace(/:/g,"-");if(rZ.has(t))return null;let r=tu().join((null==i?void 0:i())??rL("log"),`${t}.log`),n=rK.get(t);if(n&&rQ.get(t)!==r&&(n.end(),rK.delete(t),rQ.delete(t)),!rK.has(t)){let e=tA().createWriteStream(r,{flags:"a"});e.on("error",()=>{rZ.add(t),rJ.delete(t),rK.get(t)===e&&(rK.delete(t),rQ.delete(t))}),rK.set(t,e),rQ.set(t,r)}return rK.get(t)??null}(e);if(!n)return;let o=new Date,a=o.toLocaleDateString("sv-SE"),s=o.toLocaleTimeString("sv-SE"),l=o.getMilliseconds().toString().padStart(3,"0"),A=o.getTimezoneOffset(),c=Math.floor(Math.abs(A)/60).toString().padStart(2,"0"),u=(Math.abs(A)%60).toString().padStart(2,"0"),d=`${A<=0?"+":"-"}${c}:${u}`,p=`${a}T${s}.${l}${d}`;try{n.write(`[${p}] ${t}
|
|
5
|
-
`)||(rJ.add(r),n.once("drain",()=>{rJ.delete(r)}))}catch{rZ.add(r),rJ.delete(r)}}(e,tp().format(...n)),t(...n)})}return rX.get(o)}let rH=()=>{var e;let t=rD(tb),r="";t&&(console.warn("MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),r="ai:profile"),rD(tw)&&(console.warn("MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),r=r?"ai:*":"ai:call"),r&&(e=r,e2||tf().enable(`${rU}:${e}`))};var rW=r(85409);function rG(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let rV=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}`},rY=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,rV(r)];if("object"==typeof r){let e=JSON.stringify(r);if(/key/i.test(e))return[t,rV(e)]}return[t,r]})),r$=(e,t)=>{if(t)try{return JSON.parse(t)}catch(t){throw Error(`Failed to parse ${e} as a JSON. ${t.message}`,{cause:t})}},r_={insight:{modelName:t2,socksProxy:t3,httpProxy:t5,openaiBaseURL:t4,openaiApiKey:t7,openaiExtraConfig:t6,extraBody:t8,modelFamily:rn,timeout:t9,temperature:re,retryCount:rt,retryInterval:rr,reasoningEffort:ri,reasoningEnabled:ro,reasoningBudget:ra,responseFormat:rs},planning:{modelName:rl,socksProxy:rA,httpProxy:rc,openaiBaseURL:ru,openaiApiKey:rd,openaiExtraConfig:rp,extraBody:rh,modelFamily:rv,timeout:rf,temperature:rm,retryCount:rg,retryInterval:ry,reasoningEffort:rb,reasoningEnabled:rw,reasoningBudget:rE,responseFormat:rx},default:{modelName:tv,socksProxy:tS,httpProxy:tC,openaiBaseURL:tj,openaiApiKey:tI,openaiExtraConfig:tg,extraBody:ty,modelFamily:rk,timeout:tO,temperature:tP,retryCount:tR,retryInterval:tM,reasoningEffort:tT,reasoningEnabled:tN,reasoningBudget:tD,responseFormat:tB}},r0=(e,t)=>{let r=rq("ai:config");r("will decideModelConfig base on agent.modelConfig()",e,rY(t));let n=r_[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;rH(),rq("ai:config")("enter parseOpenaiSdkConfig with keys:",o);let l=s?a[tz]:void 0,A=s?a[tF]:void 0,c=s?a[tK]:void 0,u=s?a[tU]:void 0,d=s?a[tL]:void 0,p=s?(e=>{let t=e[tq],r=e[tZ],n=e[tX],i=e[tJ],o=e[tH],a=[t&&tq,r&&tZ,n&&tX,i&&tJ,o&&tH].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,m=a[o.openaiBaseURL]||A,g=a[o.socksProxy]||c,y=a[o.httpProxy]||u,v=a[o.modelName],b=a[o.openaiExtraConfig],w=r$(o.openaiExtraConfig,b||d),E=a[o.extraBody],x=r$(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&&!rM.includes(h))throw Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${h}. Current version v1.12.7-beta-20260914023554.0 accepts the following model families: ${rM.join(", ")}. You can also visit https://midscenejs.com/model-common-config.html for the latest configuration information.`);let S="vlm-ui-tars"===h?rT.V1_0:"vlm-ui-tars-doubao"===h||"vlm-ui-tars-doubao-1.5"===h?rT.DOUBAO_1_5_20B:void 0,C=S?`UI-TARS=${S}`:h?`${h} mode`:"";return{socksProxy:g,httpProxy:y,openaiBaseURL:m,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})(),responseFormat:(()=>{var e,t;let r=null==(t=a[o.responseFormat])||null==(e=t.trim())?void 0:e.toLowerCase();if(!r||"auto"===r)return"auto";if("none"===r)return"none";throw Error(`${o.responseFormat} must be one of: none, auto. Got: ${r}`)})()}})({keys:n,provider:t,useLegacyLogic:"default"===e});return i.intent=e,i.slot=e,r("decideModelConfig result by agent.modelConfig() with intent",e,rY({...i})),e4(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 r1(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class r2{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=r0("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=r0("insight",t),i=r0("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){r1(this,"modelConfigMap",void 0),r1(this,"isInitialized",!1),r1(this,"isolatedMode",!1),r1(this,"globalConfigManager",void 0),r1(this,"modelConfig",void 0),r1(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let r3=new r2,r5=new class{getAllEnvConfig(){let e=rR.reduce((e,t)=>(e[t]=rW.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===tW)throw Error("MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead");if(!rj.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(!rC.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(!rj.includes(e)&&!rI.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(![...rO,...rP].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(){rG(this,"override",void 0),rG(this,"keysHaveBeenRead",{}),rG(this,"globalModelConfigManager",void 0),rH()}};r5.registerModelConfigManager(r3),r3.registerGlobalConfigManager(r5);let r4=()=>{let e=r5.getEnvConfigValue(tY);return e?e:"Asia/Shanghai"===Intl.DateTimeFormat().resolvedOptions().timeZone?"Chinese":"English"},r7=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];r5.overrideAIConfig(e,t)};var r6=r(35966),r8=r(13009),r9=r(76970);let ne="undefined"!=typeof __MIDSCENE_REPORT_BUILD__&&__MIDSCENE_REPORT_BUILD__;var nt=r(8963).Buffer,nr=r(85409);let nn=new Map,ni=new Map;function no(){if(ne)return"";let e="REPLACE_ME_WITH_REPORT_HTML";if(e.includes("REPLACE_ME_WITH_REPORT_HTML"))throw Error('Report template contains an unresolved placeholder. Build Report with "pnpm exec nx build @midscene/report", or run "pnpm --filter @midscene/core sync-report-template" if apps/report/dist/index.html already exists.');return e}function na(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
|
|
5
|
+
`)||(rJ.add(r),n.once("drain",()=>{rJ.delete(r)}))}catch{rZ.add(r),rJ.delete(r)}}(e,tp().format(...n)),t(...n)})}return rX.get(o)}let rH=()=>{var e;let t=rD(tb),r="";t&&(console.warn("MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),r="ai:profile"),rD(tw)&&(console.warn("MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),r=r?"ai:*":"ai:call"),r&&(e=r,e2||tf().enable(`${rU}:${e}`))};var rW=r(85409);function rG(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let rV=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}`},rY=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,rV(r)];if("object"==typeof r){let e=JSON.stringify(r);if(/key/i.test(e))return[t,rV(e)]}return[t,r]})),r$=(e,t)=>{if(t)try{return JSON.parse(t)}catch(t){throw Error(`Failed to parse ${e} as a JSON. ${t.message}`,{cause:t})}},r_={insight:{modelName:t2,socksProxy:t3,httpProxy:t5,openaiBaseURL:t4,openaiApiKey:t7,openaiExtraConfig:t6,extraBody:t8,modelFamily:rn,timeout:t9,temperature:re,retryCount:rt,retryInterval:rr,reasoningEffort:ri,reasoningEnabled:ro,reasoningBudget:ra,responseFormat:rs},planning:{modelName:rl,socksProxy:rA,httpProxy:rc,openaiBaseURL:ru,openaiApiKey:rd,openaiExtraConfig:rp,extraBody:rh,modelFamily:rv,timeout:rf,temperature:rm,retryCount:rg,retryInterval:ry,reasoningEffort:rb,reasoningEnabled:rw,reasoningBudget:rE,responseFormat:rx},default:{modelName:tv,socksProxy:tS,httpProxy:tC,openaiBaseURL:tj,openaiApiKey:tI,openaiExtraConfig:tg,extraBody:ty,modelFamily:rk,timeout:tO,temperature:tP,retryCount:tR,retryInterval:tM,reasoningEffort:tT,reasoningEnabled:tN,reasoningBudget:tD,responseFormat:tB}},r0=(e,t)=>{let r=rq("ai:config");r("will decideModelConfig base on agent.modelConfig()",e,rY(t));let n=r_[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;rH(),rq("ai:config")("enter parseOpenaiSdkConfig with keys:",o);let l=s?a[tz]:void 0,A=s?a[tF]:void 0,c=s?a[tK]:void 0,u=s?a[tU]:void 0,d=s?a[tL]:void 0,p=s?(e=>{let t=e[tq],r=e[tZ],n=e[tX],i=e[tJ],o=e[tH],a=[t&&tq,r&&tZ,n&&tX,i&&tJ,o&&tH].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,m=a[o.openaiBaseURL]||A,g=a[o.socksProxy]||c,y=a[o.httpProxy]||u,v=a[o.modelName],b=a[o.openaiExtraConfig],w=r$(o.openaiExtraConfig,b||d),E=a[o.extraBody],x=r$(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&&!rM.includes(h))throw Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${h}. Current version v1.12.7 accepts the following model families: ${rM.join(", ")}. You can also visit https://midscenejs.com/model-common-config.html for the latest configuration information.`);let S="vlm-ui-tars"===h?rT.V1_0:"vlm-ui-tars-doubao"===h||"vlm-ui-tars-doubao-1.5"===h?rT.DOUBAO_1_5_20B:void 0,C=S?`UI-TARS=${S}`:h?`${h} mode`:"";return{socksProxy:g,httpProxy:y,openaiBaseURL:m,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})(),responseFormat:(()=>{var e,t;let r=null==(t=a[o.responseFormat])||null==(e=t.trim())?void 0:e.toLowerCase();if(!r||"auto"===r)return"auto";if("none"===r)return"none";throw Error(`${o.responseFormat} must be one of: none, auto. Got: ${r}`)})()}})({keys:n,provider:t,useLegacyLogic:"default"===e});return i.intent=e,i.slot=e,r("decideModelConfig result by agent.modelConfig() with intent",e,rY({...i})),e4(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 r1(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class r2{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=r0("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=r0("insight",t),i=r0("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){r1(this,"modelConfigMap",void 0),r1(this,"isInitialized",!1),r1(this,"isolatedMode",!1),r1(this,"globalConfigManager",void 0),r1(this,"modelConfig",void 0),r1(this,"createOpenAIClientFn",void 0),this.modelConfig=e,this.createOpenAIClientFn=t}}let r3=new r2,r5=new class{getAllEnvConfig(){let e=rR.reduce((e,t)=>(e[t]=rW.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===tW)throw Error("MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead");if(!rj.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(!rC.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(!rj.includes(e)&&!rI.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(![...rO,...rP].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(){rG(this,"override",void 0),rG(this,"keysHaveBeenRead",{}),rG(this,"globalModelConfigManager",void 0),rH()}};r5.registerModelConfigManager(r3),r3.registerGlobalConfigManager(r5);let r4=()=>{let e=r5.getEnvConfigValue(tY);return e?e:"Asia/Shanghai"===Intl.DateTimeFormat().resolvedOptions().timeZone?"Chinese":"English"},r7=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];r5.overrideAIConfig(e,t)};var r6=r(35966),r8=r(13009),r9=r(76970);let ne="undefined"!=typeof __MIDSCENE_REPORT_BUILD__&&__MIDSCENE_REPORT_BUILD__;var nt=r(8963).Buffer,nr=r(85409);let nn=new Map,ni=new Map;function no(){if(ne)return"";let e="REPLACE_ME_WITH_REPORT_HTML";if(e.includes("REPLACE_ME_WITH_REPORT_HTML"))throw Error('Report template contains an unresolved placeholder. Build Report with "pnpm exec nx build @midscene/report", or run "pnpm --filter @midscene/core sync-report-template" if apps/report/dist/index.html already exists.');return e}function na(e,t){let r=e.lastIndexOf("</html>");return -1===r?e+t:`${e.slice(0,r)}${t}
|
|
6
6
|
${e.slice(r)}`}function ns(e,t,r){let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3];if(ne)return"";let i="";if(n&&!(i=no()))return console.warn("reportTpl is not set, will not write report"),"";let o=t&&!e0,a="",s="<\/script>";if("string"==typeof e)a='<script type="midscene_web_dump" type="application/json" data-group-id="'+encodeURIComponent((()=>{if(!t||!r)return e3();let e=ni.get(t);if(e)return e;let n=e3();return ni.set(t,n),n})())+'">\n'+tt(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"+tt(t)+"\n"+s}return o?(r?(nn.get(t)||((0,r9.writeFileSync)(t,i,{flag:"w"}),nn.set(t,!0)),!function(e,t){let r="</html>",n=(0,r9.statSync)(e),i=Math.min(n.size,4096),o=Math.max(0,n.size-i),a=nt.alloc(n.size-o),s=(0,r9.openSync)(e,"r");(0,r9.readSync)(s,a,0,a.length,o),(0,r9.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+nt.byteLength(c,"utf8");(0,r9.truncateSync)(e,u),(0,r9.appendFileSync)(e,`${t}
|
|
7
7
|
${r}
|
|
8
|
-
`)}(t,a)):(0,r9.writeFileSync)(t,na(i,a),{flag:"w"}),t):na(i,a)}async function nl(e){return new Promise(t=>setTimeout(t,e))}function nA(){return"1.12.7
|
|
8
|
+
`)}(t,a)):(0,r9.writeFileSync)(t,na(i,a),{flag:"w"}),t):na(i,a)}async function nl(e){return new Promise(t=>setTimeout(t,e))}function nA(){return"1.12.7"}function nc(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];nr.env[tE]&&console.log("[Midscene]",...t)}let nu=null,nd="";async function np(e){let{testUrl:t,serverUrl:r}=e;if(!r)return;let{repoUrl:n,userEmail:i}=await function(){if(nu)return nu;let e=(0,td.promisify)(r8.execFile);return nu=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!==nd:t)&&(nc("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=>{nc("Successfully uploaded test info to server:",e)}).catch(e=>nc("Failed to upload test info to server:",e)),nd=n)}let nh=rq("ai:call");function nf(e,t){return e.length<=t?e:`${e.slice(0,t)}... [truncated, ${e.length} chars total]`}function nm(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 ng=e=>{try{let t=new URL(e);if(t.username)return t.password="****",t.href;return e}catch{return e}},ny=async e=>{let{socksProxy:t,httpProxy:n}=e,i=rq("ai:call:proxy",{console:!0}),o=rq("ai:call:proxy");if(n)if(o("using http proxy",ng(n)),e0)i("HTTP proxy is configured but not supported in browser environment");else{let{loadUndici:e}=await r.e("466").then(r.bind(r,86033)),{ProxyAgent:t}=await e();return new t({uri:n})}else if(t)if(o("using socks proxy",ng(t)),e0)i("SOCKS proxy is configured but not supported in browser environment");else try{let{loadFetchSocks:e}=await r.e("466").then(r.bind(r,86033)),{socksDispatcher:n}=await e(),i=new URL(t);if(!i.hostname)throw Error("SOCKS proxy URL must include a valid hostname");let a=Number.parseInt(i.port,10);if(!i.port||Number.isNaN(a))throw Error("SOCKS proxy URL must include a valid port");let s=i.protocol.replace(":",""),l="socks4"===s?4:5,A=n({type:l,host:i.hostname,port:a,...i.username?{userId:decodeURIComponent(i.username),password:decodeURIComponent(i.password||"")}:{}});return o("socks proxy configured successfully",{type:l,host:i.hostname,port:a}),A}catch(e){throw i("Failed to configure SOCKS proxy:",e),Error(`Invalid SOCKS proxy URL: ${t}. Expected format: socks4://host:port, socks5://host:port, or with authentication: socks5://user:pass@host:port`)}},nv="AI_CALL_HARD_TIMEOUT";function nb(e){let{timeout:t}=e;return"number"!=typeof t?18e4:t<=0?null:t}function nw(e){if(!e||"object"!=typeof e)return!1;if(e.code===nv)return!0;let t=e.cause;return!!t&&"object"==typeof t&&t.code===nv}function nE(e,t){if(!t.aborted||!nw(t.reason))return e;let r=Error(t.reason.message,{cause:e});return r.code=nv,r}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=nv,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)}}}let nk=async e=>{let t,n,{openaiBaseURL:i,openaiApiKey:o,openaiExtraConfig:a,createOpenAIClient:s,effectiveTimeoutMs:l,proxyAgent:A,executionId:c,openAIErrorResponseContext:u}=e,d=rq("ai:call",{console:!0}),p={baseURL:i,apiKey:o,...A?{fetchOptions:{dispatcher:A}}:{},...a,defaultHeaders:{...null==a?void 0:a.defaultHeaders,"x-midscene-version":nA(),"x-midscene-execution-id":c},fetch:(t=function(){if("function"==typeof globalThis.fetch)return globalThis.fetch;throw Error("`fetch` is not defined as a global; check that the runtime provides globalThis.fetch or polyfill it before creating the OpenAI client")}(),n=0,async(e,r)=>{var i,o,a;let s;if(n+=1,u.recordEvent){let t=new Request(e,r);u.recordEvent({type:"request",attempt:n,request:{url:t.url,method:t.method,body:await t.clone().text().catch(()=>void 0)}})}try{s=await t(e,r)}catch(o){let e,t,r=(e=[nm(o)],void 0!==(t=o&&"object"==typeof o?o.cause:void 0)&&e.push(`Cause: ${nm(t)}`),nf(e.join("\n"),4e3));throw nh("OpenAI-compatible fetch failed",r),u.fetchErrors??(u.fetchErrors=[]),u.fetchErrors.push({attempt:n,error:r}),null==(i=u.recordEvent)||i.call(u,{type:"error",attempt:n,error:r}),o}let l=s.headers.get("x-request-id")??s.headers.get("x-model-request-id");if(l&&(u.responseRequestIds??(u.responseRequestIds=[]),u.responseRequestIds.push({attempt:n,requestId:l,status:s.status,ok:s.ok})),!s.ok){let e=await s.clone().text().catch(()=>void 0);void 0!==e&&(u.rawResponseBodies??(u.rawResponseBodies=[]),u.rawResponseBodies.push({attempt:n,body:e}))}if(u.recordEvent){let e,t=(null==(o=s.headers.get("content-type"))?void 0:o.includes("text/event-stream"))?void 0:await s.clone().text().catch(()=>void 0),r={attempt:n,status:s.status,ok:s.ok,headers:(a=s.headers,e=[],new Headers(a).forEach((t,r)=>e.push([r,t])),e),...void 0===t?{}:{body:t}};u.httpResponses??(u.httpResponses=[]),u.httpResponses.push(r),s.ok||u.recordEvent({type:"error",...r})}return s}),maxRetries:0,...null!==l?{timeout:l}:{},dangerouslyAllowBrowser:!0},h=new r6.Ay(p),f=h;if(f&&r5.getEnvConfigInBoolean(tx)){if(e0)throw Error("langsmith is not supported in browser");d("DEBUGGING MODE: langsmith wrapper enabled");let{wrapOpenAI:e}=await r(51560)("langsmith/wrappers");f=e(f)}if(f&&r5.getEnvConfigInBoolean(tk)){if(e0)throw Error("langfuse is not supported in browser");d("DEBUGGING MODE: langfuse wrapper enabled");let{observeOpenAI:e}=await r(9998)("@langfuse/openai");f=e(f)}if(s){let e=await s(h,p);e&&(f=e)}return f};async function nS(e){let{modelConfig:t,executionId:r,recordEvent:n}=e,{socksProxy:i,httpProxy:o,modelName:a,openaiBaseURL:s,openaiApiKey:l,openaiExtraConfig:A,modelDescription:c,modelFamily:u,createOpenAIClient:d,timeout:p}=t,h=await ny({socksProxy:i,httpProxy:o}),f=nb({timeout:p}),m={recordEvent:n};return{completion:(await nk({openaiBaseURL:s,openaiApiKey:l,openaiExtraConfig:A,createOpenAIClient:d,effectiveTimeoutMs:f,proxyAgent:h,executionId:r,openAIErrorResponseContext:m})).chat.completions,modelName:a,modelDescription:c,modelFamily:u,openAIErrorResponseContext:m}}function nC(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class nI extends Error{constructor(e,t,r,n,i){super(e),nC(this,"usage",void 0),nC(this,"rawResponse",void 0),nC(this,"rawChoiceMessage",void 0),nC(this,"reasoningContent",void 0),this.name="AIResponseParseError",this.rawResponse=t,this.usage=r,this.rawChoiceMessage=n,this.reasoningContent=i}}let nj="_midscene_call_id",nO=0;function nP(e){var t;return null==(t=e.responseRequestIds)?void 0:t.reduce((e,t)=>t.ok?t.requestId:e,void 0)}function nR(e){var t,r;return(null==(r=e.httpResponses)||null==(t=r.at(-1))?void 0:t.attempt)??1}function nM(e){return e instanceof Error?e:Error(String(e))}let nT=e=>"string"==typeof e&&e.trim().length>0,nN=e=>{let{content:t,reasoningContent:r,useReasoningAsContentFallback:n}=e;return!nT(t)&&n&&nT(r)?(rq("ai:call",{console:!0})("empty content from AI model, using reasoning content"),r):t},nD=async e=>{var t;let r,n,i,o,a,s,{completion:l,modelName:A,openAIErrorResponseContext:c,modelRuntime:u,messages:d,requestConfig:p,effectiveTimeoutMs:h,abortSignal:f}=e,{config:m,adapter:g}=u,y=rq("ai:call",{console:!0}),v="",b="number"==typeof(t=m.retryCount)&&Number.isFinite(t)?Math.max(0,Math.floor(t)):1,w=m.retryInterval??2e3,E=b+1,x=[];for(let e=1;e<=E;e++){let{signal:t,cleanup:u}=nx(h,f);try{let e=await l.create({model:A,messages:d,...p,stream:!1},{signal:t});if(o=nP(c)??e._request_id,!e.choices)throw Error(`invalid response from LLM service: ${JSON.stringify(e)}`);n=e.choices[0].message;let s=g.chatCompletion.extractContentAndReasoning(e.choices[0].message);if(r=s.content,v=s.reasoning_content,i=e.usage,a=e.model,r=nN({content:r,reasoningContent:v,useReasoningAsContentFallback:g.chatCompletion.useReasoningAsContentFallback}),!nT(r))throw new nI("empty content from AI model",r||"",void 0,n);break}catch(r){if(s=nE(nM(r),t),x.push({attempt:e,error:s}),nw(s)&&y(`AI call hit hard timeout (${h}ms, attempt ${e}/${E}, model ${A}, slot ${m.slot})`),null==f?void 0:f.aborted)break;e<E&&(y(`AI call failed (attempt ${e}/${E}), retrying in ${w}ms... Error: ${s.message}`),await new Promise(e=>setTimeout(e,w)))}finally{u()}}if(!r)throw e4(s,"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}
|
|
9
9
|
Previous AI call attempt errors:
|
|
10
10
|
${s}`,e}(s,x,E);return{content:r,reasoningContent:v,rawChoiceMessage:n,rawUsage:i,requestId:o,responseModelName:a}},nB=async e=>{let t,r,n,{completion:i,modelName:o,openAIErrorResponseContext:a,modelRuntime:s,messages:l,requestConfig:A,effectiveTimeoutMs:c,abortSignal:u,onChunk:d,recordEvent:p}=e;e4("function"==typeof d,"onChunk is required when stream is true");let{adapter:h}=s,f="",m="",{signal:g,cleanup:y}=nx(c,u);try{let e=await i.create({model:o,messages:l,...A,stream:!0,stream_options:{...A.stream_options,include_usage:!0}},{stream:!0,signal:g});r=nP(a)??e._request_id;let s=nR(a),c=0;for await(let r of e){var v,b;c+=1,null==p||p({type:"chunk",attempt:s,sequence:c,chunk:r});let e=h.chatCompletion.extractContentAndReasoning(null==(b=r.choices)||null==(v=b[0])?void 0:v.delta),i=e.content||"",o=e.reasoning_content||"";if(r.usage&&(t=r.usage),r.model&&(n=r.model),i||o){f+=i,m+=o;let e={content:i,reasoning_content:o,accumulated:f,isComplete:!1,usage:void 0};d(e)}}f=nN({content:f,reasoningContent:m,useReasoningAsContentFallback:h.chatCompletion.useReasoningAsContentFallback})||"";let u={content:"",accumulated:f,reasoning_content:"",isComplete:!0,usage:t};d(u)}catch(e){throw nE(nM(e),g)}finally{y()}return{content:f,reasoningContent:m,rawChoiceMessage:void 0,rawUsage:t,requestId:r,responseModelName:n}},nz=async e=>{let{messages:t,modelRuntime:r,options:n,executionId:i,recordEvent:o}=e,a=rq("ai:call"),s=rq("ai:call",{console:!0}),{config:l,adapter:A}=r,c=(null==n?void 0:n.stream)===!0,u={intent:l.intent,userConfig:{temperature:l.temperature,reasoningEnabled:l.reasoningEnabled,reasoningEffort:l.reasoningEffort,reasoningBudget:l.reasoningBudget,responseFormat:l.responseFormat},semanticRetryAttempt:null==n?void 0:n.semanticRetryAttempt,requiresOriginalImageDetail:null==n?void 0:n.requiresOriginalImageDetail,expectedJsonObjectResponse:null==n?void 0:n.expectedJsonObjectResponse},{config:d}=A.chatCompletion.buildChatCompletionParams(u);a(`adapter chat completion params: ${function(e){try{return JSON.stringify(e)}catch(t){return String(e)}}({config:d})}`);let p={...d,...l.extraBody??{}},h=(e=>{let{imageDetail:t,messages:r}=e;return t?r.map(e=>{if(!Array.isArray(e.content))return e;let r=e.content.map(e=>{var r;return e&&"image_url"===e.type&&(null==(r=e.image_url)?void 0:r.url)?{...e,image_url:{...e.image_url,detail:t}}:e});return{...e,content:r}}):r})({imageDetail:A.chatCompletion.resolveImageDetail(u),messages:t}),f=nb(l),{completion:m,modelName:g,openAIErrorResponseContext:y}=await nS({modelConfig:l,executionId:i,recordEvent:o});a(`sending ${c?"streaming ":""}request to ${g}`);try{var v;let e=Date.now(),{content:t,reasoningContent:i,rawChoiceMessage:s,rawUsage:l,requestId:A,responseModelName:u}=await (c?nB:nD)({completion:m,modelName:g,openAIErrorResponseContext:y,modelRuntime:r,messages:h,requestConfig:p,effectiveTimeoutMs:f,abortSignal:null==n?void 0:n.abortSignal,onChunk:null==n?void 0:n.onChunk,recordEvent:o}),d=Date.now()-e;return a(`response reasoning content: ${i}`),a(`response content: ${t}`),null==o||o({type:"response",attempt:nR(y),http:null==(v=y.httpResponses)?void 0:v.at(-1),final:{content:t,reasoningContent:i,usage:l,requestId:A,timeCost:d,responseModelName:u}}),{content:t,reasoning_content:i,rawChoiceMessage:s,rawUsage:l,isStreamed:c,timeCost:d,requestId:A,responseModelName:u}}catch(e){if(s("call AI error",e),e instanceof nI)throw e;throw Error(`failed to call ${c?"streaming ":""}AI model service (${g}): ${e.message}${function(e,t){var r,n,i,o,a;let s=[];if((null==(r=t.rawResponseBodies)?void 0:r.length)===1)s.push(`OpenAI raw error response body: ${nf(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}: ${nf(r,4e3)}`}).join("\n");s.push(`OpenAI raw error response bodies:
|
|
11
11
|
${e}`)}let l=null==(i=t.responseRequestIds)?void 0:i.filter(e=>{let{ok:t}=e;return!t});if((null==l?void 0:l.length)===1){let{attempt:e,requestId:t,status:r}=l[0];s.push(`OpenAI error response request ID (attempt ${e}, status ${r}): ${t}`)}else if(null==l?void 0:l.length){let e=l.map(e=>{let{attempt:t,requestId:r,status:n}=e;return`Attempt ${t} (status ${n}): ${r}`}).join("\n");s.push(`OpenAI error response request IDs:
|
|
@@ -488,11 +488,11 @@ Return JSON:
|
|
|
488
488
|
{
|
|
489
489
|
"description": "unique element identifier",
|
|
490
490
|
"error"?: "error message if any"
|
|
491
|
-
}`),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 s0({inputImgBase64:l,size:s,point:d}):await s_({inputImgBase64:l,size:s,elementsPositionInfo:[{rect:s2(u)}],borderThickness:s3(u),centerPoint:!0});if(null==r?void 0:r.deepDescribe){let e=[{kind:"focused",rect:sf(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;s7("describe: cropping deep context area",e);let o=await oP(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 s0({inputImgBase64:o.imageBase64,size:a,point:{x:d.x-e.rect.left,y:d.y-e.rect.top}}):await s_({inputImgBase64:o.imageBase64,size:a,elementsPositionInfo:[{rect:s2(s)}],borderThickness:s3(s),centerPoint:!0}),p=function(e){let t=Math.max(e.width,e.height);if(!t)return;let{resize:r}=s1,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 oC(A,{sourceSize:a,targetSize: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 n9(h,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),i=e instanceof nI?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 nI))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+='\\"'}}(ti(i),"description"))?void 0:r.trim();if(o)return{description:o}}(t);if(!e)throw t;return s7("describe: recovered malformed description JSON response"),e}let{content:f}=i;return e4(!f.error,`describe failed: ${f.error}`),e4(f.description,"failed to describe the element"),f}constructor(e,t){s4(this,"contextRetrieverFn",void 0),s4(this,"taskInfo",void 0),e4(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 s8="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABvwAAAH0CAMAAADG5HrPAAAAw1BMVEX////6+/3u7/7Y2uoMDQ4DCz2oqP/i4++ur8Odo69BRU5SUf+utf/Aws7v8PTe3+a5vMjOz9bz9Pbs7PDY2OGen6Po6OyztMf29/nS1Nz8/P3IydQNhv99g53j5OlwcXaxtLpBR25ja/86O0HCw/8lJSalqrL4+fqqsLt1df9eX2QrfP+Wlf9UVlmOkJPV1v/g4v+Dhf+gof8Np/3K1f9aWv+Cg4dLTlRGeP+Vyf8Zwvsi2/hrnP+Pbf9lyf2zZ//Ajv8VWQjSAABH5ElEQVR42uzXUQnEUAwF0Y2NqujvI1D/srZURAjcc0wM8ysACCN+AMQRPwDiiB8AccQPgDjiB0Ac8QMgjvgBEEf8AIgjfgDEET8A4ogfAHHED4A44gdAHPEDII74ARBH/ACII34AxBE/AOKIHwBxxA+AOOIHQBzxAyCO+AEQR/wAiCN+sMJ1uk8BE8QPljj9ugsYIH6ww/V0Wz8YIn6wxBe/p4AB4gdLtPjBGPGDJcQP5ogfLCF+MEf8YIn+FDBA/GCHW/xgjvj92bu71sSBKIzjHJjeCFPrS4qV2kQkCoKy4BKJXfr9P9aOR+NMOkns2BqP5fnZi8lssvbuz2gmBZAB8QNoEeIHIIOJH3a5A7QF8QOQIX9/3yF+AC1B/ABEGOf79u0QP4BWIH4AMuS79535QfwA2oD4AYgwzne7ff7wcE+ANiB+ADJ87AzED6AdiB+ACGPED6BFiB+ADMf44flmAG1A/ABuaJwXa71P8cuxBgS4JsQP4IbynUGsFL8/ZoQbPwGuB/EDuJ1xXkSO47cxr0P8csQP4KoQP4AbyjdGzsOPzWbHB858KL1H16UnxiWXAMiC+IF8T+ukS5fok2wfbvy4frmd/6BAk4c9CqIne6FvMiUKvwRAFMQP5IuVsaR6PaoyiNM3CpStjIx+xrpjxFTLjRwP24/flMN0tQvYFPEDgRA/kK+jjPqILGIVVcxGqVIrCrRSxop+Bkd7RvU25fjtED+AdiB+cA9SZaypxmK5T+Pi02SSqr2IwpyPX5bWy8jxpfjtKld+m3uPn544HviSiUsTwE0hfnAHBmrviaqNloqD9UjWS5yqg7Qbp2UdanI+frGqF5MjfOVn48coiKj4PTTAOhBEQPxAPK32ulRtFCs2K04YRDN1sh0uVVlK9VqO399T5KTGT0+Yv4zzkAPxgzuA+IF40ZlmZcUij1jqhC4hajt+862xJuPi+P29Uvy8XQc2fjWnPHyZJgvxgzuA+IEM/frv0LghHaoXufWz8ZtFC2qKX7LypXzKyhcTOx+/zN6a+s34/aVGU0aWF78Jn+FkSXt59OPnpkwjfvBrIX4gQ19VOMQvLbpS68mtX6rYUhPj+KUH5fhFKsDpsufhQcbT0dD1TEHxy53IhcfPi44XvylPTOgoIH58DeIHvxniBzLUx2+oqldjXbJ6h+Lxvj4erp/paGlvFX3+dvysfuqW7Y0KgfF7Na9j/Hic2/m7j990UgUbH0AGxA9kqItffaN6ZBX1i+kYvz4VrhS/Nc8mPF6s7ZaKoPi9vprIvR7iZ4bmlTvz9x4/TT7s+gMpED+QoT5+y4b4WVoZ20dqKX4DZ+HXm5nhkFhY/LhxRfxYXppvND0TPy+P4fEj7ybPOpociB/cAcQPhNBls2KL+ihtip+VmPb1iQLi9xL5ZtyryDenkszuPXzm4WxE7NKV3z9/5ZdTA29dd4X4WdqrWTP39NJdN4gfSIH4gRRj83N6UVr0ba5qPFJZtOLinY+fZ0BH3laHp2REVYbKOS9zbs4JjZ9RxI/lp/lfE7/SHS6IH0iB+IFIXbW3MKMtjyLXsiEq4fHrxkrTgRe/jkpjTZ7jL/VCbDTjIz6v7fjZjNTGj6zbrPzcA8QPpED8QKSk2Ns3rHh0SmynPKHxe1k6gfocv57/5mxu5+1p6YCMS+OXB8dvci5+Wkb8NOIHEiF+IMZjNqJCVnySGFd8vzdTRkKVQuMXu8+/tvFz/1HTJ92U/6NHKqxVUbxfHT/6qnLv3N8T8QMpED+Q4rHDzWCHCCXuXZUDvUfGQO09U6XQ+A1SZ9VWjp/dy1e26JSetD0aJmtlZy6Pnx/CRro5fn4dvxG/yXfiN3WOED+QAvEDIQYd95NEzs6buzBLTuV6KkZVQuNX/gizHL9EVS4x4+MVg16yjrfuo0T71Hb8bJHkxk8jfiAQ4gdCdOw9kzZTLzYq81O5MlsrX1j87Bu/ESvFb8vnL8j1Nl8pNkuVJ6Mfix+PG52Pn9ex9uPHnAgjfiAF4gdCzBVb24Ml0dYW0f5th477LV0vdcyJguPn3tVSjp+u+nO4iWrSbS9+3k4Gr1DTn47ftI4mlxe/CeIH8iB+8J+9+/tREwgCOJ5J1hdzoKgYry2iJaupVtqHC94l9///XYVBmMVZ9jjtj71mPn3ouF3O9OkbOFBfFIquMqZYLPPED+KmJEtcXEDtsyIYqqHxI4emW9DGj2a9go6lstDjNMXhNCh+Ty8vUBoSP9rM8fiZr39z/JxY/OQTXoT3JH7CF/sTfXKLvvQt0O2dJXlTkthM2P3xM5+m6MQvohabMmXSpzQO5rQ+GRC/F1vknmwzbebYA3TsNQvT7fHbSvzE/0biJ7wR1v3QS3hsqzE/qBRQ0Tz5d6K6wG+JH0bqHOBYx48OPFs2V3R2SPNNFEJrWq5mCxgQvy+lVwBr/IBmevgdN3PdMzs/4hegBFeTwKZ+x2oCIf4ZiZ/wyUSryniVG/e+xEtA6SUqoWpqhiJduyd+EzUOABnxe2QPGKJPQRFPFzPgzqrYw7vi9zQgfl+Gx29kfQ3k9viNerGzTyJf6id8JvETHpkqlJ4t3cG1tPnyos9wJX9v/PKMaJpwSzupjMTApJdUokdMwNvxezLjdyz/QM+M8atGXOWCq+9TuE4K/XNN4idEQ+In/BL3f4Fe1kZsEp/0HjpuiF+q3ikHhl8ZHRC/l6Zn7GyPnfnhiNMAyVtJuTd+CXCBxE98UBI/4RVKUgFd2LQd1K7b98HiR2U7UvBsM5byPfGjEnG3x48S1yXxEx+XxE94ZTVWFwF0rFVdN7uPFb8jxa+aAewzbX6BAUZ/Kn79z7hL/MTHJfETfllq+1XPKa6Owe4jxe+1/YXeE05HQPb5Bach8QvebMrfiF+Cto5n4kcoKcntnuLfkfgJ70QKHaArV2gBVjfEL9pcwWppat3mSvvWq1Ydv1UDSgPid6xg/I4IkH1+wWlI/BJ2+wlzW/xoF0PxG7pfnvMTvpD4Cd9srJc9U4UKsHp3/LiwOu5UP+pwrqIVgt1K9YkA3hU/HrxXQLfE7+3LiTfGj9YYiZ/4uCR+wje5QnoOJn1ZXYGNPX6zTbo34zdxxQ9Ltajjt6CAMffHj3p2PH7pBI/mLxS/L4Pil7AnD5i/ET++P9iW2mMlfsIXEj/hGTwDY/F5VBcbsOLxW8ZVyB7N+MWO+O1UqWgecs/pIOa3xY+d7X2548xvwJ0kt8aPCse548d3SPyELyR+wjOFasRAcnUxBiuK31JVirFCu0v8Yp2d66UMbCLsYtjEb5X1hfb++L3QZU+Kn30eHr9khBLXqd+N8XPc7zI0fvQWEj/hC4mf8Mtcq9YCWplyn/pR/AplSi/xi1TjABafdV3KJn7wue+9/nL8nmhzP2ofbCk1zF+JH1/cmkdL/IQvJH7CL3UwDqoy3sPFVFWwgHoGHMUvUB3nS/ygbeoOuOCSRYof5P3PFS5buHu8bOwB3oxf0zMcj8dnCp4xv1L8cNkdP6wNaqcELG6OnyOo1vgl/V/kLvETvpD4Ca/UlZsudffezrOqTHQdMo7iFyqDPmya+KWqlgG3qVM7A4oflgsPdLjpOT/sWRO/EgWPz1RKty0lj0bmvvglwDnjR1uM95D4CV9I/IRPQn3JyUahz4ACVTdph3+vgaH4Yb5QVgR7gCZ+9aE6DYGJm29SAjN+exxVuoc+98fvtRofoJ7LsZxpvQ4hbe6XjGpQChx3fN4YPzqR43j8+A81r3tK/IQvJH7CJ6mqRDjRNc5ZpipT2Ou6LBzFL64jt1sDauI3eywtgZvjBqUXUKL4tV8vOJ5Aj1vj91yqy/ZajQ/AZ9ry/Hx8fganhHrHXpnuix/YUPz4j7DukfgJX0j8hEdi+k71ucbyhABtCMtph1MMXNH8w0QfYupVG78+U63QFJARP1hrVdEbsLPHb5OWYhx5/BCLn2t+roDLdlRL2Gvmlvi5cjU0fvQDJH7CFxI/4Y9pHZsQKpsqHCFOdKfKfoxjAF1NNk97YJzxWxWde0gpfmihFUpDsKH4WTnjh2Vzx4+2vEK/gLdu1FO/W+NHKxyPH18zr3tK/IQvJH7CG5HqlC1V2dxYPhh79Bo69gdVO8ygyx2/IFNIB4AofrU1/btNN36LXZqC4a/EL7GULuBr6Mb4Je+MH79MGkj8hH8kfsIX0dUdnuEJ2xfo5n4UVKjKeAUE23dxDqHDFb/FSdWyCTQofig8N1WdANPED7s3ZqHrjd/rm/F7oJk2c3TaZ9aEisiSdUf8wMYev63jAImf8IXET3hiqihrfFlNoTbT/CbMVJEsAlN//NZpG8w5XLD4wardVYTAHDDLZ63QwPh9ev1a9wwj97UacZVmWscRJ4bSx2OSjGz5uzF+9AaMPX78fYnET/hC4if8ECs6wTNsVC2Fxmd2gXNXH5kXChULME3j0iNcmeFm1tE2fqTdqHdgmEebPNWKWEJ3Ymvo+9evX3/g9PAVR5of2PyAE4flc1zfJNvkajkxXHYY+EVUWiDbBouf4zJpsi3J99gKP0j8hB/O9MABCdO2fSS+usD52B4ZaIV0Gm+i9R641Xy9iKYr4+OzdQyE4mfYtVvnADCronfKmjVX/JZ8DT30x4+H8AeuciNX+/raGIzc+BF9T/mNiD1+YCFf4i48IvETfoj4bZwYM1SAKVUoW0Jln9Hnaj6yJmlCa1DaKHRYQwfFj0zGCkV0nJU+5fg/0Vk2Pp8Op57PEsWeAWLBY/OA+G0DsEl+U/xGCDqc8RtJ/MRHIPETnjjgL/ZMsWLtQ/uzQtkeSjnOOaB1ptwoR2fLI3w8fmif09OFc2WTpfl0DrWZ6iiga0j8fnTjBxasU1xyf/z6rnry+LEDGImf8IrET3hionQEHZGqxXBlntFHVC+7H4E9y7VyoZ+3sD6/x+OHAq1SqF3lVZ/TXbQC01iZIujCnj00kzN+yBm/bQAOQXJ3/OxXPV3xSyR+4kOQ+AlfxBO4slGl7BEYrF8BKFclY89+c9KK4zmKeTja+DFh3gQubaqXHYpdMAcuVYYUuIfvTeS+lZrFaqZ1nGkzUxWEpY9LtvfFz34R0xE/14MOW+PnC/FPSfyE1wqlihVYzMf0u7SYFyYMdnGRpofD6XQ6n8/jjjM4sPgxG1VWLw6Wrh0tHYMDxQ9nFj+XJICBgsQ4apgAWvTaiR0ghOckfsJnaQB2YWo86qBD+F3yQymHu4TTCyykgzt+IIT4UyR+4n8whw8KI8dmiZ8Qf5rET4h/6CdGjs8g8RPij5L4CfGLfTtGYRiGAShKrtE5Y4cMXU1y/1M1CTSEQkbLAr03CV3gYxuPc0bufQ7iB5HED0ZqrV3xa7vbvk1AL+IH4zzH79wDvYgfjPMcv7f4QU/iB+M8x28TP+hJ/GCkrbX5N//Fb5uAXsQPRprv8bsFbzn2QC/iByO95uWa23o77e17oBvxgyzWdXXVCTHED7IQPwgjfpCF+EEY8YMsxA/CiB9ksYkfRBE/SOK1x8/3BoghfpCF+EEY8YMkjpPfZwIiiB9ksXjygyjiB0BB4gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHQDniB0A54gdAOeIHfNmrAwEAAAAAQf7Wg1wSwY78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfQOzaQarDIBSG0YgDZwZ0It1A97/D99pOGwpNbAL3nBU4+/jxEo74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQjvgBEI74ARCO+AEQzmHxG7WXkgFgqlJ6HWmH4+LX+poB4EfW3tIOR8Tv/ipf6W2kBQAmSqP18urfPX1rf/zu/fmEsQDAj4zn7Po2f/vjVx+bry0A8FPtsf9q+mhC/EbJuRh9AJzg1aD0wfHxqzmvVh8AJ2nrh/E3I349574AwGkeJUqbJsTvVv57uwDAiWrOJW2YEb+Ss98+AE42Nus3IX437QPgCjbqNyV+XfsAuITx9t9vRvyq9gFwEePNzeeM+A23LgD8sXMHJxLDMABFY3TwLYb4kg7Sf4dLAgEzsMxJoIH3mvgIyS7jnsjah4T4dW8cAKhjfq79MuK3x9gAoIwRe1tkxO+K8K8LAIUcEVdbJMRvRt8AoJC+XnxmxO9y6QlAMec/o9+3+Bn8APhdy+iXEr9h4wdANUeM9kqI3+HUE4B6RhztkRK/6Y0fAPXMmO2REj/nLgAUdMZoj4z4nREbAJTz/nGWEb/drScAFfXY2+J7/Kz8APh179IvI37dQwcAKjqit1tK/Ny7AFDRmRi/iLYBQDl3oW4Z8XPsCUBNf+zVgQAAAACAIH/rQS6J5AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8SeHexICkJRGD4uzwIBJaTQhLCieP8nnJbSFo2mO5NMppK630LKIt7o6l8gxMeR+AkhhPg4Ej8hhBAf57/Hb0IrWo8Dp7v2LnQ4mzRudM7hn+mDxq2uvucYRvy1MQQc/TjRqYjN04QJQggh3jN+XTIddjMtDgpHfLOkmc4DCtWES47sccPrTY+oG/glR4PqoTdDs5kBKM446UzA4hlPBpx4csCZocW9TNe8QYEQQog3jZ8m0wAgzFVimiuL6kniW2AuNBcTDK4ppgmATa1hzcjGIrMx4SdaLRLzslhobkKT7BmYMuNFj82jpu3Eoep3ifN+s+6Szn95AMrsHCpNPps3CBBCCPGm8YPPzD1QeJRRRZq2cv5RqHASSYtLXak7iq1xjZ8Ki0SLNWalrviRZaNAM5sF6bHyZI9lY8JZzMwj4JlNI9Otrb+BSu2lzNzNqBI3GZG7CCGEEG8WPwxlqV8/VopqfAHQa61o9Bf/ap8G+ryXrq0iLvnaulHv9vhpLNQ2LjDgd4a4mJmWxUOz1CQ2mTY09crSCKiGxBzhmdBQe/zKJSwGcrZ2rl87jmNk9l/L+gVt73JXJH5CCPHW8cMz0Vye+QVuEuBIt/ZsxoliwdnD2rpjcHAbP0WNe/dnfmv8xuaIbqh56nhk8TIZ8vGK3wCg88f4PeqEYdpm9R02iapWVqFyrx8zQ300cwYic1f/y8/laiCEEOIPe3fUIykKhWH4cPldIIiECCaGK+T//8Jtj1rStr3j7O5FzfZ5khlrqrrsyty8QYR6z/jRopdjYq6g8FFzVqwF7GqiCYjnHN9yOUGBp4sBWBMY1XfxK4yjtD0oq+5J96YPFmU9LFv8Um2q3SNzm2o4VQQ6aEMBeauXqjBf43f+dMZMu56L1qGM50tnODWq4icj/3/MtB5k1CeEEG8bP6bRysSG/cHCFdzFgnppVERJt/Fj9/Gre217IqBs+NVfsji5LX4RRdHOFRguj6EdJ4taLhrqgLBfzR2M+2X8ZvAlYMt/E//KZgwbgLD9VCUaO0+riExCCCHeOH63Sx16xNR1nBszY2dchf1STv8ofveXPV9lqo/i122zk3Y9pC1+Y8VEuww4omkPzxD4OuT+ctSJdilvz3mclVz2xgPZbgo/0sSznSd+20xjolDA4TQ9sUBqAib+Ncp6WewnhBBvF79gVsO38csYHCpRKIHSskukrKOWAlDv4zcOL8vfxm/W5mn8jje2c37nbag9AEcOmOk1iEsFgbMJZEdstKjpmNoczvjd4jgPKH1vYfu+gDQQ93tkLX0SKmpBDSSEEOI942ex0vzgwhKRQ+U/RIoaSdFnBrZgvo1fxIv5HL+sV/WIX0T/LH6jZmU7wbTHj7r9zAEcPw1LZ/ycrcSGijLsD2r36mhxr/iZ+UNBnDeVH3HJ+GN6cKPJrEfyNts+USNNgB0XDUwy6BNCiPeM32St5SHTlK8mHkT1e/xSv0kci2voNEwP+138KvsSv91vx8+hVTl+5+4rS0UFnKoIZ/wai0UJRGPZ7tqJUfEF0J5+Med3jR+NHGK3UIObiok+mII6kBBCiDeM3ypC0y1u0THyw0Y5a77EL5WiRmC4j58lVj/Hb3SH5Tfjl8Iqw/Jx4PgtyRnA7KM4wPGOo0PaO5ZMaEtdRqJhG5htsXOGfjt+ZK0ijUiNYIEaiLkMWLn2KYQQ7x0/Z1pu75fdVjtEhToMQ4Xq0Dfxaxa8aein8bt4Gr+Wfp2H4zcBOJYaDAlwW8mK4o7xhzhpT+yIX8MB3MSKUjdo4wdrK6q1wHZJ+HP8TAZQzYH/mQ0JIYR43/h5tLgPCQetULksd/FTPN/XAe5x/JbamDh+E/zj+HUW8NTEryvVbk/0ho74eeR9EDfyM61l3ADdyJbtxAAfazk18Tvx2de+6X0z7uQrAF3Q0gCqVySEEOJt41fjIe9pGUIIBiWE7u/i12+3TVpMj+M3oqE5fhbzw/gFC8AQs3U2JdMp0St+FnGL3823MWRc7R+60PdQlPLwSlV8OkPhBKNMjrRt0djzKn4hhBBvGz992eqSnXN+OWfcxW8sMMc+nk/jR24VkNfDwvGr6J7GD5jcK2KGLo74LYA74jej0sl3ZOuHggIUlLraT13p3nXOL/I+3JVvOeXo27jQDRWzjPyEEOKN45fNwd7Fr9Z6Gz+NfD54Gj/+WliH/KpKB6iH8SMzukOFd7vlEj+PfN67UpuPPByF03BAV3RzZmTqcOW/xs+BT6vli4uEEOIPj1/jEj8Xvr/sOeMIliuIj+PXoz/jN3S8XXR03ZDoCdzQl/hZ9Gf8+ptxrUEkYOScse3HulqA+lLweh01JQ+fUgXZnr7Gr7+SK55CCPHu8cvmkM/4LQaosN/GbyhnVjyKe7jInQvkUPatwygUhIgS6JF2M9Cyu8avA9wZv2Yyz6EoPpaaCBiplpHYEbNkz5OFgqNgI06k0k388AUJIYR42/i5eDfnZ7QtWJVeofB2J9f4jRV1pENGVQ/jV2HIYVW2hFpSFjBP4zdc5vyma/w0dLvIvSBcdnDLCMTxm2Hp86o+lWHT3vOjfRzQnCtqzoCzrKCuB08boI+NXuInhBBvHD9XK3nk692eGh+2/cAU2DV+KaN0dOCGpc/xS8tLarMFlNGh8jJ1p4GsiJJ+1a/r538XP3dWNmyvT8SWgmU9WOhjnZ+FVdtrgNuanpEHImeb9tEM/ZrzG9Ca7lcNjhI/IYR43/jZAns352d6M6Tjhpfivb+O/BYLBGrMgH70rQ4DCvKAvOcIdqE9t92eDcz/In7XvT2b+z17TtVQYZcjV8oic7UMarNF5xQ/70/tEV/xSwOzmNaDk/gJIcQfFz9AJ/Kw4XBzt+cx50ejesWvq4ChTzyg04P4afQRBXnrUZ5pZyMfAoDpt+KnMV3iN3+KXyqvrLr9Y565UhllOIeHzAPc5NOEud3erJ3zk/gJIcQfFr8K9A/W+e3xaza2NgXwdNED2X0fvwHotiyMNAF1XuiWBfLz+FmbAfMpfqSIvSb7PL9jmwo0QN/miif5OJAzMWUsmPVnzgrcL+PnTcNL/IQQ4k3jlwo8tfFb1Fhh7uKnChJP9HFPIni4dOWBEm7j13VdsEDi9+q9nijVWj196Pv+428diXXQz+OnAWT1KX6rbuicARydOn6nqv4yVlvseFz1dKa3AIoexlgB2MnwmHFGpi1+IwoRyd2eQgjx58aP4kxt/BJWy038CmCJOAxbDOxIN4Zautv41XM53pZPGqMtuNDEDDx9z8exjZ8LwRF9iV/EKlNDw3Lrbi9UToikKlbWKFoFzR+w+GM47KEB2O/ipz+R+AkhxLvGjzUjP52znukmflOeOqJYq91eNnRvCXQbv5hztj5tO1PTYRlm432M/S7Qai6VHvh+e7NVyB/6jhrJD9SqtQ34tBBNxcaQ6NR5zSsBu7omM0zB2t7dx69c5/wKCSGEeOf4/edSon/MoDp6YphH+m+lb59U9IUaZeNOIYSQ+P1HjHwPkBBC/J9J/IQQQvw4Ej8hhBA/jsRPCCHEjyPxE0II8eNI/IQQQvw4Ej8hhBA/jsRPCCHEjyPxE0II8eNI/IQQQvw4Ej8hhBA/jsTvL/bqQAAAAABAkL/1IJdEAOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35EXt1IAAAAAAgyN96kEsigB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/iL06EAAAAAAQ5G89yCURsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOzID4Ad+QGwIz8AduQHxJ7d6zgOw0AAtliIDaFCaQLX6qVC7/9sd4fD/strySxER/MBu0UKYhIxHtgBWA7KDwAAloPyAwCA5aD8AABgOSg/AABYDsoPAACWY6H8XHxwh0d053M09AkoJ3l1KdP5MVgyf28GggLAIVdqEn9IUi3uTuXnAncL7mSOgj4BVVlDpV+PwZ75e9MpoP4ADlD1HSrdpvwiM4fnvp3an4GZo3LOMXWCIiKp0KsrSUTK2THYMX9vBoMCQEP1nepNyi8yh33rtAfmqJ3Tpk+QRRKtIYnk42OwUCTW9qY7KNoPoIWS75boDuUXB7/skTnq5rTpExSRTKvIB/d+0eq1e/7eNNwiEIAFJH6AkP3yc8xx+OLgNHPa9Alope4jytJaL2f3yj1/b/qD4nc/AEX3/SVkvvwCh21Q4NB+UUOfoC7zzPO/JLX9yVg1f2+a7pEJYK7kByXr5eeY923QzuyacxT0CUiEPoQX/f+ZCDWOwc7PZ/b2ptOOWz+Ar6ofVo2XX+SwDQscW3M09AmypPfie13h0/tLkn8cg+l7lvl70ymYexQLMBX5C8h2+T34uQ178qM1R0OfIEmhf8Iif0RFUusY7Jq/NwNBAeBd9RdU2+XHvF96LNSao6FPIEKrEdm+sfgQ0dLeDAQFgDfOX+KMl992AbNujh7Kr1l+xi/a8/fmwE1iwR92zrU3dRwIw0k/VBbUiZ2EOBcpQZyoiAoKVKX8/3+2Mx47zo3ScrZ75dUe24kd443DPJmxy11/jw63we9whx/pDr8/U8Edfn3d4XfXXT+l99vg936HH+nH4XfDit9I7vx03eWqcf31jyN9e9x3z29Cd/jddddPqbkNfs0dfle11mkQ/dM8v8NNne6br1x1eH+6hz3/qQP+hw7rrrv+Hj3dBr+nO/ymtGwlPbFL8NTr+VVXyeWE5E/A7/1toH2/vpnPD6a4par9qsGs/ywMPnmLV10Ttmru8PuHDvgfOqy77vp79HhZ+/0nlf9n+ElZ1/ViIcc1LzOrV6+e1ej4naGIep1N6PUn4Pc4H+hpDD+LqpOm32o+f6OsoxN1ZgkKWDva8mHkS1o9Qqv24LsYDG6Bn5SLhc4hvVk/Dz85Ke8G/QT8Mll5F5VFkBTedQUhtQrlhdZRknp/tpLka+0e2tJ+C+WbtMek+G4AKA48pzDJJlulMoIbKOOpujjxsUVOMaSi8Ci3dxtyK/nJzfDzfDD0NCmoAj+1Si5emP7tfx+6lqF5wjIvheJVxTL4LfjtYbLv8Btr4dg1srf1bnZ+eQEEviw8OZsJbH1OLfzOA90Ivwbw40qT8FuhTObgd1hpnQBsmG+e5vMteX4bYBbCb7WxWhH84NyEmuGI5pPa/LznJ+tfqIW3+PWrhxL+/PzM3eESDkN7zeLjY7GMyBw/k5Yy/kn4yXo2qXoxAsjy9eP1OW+P/xL4FZyN4SdLUqY4GBPVYisuu+peJ1lgcr+1WgmJKjhTa+/PUWU6Khj/Uvvm1LTFee8Jeztqed6BCs0IeUcSvNntvWJ79G3F9tjViBlRUCWSK8ZE4YbN+AieIapkSRjmTGI51XcuJAXQQM9OSXe1KPmaqM80rnwlXE9MQnpxjtngscqpx0x3JFmL51Y05wELvb9ZGZPtE1Yy+wwVJK+STobTESsH75zfgt9ez/t/Dn51LX8Lfs6MYWExJuMLPFSzWQXlDyivdxZwr3A00Mst8Gs2c9TbGxSoNAG/joN36MBv3tMJiefClZvDav7oEGThB6Ac6X04ptOkNt/Z9/JN+JGvJ38ZIQNdjXG0d0VrFWYgQUUzgbslHqUORB/pj8FvMbsoOWh5NoOxUPlL4FcylRi5k1ygGPNzVsVKBa39Fk6KdS7wgZJD+EWMFOubzeTAOndQmMVZz1b7xWeNYsZ9z/T5Nadt5ZC3WnVrNnP9QohQPGHhzVX5mY+whHpd8XDa+Mf51l25MqIOrCLOhVKMpLhM0vZ2BIqVCSn2rBQbqCTkkAA8hcIzmBDhRGZoFujD0E0AK/Oukt6bSS5ZNYJfKGXJOMBBMEiwK85aJUDYrIVf0VpsUhSbUsImlFzkGPNvhV+BoK9oOFggVQlTQihK8LamIM4qSH3W6jvw25tn5j8GPzBDvwW/hSYe/AMTSgeX4ZfWubeczdI+/BYiwCxZ5jfB7w0oBQ6fca3esNRchZ/jCgpA9wjZseeavQEIEX5vT4eH/bHpwG+rXUyDxe32/YZY5s94foQ8nIAF8k8O4Afiblos/CTS5bzD4+cu/PBs+HPwq+WkdGjcqfjQWD5jQrD5YfiNjJfqGBwyMAn6FkpgUM4bKXU2jsywg5/RGhUyHTkVopDM9VJUJSvstUgAVXVtNdHBDzn3JhqFxoVKvuqWPGzmW/NpT/P3LvwQhVsNvwbcPwc/PLu3AVN/c3qAC1dY/TARNt04+MVAvFLm4MlVgd+34YK1CodzEODtDC3lEDlw5yANkoSrJMkZT5K1vulKBNSCQypE4foYSHVBV8IEqHQIv1wpwIYyqTRUqXACMmzi4OeoWOiLcTJoIFWpJRgvnaofgF/FEiQgp5OBlBy5HST4eCX4wISYeO4u6+FJGPC0LrOPtP/PwW/xO/ADh09iJ7rkSXx1n4Zf/KJ11mHQ3MGvms1CYw9vgp9hnabfGzFuM4ZfA4ImT5A9Ta75EUUhawXdHjdPDbY+YgfHbQd+2/mKWmH1NNveVz0df/7v/Ah5tlh7Y/h9WDO7s/CLMCSd+16AOJQEvzCO43C5g4r1D8Fv8NDJ7uPYrVji21QMDV5mjoo/Dr+QichHZZylbpAKBhIpUaDNURmx7VP4cVUkWoJ1omZxgIapMJyK2ihloK1n0ZrtMi+tu+CCeWmpGF0xapSw0lhkZfU5BsFpe3+n5evTVufNFfhlpw2kh9PWhwZY6QNAEaOr7FP4XfJ6Is5CX6sX/Qwo7JmHoWQlFC38Ki8JIhZWzCmgD8BZCdJUJmkKtyFNI+NWiijrqzPHvMAWKr0W9nTwWw/gJ5giFRTBljkkcbe7aPhk8fBPgF8RBCnjQYAfmsP94SoEdd63RvArA62Q7hcX3gV9yr4HpN8dfr1XeGvLpLZb9awe9v/ysgP4pb3YFsHP5zAxs7MX6Qtfb4HfGxCP2Adwo/Jm3nxtw8sTiTy/4xxT0B7Z5lYF50fd5Yn6tOuAEPzcaM314ZT3937bet/tnh/RT5ripOd3DuiAz1DCzE9kG3wQ/GL6Hp2hxc/Djx6iafgFMIRlO5hQl34cfn7J+Hpi5S8QLCwECwg0Es3n2po0J5a4C1jusZ70jChIS6UdFk7LUq2Xwi38fIWfjJD1e15kiWFDgt+4kdRuAFOlkWDpFSO69/pfjeMV+NHiYLGFh7mhxg+r0wG/cBanTqfr8EsVC22J+12nT4FcoqSBX8EqDT9gWIUoSq3bnOIL0jDEmAkVeReUmChxgEMgpRgkFAIuXfMKm5TX4NelVsz0h0m34kq+Yl85y38bfi4A7MfMSX0GP+mV9NIWZGmaKg5J8GX47RF6kOx14Q6/XtDUWixdlqY/14JURc+gV6jFPCX4fcw4Wr70BQJu55m4HX4bCH1SRqe+tuFlPqk3jdKtZd/pgPkGt4F+vuHleNoO4bdvD7YX4Ne8dQ+am+E3pl/9qx7CryaUgD7ggND2Ys+he75z8KNGi6l1RScp/yT4Labht4Qh+VS0Y68W9W5XL33duK7D8LU+18967bl+pYtqfZw9f7zs6oW1jtDspV4WVwZKjONZgfI50A5lA5acCSYzLSAQms8R/ETHznMwQQEoVyWTAkuZdSs4R4NPm11Kol/Cw3Vk4IdgNV2EbWdrTMuqwLrJRgXnhd714RxP77LeHzS8DqhmvtX5wxX4bebUojmtTqeDecpPK2hG8jdOV+BHuA8LrVSJDPN24EQZCnuiBvCL+BrgV3GEn6tPQTlLMEMOwfSlUvQU2KacicwtOq7tviXByjIMciesicy+G87AverCb81Ud5U4oXMs6pzzfwB+tGkKY76+YCIGKQ5J0IOfIJKbNT8ZBgyBl5RR6NZRJ3SRfZjuqXiHnzNixniR00cd9vvfCQHnKrKWdsXPwu8c1rPFErAZQs1t8GsIeuZo4+B3dc3vZDVH2YNHaHKkEGhzsh7f4TRfHQz8NtvtFmC41YLXZUix7Ry6H8DvqbE6TsGPLmomD4LvwU8uhvST4w0vS0Ce9ahqOBa08SUyluv19TU28HOuYF8uru0Ofh9+szH8RvgVr68IP272v9QZAfGVjuGxic5m4ET18KW7binsZdG1r8VaAdb6Eq0RV0y1Jynk9knYM7RGTeSSxSxuSVDhKhayr5QoNLnmDwZa+Mk2lCmt5S813wzzphut9fAzOCPNstBlHeB5bg/288fra35YPFLB3+LmMNLqhJHPq2t+A0ltoRXryfrZSgB3BIOkZDxHJQPPj1cAP5k7+Dmgxg40icdZ6SRY4MLFGeQ6VJhxt7TKccYq5nYvRTSPToWDH2TCayXMB9tgAZW9nnCqRSmJX1zwPOvALzOrgmkpuAyIxokXwlFS0Ozm9hI7uYmJgCud9uBnVxx5OyytAl3BCCW+Cj8CHsGPDu7ws9bPGS93JKfW/Gy4LerAL6tnEBLlYK92z9DuFvg1GndEO6If8fA6/Jye0CfsX0MLgO+n0ztcfnzEi7cPF9f8LB6/E/YMKELrgNdQq9s8P9rn4kmi3wX4CYBJaDyqJZSFnpBdr5mFH1Hk2VXYcw54UuPkt+C3MMECKCyG8HPunlOCn/j8cUbc0WDOH3g0S4CU1DiAc2vP30HDxQLSF7Rn0ORj+bqD9OrXokpTsricstzunI9KpsI4MYoSppLP4JcpA7+AxZL5XLbmKfAKlkdKxaXSWlOs1MHPmdCQldaSp1Qg+E02IiBK6zolVD0p8t4O34Tfm9kX08ALYPsDEA2+eh6uwU8MJIGguc8V3WHKSjNgn1xogRmlig/gl5QVi1SM8COPb22J53CY5XQjfJla5kXG7VNmzU5YFvLY3H7Iq7YL2pa0DgLJ0iAoWRwEXc8vZdztvGUsc28kRkJFrQo8buOTawE5/Jda+OGZ0rwyKUW7fyqgV2ezq6JL4hZ+mRJqAL/psCeWk/U6UpL+n1Jo81X4Ee4IfvbwDj+6uCZT1kVh/Qn8xGzmd+DnVbsZenwBZh/ejRte2iLh5M2dcfB7Ar1BhoJsiD4I+wyJoz29wx6KR73sB6Uu/Jzn1y4PDpC73/b06LDXY6ylX0Mx1xvhVwP9kHeOfosJz4/PrI9+jgh+5AxOwo9DiU//Tae07KP+bobfAnNMsbN6DL/dcAQLop4gZNeQpWA3dprSgtBGGQfqFWB2iYtLqsIRr69/LVIWdp0ILui9mzEe9JoJbTNL0ZXSdr7UMS9B8JMCd3uGbG1NcOFF8Aml66yQ0QB+drmuMqArlPL68Bs3ItCqDGvElagnag9vdmP4Fb6/Wfk++Ha+D/Dz/cN86/tUdVphj+8Q9Xjsdg1t52++t1+1cmsM+8thT7fzwow/7dC6UmLtpkKVA/hlFcAvpDU/DYjU8yMUEMqyhvCmYccrt/+kwLC2rXVRUENB4cPtlDmJEy2JoYM1P5oIKZgqIwp3FqPApmJOcbe24KzM9CMVGfj5nHb8pJpuoa6ocCevHyV0McAx0uAuLPxiFSiRgHSKbcqSo7tXDOGXa7yXak3wK8XX4dcY2O1d3vzr4SflQqvGN2TSLfBbOOiRz0fRz17YUy/1VfwVhIEq1JLgR56HMUvLW+Dntrc0m40uIEG+/gsvh8cVBW9aHSxyqGDg53TS3W/7nY3VTGhvK0f0m2Zf8I2wJyBvgf/ayCeUR/ArdvpP/UJkAUUHn8fwo2VZfDCw6iL9HPtuD5dTVhMBJ4Lm52FYNcxzZMYaKlLnGL4iEvHkea0dQFxQy/PUxUCfjcsnlsvoy/CTLOrCT4nKT7rK/BytdVKWo43tCVquHJCnuZUg/NYWAKVwZr6oAmRDVXgD+CmWmqEIw7ekB79xI1IgKl0DJzIgxuc6rPZj+G3nU9KeXUM+4CO8/TV9+7hfbXzvsLWar9rigUYffga/iMk+/PwKaBTYqQhLzqo+/EopOSXk+SUs7Ucn8c44nygFJBhugdDvcfAjVTF5ajCFMFq3gBt5boAEvygtLPwSRl6aCvTMWddTekY+46FR2YdfYqZQspLgh+yjh4WF7TpwZdw8vY4ckWsJWWDglyWVp/p7fMwOoQK4l2U5S7MMSjpmHnOGd/Fb8CM1e+sBmkLz7w971rOR6m8bsUs/0zG14QUKTh8EP9pwkVMzeQv8KO5JEKRC8w34PR0nvucXA5dEWbq62bYCpI21n49FDJ2mX499wbc9P/mLtGjX/eqJ3Z7PeJs53ezL8HOqY+8i/Sz7boefZZ8jYT0Bv9F3NEj4cgkVoSWbdewIe/7Z7pFZh9CQ+BjisiA33Psq/Dgruu5JhpanqxjPoaKiu9xU0LJMxRF5WGCRLpXCehHacodekoO/kJNVHcMv7nGtZNEQfuNG3tr39OUFU2s89K4Ih0ffIfPkIeG22xMGNSDAsYWFapNgjXdEBuIlA0QeoacHwin1C2dQ7w2mnwVguXCOoYOfBJ7kNPgoCbwg116Ng1862sKSAuziBJQzYaLS9DsxTIRasgzNjhW8QSP4kVIhWaDCftiT/LTUTZODecplQBukBvAbr/8mLOjCjzhE843ww61Ua+O5F/QJAhOLyNxhsfBN2FNhE8UzkE79bthz4HJW9Hs2SQ9+/+OfN/vr4Heua2hXLWsQGK0d5guCHy3ivKxpL+Kt8Js3Fn7OFRxrHJg8nrTPp/elODnmHEbwsyuG17WHjgc6Efym6efYd1PY0/h9tbnnBoRD+C3I5wP/78WSQ8Dtn4bfrkbTcP3X7G6HX91Srx8CdXoxdHMKgXCkMfw4OoASE1AA632kpYeM18uDIvsa/GQIUirUciYyYnJiZwXans4ZSfZtvSb4FYJ7WGpNoVAoVnql8j0uyAZfgV+GZvA6/KTKdB6jnfuiNvOO/mDvbHsbxYE4Dn0RWbexeQwGI0EVRYtSZTfpKdl+/292M4yNcV02NH3Y3h1/bYljwIEl5dcZzwzh7+b87r7tR8nud6apCHVkE65H8DtdLnc2Pz/jI9UGfrInE0siVKWRUCSVjMfiJtozZEXqW5EEP5CT4a/Yi+om4adiOIIQRmB1QuIsNZEzFn4UCOMmHggffu48beXCTw+ADYHwq5nuiDS8K8YIfnZI6KqjUlvGiWQMyTsx55dFIMoB1LuIWMLZ8XSBX6/Nc7dnktwAv9Zze6IvdGrOTyD8lJ3zw8WPJ9g+e8K71A3wI3hYt6c2BT0djyeM3TyTq3NN8ANArU5TSQgrmPTbgS5bmNDfXrB5Iqrtdr6x6MPP5jn43lOffsS+W+G3oRk/WFLg54aaPvxwtk9waBmwJMCEwFYGJPjlFCw+pY1l31vgR/SjiWPP7emF3NDRRRjB8muzedHyC8GpayoWdTgf+OvnxmRyJBgWA/sWs+Dn6gr8MG6TJlYiXTiERPCrWKZbNbaMYnSvNbA2pcC96Tk/c0+/PueXmo/G6lbBDO0eoUbL4UDWHYrgt90P8DuP4LdGFPrwCyz8Sih1FiIltyE6VS/HUc5HwyzQWDyscNUMV4DXVjI28EtZhvAruFHmwq+UMqyrgISVGlgCyyYjcQaLacsvlyHAT+UZeTw5quxZow3TPMtws7pOCtd+ZRFN3Gm82f7OTXentXSZzSVsYFcU7ZWMKe3CL4hi6OURBcXE2DcBP+8b2kW8n6/OgIAIP87/7/B7n2jP1kDPBr60E/CjP8AxuNPCL32iRAewD39BAavbAl4wwtOdBXwezPkIfY99lgJRiHKUzliZDDv/trKjQwS3tiOBWjvY3VaDmQ2/7aC/PfgJSz+ffa+s7dkS9WxBa7/AC02MmTjPwsBPkA2FyqDppDpcod9bU2QIbgm1N37Ai022sIff6h1/+PCjbfIHAKBmaRmYEFBUx/vYzxm/Fl2GqlmUsxxbwrKpFkbJCGVpLIWqcKap5KxWY/gVrNItnDUMx/DrWI0eVvzx4MexzwZyxjJ04edvRAaWWYFjXtf+Ur4U7fntQPAD3J1G8NtewhH8zicjCz/c4xGoBz6YcKfDaejwyVXoQUdkoIbxLJYZqnMdzw05KfkAv4ylCL+IcRJrHPgp7Ehs/iV9KBAwtWErwRT8QpnrCi+onFpW/gBuip+x3erhPDvGvXR3gl8IaHMsPwk4K2h9XWgpB37G48+wneai1PCTCYjhspiEHw7UhApUJgXCL64X+L1jqkOih5pOdWh/9m6sNv6rHcEPoJcF7ROHatfpj79+3ZTq8LdN88OkB8/viasJfhjnSWA6TEzO2YFWSEiq8InU2sOeph+fUAs+zBPquMcxp+BnkgfxAy38hGf7Tdp9Yh78EHqafi1hDxHowY+y4aDCXGtdii12o8gDOgt+wcZj382pDhtTG6E1Iz/LKixGHlAF5ls6Db8EXi1WeTDAj8d9KF2DpJ9Z7z2VsReo4c35GXV5iQnwnFFFMQs/AF4JpOQYJZ82uhhxViWBTPp7qZLJ4BKbzvPLYGk0neeXmn7BOHlAr+iMlPPhdwe0Q7zhT2nhd7TpfN6cn9XutLtgYWwsjDR0Su7Dz6pije2x8CNouvBrWEjw01XNXPiVnCWU4Z2O7/8qkqzO7DhTlh/vEH5K+7olveIHKKHFpWmp3iDMR3+E+Hl+CXabtmsXGod1yKRC+AlYIUt7bUke/LBPQ9bAj8rg4DIy8AsjVY+M1xy3jhiJ5vxktcDv3ZLcW/NX++blJPefDxTjAjcnrh7+uh/gV/TP9osqjAYNAIs3wg/zGwaMUJcRzdKtEH5UmgzeY57Cadj/cST4lXUNvzVuidQ6m2x3ylZHF+r2DOsvI/YdX4Af9R0c+Pkyhdk8OM63/Gzci6YI9PjwwxdQbOHHwe+Jr326yWYm/Ohb82b4ebjzvj2tyUv/3pdm63SaBffn/AwhKX7KmIiYSnNPG+r11bxfCwW8Gm7Yaak7G6uo6QKrTMosZ/CvVmP4dZyJhmnxoGZFkHMM5wD4UcYfj8e34FGFl9i4xcik8+DnbWS3wkPvrsV6UgCLDz98s9bwe7wEBD9b01rrtBu03h3dtIdDiCXhL7Y3Y9Uk/HAFtz1iDL+Q1WP4hU2ZxIHKSrzDF6jcgV8kiSywWmaOwaWiOLkOvzRA+HXMESUYehJEnkaXRcjMVC+SrDRnPTL0a+ZUeKmHknbc5PlRQGpmDMjuOfwifUFj+n8sJ92esWQqlrY0XEXdOcacEvwyHIInC/zepbyZzXX3ypvBpAup5fRII7hTPUUGfj/p2X65vi+Lt5Q30zbejrrcWM+Tht9uuwaM7Y9ENl/7oX/VcwuLfhK1qElpfrpsNQDr8ZthIvlPffitz6jHCfiJ4Sx2t9f2tKXMjOfTyodfgrEsnYUfXBRMAL/HabSHci78gk0SvBv8NpPwo3ioTfy91YErLby9531ZF/4C/Da4uWn92PSOThz+O+7W/431FM76tej4+IYdGawUMh9simK0dcV4iWYG3nsyB355kPaxBzkaESXvgoTnuAUOnzJYW6bQdOFnQ94jJpWuae3Cz9/IGn4Vq+l2Z9jjFVO29Vp8+NFMH8Fvv7XwKy9bB5zbO20nXvZjY3KL5ISB8e/RcPh/KCbgR0ef2h7JLfzoFBxoxUmaOTVXGjNIgwM1hqdSdrQnS0h1DQv0ERYT8LOFrVMUl1w22ECSdZFWzEyro/Pi8KoSIiQRtzbzriGZglpcOtcuZRSXAvg08Csly/v9eUlfNBd+SOCCQCwm4ScqLllcZd6sNCKv79FxUWEULg+zfSv8jNE3qvDpDkdFONreslNUUCsE32ep4Rc9UWw+Pa/m9govZDvtegR68Ltg796ZtDt44Shm05VpwfbHLQGPqAX7HCjeZSh5Ddqf7IHQoA78jDz4iSvPOxKvgl9CyPPp58MveLCvFEk4xE8+RIEHv48vbN1Ow29UzmwoIkSC3u8vwC+n7bQdi6KiLh2cPInP+rXIYlbRlJEtDWKfGAdKpR1I5ZIlSt9sCsmq0vq6UtfrpQItyvrLQiKrBz/sZTzhzELAhZ+/ESGGvH6hUxaUOx7asety58GPDMI7gt/dtwPBz9a09l2mNAoJqgJujzoEJoQ2remkVFPwCysWp6MebREJhFQpZYmYwZyQgXG1FIHn9oz6Wil5Z6+fSfNzxNArfRV+IOBZHgL9puf8DN8ozV1H+coa3wg66ZrRUTtQR9Dx2r1yJlam6OlWxnqY7IVozxh3qYNJ+BUszkVAmoZfwRIhebnA783ww8ocfc4Y3dASbI11//M+ooAXhcWUQyrQ33Z6zi/BRqBMVP2PG5Pc7byZX/OFnu/3aEpznh5h0u6EbPO1xk2N4XfGPdc2TJMcngcd3rI7bPUk4YqIp/nqwu8waGfXz368n5gLPwr3NEYgNqfhh1ZQ7qYR3Lc9+r53wSfDj5QEPvysmt7Me2rz0aOT2wpPxoMfnVREreIXoi82qRz37VO/45UDtXXMbKIWZfyRSv2wuJqNHmXLeGZvNmXCZFU6yKOWo4Y1YUniEhbKws/Wj2EsLujjSw9+3kYp9Xa1mfFS9WC3WnhaYUwmLlF2okAh7A6EQMhcOBr42ZrWNq1h98x8vKNCLwQ/XQRtNzy2omFJZCTjwURjPCWsqCHjz55bFHKMbzRnLyQPujguEX4hihIDERIFB1wF07KxujPgJ3qzP4Rl6cHPUYcZB3QGoBzpqt+I2HlAvZ7tJYQxMsfxykXjwtZ5P+0XVjhMLfw5vwh3kbkan4yMIxAtu0Dhh0/Ar+odEOShT2ERpwv8tJvy7Q+zbaGh3/hC+CH7UhNZ0SqCn1Zv6T+0GJd+S54fPsTdPs5dM9D1Rq7dXHMvNR2iUpBmF2en7c7JUXg8QRe0V49bGme37j/1sge2gU6/SXXAcHJjVgrzcl1iNvwIeZDbjkqC1ynNo87p+Gj4tZMPs/W/P6qoCifJXQSzVOaOjyuEc5zza5HVjNWpiUeoQTQdwwfrwb7U2N+DMk1LUwxLcJb8Dn4qjyrJypqNFAW+QhHamtZW3kbmIxqK7UBXnKFfQqWwPBuGCnWukYCuTth/DI7r9WWLz3e/w0c8r13InU0Ql1mijmgMPsLu5enOWIXh6oIDUp2Uxkse6fKYycgwIa5BFAiSZk2OWMmxHdWGf5GUaR+IFLpuT+wJFG7Ga+vldL/fIk2zmBUz4KeQMZG2SlmSInSMJBua0TCyGsFQWLu90k2RVBWcl7DbdNRQopz64vpcerZLUulysNJ7tOHzXpPaTgrShGxTIeMFfvgkmJtvYhZ/JtsdzcAJ+G3Q22mneRz4DdEKT+LV8CObzzzO3Y+bPB129EwiI6hV7YvC17Y7jS5tTvoJeitYsSeL70Sj9yA8XMvz68l6ugY6er0pzw/VktkHsS436FPhl/w1qU88eP9AqexiZt5EMUPVAtpV7av3XZYmQcsWy0p/a/nx3lprqpE8W/vVtO96BLt+vZpCPiPZ+dAMDpiCXh5cQddqjxz7dlmr/SpQFwyARvitT9a5+YJwrTYFQTtjDGKj0s8crwojGVOPzENrbKPi3GT/yTrqhjPra6goXc6lqdAP3KAo4EVXZMkqHstB7m0o1xSYAb8ODqKzR1UT/DxFwe8UycY6uEFxE7yrOJN1SZafGGQpnNRjNWO3Z27yPjK2wO+Gm9gNJT+its3UpjNv1T0u73+5W8ebTVwG8+Fnhc+gtq3J8i5aLyPoeN6dR2vOY/gcRp+5wwDR1c4Z+LD3xoQ7hNO3Bs/n6SrwhNM/H35o7GkAJsGf15yHIE8VB/rM46fD8v/uvkEiihoVuCoi05NBy0qFKvggCdf3RwVKZDFR2OVTdEdl1tIotV5AYkGmJk6iyUq3JxPOuQkNxpLGvH7ByiiKCn+zpvE+GX6cD77xSpXjq911wUepyGYeT38iaRao4fQWt+fb4dcr2Wzatk2S4M2aCT9BP1csqS8pQYs5xznf8msTqtnzFdA383uTvKjg80SH9d8XGDJ/Fn6L/jVa4Pdq+Ln6BPhZbnw1ABKV33Ekgt+/66b95783C/wWLVrg91+G3xei3qs/U8yB5wK/51rgt2jRR2k9RTec6JmG33qBH+mT4Dff+PtKHlAx0eEe5QK/aS3wW7Too7Rb3aTdAj/Sp8BPfDXYiflIFrY1Y+MFfq4W+C1a9FE63wa/8wI/rU+z/IRHPI9BnwxF4YVsOj9z4OjsvFh+nhb4LVr0UTrdBr/TF4efCl4thfcGf5xPlJqEn0+4ud0f8vNeEnPz/FTwdfXnvzczpRb4LfqHvTtYcRyGwQAsaw66CB3cS8jZ9+Tg93+23b1sBpwmdkUnyvT/YAYGihBY9Md2M4Vv0mvhl0KH30MmGjbJw1en5e+g6Mob696MvZ9xD2tffrIxXLXsLUNc18/NQKMA4Dv3rBQ6/LIYDTPJvjotfweLFv7LYn3Qs81a6w1A4xNFl71liOv6uRloFAD+41fCj2OHXxKZXzgUSr46LX8HrHpymLll0A/GovWesY4XVeVmGWIeI0aZm5FGAcC19asUO/zIxGiQiXnrtPwdVC1j/x/att+h7/uenHwWrdSwkDupKHOz6x49AThc8bRDoejhl0QyDckiyVun5e+AVRf+J87D7s1+c/BgdPuzDdRFlfeWIeyJ3fVz0ylj4wfQvr+OZZ9y+PCj3Lz7nL/eX6fl72Dd0s86P1Bi/BPaMPNn86K60o4cL0yizM2OWzQEEAHrYPbFDz/KIjZTp9lEsqPOAX8Hi2o5u/LbXHnrZ83PYE9FdXm+DAGv0S6fm+5GkX0Ae7gMnHky3SH8KIuITTOdmicTkeyoc8zdwaqqZeXfbi2quh4vQ5w4iTA3A40i+wC8n3qpRPcIP0om3Swd1nHxd8BVP0Plw2WI5/q56WS47wN4gmtX9DHdJvyIUn5Ih0dO53U8/B3wUvS3KwufL0Mk189Nd6OIPoADaa1FD676Sl0T0Z3CDwAAgPwQfgAAAAg/AAAAhB8AAHyst4Yf7u8BACCg9Mbwk6+IXxgDAAAfb/qSdMAZfnhgFwDgD3v3juNIDANQUAQDZRLQSoS9gO9/wzUwgdP+TNsauOoSDzQpNwvabozfSB/lBGBBI0c83RK/lrUAwHJqtni6JX7TuScAK8qc8XRL/KK7eAFgPTN7/NgdP0s/AP6218rvjvht2QsALKbnFnuVOKx77ADAarbXr563xG+49wRgNTVH7FbiuHTyAsBaZuYjXnbHz+gHwJ+1Y/C7GL9H2voBsJJtx+B3MX7RHHwCsJKeLQ4ocUb11g+AdYysscPF+M3MVgBgCS1zxhElTmkuPgFYxMxscUiJc4b6AbCEmTnimBInVfUDYAEzs8Y+1+P3T/0A+Lwz7YsSp1VXLwB8WDvWvuvxi5FePADwSSNzxHElLmiZ3X+9APAhW89scUKJK2bNrDZ/AHzAT4PijBLXtMyspj8A3myruWvsuyV+8RiZ2YfxD4C3maNn5njESSUue4yeT3VsMwoA3CjmNmo+9f3puyV+T9voCQBv0scWV5T4JbONWhMAblXraDMuKgEAX0b8APg64gfA1xE/AL6O+AHwdcQPgK8jfgD8b68OBAAAAAAE+VsPckm0Iz8AduQHwI78ANiRHwA78gNgR34A7MgPgB35AbAjPwB25AfAjvwA2JEfADvyA2BHfgDsyA+AHfkBsCM/AHbkB8CO/ADYkR8AO/IDYEd+AOwE685ocur19tAAAAAASUVORK5CYII=",s9={width:1788,height:500},le="CONNECTIVITY_OK";function lt(e){return"number"==typeof e&&Number.isFinite(e)}function lr(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,...r}}function ln(e){return sr({...e,retryCount:0})}async function li(e){let t=Date.now();try{let r=(await n7([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${le}`}],e)).content.trim(),n=r.includes(le);return lr("text",e,{passed:n,durationMs:Date.now()-t,message:n?"":`Unexpected response: ${r}`})}catch(r){return lr("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function lo(e){let t=Date.now();try{return await n7([{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:s8,detail:"high"}}]}],e),lr("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return lr("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function la(e){let t=Date.now();try{var r;let n={screenshot:ot.create(s8,Date.now()),shotSize:s9,shrunkShotToLogicalRatio:1},i=new s6(n),o=null==(r=(await i.locate({prompt:"the main todo input box"},{},e)).element)?void 0:r.center,a=Array.isArray(o)&&2===o.length&<(o[0])&<(o[1]);return lr("aiLocate",e,{passed:a,durationMs:Date.now()-t,message:a?"":`Invalid locate result: ${JSON.stringify({center:o})}`})}catch(r){return lr("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function ls(e){let t,r=ln(e.planningModelConfig),n=ln(e.insightModelConfig),i=ln(e.defaultModelConfig),o=await Promise.all([li(r),lo(n),la(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")}}rq("ai:recorder-markdown",{console:!0});let ll=ik.Ik({locate:iM.describe("The element to be tapped")}),lA=ik.Ik({files:ik.KC([ik.Yj(),ik.YO(ik.Yj())]).describe("File path(s) within the current aiAct call's fileChooserAllowedDir to use whenever a later action triggers a file chooser. fileChooserAllowedDir must be provided for this action. This setting replaces any previously registered file path(s).")});ik.Ik({locate:iM.describe("The element to be right clicked")}),ik.Ik({locate:iM.describe("The element to be double clicked")}),ik.Ik({locate:iM.describe("The element to be hovered")});let lc=ik.Ik({value:ik.KC([ik.Yj(),ik.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:iM.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:ik.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:ik.zM().optional().describe("If true, the keyboard will be dismissed after the input is completed. Do not set it unless the user asks you to do so."),keyboardTypeDelay:ik.ai().finite().nonnegative().optional().describe("Delay in milliseconds between keystrokes when typing. Passed through from device/user configuration. Do not set it unless the user asks you to do so."),inputStrategy:ik.k5(["legacy","sequential","bulk"]).optional().describe('Text input strategy: "legacy" (default) preserves the current platform behavior; "sequential" enters one Unicode code point at a time; "bulk" sends the complete text through one platform input operation when supported and requires keyboardTypeDelay to be omitted or set to 0. Do not set it unless the user asks you to do so.')});ik.Ik({locate:iM.describe("The optional element to click before pressing the key. Omit this when the key should operate on the currently focused element, especially when copying or cutting an existing text selection.").optional(),keyName:ik.Yj().describe("The key to be pressed. Use '+' for key combinations, e.g., 'Control+A', 'Shift+Enter'")}),ik.Ik({scrollType:ik.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:ik.k5(["down","up","right","left"]).default("down").describe('The direction toward the off-screen content to reveal. "down" reveals content below the current viewport, "up" reveals content above, "right" reveals content to the right, and "left" reveals content to the left. This does not describe the movement direction of the content currently visible on the screen. Only effective when scrollType is "singleAction".'),distance:ik.ai().positive().nullable().optional().describe('Positive requested scroll amount in screen-coordinate units. On touch platforms, it controls the length of the swipe gesture used to scroll; on web and desktop platforms, it controls or approximates the wheel scroll delta. Only effective when scrollType is "singleAction".'),locate:iM.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"')}),ik.Ik({from:iM.describe("The position to be dragged"),to:iM.describe("The position to be dropped")}),ik.Ik({locate:iM.describe("The element to be long pressed"),duration:ik.ai().optional().describe("Long press duration in milliseconds")}),ik.Ik({start:iM.optional().describe("Optional starting point of the finger movement. Available in both relative and endpoint forms. If omitted, the center of the page is used."),direction:ik.k5(["up","down","left","right"]).optional().describe("Finger movement direction. Required together with a positive distance for a relative swipe. Omit when using end."),distance:ik.ai().positive().optional().describe("Positive length of the finger movement in pixels. Required together with direction for a relative swipe. Omit when using end."),end:iM.optional().describe("Endpoint of the finger movement. Use for an endpoint swipe, optionally with start. Do not provide direction or distance when using end."),duration:ik.ai().default(300).describe("Duration of the swipe gesture in milliseconds"),repeat:ik.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)")}),ik.Ik({locate:iM.describe("The input field to be cleared").optional()}),ik.Ik({direction:ik.k5(["left","right"]).describe("The direction to move the cursor"),times:ik.ai().int().min(1).default(1).describe("The number of times to move the cursor in the specified direction")}),ik.Ik({locate:iM.optional().describe("The element to pinch on. If not specified, the center of the screen will be used"),direction:ik.k5(["in","out"]).describe('Pinch direction. "in" = pinch fingers together (zoom out / shrink), "out" = spread fingers apart (zoom in / enlarge).'),distance:ik.ai().positive().optional().describe("How far each finger moves in pixels. Defaults to a quarter of the shorter screen dimension."),duration:ik.ai().default(500).optional().describe("Duration of the pinch gesture in milliseconds")});let lu=ik.Ik({timeMs:ik.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),ld=(e,t)=>{let{locatePromptSpec:r,locateResultExampleIndex:n=0,buildActionOutput:i}=t;if(!e.sample||"object"!=typeof e.sample)return;let o=iN(e.paramSchema),a=r?((e,t,r,n)=>{let i={...e},o=n;for(let e of t)i[e]&&"object"==typeof i[e]&&i[e].prompt&&(i[e]={...i[e],[r.resultKey]:r.exampleValues[o%r.exampleValues.length]},o++);return i})(e.sample,o,r,n):e.sample;return i({actionName:e.name,param:a,locateFields:o,locateResultKey:null==r?void 0:r.resultKey})},lp=e=>({name:"Tap",paramSchema:ll,sample:{locate:{prompt:e}}}),lh=e=>({name:"Input",paramSchema:lc,sample:{value:e}});var lf=r(79383);let lm=e=>{var t,r;let n=e.prefix?[e.prefix]:[];if(e.planning&&n.push(`<planning>${e.planning}</planning>`),null==(t=e.updateSubGoals)?void 0:t.length){let t=e.updateSubGoals.map(e=>{let{index:t,status:r,description:n}=e;return` <sub-goal index="${t}" status="${r}">${n}</sub-goal>`}).join("\n");n.push(`<update-plan-content>
|
|
491
|
+
}`),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 s0({inputImgBase64:l,size:s,point:d}):await s_({inputImgBase64:l,size:s,elementsPositionInfo:[{rect:s2(u)}],borderThickness:s3(u),centerPoint:!0});if(null==r?void 0:r.deepDescribe){let e=[{kind:"focused",rect:sf(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;s7("describe: cropping deep context area",e);let o=await oP(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 s0({inputImgBase64:o.imageBase64,size:a,point:{x:d.x-e.rect.left,y:d.y-e.rect.top}}):await s_({inputImgBase64:o.imageBase64,size:a,elementsPositionInfo:[{rect:s2(s)}],borderThickness:s3(s),centerPoint:!0}),p=function(e){let t=Math.max(e.width,e.height);if(!t)return;let{resize:r}=s1,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 oC(A,{sourceSize:a,targetSize: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 n9(h,t)}catch(t){let e=function(e){var t,r;let n=e instanceof Error?e.message:String(e),i=e instanceof nI?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 nI))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+='\\"'}}(ti(i),"description"))?void 0:r.trim();if(o)return{description:o}}(t);if(!e)throw t;return s7("describe: recovered malformed description JSON response"),e}let{content:f}=i;return e4(!f.error,`describe failed: ${f.error}`),e4(f.description,"failed to describe the element"),f}constructor(e,t){s4(this,"contextRetrieverFn",void 0),s4(this,"taskInfo",void 0),e4(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 s8="data:image/png;base64,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",s9={width:1788,height:500},le="CONNECTIVITY_OK";function lt(e){return"number"==typeof e&&Number.isFinite(e)}function lr(e,t,r){let{config:n}=t;return{name:e,intent:n.intent,modelName:n.modelName,modelFamily:n.modelFamily,...r}}function ln(e){return sr({...e,retryCount:0})}async function li(e){let t=Date.now();try{let r=(await n7([{role:"system",content:"Reply with the exact token the user asks for."},{role:"user",content:`Return exactly ${le}`}],e)).content.trim(),n=r.includes(le);return lr("text",e,{passed:n,durationMs:Date.now()-t,message:n?"":`Unexpected response: ${r}`})}catch(r){return lr("text",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function lo(e){let t=Date.now();try{return await n7([{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:s8,detail:"high"}}]}],e),lr("vision",e,{passed:!0,durationMs:Date.now()-t,message:""})}catch(r){return lr("vision",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function la(e){let t=Date.now();try{var r;let n={screenshot:ot.create(s8,Date.now()),shotSize:s9,shrunkShotToLogicalRatio:1},i=new s6(n),o=null==(r=(await i.locate({prompt:"the main todo input box"},{},e)).element)?void 0:r.center,a=Array.isArray(o)&&2===o.length&<(o[0])&<(o[1]);return lr("aiLocate",e,{passed:a,durationMs:Date.now()-t,message:a?"":`Invalid locate result: ${JSON.stringify({center:o})}`})}catch(r){return lr("aiLocate",e,{passed:!1,durationMs:Date.now()-t,message:r instanceof Error?r.message:String(r)})}}async function ls(e){let t,r=ln(e.planningModelConfig),n=ln(e.insightModelConfig),i=ln(e.defaultModelConfig),o=await Promise.all([li(r),lo(n),la(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")}}rq("ai:recorder-markdown",{console:!0});let ll=ik.Ik({locate:iM.describe("The element to be tapped")}),lA=ik.Ik({files:ik.KC([ik.Yj(),ik.YO(ik.Yj())]).describe("File path(s) within the current aiAct call's fileChooserAllowedDir to use whenever a later action triggers a file chooser. fileChooserAllowedDir must be provided for this action. This setting replaces any previously registered file path(s).")});ik.Ik({locate:iM.describe("The element to be right clicked")}),ik.Ik({locate:iM.describe("The element to be double clicked")}),ik.Ik({locate:iM.describe("The element to be hovered")});let lc=ik.Ik({value:ik.KC([ik.Yj(),ik.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:iM.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:ik.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:ik.zM().optional().describe("If true, the keyboard will be dismissed after the input is completed. Do not set it unless the user asks you to do so."),keyboardTypeDelay:ik.ai().finite().nonnegative().optional().describe("Delay in milliseconds between keystrokes when typing. Passed through from device/user configuration. Do not set it unless the user asks you to do so."),inputStrategy:ik.k5(["legacy","sequential","bulk"]).optional().describe('Text input strategy: "legacy" (default) preserves the current platform behavior; "sequential" enters one Unicode code point at a time; "bulk" sends the complete text through one platform input operation when supported and requires keyboardTypeDelay to be omitted or set to 0. Do not set it unless the user asks you to do so.')});ik.Ik({locate:iM.describe("The optional element to click before pressing the key. Omit this when the key should operate on the currently focused element, especially when copying or cutting an existing text selection.").optional(),keyName:ik.Yj().describe("The key to be pressed. Use '+' for key combinations, e.g., 'Control+A', 'Shift+Enter'")}),ik.Ik({scrollType:ik.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:ik.k5(["down","up","right","left"]).default("down").describe('The direction toward the off-screen content to reveal. "down" reveals content below the current viewport, "up" reveals content above, "right" reveals content to the right, and "left" reveals content to the left. This does not describe the movement direction of the content currently visible on the screen. Only effective when scrollType is "singleAction".'),distance:ik.ai().positive().nullable().optional().describe('Positive requested scroll amount in screen-coordinate units. On touch platforms, it controls the length of the swipe gesture used to scroll; on web and desktop platforms, it controls or approximates the wheel scroll delta. Only effective when scrollType is "singleAction".'),locate:iM.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"')}),ik.Ik({from:iM.describe("The position to be dragged"),to:iM.describe("The position to be dropped")}),ik.Ik({locate:iM.describe("The element to be long pressed"),duration:ik.ai().optional().describe("Long press duration in milliseconds")}),ik.Ik({start:iM.optional().describe("Optional starting point of the finger movement. Available in both relative and endpoint forms. If omitted, the center of the page is used."),direction:ik.k5(["up","down","left","right"]).optional().describe("Finger movement direction. Required together with a positive distance for a relative swipe. Omit when using end."),distance:ik.ai().positive().optional().describe("Positive length of the finger movement in pixels. Required together with direction for a relative swipe. Omit when using end."),end:iM.optional().describe("Endpoint of the finger movement. Use for an endpoint swipe, optionally with start. Do not provide direction or distance when using end."),duration:ik.ai().default(300).describe("Duration of the swipe gesture in milliseconds"),repeat:ik.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)")}),ik.Ik({locate:iM.describe("The input field to be cleared").optional()}),ik.Ik({direction:ik.k5(["left","right"]).describe("The direction to move the cursor"),times:ik.ai().int().min(1).default(1).describe("The number of times to move the cursor in the specified direction")}),ik.Ik({locate:iM.optional().describe("The element to pinch on. If not specified, the center of the screen will be used"),direction:ik.k5(["in","out"]).describe('Pinch direction. "in" = pinch fingers together (zoom out / shrink), "out" = spread fingers apart (zoom in / enlarge).'),distance:ik.ai().positive().optional().describe("How far each finger moves in pixels. Defaults to a quarter of the shorter screen dimension."),duration:ik.ai().default(500).optional().describe("Duration of the pinch gesture in milliseconds")});let lu=ik.Ik({timeMs:ik.ai().default(1e3).optional().describe("Sleep duration in milliseconds, defaults to 1000ms (1 second)")}),ld=()=>({name:"Sleep",description:"Wait for a specified duration before continuing. Defaults to 1 second (1000ms) if not specified.",paramSchema:lu,sample:{timeMs:2e3},call:async e=>{let t=(null==e?void 0:e.timeMs)??1e3;rq("device:common-action")(`Sleeping for ${t}ms`),await new Promise(e=>setTimeout(e,t))}}),lp=(e,t)=>{let{locatePromptSpec:r,locateResultExampleIndex:n=0,buildActionOutput:i}=t;if(!e.sample||"object"!=typeof e.sample)return;let o=iN(e.paramSchema),a=r?((e,t,r,n)=>{let i={...e},o=n;for(let e of t)i[e]&&"object"==typeof i[e]&&i[e].prompt&&(i[e]={...i[e],[r.resultKey]:r.exampleValues[o%r.exampleValues.length]},o++);return i})(e.sample,o,r,n):e.sample;return i({actionName:e.name,param:a,locateFields:o,locateResultKey:null==r?void 0:r.resultKey})},lh=e=>({name:"Tap",paramSchema:ll,sample:{locate:{prompt:e}}}),lf=e=>({name:"Input",paramSchema:lc,sample:{value:e}});var lm=r(79383);let lg=e=>{var t,r;let n=e.prefix?[e.prefix]:[];if(e.planning&&n.push(`<planning>${e.planning}</planning>`),null==(t=e.updateSubGoals)?void 0:t.length){let t=e.updateSubGoals.map(e=>{let{index:t,status:r,description:n}=e;return` <sub-goal index="${t}" status="${r}">${n}</sub-goal>`}).join("\n");n.push(`<update-plan-content>
|
|
492
492
|
${t}
|
|
493
493
|
</update-plan-content>`)}if(null==(r=e.markSubGoalsDone)?void 0:r.length){let t=e.markSubGoalsDone.map(e=>` <sub-goal index="${e}" status="finished" />`).join("\n");n.push(`<mark-sub-goal-done>
|
|
494
494
|
${t}
|
|
495
|
-
</mark-sub-goal-done>`)}if(e.memory&&n.push(`<memory>${e.memory}</memory>`),e.complete)n.push(`<complete success="${e.complete.success}">${e.complete.message}</complete>`);else{if(!e.actionOutputExample)throw Error("Cannot build planning response example without an action output example");e.log&&n.push(`<log>${e.log}</log>`),n.push(e.actionOutputExample)}return n.join("\n")},
|
|
495
|
+
</mark-sub-goal-done>`)}if(e.memory&&n.push(`<memory>${e.memory}</memory>`),e.complete)n.push(`<complete success="${e.complete.success}">${e.complete.message}</complete>`);else{if(!e.actionOutputExample)throw Error("Cannot build planning response example without an action output example");e.log&&n.push(`<log>${e.log}</log>`),n.push(e.actionOutputExample)}return n.join("\n")},ly={index:1,description:"Fill in the Name field with 'John'"},lv={index:2,description:"Fill in the Email field with 'john@example.com'"},lb={index:3,description:"Return the filled email address"};async function lw(e){let{actionSpace:t,includeLocateInPlanning:r,locatePromptSpec:n,includeSubGoals:i,includeThought:o=!0,includeLog:a=!0,planningProtocol:s}=e,l=s.actionOutputProtocol,A=r4();if(r&&!n)throw Error(sa());let c=(e=>{var t;let{actionSpace:r,locatePromptSpec:n,planningProtocol:i}=e,o=i.actionSpaceProtocol.buildLocateFieldDescription(n);return t=r.map(e=>{let t=i.actionSpaceProtocol.includeActionOutputExample?lp(e,{locatePromptSpec:n,buildActionOutput:i.actionOutputProtocol.buildActionOutput}):void 0;return i.actionSpaceProtocol.buildActionDescription({action:e,locateFieldDescription:o,actionOutputExample:t})}),"jsonl"===i.actionSpaceProtocol.format?t.map(e=>JSON.stringify(e)).join("\n"):lm.Ay.dump(t,{indent:2,lineWidth:-1,noRefs:!0}).trim()})({actionSpace:t,locatePromptSpec:n,planningProtocol:s}),u=t.some(e=>"RunAdbShell"===e.name),d=l.actionOutputTagNames.map(e=>`<${e}>`).join(", "),p=i??!1,h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return p?e:t},f=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return o?e:t},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return a?e:t},g=p?3:2,y=g+1;return`
|
|
496
496
|
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.
|
|
497
497
|
|
|
498
498
|
## Step 1: ${h("Observe and Plan (related tags: <planning>, <update-plan-content>, <mark-sub-goal-done>)",f("Observe (related tags: <planning>)","Observe"))}
|
|
@@ -699,7 +699,7 @@ The <log> tag is a brief preamble message to the user explaining what you're abo
|
|
|
699
699
|
${l.actionOutputRules}
|
|
700
700
|
|
|
701
701
|
For example:
|
|
702
|
-
${
|
|
702
|
+
${lp(lh("Add to cart button for Sauce Labs Backpack"),{locatePromptSpec:n,locateResultExampleIndex:1,buildActionOutput:l.buildActionOutput})}
|
|
703
703
|
|
|
704
704
|
### If you think there is an error ...
|
|
705
705
|
|
|
@@ -745,7 +745,7 @@ ${l.actionOutputPlaceholder}
|
|
|
745
745
|
<!-- OR if there's an error -->
|
|
746
746
|
<error>...</error>
|
|
747
747
|
|
|
748
|
-
${(e=>{let{includeSubGoals:t,includeThought:r,includeLog:n,locatePromptSpec:i,actionOutputProtocol:o,prefix:a}=e,s=o.buildActionOutput,l=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t?e:r},A=
|
|
748
|
+
${(e=>{let{includeSubGoals:t,includeThought:r,includeLog:n,locatePromptSpec:i,actionOutputProtocol:o,prefix:a}=e,s=o.buildActionOutput,l=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return t?e:r},A=lp(lh("Name input field in the registration form"),{locatePromptSpec:i,locateResultExampleIndex:2,buildActionOutput:s}),c=lp(lf("John"),{buildActionOutput:s}),u=lp(lh("Email input field in the registration form"),{locatePromptSpec:i,locateResultExampleIndex:3,buildActionOutput:s}),d=lp(lf("john@example.com"),{buildActionOutput:s});return`
|
|
749
749
|
## Multi-turn Conversation Example
|
|
750
750
|
|
|
751
751
|
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":
|
|
@@ -759,97 +759,97 @@ Below is an example of a multi-turn conversation for "fill out the registration
|
|
|
759
759
|
|
|
760
760
|
**Your response:**
|
|
761
761
|
|
|
762
|
-
${
|
|
762
|
+
${lg({prefix:a,planning:r?`The user wants me to fill out the registration form with specific values and return the email address. I can see the form has two fields: Name and Email. Both are currently empty. ${l("I'll break this down into sub-goals and start with the Name field.","I should start by clicking on the Name field.")} Note: The instruction is to fill the form only (not submit), and return the email at the end.`:void 0,updateSubGoals:t?[{...ly,status:"pending"},{...lv,status:"pending"},{...lb,status:"pending"}]:void 0,log:n?"Click on the Name field to start filling the form":void 0,actionOutputExample:A})}
|
|
763
763
|
|
|
764
764
|
### Turn 2 - After clicking Name field
|
|
765
765
|
|
|
766
766
|
**User message:**
|
|
767
767
|
The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
|
|
768
768
|
|
|
769
|
-
${l(oK([{...
|
|
769
|
+
${l(oK([{...ly,status:"running",logs:["Click on the Name field to start filling the form"]},{...lv,status:"pending"},{...lb,status:"pending"}]))}
|
|
770
770
|
|
|
771
771
|
**Screenshot:** [Shows the form with Name field now focused/active]
|
|
772
772
|
|
|
773
773
|
**Your response:**
|
|
774
774
|
|
|
775
|
-
${
|
|
775
|
+
${lg({prefix:a,planning:r?`The Name field is now focused. I need to type 'John' into this field. ${l("Current sub-goal is running, will be completed after input.","After this, I'll need to fill the Email field as well.")}`:void 0,log:n?"Typing 'John' into the Name field":void 0,actionOutputExample:c})}
|
|
776
776
|
|
|
777
777
|
### Turn 3 - After entering name
|
|
778
778
|
|
|
779
779
|
**User message:**
|
|
780
780
|
The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
|
|
781
781
|
|
|
782
|
-
${l(oK([{...
|
|
782
|
+
${l(oK([{...ly,status:"running",logs:["Click on the Name field to start filling the form","Typing 'John' into the Name field"]},{...lv,status:"pending"},{...lb,status:"pending"}]))}
|
|
783
783
|
|
|
784
784
|
**Screenshot:** [Shows the form with Name field containing 'John']
|
|
785
785
|
|
|
786
786
|
**Your response:**
|
|
787
787
|
|
|
788
|
-
${
|
|
788
|
+
${lg({prefix:a,planning:r?`The Name field now shows 'John'. ${l("Sub-goal 1 is complete. Next, I need to fill the Email field for sub-goal 2.","Next, I need to fill the Email field with 'john@example.com'. I'll click on the Email field first.")}`:void 0,markSubGoalsDone:t?[1]:void 0,memory:t?"Name field has been filled with 'John'":void 0,log:n?"Moving to the Email field":void 0,actionOutputExample:u})}
|
|
789
789
|
|
|
790
790
|
### Turn 4 - After clicking Email field
|
|
791
791
|
|
|
792
792
|
**User message:**
|
|
793
793
|
The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
|
|
794
794
|
|
|
795
|
-
${l(oK([{...
|
|
795
|
+
${l(oK([{...ly,status:"finished"},{...lv,status:"running",logs:["Moving to the Email field"]},{...lb,status:"pending"}]))}
|
|
796
796
|
|
|
797
797
|
**Screenshot:** [Shows the form with Name='John' and Email field focused]
|
|
798
798
|
|
|
799
799
|
**Your response:**
|
|
800
800
|
|
|
801
|
-
${
|
|
801
|
+
${lg({prefix:a,planning:r?`The Email field is now focused. I'll enter 'john@example.com'. ${l("After this, sub-goal 2 will be complete and my task will be done.","After this, both required fields will be filled and my task will be complete.")}`:void 0,log:n?"Typing email address into the Email field":void 0,actionOutputExample:d})}
|
|
802
802
|
|
|
803
803
|
### Turn 5 - After entering email (${l("Goal accomplished","Instruction fulfilled")})
|
|
804
804
|
|
|
805
805
|
**User message:**
|
|
806
806
|
The previous action has been executed, here is the latest screenshot. Please continue according to the instruction.
|
|
807
807
|
|
|
808
|
-
${l(oK([{...
|
|
808
|
+
${l(oK([{...ly,status:"finished"},{...lv,status:"running",logs:["Moving to the Email field","Typing email address into the Email field"]},{...lb,status:"pending"}]))}
|
|
809
809
|
|
|
810
810
|
**Screenshot:** [Shows the form with Name='John' and Email='john@example.com']
|
|
811
811
|
|
|
812
812
|
**Your response:**
|
|
813
813
|
|
|
814
|
-
${
|
|
815
|
-
`})({includeSubGoals:p,includeThought:o,includeLog:a,locatePromptSpec:n,actionOutputProtocol:l,prefix:s.responsePrefix})}`}let
|
|
814
|
+
${lg({prefix:a,planning:r?`Both fields are now filled: Name shows 'John' and Email shows 'john@example.com'. ${l("Sub-goal 2 is complete. The user asked me to return the filled email address, so I need to include 'john@example.com' in my response. All sub-goals are now finished.","The user asked me to return the filled email address, so I should include 'john@example.com' in my response. The instruction has been fulfilled.")}`:void 0,markSubGoalsDone:t?[2,3]:void 0,complete:{success:!0,message:"john@example.com"}})}
|
|
815
|
+
`})({includeSubGoals:p,includeThought:o,includeLog:a,locatePromptSpec:n,actionOutputProtocol:l,prefix:s.responsePrefix})}`}let lE=e=>"string"==typeof e?e:null==e?String(e):JSON.stringify(e)??String(e),lx=rq("planning"),lk=rq("planning",{console:!0});async function lS(e){let{messages:t,modelRuntime:r,abortSignal:n,includeLocateInPlanning:i,actionSpace:o,locateResultCodec:a,locateResultContext:s,includeThought:l,includeLog:A}=e;e4("standard"===r.adapter.planning.kind,"callAndParsePlanningResponse requires a standard planning adapter");let c=r.adapter.planning.protocol.actionOutputProtocol;return n8({callAi:(e,o)=>n7(n6(t,o),r,{abortSignal:n,requiresOriginalImageDetail:i,semanticRetryAttempt:e}),parseResponse:e=>{let t=function(e,t){let{parsed:r,rawActionOutput:n}=function(e,t,r){let n,i,o=r.includeThought?ia(e,"planning"):void 0,a=ia(e,"memory"),s=ia(e,"log")||"",l=ia(e,"error"),A=e.match(/<complete\s+success="(true|false)">([\s\S]*?)<\/complete>/i);if(A){var c;i="true"===A[1],n=(null==(c=A[2])?void 0:c.trim())||void 0}let u=ia(e,"update-plan-content"),d=ia(e,"mark-sub-goal-done"),p=u?function(e){let t=[],r=/<sub-goal\s+index="(\d+)"\s+status="(pending|finished)"(?:\s*\/>|>([\s\S]*?)<\/sub-goal>)/gi,n=r.exec(e);for(;null!==n;){var i;let o=Number.parseInt(n[1],10),a=n[2],s=(null==(i=n[3])?void 0:i.trim())||"";t.push({index:o,status:a,description:s}),n=r.exec(e)}return t}(u):void 0,h=d?function(e){let t=[],r=/<sub-goal\s+index="(\d+)"\s+status="finished"\s*\/>/gi,n=r.exec(e);for(;null!==n;)t.push(Number.parseInt(n[1],10)),n=r.exec(e);return t}(d):void 0;return{parsed:{...o?{thought:o}:{},...a?{memory:a}:{},log:s,...l?{error:l}:{},...void 0!==n?{finalizeMessage:n}:{},...void 0!==i?{finalizeSuccess:i}:{},...(null==p?void 0:p.length)?{updateSubGoals:p}:{},...(null==h?void 0:h.length)?{markFinishedIndexes:h}:{}},rawActionOutput:is(e,t)}}(e,t.actionOutputProtocol.actionOutputTagNames,{includeThought:t.includeThought}),i={...r,action:t.actionOutputProtocol.parseActionOutput(n,t.actionSpace)};return"action"!==t.logSource?i:{...i,log:i.action?function(e,t){let r=t.find(t=>t.name===e.type);if(!(null==r?void 0:r.paramSchema))return JSON.stringify(e);let n=e.param;if(null==n)return e.type;if("object"!=typeof n||Array.isArray(n))return`${e.type} - ${lE(n)}`;let i=Object.entries(iD(n,r.paramSchema)).map(e=>{let[t,r]=e;return`${t}: ${lE(r)}`}).join(", ");return[e.type,i].filter(Boolean).join(" - ")}(i.action,t.actionSpace):i.error?`Error - ${i.error}`:void 0!==i.finalizeSuccess?[`Complete - success: ${i.finalizeSuccess}`,i.finalizeMessage?`message: ${i.finalizeMessage}`:void 0].filter(Boolean).join(", "):"No action"}}(e.content,{includeThought:l,actionOutputProtocol:c,actionSpace:o,logSource:A?"model":"action"});t.action&&void 0!==t.finalizeSuccess&&(lk("Planning response included both an action and <complete>; ignoring <complete> output."),t.finalizeMessage=void 0,t.finalizeSuccess=void 0);let n=t.action?[t.action]:[];oq(n,{actionSpace:o,includeLocateInPlanning:i,locateResultCodec:a,locateResultContext:s,acceptBbox2dAlias:r.adapter.acceptBbox2dAlias,parseRawLocateParameter:c.parseRawLocateParameter});let u=function(e,t){let r=[];for(let n of e){let e=n.type,i=iS(e,t),o=i.interfaceAlias||e,a=i.paramSchema?iD(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}(n,o);return{response:e,planFromAI:t,actions:n,yamlFlow:u}},toParseError:(e,t)=>{let r=e instanceof Error?e.message:String(e);return new nI(`XML parse error: ${r}`,t.content,t.usage,t.rawChoiceMessage,t.reasoning_content)},parseRetryTimes:r.config.retryCount,parseRetryInterval:r.config.retryInterval,abortSignal:n,onParseRetry:e=>{lx("retrying plan after response parsing failed: %s",e instanceof Error?e.message:String(e))}})}async function lC(e,t){let r,{context:n,conversationHistory:i}=t,o=t.modelRuntime,{adapter:a}=o,{shotSize:s}=n,l=n.screenshot.base64;e4("standard"===a.planning.kind,"standardPlan requires a standard planning adapter");let A=a.planning.protocol;if(t.includeLocateInPlanning&&!o.config.modelFamily)throw Error(sa(o.config.slot));let c=o.config.modelFamily?a.planning.locateResultCodec:void 0,u="deepThink"===t.effort,d="fast"!==t.effort,p="fast"!==t.effort;if(t.includeLocateInPlanning&&!c)throw Error(sa(o.config.slot));let h=await lw({actionSpace:t.actionSpace,includeThought:d,includeLog:p,includeSubGoals:u,planningProtocol:A,...t.includeLocateInPlanning&&c?{includeLocateInPlanning:!0,locatePromptSpec:c.promptSpec}:{includeLocateInPlanning:!1}}),f=await oZ({imageBase64:l,width:s.width,height:s.height,policy:a.imagePreprocess}),m=f.imageBase64,g=t.actionContext?`${t.actionContext}
|
|
816
816
|
`:"",y=oL(e.referenceImages),v=[{role:"user",content:[{type:"text",text:`${g}<user_instruction>${e.text}</user_instruction>`}]},...y],b=u?i.subGoalsToText():i.historicalLogsToText(),w=b?`
|
|
817
817
|
|
|
818
818
|
${b}`:i.pendingFeedbackMessage?"":`
|
|
819
819
|
|
|
820
820
|
No previous actions have been executed in this aiAct execution yet. If the instruction asks for actions, choose the first action to execute.`,E=i.memoriesToText(),x=E?`
|
|
821
821
|
|
|
822
|
-
${E}`:"";i.pendingFeedbackMessage?(r={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.${x}${w}`},{type:"image_url",image_url:{url:m,detail:"high"}}]},i.resetPendingFeedbackMessageIfExists()):r={role:"user",content:[{type:"text",text:`This is the current screenshot.${x}${w}`},{type:"image_url",image_url:{url:m,detail:"high"}}]},i.append(r),i.compressHistory(50,20);let k=[{role:"system",content:h},...v,...i.snapshot(t.imagesIncludeCount)],{response:{content:S,usage:C,reasoning_content:I,rawChoiceMessage:j},planFromAI:O,actions:P,yamlFlow:R}=await
|
|
822
|
+
${E}`:"";i.pendingFeedbackMessage?(r={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.${x}${w}`},{type:"image_url",image_url:{url:m,detail:"high"}}]},i.resetPendingFeedbackMessageIfExists()):r={role:"user",content:[{type:"text",text:`This is the current screenshot.${x}${w}`},{type:"image_url",image_url:{url:m,detail:"high"}}]},i.append(r),i.compressHistory(50,20);let k=[{role:"system",content:h},...v,...i.snapshot(t.imagesIncludeCount)],{response:{content:S,usage:C,reasoning_content:I,rawChoiceMessage:j},planFromAI:O,actions:P,yamlFlow:R}=await lS({messages:k,modelRuntime:o,abortSignal:t.abortSignal,includeLocateInPlanning:t.includeLocateInPlanning,actionSpace:t.actionSpace,locateResultCodec:c,locateResultContext:{preparedSize:f.preparedSize,contentSize:f.contentSize},includeThought:d,includeLog:p}),M=!0;void 0!==O.finalizeSuccess&&(lx("task completed via <complete> tag, stop planning"),M=!1,u&&i.markAllSubGoalsFinished());let T={...O,actions:P,rawResponse:S,rawChoiceMessage:j,usage:C,reasoning_content:I,yamlFlow:R,shouldContinuePlanning:M};if(e4(O,"can't get plans from AI"),u){var N,D;if((null==(N=O.updateSubGoals)?void 0:N.length)&&i.mergeSubGoals(O.updateSubGoals),null==(D=O.markFinishedIndexes)?void 0:D.length)for(let e of O.markFinishedIndexes)i.markSubGoalFinished(e);O.log&&i.appendSubGoalLog(O.log)}else O.log&&i.appendHistoricalLog(O.log);return O.memory&&i.appendMemory(O.memory),o.adapter.chatCompletion.replayRawAssistantMessage&&j?i.append(j):i.append({role:"assistant",content:[{type:"text",text:S}]}),T}var lI=r(63612);async function lj(e){let t=[];for(let r of e)try{await r.fn()}catch(e){t.push(e)}if(1===t.length)throw t[0];if(t.length>1)throw AggregateError(t,"Multiple resource cleanup operations failed")}var lO=r(85409);let lP=rq("yaml:utils"),lR=/^tasks\s*:/,lM=/^[^\s#][^:]*:/,lT=["page","browser","web","target"],lN=["images","convertHttpImage2Base64"];function lD(e){if("object"!=typeof e||null===e)return;let t=lN.map(t=>[t,e[t]]).filter(e=>{let[,t]=e;return void 0!==t});return t.length?Object.fromEntries(t):void 0}function lB(e,t){var r;let n;lP("will call buildDetailedLocateParam",e,t);let i=e;if("object"==typeof e&&null!==e&&"prompt"in e){let{prompt:t,...r}=e;i=Object.keys(r).length>0?e:t}let o=i||(null==t?void 0:t.prompt)||(null==t?void 0:t.locate),a=!1,s=!0;if("object"==typeof t&&null!==t&&(a=t.deepLocate??t.deepThink??!1,s=t.cacheable??!0,n=t.xpath,e&&t.prompt&&e!==t.prompt&&console.warn("conflict prompt for item",e,t,"maybe you put the prompt in the wrong place"),o=o||t.prompt),!o)return void lP("no prompt, will return undefined in buildDetailedLocateParam",t);let l="string"==typeof o?o:o.prompt,A=(null==t||null==(r=t.context)?void 0:r.trim())||void 0;o=((e,t)=>{let r=sv(t);if(!r)return e;let n="string"==typeof e?e:e.prompt,i=`${r}
|
|
823
823
|
|
|
824
824
|
<LOCATE_TARGET>
|
|
825
825
|
${n}
|
|
826
|
-
</LOCATE_TARGET>`;return"string"==typeof e?i:{...e,prompt:i}})(o,null==t?void 0:t.context);let c=lN(t);return c&&(o="string"==typeof o?{prompt:o,...c}:{...o,...c}),{prompt:o,...A?{promptDisplay:l,context:A}:{},deepLocate:a,cacheable:s,xpath:n}}function lB(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=lN(t),i=lD(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)||"context"===n||"deepThink"===n||s.includes(n)||r.includes(n)||"locate"===n||(o[n]=t[n])}return{locateParam:i,restParams:o}}var lz=r(85409);function lF(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let lL=rq("yaml-player"),lU={aiQuery:"aiQuery",aiNumber:"aiNumber",aiString:"aiString",aiBoolean:"aiBoolean",aiAsk:"aiAsk",aiLocate:"aiLocate"},lK=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 ik.kY.ZodString:case ik.kY.ZodEnum:case ik.kY.ZodNativeEnum:return!0;case ik.kY.ZodLiteral:return"string"==typeof t.value;case ik.kY.ZodOptional:case ik.kY.ZodNullable:case ik.kY.ZodDefault:return lK(t.innerType);case ik.kY.ZodEffects:return lK(t.schema);case ik.kY.ZodPipeline:return lK(t.out);case ik.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>lK(e))}default:return!1}};class lQ{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,tc.resolve)(lz.cwd(),this.output),t=(0,tc.dirname)(e);(0,lC.existsSync)(t)||(0,lC.mkdirSync)(t,{recursive:!0}),(0,lC.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,tc.resolve)(lz.cwd(),this.unstableLogContent),n=(0,tc.dirname)(r);(0,lC.existsSync)(n)||(0,lC.mkdirSync)(n,{recursive:!0}),(0,lC.writeFileSync)(r,JSON.stringify(t,null,2))}}async playTask(e,t){let{flow:r}=e;for(let o in e4(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"failed"===function(e){for(let t of e)for(let e of t.tasks??[])if("failed"===function(e){let t="finished"===e.status;return"failed"===e.status||t&&(e.error||e.errorMessage)?"failed":t&&"WaitFor"===e.subType&&!1===e.output?"warning":"Assert"===e.subType&&t&&!1===e.output?"failed":"pending"===e.status?"pending":"running"===e.status?"running":"cancelled"===e.status?"cancelled":"passed"}(e))return"failed";return"passed"}(((null==(r=e.dump)?void 0:r.executions)??[]).slice(t))}async playFlowItem(e,t,r,n){if("Finalize"in r)return;lL(`playing step ${n}, flowItem=${JSON.stringify(t)}`);let i=Object.keys(lU).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),e4(r,"missing prompt for ai (aiAct)"),await e.aiAct(r,s)}else if("runGherkinScenario"in t){let{runGherkinScenario:r}=t;e4(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;e4(r,"missing prompt for aiAssert"),e4(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML aiAssert. Use agent.startObserving() from code instead.");let a=await e.aiAssert(r,n,{...o,keepRawResponse:!0}),s=null==a?void 0:a.pass,l=null==a?void 0:a.thought,A=null==a?void 0:a.message;if(this.setResult(i,{pass:s,thought:l,message:A}),!s)throw Error(A)}else if(i){let{[i]:r,name:n,...o}=t;e4(r,`missing prompt for ${i}`),e4(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML flow items. Use agent.startObserving() from code instead.");let a=e[lU[i]];e4("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;e4(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)),e4(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:lD(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:lD(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;e4(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)});e4(l,`unknown flowItem in yaml: ${JSON.stringify(t)}`);let A=lK(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){lL(`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||(lL(`parse failed for action ${l.name} with string param`,e.error),i=n)}else i=n;if(void 0!==i){lL(`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}=lB(r||"",i,[l.name,l.interfaceAlias||"_never_mind_"]),s={...a,locate:o};lL(`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){lL("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++}c?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",await lI(l)}constructor(e,t,r,n){var i,o,a;if(lF(this,"script",void 0),lF(this,"setupAgent",void 0),lF(this,"onTaskStatusChange",void 0),lF(this,"currentTaskIndex",void 0),lF(this,"taskStatusList",void 0),lF(this,"status",void 0),lF(this,"reportFile",void 0),lF(this,"result",void 0),lF(this,"unnamedResultIndex",void 0),lF(this,"output",void 0),lF(this,"unstableLogContent",void 0),lF(this,"errorInSetup",void 0),lF(this,"interfaceAgent",void 0),lF(this,"agentStatusTip",void 0),lF(this,"target",void 0),lF(this,"actionSpace",void 0),lF(this,"scriptPath",void 0),lF(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={},this.target=e.target||e.web||e.android||e.ios||e.computer||e.config,e0||e1)this.output=void 0,lL("output is undefined in browser or worker");else if(null==(i=this.target)?void 0:i.output)this.output=(0,tc.resolve)(lz.cwd(),this.target.output),lL("setting output by config.output",this.output);else{const e=this.scriptPath?(0,tc.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,tc.join)(rL("output"),`${e}-${Date.now()}.json`),lL("setting output by script path",this.output)}e0||e1?this.unstableLogContent=void 0:"string"==typeof(null==(o=this.target)?void 0:o.unstableLogContent)?this.unstableLogContent=(0,tc.resolve)(lz.cwd(),this.target.unstableLogContent):(null==(a=this.target)?void 0:a.unstableLogContent)===!0&&(this.unstableLogContent=(0,tc.join)(rL("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 lJ=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk"],lZ=["aiAssert","aiWaitFor"];[...lJ,...lZ];let lX=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function lq(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&&iN(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=lD(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(s[e]=t)}}),[s]}async function lH(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 lq(o,n.params,i);return await e.callActionInActionSpace(o.name,t[0])}else{let t=n.prompt?lD(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(!lX.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 lW=rq("task-timing");function lG(e,t){if(!e)return void lW(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?lW(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}let lV="… [truncated]";function lY(e){return"object"==typeof e&&null!==e||"function"==typeof e}function l$(e,t){try{return Reflect.get(e,t)}catch{return}}function l_(e,t){for(let r of t){let t=l$(e,r);if("number"==typeof t)return t;if("string"==typeof t)return l0(t)}}function l0(e){return e.length<=4096?e:`${e.slice(0,4096-lV.length)}${lV}`}function l1(e){let t=l$(e,"message");return"string"==typeof t&&t?t:void 0}function l2(e){return function(e){if(!lY(e)){let t=l0(String(e));return{error:{name:"NonError",message:t.trim()?t:"Empty string thrown"},hasMessage:!!t.trim()}}let t=l$(e,"name"),r=l0("string"==typeof t&&t?t:"Error"),n=function(e){let t=l1(e);if(t)return t;for(let t of["error","cause"]){let r=l$(e,t);if(!lY(r))continue;let n=l1(r);if(n)return n}}(e),i={name:r,message:l0(n??`${r} without a message`)},o=function(e){if(!lY(e))return;let t=l$(e,"stack");return"string"==typeof t?t:void 0}(e);o&&(i.stack=l0(o));let a=l_(e,["code"]),s=l_(e,["status","statusCode"]),l=l_(e,["requestId","requestID"]);return void 0!==a&&(i.code=a),void 0!==s&&(i.status=s),void 0!==l&&(i.requestId=l),{error:i,hasMessage:void 0!==n}}(e).error}function l3(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let l5=rq("task-runner");class l4{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 l5(`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:e3(),status:"pending",...e}}normalizeStatusFromError(e,t){var r,n;"error"===this.status&&(e4(null==e?void 0:e.allowWhenError,t||`task runner is in error state, cannot proceed
|
|
826
|
+
</LOCATE_TARGET>`;return"string"==typeof e?i:{...e,prompt:i}})(o,null==t?void 0:t.context);let c=lD(t);return c&&(o="string"==typeof o?{prompt:o,...c}:{...o,...c}),{prompt:o,...A?{promptDisplay:l,context:A}:{},deepLocate:a,cacheable:s,xpath:n}}function lz(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=lD(t),i=lB(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)||"context"===n||"deepThink"===n||s.includes(n)||r.includes(n)||"locate"===n||(o[n]=t[n])}return{locateParam:i,restParams:o}}var lF=r(85409);function lL(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let lU=rq("yaml-player"),lK={aiQuery:"aiQuery",aiNumber:"aiNumber",aiString:"aiString",aiBoolean:"aiBoolean",aiAsk:"aiAsk",aiLocate:"aiLocate"},lQ=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 ik.kY.ZodString:case ik.kY.ZodEnum:case ik.kY.ZodNativeEnum:return!0;case ik.kY.ZodLiteral:return"string"==typeof t.value;case ik.kY.ZodOptional:case ik.kY.ZodNullable:case ik.kY.ZodDefault:return lQ(t.innerType);case ik.kY.ZodEffects:return lQ(t.schema);case ik.kY.ZodPipeline:return lQ(t.out);case ik.kY.ZodUnion:{let e=t.options;return!!Array.isArray(e)&&e.every(e=>lQ(e))}default:return!1}};class lJ{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,tc.resolve)(lF.cwd(),this.output),t=(0,tc.dirname)(e);(0,lI.existsSync)(t)||(0,lI.mkdirSync)(t,{recursive:!0}),(0,lI.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,tc.resolve)(lF.cwd(),this.unstableLogContent),n=(0,tc.dirname)(r);(0,lI.existsSync)(n)||(0,lI.mkdirSync)(n,{recursive:!0}),(0,lI.writeFileSync)(r,JSON.stringify(t,null,2))}}async playTask(e,t){let{flow:r}=e;for(let o in e4(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"failed"===function(e){for(let t of e)for(let e of t.tasks??[])if("failed"===function(e){let t="finished"===e.status;return"failed"===e.status||t&&(e.error||e.errorMessage)?"failed":t&&"WaitFor"===e.subType&&!1===e.output?"warning":"Assert"===e.subType&&t&&!1===e.output?"failed":"pending"===e.status?"pending":"running"===e.status?"running":"cancelled"===e.status?"cancelled":"passed"}(e))return"failed";return"passed"}(((null==(r=e.dump)?void 0:r.executions)??[]).slice(t))}async playFlowItem(e,t,r,n){if("Finalize"in r)return;lU(`playing step ${n}, flowItem=${JSON.stringify(t)}`);let i=Object.keys(lK).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),e4(r,"missing prompt for ai (aiAct)"),await e.aiAct(r,s)}else if("runGherkinScenario"in t){let{runGherkinScenario:r}=t;e4(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;e4(r,"missing prompt for aiAssert"),e4(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML aiAssert. Use agent.startObserving() from code instead.");let a=await e.aiAssert(r,n,{...o,keepRawResponse:!0}),s=null==a?void 0:a.pass,l=null==a?void 0:a.thought,A=null==a?void 0:a.message;if(this.setResult(i,{pass:s,thought:l,message:A}),!s)throw Error(A)}else if(i){let{[i]:r,name:n,...o}=t;e4(r,`missing prompt for ${i}`),e4(!Object.prototype.hasOwnProperty.call(t,"observe"),"`observe` is not supported in YAML flow items. Use agent.startObserving() from code instead.");let a=e[lK[i]];e4("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;e4(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 r=t.sleep,n=r;"string"==typeof r&&(n=Number.parseInt(r,10)),e4(Number.isFinite(n)&&n>0,`ms for sleep must be greater than 0, but got ${r}`),await e.sleep(n)}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:lB(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:lB(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;e4(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)});e4(l,`unknown flowItem in yaml: ${JSON.stringify(t)}`);let A=lQ(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){lU(`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||(lU(`parse failed for action ${l.name} with string param`,e.error),i=n)}else i=n;if(void 0!==i){lU(`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}=lz(r||"",i,[l.name,l.interfaceAlias||"_never_mind_"]),s={...a,locate:o};lU(`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){lU("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++}c?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",await lj(l)}constructor(e,t,r,n){var i,o,a;if(lL(this,"script",void 0),lL(this,"setupAgent",void 0),lL(this,"onTaskStatusChange",void 0),lL(this,"currentTaskIndex",void 0),lL(this,"taskStatusList",void 0),lL(this,"status",void 0),lL(this,"reportFile",void 0),lL(this,"result",void 0),lL(this,"unnamedResultIndex",void 0),lL(this,"output",void 0),lL(this,"unstableLogContent",void 0),lL(this,"errorInSetup",void 0),lL(this,"interfaceAgent",void 0),lL(this,"agentStatusTip",void 0),lL(this,"target",void 0),lL(this,"actionSpace",void 0),lL(this,"scriptPath",void 0),lL(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={},this.target=e.target||e.web||e.android||e.ios||e.computer||e.config,e0||e1)this.output=void 0,lU("output is undefined in browser or worker");else if(null==(i=this.target)?void 0:i.output)this.output=(0,tc.resolve)(lF.cwd(),this.target.output),lU("setting output by config.output",this.output);else{const e=this.scriptPath?(0,tc.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,tc.join)(rL("output"),`${e}-${Date.now()}.json`),lU("setting output by script path",this.output)}e0||e1?this.unstableLogContent=void 0:"string"==typeof(null==(o=this.target)?void 0:o.unstableLogContent)?this.unstableLogContent=(0,tc.resolve)(lF.cwd(),this.target.unstableLogContent):(null==(a=this.target)?void 0:a.unstableLogContent)===!0&&(this.unstableLogContent=(0,tc.join)(rL("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 lZ=["aiQuery","aiBoolean","aiNumber","aiString","aiAsk"],lX=["aiAssert","aiWaitFor"];[...lZ,...lX];let lq=new Set(["aiAct","runMarkdown","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiWaitFor"]);async function lH(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&&iN(n).forEach(e=>{let n=t[e];if(n&&"string"==typeof n){let t=lB(n,{deepLocate:r.deepLocate,cacheable:!0});t&&(s[e]=t)}}),[s]}async function lW(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 lH(o,n.params,i);return await e.callActionInActionSpace(o.name,t[0])}else{let t=n.prompt?lB(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(!lq.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 lG=rq("task-timing");function lV(e,t){if(!e)return void lG(`[warning] timing object missing, skip set. field=${t}`);let r=Date.now(),n=e[t];void 0!==n?lG(`[warning] duplicate timing field set ignored. field=${t}, existing=${n}, incoming=${r}`):e[t]=r}let lY="… [truncated]";function l$(e){return"object"==typeof e&&null!==e||"function"==typeof e}function l_(e,t){try{return Reflect.get(e,t)}catch{return}}function l0(e,t){for(let r of t){let t=l_(e,r);if("number"==typeof t)return t;if("string"==typeof t)return l1(t)}}function l1(e){return e.length<=4096?e:`${e.slice(0,4096-lY.length)}${lY}`}function l2(e){let t=l_(e,"message");return"string"==typeof t&&t?t:void 0}function l3(e){return function(e){if(!l$(e)){let t=l1(String(e));return{error:{name:"NonError",message:t.trim()?t:"Empty string thrown"},hasMessage:!!t.trim()}}let t=l_(e,"name"),r=l1("string"==typeof t&&t?t:"Error"),n=function(e){let t=l2(e);if(t)return t;for(let t of["error","cause"]){let r=l_(e,t);if(!l$(r))continue;let n=l2(r);if(n)return n}}(e),i={name:r,message:l1(n??`${r} without a message`)},o=function(e){if(!l$(e))return;let t=l_(e,"stack");return"string"==typeof t?t:void 0}(e);o&&(i.stack=l1(o));let a=l0(e,["code"]),s=l0(e,["status","statusCode"]),l=l0(e,["requestId","requestID"]);return void 0!==a&&(i.code=a),void 0!==s&&(i.status=s),void 0!==l&&(i.requestId=l),{error:i,hasMessage:void 0!==n}}(e).error}function l5(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let l4=rq("task-runner");class l7{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 l4(`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:e3(),status:"pending",...e}}normalizeStatusFromError(e,t){var r,n;"error"===this.status&&(e4(null==e?void 0:e.allowWhenError,t||`task runner is in error state, cannot proceed
|
|
827
827
|
error=${null==(r=this.latestErrorTask())?void 0:r.errorMessage}
|
|
828
828
|
${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
|
|
829
829
|
error=${null==(r=this.latestErrorTask())?void 0:r.errorMessage}
|
|
830
|
-
${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"),e4("running"!==this.status,"task runner is already running"),e4("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];e4("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)}e4(["Insight","Action Space","Planning"].indexOf(e.type)>=0,`unsupported task type: ${e.type}`);let{executor:n}=e;e4(n,`executor is required for task type: ${e.type}`);let o="Insight"===e.type;lG(e.timing,"getUiContextStart");let a=await this.getUiContext({forceRefresh:o});lG(e.timing,"getUiContextEnd"),e.uiContext=a;let s={task:e,element:null==t?void 0:t.element,uiContext:a};if("Insight"===e.type)e4("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(s);else if("Planning"===e.type)r=await e.executor(s),"Locate"===e.subType&&(t=null==r?void 0:r.output);else if("Action Space"===e.type)try{r=await e.executor(s)}finally{this.lastUiContext=void 0}else console.warn(`unsupported task type: ${e.type}, will try to execute it directly`),r=await e.executor(s);if(i===this.tasks.length-1){lG(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();this.attachRecorderItem(e,t,"after-calling"),lG(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(r){o=!1;let t=l2(r);e.error=t,e.errorMessage=t.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();r=new l7((null==e?void 0:e.error)??{name:"Error",message:"Task execution failed"},function(e){if(e)return{taskId:l0(e.taskId),type:e.type,...void 0===e.subType?{}:{subType:l0(e.subType)},status:e.status,...void 0===e.thought?{}:{thought:l0(e.thought)},...void 0===e.errorMessage?{}:{errorMessage:l0(e.errorMessage)}}}(e)),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 sU({id:this.id,logTime:this.executionLogTime,name:this.name,tasks:this.tasks},{referenceImageUrls:[...this.referenceImageUrls]})}async appendErrorPlan(e){return await this.appendAndFlush({type:"Action Space",subType:"Error",param:{thought:e},thought:e,executor:async()=>{throw Error(e||"error without thought")}}),{output:void 0,runner:this}}constructor(e,t,r){for(const n of(l3(this,"id",void 0),l3(this,"name",void 0),l3(this,"tasks",void 0),l3(this,"status",void 0),l3(this,"onTaskStart",void 0),l3(this,"uiContextBuilder",void 0),l3(this,"onSnapshotChange",void 0),l3(this,"onTaskEvent",void 0),l3(this,"executionLogTime",void 0),l3(this,"referenceImageUrls",new Set),l3(this,"lastUiContext",void 0),this.id=e3(),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(),(null==r?void 0:r.referenceImages)??[]))this.referenceImageUrls.add(n.url)}}class l7 extends Error{toJSON(){return{name:this.name,code:this.code,message:this.message,...void 0===this.stack?{}:{stack:this.stack},cause:this.cause,...void 0===this.task?{}:{task:this.task}}}constructor(e,t){super(e.message,{cause:e}),l3(this,"code","TASK_EXECUTION_FAILED"),l3(this,"cause",void 0),l3(this,"task",void 0),this.name="TaskExecutionError",this.cause=e,this.task=t,this.stack&&(this.stack=l0(this.stack))}}var l6=r(83147),l8=r(8963).Buffer,l9=r(85409);let Ae=l8.from("<script"),At=l8.from("<\/script>"),Ar=/data-group-id="([^"]+)"/;function An(e){var t;if(!e.includes('type="midscene_web_dump"'))return;let r=null==(t=e.match(Ar))?void 0:t[1];return r?decodeURIComponent(r):void 0}async function Ai(e,t){let r=l8.alloc(0);for await(let n of(0,iz.createReadStream)(e,{highWaterMark:0x2000000}))for(r=0===r.length?n:l8.concat([r,n]);r.length>0;){let e=r.indexOf(Ae);if(-1===e){r=r.subarray(Math.max(0,r.length-Ae.length+1));break}e>0&&(r=r.subarray(e));let n=r.indexOf(62,Ae.length);if(-1===n)break;let i=r.indexOf(At,n+1);if(-1===i)break;let o=i+At.length;await t({openTag:r.subarray(0,n+1).toString("utf-8"),content:r.subarray(n+1,i)}),r=r.subarray(o)}if(-1!==r.indexOf(Ae))throw Error(`Report contains an unterminated script tag: ${e}`)}async function Ao(e){let t=new Map,r=0;return await Ai(e,e=>{let{openTag:n,content:i}=e,o=An(n);if(!o)return;let a=sK.fromSerializedString(tr(i.toString("utf-8").trim())),s=t.get(o);for(let e of(s||(s={baseDump:a,executionsByKey:new Map,firstOpenTag:n,noIdExecutionIndex:0,tagCount:0},t.set(o,s)),s.tagCount+=1,r+=1,a.executions)){let t=e.id?`id:${e.id}`:`no-id:${s.noIdExecutionIndex++}`;s.executionsByKey.set(t,e)}}),{groups:t,tagCount:r}}async function Aa(e,t){let r=0;for(;r<t.length;){let{bytesWritten:n}=await e.write(t,r,t.length-r,null);if(0===n)throw Error("Failed to make progress while writing compacted report");r+=n}}async function As(e,t,r){let n=new Map(Array.from(r.groups,e=>{let t,[r,n]=e;return[r,(n.baseDump.executions=Array.from(n.executionsByKey.values()),t=tt(n.baseDump.serialize()),l8.from(`${n.firstOpenTag}${t}${At.toString("utf-8")}`))]})),i=new Map,o=new Set,a=await (0,iF.open)(t,"wx"),s=l8.alloc(0);try{for await(let t of(0,iz.createReadStream)(e,{highWaterMark:0x2000000}))for(s=0===s.length?t:l8.concat([s,t]);s.length>0;){let e=s.indexOf(Ae);if(-1===e){let e=Math.max(0,s.length-Ae.length+1);await Aa(a,s.subarray(0,e)),s=s.subarray(e);break}await Aa(a,s.subarray(0,e));let t=(s=s.subarray(e)).indexOf(62,Ae.length);if(-1===t)break;let l=s.indexOf(At,t+1);if(-1===l)break;let A=l+At.length,c=s.subarray(0,t+1).toString("utf-8"),u=An(c);if(u&&r.groups.has(u)){let e=(i.get(u)??0)+1;i.set(u,e),e===r.groups.get(u).tagCount&&(await Aa(a,n.get(u)),o.add(u))}else await Aa(a,s.subarray(0,A));s=s.subarray(A)}if(-1!==s.indexOf(Ae))throw Error(`Report contains an unterminated script tag: ${e}`);for(let[e,t]of(await Aa(a,s),r.groups))if(i.get(e)!==t.tagCount||!o.has(e))throw Error(`Report compaction did not rewrite every dump in group: ${e}`);await a.sync()}finally{await a.close()}}async function Al(e,t){try{await (0,iF.rename)(e,t);return}catch(e){if(!function(e){if("win32"!==l9.platform)return!1;let t=e.code;return"EACCES"===t||"EEXIST"===t||"EPERM"===t}(e))throw e}let r=(0,tc.join)((0,tc.dirname)(t),`.${(0,tc.basename)(t)}.${e3()}.backup`);await (0,iF.rename)(t,r);try{await (0,iF.rename)(e,t)}catch(e){try{await (0,iF.rename)(r,t)}catch(t){throw Error(`Failed to replace compacted report and restore the original report: ${String(e)}; restore error: ${String(t)}`)}throw e}await (0,iF.unlink)(r)}async function AA(e){let t=await (0,iF.stat)(e),r=await Ao(e),n=r.groups.size;if(r.tagCount<=n)return{beforeBytes:t.size,afterBytes:t.size,beforeDumpCount:r.tagCount,afterDumpCount:n};let i=(0,tc.join)((0,tc.dirname)(e),`.${(0,tc.basename)(e)}.${e3()}.tmp`);try{await As(e,i,r);let o=await (0,iF.stat)(i);return await Al(i,e),{beforeBytes:t.size,afterBytes:o.size,beforeDumpCount:r.tagCount,afterDumpCount:n}}catch(e){try{await (0,iF.unlink)(i)}catch(t){if("ENOENT"!==t.code)throw Error(`Report compaction failed and the temporary file could not be removed: ${String(e)}; cleanup error: ${String(t)}`)}throw e}}function Ac(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let Au=rq("report-generator",{console:!0}),Ad={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0};function Ap(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class Ah{static create(e,t){if(Ap(t),function(e,t){if(!(null==e?void 0:e.trim()))throw Error("reportFileName must be a non-empty string");if(/[\\/]/.test(e))throw Error("reportFileName must not contain path separators (`/` or `\\\\`)");if(/[:*?"<>|]/.test(e))throw Error('reportFileName contains illegal filename characters: : * ? " < > |');let r="html-and-external-assets"===t?e:Af(e),n=new TextEncoder().encode(r).byteLength;if(n>255)throw Error(`reportFileName produces a filename component of ${n} UTF-8 bytes; maximum is 255`)}(e,t.outputFormat),!1===t.generateReport||e0)return Ad;let r=rL("report"),n=(0,tc.join)(r,e);return new Ah({reportPath:"html-and-external-assets"===t.outputFormat?(0,tc.join)(n,"index.html"):(0,tc.join)(r,Af(e)),screenshotMode:"html-and-external-assets"===t.outputFormat?"directory":"inline",persistExecutionDump:t.persistExecutionDump,autoPrint:t.autoPrintReportMsg,reuseExistingReport:t.reuseExistingReport})}onExecutionUpdate(e,t,r){this.lastExecution=e,this.lastReportMeta=t,this.executionsByKey.set(this.getExecutionCommentKey(e),e),this.mergeReportAttributes(r),this.writeQueue=this.writeQueue.then(async()=>{this.destroyed||await this.doWriteExecution(e,t)})}async flush(){await this.writeQueue}async finalize(){if(this.lastExecution&&this.lastReportMeta&&this.onExecutionUpdate(this.lastExecution,this.lastReportMeta),await this.flush(),this.destroyed=!0,this.initialized){await this.appendAgentReportComment();try{await AA(this.reportPath)}catch(e){Au(`Failed to compact report ${this.reportPath}; keeping the uncompressed report: ${String(e)}`)}return this.reportPath}}getReportPath(){return this.reportPath}printReportPath(){this.autoPrint&&this.reportPath&&(r5.getEnvConfigInBoolean(tV)||("directory"===this.screenshotMode?e7(`Midscene - report file updated: npx serve ${(0,tc.dirname)(this.reportPath)}`):e7(`Midscene - report file updated: ${this.reportPath}`)))}async doWriteExecution(e,t){let r=this.wrapAsReportDump(e,t),n=await this.writeExecution(e,r);this.shouldPersistExecutionDump&&await this.persistExecutionDumpToFile(e,r,n),this.firstWriteDone||(this.firstWriteDone=!0,this.printReportPath())}mergeReportAttributes(e){if(e)for(let[t,r]of Object.entries(e))null!=r&&(this.reportAttributes[t]=String(r))}hydrateStateFromExistingReport(){if(!(0,r9.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump))return;let e=(0,tc.dirname)(this.reportPath),t=(0,r9.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,[i2]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new sK({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeExecution(e,t){var r;let n,i,o=(0,tc.dirname)(this.reportPath);if((0,r9.existsSync)(o)||(0,r9.mkdirSync)(o,{recursive:!0}),!this.initialized){let e="directory"===this.screenshotMode?i1():"";await (0,l6.writeFile)(this.reportPath,`${no()}${e}`),this.initialized=!0}for(let t of e.collectScreenshots())await this.screenshotStore.persist(t);let a=await this.persistReferenceImages(e),s=t.serializeWithReferenceImages(a);return await (0,l6.appendFile)(this.reportPath,`
|
|
831
|
-
${(r=this.getDumpScriptAttributes(),n=iW(),i="",r&&Object.keys(r).length>0&&(i=" "+Object.entries(r).map(e=>{let[t,r]=e;return t+'="'+encodeURIComponent(r)+'"'}).join(" ")),'<script type="midscene_web_dump"'+i+">"+tt(s)+n)}`),a}async persistReferenceImages(e){let t=new Map;for(let r of e.getReferenceImageUrls()){let e=await this.screenshotStore.persistReferenceImage(r);t.set(r,e)}return t}async appendAgentReportComment(){if(this.agentCommentWritten||!this.lastReportMeta||0===this.executionsByKey.size)return;let e=new sK({sdkVersion:this.lastReportMeta.sdkVersion,groupName:this.lastReportMeta.groupName,groupDescription:this.lastReportMeta.groupDescription,modelBriefs:this.lastReportMeta.modelBriefs,deviceType:this.lastReportMeta.deviceType,executions:Array.from(this.executionsByKey.values())});await (0,
|
|
832
|
-
${iH(e)}`),this.agentCommentWritten=!0}getExecutionLogKey(e){if(!e.id)throw Error("ReportGenerator: execution.id is required for persisting execution dumps");return`id:${e.id}`}getExecutionCommentKey(e){if(e.id)return`id:${e.id}`;let t=this.executionCommentKeyByObject.get(e);if(t)return t;let r=`no-id:${this.executionCommentKeyIndex++}`;return this.executionCommentKeyByObject.set(e,r),r}async persistExecutionDumpToFile(e,t,r){let n=(0,tc.dirname)(this.reportPath);(0,r9.existsSync)(n)||(0,r9.mkdirSync)(n,{recursive:!0});let i=this.getExecutionLogKey(e),o=this.executionLogFileIndexByExecutionKey.get(i);o||(this.executionLogIndex+=1,o=this.executionLogIndex,this.executionLogFileIndexByExecutionKey.set(i,o));let a=`${o}.execution.json`,s=(0,tc.join)((0,tc.dirname)(this.reportPath),a);await (0,
|
|
833
|
-
${(r=iW(),'<script type="midscene-image" data-id="'+e+'">'+tt(t)+r)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump,reuseExistingReport:e.reuseExistingReport}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}function
|
|
830
|
+
${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"),e4("running"!==this.status,"task runner is already running"),e4("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];e4("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)}e4(["Insight","Action Space","Planning"].indexOf(e.type)>=0,`unsupported task type: ${e.type}`);let{executor:n}=e;e4(n,`executor is required for task type: ${e.type}`);let o="Insight"===e.type;lV(e.timing,"getUiContextStart");let a=await this.getUiContext({forceRefresh:o});lV(e.timing,"getUiContextEnd"),e.uiContext=a;let s={task:e,element:null==t?void 0:t.element,uiContext:a};if("Insight"===e.type)e4("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(s);else if("Planning"===e.type)r=await e.executor(s),"Locate"===e.subType&&(t=null==r?void 0:r.output);else if("Action Space"===e.type)try{r=await e.executor(s)}finally{this.lastUiContext=void 0}else console.warn(`unsupported task type: ${e.type}, will try to execute it directly`),r=await e.executor(s);if(i===this.tasks.length-1){lV(e.timing,"captureAfterCallingSnapshotStart");let t=await this.captureScreenshot();this.attachRecorderItem(e,t,"after-calling"),lV(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(r){o=!1;let t=l3(r);e.error=t,e.errorMessage=t.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();r=new l6((null==e?void 0:e.error)??{name:"Error",message:"Task execution failed"},function(e){if(e)return{taskId:l1(e.taskId),type:e.type,...void 0===e.subType?{}:{subType:l1(e.subType)},status:e.status,...void 0===e.thought?{}:{thought:l1(e.thought)},...void 0===e.errorMessage?{}:{errorMessage:l1(e.errorMessage)}}}(e)),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 sU({id:this.id,logTime:this.executionLogTime,name:this.name,tasks:this.tasks},{referenceImageUrls:[...this.referenceImageUrls]})}async appendErrorPlan(e){return await this.appendAndFlush({type:"Action Space",subType:"Error",param:{thought:e},thought:e,executor:async()=>{throw Error(e||"error without thought")}}),{output:void 0,runner:this}}constructor(e,t,r){for(const n of(l5(this,"id",void 0),l5(this,"name",void 0),l5(this,"tasks",void 0),l5(this,"status",void 0),l5(this,"onTaskStart",void 0),l5(this,"uiContextBuilder",void 0),l5(this,"onSnapshotChange",void 0),l5(this,"onTaskEvent",void 0),l5(this,"executionLogTime",void 0),l5(this,"referenceImageUrls",new Set),l5(this,"lastUiContext",void 0),this.id=e3(),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(),(null==r?void 0:r.referenceImages)??[]))this.referenceImageUrls.add(n.url)}}class l6 extends Error{toJSON(){return{name:this.name,code:this.code,message:this.message,...void 0===this.stack?{}:{stack:this.stack},cause:this.cause,...void 0===this.task?{}:{task:this.task}}}constructor(e,t){super(e.message,{cause:e}),l5(this,"code","TASK_EXECUTION_FAILED"),l5(this,"cause",void 0),l5(this,"task",void 0),this.name="TaskExecutionError",this.cause=e,this.task=t,this.stack&&(this.stack=l1(this.stack))}}var l8=r(83147),l9=r(8963).Buffer,Ae=r(85409);let At=l9.from("<script"),Ar=l9.from("<\/script>"),An=/data-group-id="([^"]+)"/;function Ai(e){var t;if(!e.includes('type="midscene_web_dump"'))return;let r=null==(t=e.match(An))?void 0:t[1];return r?decodeURIComponent(r):void 0}async function Ao(e,t){let r=l9.alloc(0);for await(let n of(0,iz.createReadStream)(e,{highWaterMark:0x2000000}))for(r=0===r.length?n:l9.concat([r,n]);r.length>0;){let e=r.indexOf(At);if(-1===e){r=r.subarray(Math.max(0,r.length-At.length+1));break}e>0&&(r=r.subarray(e));let n=r.indexOf(62,At.length);if(-1===n)break;let i=r.indexOf(Ar,n+1);if(-1===i)break;let o=i+Ar.length;await t({openTag:r.subarray(0,n+1).toString("utf-8"),content:r.subarray(n+1,i)}),r=r.subarray(o)}if(-1!==r.indexOf(At))throw Error(`Report contains an unterminated script tag: ${e}`)}async function Aa(e){let t=new Map,r=0;return await Ao(e,e=>{let{openTag:n,content:i}=e,o=Ai(n);if(!o)return;let a=sK.fromSerializedString(tr(i.toString("utf-8").trim())),s=t.get(o);for(let e of(s||(s={baseDump:a,executionsByKey:new Map,firstOpenTag:n,noIdExecutionIndex:0,tagCount:0},t.set(o,s)),s.tagCount+=1,r+=1,a.executions)){let t=e.id?`id:${e.id}`:`no-id:${s.noIdExecutionIndex++}`;s.executionsByKey.set(t,e)}}),{groups:t,tagCount:r}}async function As(e,t){let r=0;for(;r<t.length;){let{bytesWritten:n}=await e.write(t,r,t.length-r,null);if(0===n)throw Error("Failed to make progress while writing compacted report");r+=n}}async function Al(e,t,r){let n=new Map(Array.from(r.groups,e=>{let t,[r,n]=e;return[r,(n.baseDump.executions=Array.from(n.executionsByKey.values()),t=tt(n.baseDump.serialize()),l9.from(`${n.firstOpenTag}${t}${Ar.toString("utf-8")}`))]})),i=new Map,o=new Set,a=await (0,iF.open)(t,"wx"),s=l9.alloc(0);try{for await(let t of(0,iz.createReadStream)(e,{highWaterMark:0x2000000}))for(s=0===s.length?t:l9.concat([s,t]);s.length>0;){let e=s.indexOf(At);if(-1===e){let e=Math.max(0,s.length-At.length+1);await As(a,s.subarray(0,e)),s=s.subarray(e);break}await As(a,s.subarray(0,e));let t=(s=s.subarray(e)).indexOf(62,At.length);if(-1===t)break;let l=s.indexOf(Ar,t+1);if(-1===l)break;let A=l+Ar.length,c=s.subarray(0,t+1).toString("utf-8"),u=Ai(c);if(u&&r.groups.has(u)){let e=(i.get(u)??0)+1;i.set(u,e),e===r.groups.get(u).tagCount&&(await As(a,n.get(u)),o.add(u))}else await As(a,s.subarray(0,A));s=s.subarray(A)}if(-1!==s.indexOf(At))throw Error(`Report contains an unterminated script tag: ${e}`);for(let[e,t]of(await As(a,s),r.groups))if(i.get(e)!==t.tagCount||!o.has(e))throw Error(`Report compaction did not rewrite every dump in group: ${e}`);await a.sync()}finally{await a.close()}}async function AA(e,t){try{await (0,iF.rename)(e,t);return}catch(e){if(!function(e){if("win32"!==Ae.platform)return!1;let t=e.code;return"EACCES"===t||"EEXIST"===t||"EPERM"===t}(e))throw e}let r=(0,tc.join)((0,tc.dirname)(t),`.${(0,tc.basename)(t)}.${e3()}.backup`);await (0,iF.rename)(t,r);try{await (0,iF.rename)(e,t)}catch(e){try{await (0,iF.rename)(r,t)}catch(t){throw Error(`Failed to replace compacted report and restore the original report: ${String(e)}; restore error: ${String(t)}`)}throw e}await (0,iF.unlink)(r)}async function Ac(e){let t=await (0,iF.stat)(e),r=await Aa(e),n=r.groups.size;if(r.tagCount<=n)return{beforeBytes:t.size,afterBytes:t.size,beforeDumpCount:r.tagCount,afterDumpCount:n};let i=(0,tc.join)((0,tc.dirname)(e),`.${(0,tc.basename)(e)}.${e3()}.tmp`);try{await Al(e,i,r);let o=await (0,iF.stat)(i);return await AA(i,e),{beforeBytes:t.size,afterBytes:o.size,beforeDumpCount:r.tagCount,afterDumpCount:n}}catch(e){try{await (0,iF.unlink)(i)}catch(t){if("ENOENT"!==t.code)throw Error(`Report compaction failed and the temporary file could not be removed: ${String(e)}; cleanup error: ${String(t)}`)}throw e}}function Au(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let Ad=rq("report-generator",{console:!0}),Ap={onExecutionUpdate:()=>{},flush:async()=>{},finalize:async()=>void 0,getReportPath:()=>void 0};function Ah(e){if(!1===e.generateReport&&!0===e.persistExecutionDump)throw Error("persistExecutionDump cannot be true when generateReport is false")}class Af{static create(e,t){if(Ah(t),function(e,t){if(!(null==e?void 0:e.trim()))throw Error("reportFileName must be a non-empty string");if(/[\\/]/.test(e))throw Error("reportFileName must not contain path separators (`/` or `\\\\`)");if(/[:*?"<>|]/.test(e))throw Error('reportFileName contains illegal filename characters: : * ? " < > |');let r="html-and-external-assets"===t?e:Am(e),n=new TextEncoder().encode(r).byteLength;if(n>255)throw Error(`reportFileName produces a filename component of ${n} UTF-8 bytes; maximum is 255`)}(e,t.outputFormat),!1===t.generateReport||e0)return Ap;let r=rL("report"),n=(0,tc.join)(r,e);return new Af({reportPath:"html-and-external-assets"===t.outputFormat?(0,tc.join)(n,"index.html"):(0,tc.join)(r,Am(e)),screenshotMode:"html-and-external-assets"===t.outputFormat?"directory":"inline",persistExecutionDump:t.persistExecutionDump,autoPrint:t.autoPrintReportMsg,reuseExistingReport:t.reuseExistingReport})}onExecutionUpdate(e,t,r){this.lastExecution=e,this.lastReportMeta=t,this.executionsByKey.set(this.getExecutionCommentKey(e),e),this.mergeReportAttributes(r),this.writeQueue=this.writeQueue.then(async()=>{this.destroyed||await this.doWriteExecution(e,t)})}async flush(){await this.writeQueue}async finalize(){if(this.lastExecution&&this.lastReportMeta&&this.onExecutionUpdate(this.lastExecution,this.lastReportMeta),await this.flush(),this.destroyed=!0,this.initialized){await this.appendAgentReportComment();try{await Ac(this.reportPath)}catch(e){Ad(`Failed to compact report ${this.reportPath}; keeping the uncompressed report: ${String(e)}`)}return this.reportPath}}getReportPath(){return this.reportPath}printReportPath(){this.autoPrint&&this.reportPath&&(r5.getEnvConfigInBoolean(tV)||("directory"===this.screenshotMode?e7(`Midscene - report file updated: npx serve ${(0,tc.dirname)(this.reportPath)}`):e7(`Midscene - report file updated: ${this.reportPath}`)))}async doWriteExecution(e,t){let r=this.wrapAsReportDump(e,t),n=await this.writeExecution(e,r);this.shouldPersistExecutionDump&&await this.persistExecutionDumpToFile(e,r,n),this.firstWriteDone||(this.firstWriteDone=!0,this.printReportPath())}mergeReportAttributes(e){if(e)for(let[t,r]of Object.entries(e))null!=r&&(this.reportAttributes[t]=String(r))}hydrateStateFromExistingReport(){if(!(0,r9.existsSync)(this.reportPath)||(this.initialized=!0,!this.shouldPersistExecutionDump))return;let e=(0,tc.dirname)(this.reportPath),t=(0,r9.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,[i2]:this.screenshotMode,...this.reportAttributes}}wrapAsReportDump(e,t){return new sK({sdkVersion:t.sdkVersion,groupName:t.groupName,groupDescription:t.groupDescription,modelBriefs:t.modelBriefs,deviceType:t.deviceType,executions:[e]})}async writeExecution(e,t){var r;let n,i,o=(0,tc.dirname)(this.reportPath);if((0,r9.existsSync)(o)||(0,r9.mkdirSync)(o,{recursive:!0}),!this.initialized){let e="directory"===this.screenshotMode?i1():"";await (0,l8.writeFile)(this.reportPath,`${no()}${e}`),this.initialized=!0}for(let t of e.collectScreenshots())await this.screenshotStore.persist(t);let a=await this.persistReferenceImages(e),s=t.serializeWithReferenceImages(a);return await (0,l8.appendFile)(this.reportPath,`
|
|
831
|
+
${(r=this.getDumpScriptAttributes(),n=iW(),i="",r&&Object.keys(r).length>0&&(i=" "+Object.entries(r).map(e=>{let[t,r]=e;return t+'="'+encodeURIComponent(r)+'"'}).join(" ")),'<script type="midscene_web_dump"'+i+">"+tt(s)+n)}`),a}async persistReferenceImages(e){let t=new Map;for(let r of e.getReferenceImageUrls()){let e=await this.screenshotStore.persistReferenceImage(r);t.set(r,e)}return t}async appendAgentReportComment(){if(this.agentCommentWritten||!this.lastReportMeta||0===this.executionsByKey.size)return;let e=new sK({sdkVersion:this.lastReportMeta.sdkVersion,groupName:this.lastReportMeta.groupName,groupDescription:this.lastReportMeta.groupDescription,modelBriefs:this.lastReportMeta.modelBriefs,deviceType:this.lastReportMeta.deviceType,executions:Array.from(this.executionsByKey.values())});await (0,l8.appendFile)(this.reportPath,`
|
|
832
|
+
${iH(e)}`),this.agentCommentWritten=!0}getExecutionLogKey(e){if(!e.id)throw Error("ReportGenerator: execution.id is required for persisting execution dumps");return`id:${e.id}`}getExecutionCommentKey(e){if(e.id)return`id:${e.id}`;let t=this.executionCommentKeyByObject.get(e);if(t)return t;let r=`no-id:${this.executionCommentKeyIndex++}`;return this.executionCommentKeyByObject.set(e,r),r}async persistExecutionDumpToFile(e,t,r){let n=(0,tc.dirname)(this.reportPath);(0,r9.existsSync)(n)||(0,r9.mkdirSync)(n,{recursive:!0});let i=this.getExecutionLogKey(e),o=this.executionLogFileIndexByExecutionKey.get(i);o||(this.executionLogIndex+=1,o=this.executionLogIndex,this.executionLogFileIndexByExecutionKey.set(i,o));let a=`${o}.execution.json`,s=(0,tc.join)((0,tc.dirname)(this.reportPath),a);await (0,l8.writeFile)(s,t.serializeWithReferenceImages(r,2),"utf-8")}constructor(e){Au(this,"reportPath",void 0),Au(this,"screenshotMode",void 0),Au(this,"shouldPersistExecutionDump",void 0),Au(this,"autoPrint",void 0),Au(this,"firstWriteDone",!1),Au(this,"executionLogIndex",0),Au(this,"executionLogFileIndexByExecutionKey",new Map),Au(this,"reportStreamId",void 0),Au(this,"screenshotStore",void 0),Au(this,"initialized",!1),Au(this,"lastExecution",void 0),Au(this,"lastReportMeta",void 0),Au(this,"executionsByKey",new Map),Au(this,"executionCommentKeyByObject",new WeakMap),Au(this,"executionCommentKeyIndex",0),Au(this,"reportAttributes",{}),Au(this,"agentCommentWritten",!1),Au(this,"writeQueue",Promise.resolve()),Au(this,"destroyed",!1),this.reportPath=e.reportPath,this.screenshotMode=e.screenshotMode,this.shouldPersistExecutionDump=e.persistExecutionDump??!1,this.autoPrint=e.autoPrint??!0,this.reportStreamId=e3(),this.screenshotStore=new sR({mode:"inline"===this.screenshotMode?"inline":"directory",reportPath:this.reportPath,screenshotsDir:(0,tc.join)((0,tc.dirname)(this.reportPath),"screenshots"),writeInlineImage:async(e,t)=>{let r;await (0,l8.appendFile)(this.reportPath,`
|
|
833
|
+
${(r=iW(),'<script type="midscene-image" data-id="'+e+'">'+tt(t)+r)}`)},alsoWriteFileCopy:this.shouldPersistExecutionDump,reuseExistingReport:e.reuseExistingReport}),e.reuseExistingReport&&this.hydrateStateFromExistingReport()}}function Am(e){return e.endsWith(".html")?e:`${e}.html`}var Ag=r(58973);let Ay=["default","aiAct","aiTap","aiRightClick","aiDoubleClick","aiHover","aiInput","aiKeyboardPress","aiScroll","aiPinch","aiLongPress","aiClearInput","aiLocate","aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert","aiWaitFor"],Av=e=>"string"==typeof e&&Ay.includes(e),Ab=Symbol("midscene.observationArtifactAdapter"),Aw=["read-only","read-write","write-only"],AE=Aw.map(e=>`"${e}"`).join(", ");var Ax=r(9140);function Ak(e,t){if(!Number.isFinite(e.width)||!Number.isFinite(e.height))throw Error(`Invalid ${t}: width and height must be finite numbers. Received width: ${e.width}, height: ${e.height}`);if(e.width<=0||e.height<=0)throw Error(`Invalid ${t}: width and height must be positive numbers. Received width: ${e.width}, height: ${e.height}`)}async function AS(e,t){let r=(null==t?void 0:t.shrinkFactor)??1;if(!Number.isFinite(r)||r<1)throw Error(`Invalid screenshotShrinkFactor: must be a finite number >= 1. Received: ${r}`);let n=await op(e);Ak(n,"screenshot dimensions");let i=r>1?{width:Math.round(n.width/r),height:Math.round(n.height/r)}:{...n};return Ak(i,"prepared screenshot dimensions"),{base64:await oC(e,{sourceSize:n,targetSize:i,jpegQuality:90}),originalSize:n,shotSize:i}}async function AC(e,t){return 1===((null==t?void 0:t.shrinkFactor)??1)?oS(e,90):(await AS(e,t)).base64}var AI=r(88586),Aj=r.n(AI),AO=r(8963).Buffer;function AP(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=rq("cache"),AM=rq("cache",{console:!0}),AT=".cache.yaml";class AN{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,td.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),AR("cache found and marked as used, type: %s, prompt: %s, index: %d",t,e,n),{cacheContent:i,cacheUsable:!0,updateFn:r=>{(AR("will call updateFn to update cache, type: %s, prompt: %s, index: %d",t,e,n),r(i),this.readOnlyMode)?AR("read-only mode, cache updated in memory but not flushed to file"):(AR("cache updated, will flush to file, type: %s, prompt: %s, index: %d",t,e,n),this.flushCacheToFile())}}}}AR("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 AR("plan cache matched but yamlWorkflow is empty, treat as cache miss"),{...t,cacheUsable:!1};try{var n;let e=lm.Ay.load(r);if(!(null==e||null==(n=e.tasks)?void 0:n.some(e=>Array.isArray(e.flow)&&e.flow.length>0)))return AR("plan cache matched but flow is empty, treat as cache miss"),{...t,cacheUsable:!1}}catch{return AR("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){(AR("will append cache",e),this.cache.caches.push(e),this.readOnlyMode)?AR("read-only mode, cache appended to memory but not flushed to file"):this.flushCacheToFile()}loadCacheFromFile(){let e=this.cacheFilePath;if(on()(e,"cache file path is required"),!(0,Ax.existsSync)(e))return void AR("no cache file found, path: %s",e);let t=e.replace(AT,".json");if((0,Ax.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,Ax.readFileSync)(e,"utf8"),r=lm.Ay.load(t);if(!AZ())return void AR("no midscene version info, will not read cache from file");if(Aj().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.
|
|
834
834
|
Please delete the existing cache and rebuild it. Sorry for the inconvenience.
|
|
835
|
-
cache file: ${e}`);return AP("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion=AJ(),r}catch(t){AP("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!AJ())return void AP("no midscene version info, will not write cache to file");if(!this.cacheFilePath)return void AP("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?AP("cleaned %d unused cache record(s)",r):AP("no unused cache to clean")}else AP("skip cleaning: cache is not used for reading");try{let e=(0,tc.dirname)(this.cacheFilePath);(0,AE.existsSync)(e)||((0,AE.mkdirSync)(e,{recursive:!0}),AP("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=lf.Ay.dump(r,{lineWidth:-1});(0,AE.writeFileSync)(this.cacheFilePath,n),AP("cache flushed to file: %s",this.cacheFilePath)}catch(e){AR(`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]?(AP("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),AP("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(on()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?AP("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var i;let o;if(AO(this,"cacheId",void 0),AO(this,"cacheFilePath",void 0),AO(this,"cache",void 0),AO(this,"isCacheResultUsed",void 0),AO(this,"cacheOriginalLength",void 0),AO(this,"readOnlyMode",void 0),AO(this,"writeOnlyMode",void 0),AO(this,"matchedCacheIndices",new Set),AO(this,"consumedCacheIndices",new Map),AO(this,"staleCacheIndices",new Map),on()(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=e.replace(/[:*?"<>|# ]/g,"-");const l=r5.getEnvConfigValueAsNumber(t$)??200;if(Aj.byteLength(s,"utf8")>l){const e=s.slice(0,32),t=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=JSON.stringify({content:t,rect:e}),n=5,i="",o=eY.sha256.create().update(r).hex().split("").map(e=>String.fromCharCode(97+Number.parseInt(e,16)%26)).join("");for(;n<o.length-1;){if(e5[i=o.slice(0,n)]&&e5[i]!==r){n++;continue}e5[i]=r;break}return i}(void 0,s);s=`${e}-${t}`}this.cacheId=s,this.cacheFilePath=e0||e1?void 0:r||(0,tc.join)(a||rL("cache"),`${this.cacheId}${AM}`);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:AJ(),cacheId:this.cacheId,caches:[]}),this.cache=o,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}var AN=r(59300),AD=r.n(AN);function AB(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=r5.getEnvConfigValue(tG),r=AD()().format("YYYY-MM-DD_HH-mm-ss"),n=e3().substring(0,8);return`${t||e}-${r}-${n}`}var Az=r(85409);rq("agent");let AF={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function AL(e,t){var r;let n=rq("commonContextParser");e4(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"),np({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();e4(l,"screenshotBase64 is required");let c=t.screenshotShrinkFactor??1;n("will get screenshot dimensions");let u=await Ak(l,{shrinkFactor:c}),{width:d,height:p}=u.originalSize;n("screenshot dimensions",d,"x",p);let h=a<s,f=d<p,m=a;h!==f&&(n(`Orientation mismatch detected: logical size ${a}x${s} (${h?"portrait":"landscape"}) vs screenshot ${d}x${p} (${f?"portrait":"landscape"}). Swapping logical dimensions.`),m=s);let g=d/m;n("calculated dpr:",g);let y=g/c;return n("shrunkShotToLogicalRatio",y),c>1&&n(`Applied screenshot shrink factor: ${c} (physical: ${d}x${p} -> target: ${u.shotSize.width}x${u.shotSize.height})`),{shotSize:u.shotSize,deprecatedDpr:g,screenshot:ot.create(u.base64,A),shrunkShotToLogicalRatio:y}}function AU(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fileExists:r=AE.existsSync,isInBrowser:n=e0,resolvePath:i=tc.resolve,wslDistroName:o=Az.env.WSL_DISTRO_NAME,cwd:a=Az.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,"\\")}`})}function AK(e){let t=e.locatedPixelResult;if(!t||"object"!=typeof t||!("center"in t))return!1;let r=t.center;return Array.isArray(r)&&2===r.length&&r.every(e=>"number"==typeof e&&Number.isFinite(e))}async function AQ(e,t,r,n){var i;if(t){if(!1===n)return void AP("cache disabled for prompt: %s",r);if(null==(i=e.taskCache)?void 0:i.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void AP("interface does not implement rectMatchesCacheFeature, skip cache");try{let n=await e.interfaceInstance.rectMatchesCacheFeature(t),i={center:[n.left+n.width/2,n.top+n.height/2],rect:n,description:"string"==typeof r?r:r.prompt||""};return AP("cache hit, prompt: %s",r),i}catch(e){AP("rectMatchesCacheFeature error: %s",e);return}}}}let AJ=()=>"1.12.7-beta-20260914023554.0",AZ=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0},AX=(e,t)=>1===t?e:{...e,center:[e.center[0]*t,e.center[1]*t],...e.rect?{rect:Aq(e.rect,t)}:{}},Aq=(e,t)=>1===t?e:{...e,left:Math.round(e.left*t),top:Math.round(e.top*t),width:Math.round(e.width*t),height:Math.round(e.height*t)};function 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 AW{async register(e){await this.replaceAcceptedFiles(AU(Array.isArray(e)?e:[e]))}async registerFromAllowedDir(e,t){let r;await this.replaceAcceptedFiles((r=(0,tc.resolve)(t),AU((Array.isArray(e)?e:[e]).map(e=>{let t=(0,tc.resolve)(r,e),n=(0,tc.relative)(r,t);if(".."===n||n.startsWith(`..${tc.sep}`)||(0,tc.isAbsolute)(n))throw Error(`File chooser path must be inside the configured fileChooserAllowedDir: ${e}`);return t}))))}async replaceAcceptedFiles(e){let t=await this.clear();if(t)throw t;if(e.length){if(!this.interfaceInstance.registerFileChooserListener)throw Error(`File upload is not supported on ${this.interfaceInstance.interfaceType}`);this.registration=await this.interfaceInstance.registerFileChooserListener(async t=>{await t.accept(e)})}}async clear(){let e=this.registration;if(this.registration=void 0,e)try{return await e.getError()}finally{e.dispose()}}constructor(e){AH(this,"interfaceInstance",void 0),AH(this,"registration",void 0),this.interfaceInstance=e}}async function AG(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()}}class AV{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 l4(e,t,r)}}function AY(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let A$=rq("agent-progress-bus",{console:!0});class A_{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(){AY(this,"listeners",[]),AY(this,"sequence",0),AY(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){A$("error in progress listener",e)}})}}function A0(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function A1(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(A1):A0(e)&&"string"==typeof e.prompt?A1(e.prompt):A0(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,A1(r)]})):String(e)}function A2(e){return e instanceof Error?e.message:String(e)}function A3(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function A5(e){let t=e.center;if(Array.isArray(t)&&t.length>=2){let e=A3(t[0]),r=A3(t[1]);if(void 0!==e&&void 0!==r)return[e,r]}}function A4(e){return!!A0(e)&&("locatedPixelResult"in e||"center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let A7=["locate","from","to","start","end"],A6=rq("agent:usage-intent",{console:!0});function A8(e,t){if(e)return e.intent?(A6(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}function A9(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ce=rq("agent:task-builder");function ct(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function cr(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 cn(e){return{type:"Locate",param:cr(e),thought:""}}class ci{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=iS(r,this.actionSpace),i=e.param,o=iN(n.paramSchema),a=iN(n.paramSchema,!0);o.forEach(e=>{if(i[e]){let n=cn(i[e]);ce("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(i[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelResult=${AK(i[e])}`);let o=this.createLocateTask(n,i[e],t,t=>{i[e]=t});t.tasks.push(o)}else e4(!a.includes(e),`Required locate field '${e}' is not provided for action ${r}`),ce(`field '${e}' is not provided for action ${r}`)});let s={type:"Action Space",subType:r,thought:e.thought,param:e.param,executor:async e=>{var t;let o=e.task.timing;ce("executing action",r,i,`taskContext.element.center: ${null==(t=e.element)?void 0:t.center}`);let s=e.uiContext;e4(s,"uiContext is required for Action task"),a.forEach(e=>{e4(i[e],`field '${e}' is required for action ${r} but not provided. Cannot execute action ${r}.`)}),lG(o,"beforeInvokeActionHookStart");let l=n.delayBeforeRunner??200;try{await Promise.all([(async()=>{this.interface.beforeInvokeAction&&(ce(`will call "beforeInvokeAction" for interface with action name ${n.name}`),await this.interface.beforeInvokeAction(n.name,i),ce(`called "beforeInvokeAction" for interface with action name ${n.name}`))})(),l>0?nl(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})}lG(o,"beforeInvokeActionHookEnd");let{shrunkShotToLogicalRatio:A}=s;if(void 0===A)throw Error("shrunkShotToLogicalRatio is not defined in Action task");let c=(()=>{if(!n.paramSchema)return i;try{return((e,t,r)=>{if(!t)return;let n=e??{},i=iN(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&&t&&"object"==typeof t&&t.center&&(t={...t,center:[Math.round(t.center[0]/l),Math.round(t.center[1]/l)]}),s[e]=t}return s})(i,n.paramSchema,{shrunkShotToLogicalRatio:A})}catch(e){throw Error(`Invalid parameters for action ${n.name}: ${e.message}
|
|
836
|
-
Parameters: ${JSON.stringify(i)}`,{cause:e})}})();
|
|
837
|
-
...[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){
|
|
835
|
+
cache file: ${e}`);return AR("cache loaded from file, path: %s, cache version: %s, record length: %s",e,r.midsceneVersion,r.caches.length),r.midsceneVersion=AZ(),r}catch(t){AR("cache file exists but load failed, path: %s, error: %s",e,t);return}}flushCacheToFile(e){if(!AZ())return void AR("no midscene version info, will not write cache to file");if(!this.cacheFilePath)return void AR("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?AR("cleaned %d unused cache record(s)",r):AR("no unused cache to clean")}else AR("skip cleaning: cache is not used for reading");try{let e=(0,tc.dirname)(this.cacheFilePath);(0,Ax.existsSync)(e)||((0,Ax.mkdirSync)(e,{recursive:!0}),AR("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=lm.Ay.dump(r,{lineWidth:-1});(0,Ax.writeFileSync)(this.cacheFilePath,n),AR("cache flushed to file: %s",this.cacheFilePath)}catch(e){AM(`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]?(AR("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),AR("marked locate cache entry as stale, prompt: %s, index: %d",e,n)}replaceCacheRecord(e,t){let r=this.cache.caches[e];(on()(r.type===t.type,`cache record type mismatch on replace: expected ${t.type}, got ${r.type}`),this.applyRecordInto(r,t),this.readOnlyMode)?AR("read-only mode, cache replaced in memory but not flushed to file"):this.flushCacheToFile()}constructor(e,t,r,n={}){var i;let o;if(AP(this,"cacheId",void 0),AP(this,"cacheFilePath",void 0),AP(this,"cache",void 0),AP(this,"isCacheResultUsed",void 0),AP(this,"cacheOriginalLength",void 0),AP(this,"readOnlyMode",void 0),AP(this,"writeOnlyMode",void 0),AP(this,"matchedCacheIndices",new Set),AP(this,"consumedCacheIndices",new Map),AP(this,"staleCacheIndices",new Map),on()(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=e.replace(/[:*?"<>|# ]/g,"-");const l=r5.getEnvConfigValueAsNumber(t$)??200;if(AO.byteLength(s,"utf8")>l){const e=s.slice(0,32),t=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=JSON.stringify({content:t,rect:e}),n=5,i="",o=eY.sha256.create().update(r).hex().split("").map(e=>String.fromCharCode(97+Number.parseInt(e,16)%26)).join("");for(;n<o.length-1;){if(e5[i=o.slice(0,n)]&&e5[i]!==r){n++;continue}e5[i]=r;break}return i}(void 0,s);s=`${e}-${t}`}this.cacheId=s,this.cacheFilePath=e0||e1?void 0:r||(0,tc.join)(a||rL("cache"),`${this.cacheId}${AT}`);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:AZ(),cacheId:this.cacheId,caches:[]}),this.cache=o,this.cacheOriginalLength=this.isCacheResultUsed?this.cache.caches.length:0}}var AD=r(59300),AB=r.n(AD);function Az(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web",t=r5.getEnvConfigValue(tG),r=AB()().format("YYYY-MM-DD_HH-mm-ss"),n=e3().substring(0,8);return`${t||e}-${r}-${n}`}var AF=r(85409);rq("agent");let AL={once:"singleAction",untilBottom:"scrollToBottom",untilTop:"scrollToTop",untilRight:"scrollToRight",untilLeft:"scrollToLeft"};async function AU(e,t){var r;let n=rq("commonContextParser");e4(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"),np({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();e4(l,"screenshotBase64 is required");let c=t.screenshotShrinkFactor??1;n("will get screenshot dimensions");let u=await AS(l,{shrinkFactor:c}),{width:d,height:p}=u.originalSize;n("screenshot dimensions",d,"x",p);let h=a<s,f=d<p,m=a;h!==f&&(n(`Orientation mismatch detected: logical size ${a}x${s} (${h?"portrait":"landscape"}) vs screenshot ${d}x${p} (${f?"portrait":"landscape"}). Swapping logical dimensions.`),m=s);let g=d/m;n("calculated dpr:",g);let y=g/c;return n("shrunkShotToLogicalRatio",y),c>1&&n(`Applied screenshot shrink factor: ${c} (physical: ${d}x${p} -> target: ${u.shotSize.width}x${u.shotSize.height})`),{shotSize:u.shotSize,deprecatedDpr:g,screenshot:ot.create(u.base64,A),shrunkShotToLogicalRatio:y}}function AK(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fileExists:r=Ax.existsSync,isInBrowser:n=e0,resolvePath:i=tc.resolve,wslDistroName:o=AF.env.WSL_DISTRO_NAME,cwd:a=AF.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,"\\")}`})}function AQ(e){let t=e.locatedPixelResult;if(!t||"object"!=typeof t||!("center"in t))return!1;let r=t.center;return Array.isArray(r)&&2===r.length&&r.every(e=>"number"==typeof e&&Number.isFinite(e))}async function AJ(e,t,r,n){var i;if(t){if(!1===n)return void AR("cache disabled for prompt: %s",r);if(null==(i=e.taskCache)?void 0:i.isCacheResultUsed){if(!e.interfaceInstance.rectMatchesCacheFeature)return void AR("interface does not implement rectMatchesCacheFeature, skip cache");try{let n=await e.interfaceInstance.rectMatchesCacheFeature(t),i={center:[n.left+n.width/2,n.top+n.height/2],rect:n,description:"string"==typeof r?r:r.prompt||""};return AR("cache hit, prompt: %s",r),i}catch(e){AR("rectMatchesCacheFeature error: %s",e);return}}}}let AZ=()=>"1.12.7",AX=e=>"string"==typeof e?{textPrompt:e,multimodalPrompt:void 0}:{textPrompt:e.prompt,multimodalPrompt:e.images?{images:e.images,convertHttpImage2Base64:!!e.convertHttpImage2Base64}:void 0},Aq=(e,t)=>1===t?e:{...e,center:[e.center[0]*t,e.center[1]*t],...e.rect?{rect:AH(e.rect,t)}:{}},AH=(e,t)=>1===t?e:{...e,left:Math.round(e.left*t),top:Math.round(e.top*t),width:Math.round(e.width*t),height:Math.round(e.height*t)};function AW(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class AG{async register(e){await this.replaceAcceptedFiles(AK(Array.isArray(e)?e:[e]))}async registerFromAllowedDir(e,t){let r;await this.replaceAcceptedFiles((r=(0,tc.resolve)(t),AK((Array.isArray(e)?e:[e]).map(e=>{let t=(0,tc.resolve)(r,e),n=(0,tc.relative)(r,t);if(".."===n||n.startsWith(`..${tc.sep}`)||(0,tc.isAbsolute)(n))throw Error(`File chooser path must be inside the configured fileChooserAllowedDir: ${e}`);return t}))))}async replaceAcceptedFiles(e){let t=await this.clear();if(t)throw t;if(e.length){if(!this.interfaceInstance.registerFileChooserListener)throw Error(`File upload is not supported on ${this.interfaceInstance.interfaceType}`);this.registration=await this.interfaceInstance.registerFileChooserListener(async t=>{await t.accept(e)})}}async clear(){let e=this.registration;if(this.registration=void 0,e)try{return await e.getError()}finally{e.dispose()}}constructor(e){AW(this,"interfaceInstance",void 0),AW(this,"registration",void 0),this.interfaceInstance=e}}async function AV(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()}}class AY{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 l7(e,t,r)}}function A$(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let A_=rq("agent-progress-bus",{console:!0});class A0{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(){A$(this,"listeners",[]),A$(this,"sequence",0),A$(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){A_("error in progress listener",e)}})}}function A1(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function A2(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(A2):A1(e)&&"string"==typeof e.prompt?A2(e.prompt):A1(e)?Object.fromEntries(Object.entries(e).slice(0,6).map(e=>{let[t,r]=e;return[t,A2(r)]})):String(e)}function A3(e){return e instanceof Error?e.message:String(e)}function A5(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function A4(e){let t=e.center;if(Array.isArray(t)&&t.length>=2){let e=A5(t[0]),r=A5(t[1]);if(void 0!==e&&void 0!==r)return[e,r]}}function A7(e){return!!A1(e)&&("locatedPixelResult"in e||"center"in e||"rect"in e||"point"in e||"bbox"in e||"prompt"in e||"description"in e)}let A6=["locate","from","to","start","end"],A8=rq("agent:usage-intent",{console:!0});function A9(e,t){if(e)return e.intent?(A8(`intent is already set to "${e.intent}", skipping overwrite to "${t}"`),e):{...e,intent:t}}function ce(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ct=rq("agent:task-builder");function cr(e){return null!=e&&"object"==typeof e&&Object.keys(e).length>0}function cn(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 ci(e){return{type:"Locate",param:cn(e),thought:""}}class co{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=iS(r,this.actionSpace),i=e.param,o=iN(n.paramSchema),a=iN(n.paramSchema,!0);o.forEach(e=>{if(i[e]){let n=ci(i[e]);ct("will prepend locate param for field",`action.type=${r}`,`param=${JSON.stringify(i[e])}`,`locatePlan=${JSON.stringify(n)}`,`hasLocatedPixelResult=${AQ(i[e])}`);let o=this.createLocateTask(n,i[e],t,t=>{i[e]=t});t.tasks.push(o)}else e4(!a.includes(e),`Required locate field '${e}' is not provided for action ${r}`),ct(`field '${e}' is not provided for action ${r}`)});let s={type:"Action Space",subType:r,thought:e.thought,param:e.param,executor:async e=>{var t;let o=e.task.timing;ct("executing action",r,i,`taskContext.element.center: ${null==(t=e.element)?void 0:t.center}`);let s=e.uiContext;e4(s,"uiContext is required for Action task"),a.forEach(e=>{e4(i[e],`field '${e}' is required for action ${r} but not provided. Cannot execute action ${r}.`)}),lV(o,"beforeInvokeActionHookStart");let l=n.delayBeforeRunner??200;try{await Promise.all([(async()=>{this.interface.beforeInvokeAction&&(ct(`will call "beforeInvokeAction" for interface with action name ${n.name}`),await this.interface.beforeInvokeAction(n.name,i),ct(`called "beforeInvokeAction" for interface with action name ${n.name}`))})(),l>0?nl(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})}lV(o,"beforeInvokeActionHookEnd");let{shrunkShotToLogicalRatio:A}=s;if(void 0===A)throw Error("shrunkShotToLogicalRatio is not defined in Action task");let c=(()=>{if(!n.paramSchema)return i;try{return((e,t,r)=>{if(!t)return;let n=e??{},i=iN(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&&t&&"object"==typeof t&&t.center&&(t={...t,center:[Math.round(t.center[0]/l),Math.round(t.center[1]/l)]}),s[e]=t}return s})(i,n.paramSchema,{shrunkShotToLogicalRatio:A})}catch(e){throw Error(`Invalid parameters for action ${n.name}: ${e.message}
|
|
836
|
+
Parameters: ${JSON.stringify(i)}`,{cause:e})}})();lV(o,"callActionStart"),ct("calling action",n.name);let u=n.call.bind(this.interface),d=await u(c,e);lV(o,"callActionEnd"),ct("called action",n.name,"result:",d),lV(o,"afterInvokeActionHookStart");let p=n.delayAfterRunner??this.waitAfterAction??300;p>0&&await nl(p);try{this.interface.afterInvokeAction&&(ct(`will call "afterInvokeAction" for interface with action name ${n.name}`),await this.interface.afterInvokeAction(n.name,c),ct(`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 lV(o,"afterInvokeActionHookEnd"),{output:d}}};t.tasks.push(s)}createLocateTask(e,t,r,n){let{cacheable:i,defaultModel:o,deepLocate:a,abortSignal:s}=r,l=cn(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=>{var t,r,i,a,A;let c,u,d,p,h,f,{task:m}=e,{uiContext:g}=e,y=AQ(l)?l:void 0;e4((null==l?void 0:l.prompt)||y,`No prompt or id or position or locatedPixelResult to locate, param=${JSON.stringify(l)}`),g||(g=await this.service.contextRetrieverFn()),e4(g,"uiContext is required for Service task");let{shrunkShotToLogicalRatio:v}=g;if(void 0===v)throw Error("shrunkShotToLogicalRatio is not defined in locate task");let b=e=>{var t,r,n,i,o,a,s;e&&(c=e,m.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},m.usage=A9(null==(i=e.taskInfo)?void 0:i.usage,"default"),m.searchArea=null==(o=e.taskInfo)?void 0:o.searchArea,(null==(a=e.taskInfo)?void 0:a.searchAreaUsage)&&(m.searchAreaUsage=A9(e.taskInfo.searchAreaUsage,"default")),(null==(s=e.taskInfo)?void 0:s.reasoning_content)&&(m.reasoning_content=e.taskInfo.reasoning_content))},w=y?function(e){var t;if(!e)return;let{center:r,rect:n}=e.locatedPixelResult;return{center:[...r],description:"string"==typeof e.prompt?e.prompt:(null==(t=e.prompt)?void 0:t.prompt)||"",...n?{rect:n}:{}}}(y):void 0,E=l.deepLocate?void 0:w,x=!!E;if(!x&&l.xpath&&this.interface.rectMatchesCacheFeature)try{d=await this.interface.rectMatchesCacheFeature({xpaths:[l.xpath]})}catch{}let k=d?Aq({center:[d.left+d.width/2,d.top+d.height/2],description:"string"==typeof l.prompt?l.prompt:(null==(t=l.prompt)?void 0:t.prompt)||"",rect:d},v):void 0,S=!!k,C=l.prompt,I=null==(r=this.taskCache)?void 0:r.matchLocateCache(C),j=null==I||null==(i=I.cacheContent)?void 0:i.cache,O=x||S?null:await AJ({taskCache:this.taskCache,interfaceInstance:this.interface},j,C,l.cacheable),P=O?Aq(O,v):void 0,R=!!P,M=e.task.timing;if(!S&&!R&&!x)try{lV(M,"callAiStart"),u=await this.service.locate(l,{context:g,planLocatedElement:w},o,s),b(u.dump),p=u.element}catch(e){throw e instanceof sx&&b(e.dump),e}finally{lV(M,"callAiEnd")}let T=E||k||P||p;if(T){let e=function(e){var t,r,n;let i=[null==(t=e.center)?void 0:t[0],null==(r=e.center)?void 0:r[1]];if((null==(n=e.center)?void 0:n.length)!==2||i.some(e=>"number"!=typeof e||!Number.isFinite(e)))return`Invalid locate result coordinates: ${JSON.stringify(e)}`}(T);if(e){if(c)throw new sx(e,c);throw Error(e)}}let N=cr(null==I||null==(a=I.cacheContent)?void 0:a.cache);if(T&&this.taskCache&&!R&&(!x||!N)&&!1!==l.cacheable)if(this.interface.cacheFeatureForPoint)try{let e=[Math.round(T.center[0]/v),Math.round(T.center[1]/v)],t=await this.interface.cacheFeatureForPoint(e,{targetDescription:"string"==typeof l.prompt?l.prompt:null==(A=l.prompt)?void 0:A.prompt,modelRuntime:o});cr(t)?(ct("update cache, prompt: %s, cache: %o",C,t),h=t,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:C,cache:t},I)):ct("no cache data returned, skip cache update, prompt: %s",C)}catch(e){ct("cacheFeatureForPoint failed: %s",e)}else ct("cacheFeatureForPoint is not supported, skip cache update");if(!T){if(c)throw new sx(`Element not found : ${l.prompt}`,c);throw Error(`Element not found: ${l.prompt}`)}x&&y?f={from:"Plan",context:{locatedPixelResult:y.locatedPixelResult}}:S?f={from:"User expected path",context:{xpath:l.xpath}}:R&&(f={from:"Cache",context:{cacheEntry:j,cacheToSave:h}});let D=l.promptDisplay,B=D?{...T,description:D}:T;return D&&(null==c?void 0:c.matchedElement)&&(c.matchedElement=c.matchedElement.map(e=>({...e,description:D}))),null==n||n(B),{output:{element:{...B,dpr:g.deprecatedDpr}},hitBy:f}}}}constructor({interfaceInstance:e,service:t,taskCache:r,actionSpace:n,waitAfterAction:i}){ce(this,"interface",void 0),ce(this,"service",void 0),ce(this,"taskCache",void 0),ce(this,"actionSpace",void 0),ce(this,"waitAfterAction",void 0),this.interface=e,this.service=t,this.taskCache=r,this.actionSpace=n,this.waitAfterAction=i}}function ca(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 cs(e){return e.subType||e.type}function cl(e){if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e){if("string"==typeof e.promptDisplay)return e.promptDisplay;if("object"==typeof e.prompt&&null!==e.prompt&&e.prompt.prompt)return e.prompt.prompt;if("string"==typeof e.prompt)return e.prompt;if("string"==typeof e.description)return e.description}return""}function cA(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 cc(e,t){return t?`${e} - ${t}`:e}function cu(e){var t,r,n,i,o,a,s,l,A,c,u;let d;if("Planning"===e.type&&(d="Locate"===e.subType?cl(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)?iP(e.param.userInstruction):void 0)),"Insight"===e.type&&(d=cA(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?cl(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=cl(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 cd(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cp=rq("device-task-executor"),ch=rq("device-task-executor",{console:!0});class cf{get page(){return this.interface}createExecutionSession(e,t){return new AY(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,referenceImages:null==t?void 0:t.referenceImages,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)}
|
|
837
|
+
...[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){ch(`Failed to get device time string, falling back to runtime time: ${e}`)}else ch("useDeviceTime is enabled but getDeviceLocalTimeString is not implemented, falling back to runtime time.");return iB(e)}async convertPlanToExecutable(e,t,r,n){return this.taskBuilder.build(e,t,r,n)}async loadYamlFlowAsPlanning(e,t,r){var n;let i=this.createExecutionSession(cc((null==r?void 0:r.type)||"Act",(null==r?void 0:r.prompt)||iP(e)),{referenceImages:null==(n=iR(e))?void 0:n.images}),o={type:"Planning",subType:"LoadYaml",param:{userInstruction:e,...(null==r?void 0:r.prompt)?{userInstructionDisplay:r.prompt}:{}},executor:async e=>{let{uiContext:r}=e;return e4(r,"uiContext is required for Planning task"),{output:{actions:[],shouldContinuePlanning:!1,log:"",yamlString:t},cache:{hit:!0},hitBy:{from:"Cache",context:{yamlString:t}}}}},a=i.getRunner();return await i.appendAndRun(o),{runner:a}}async sleep(e){let t=this.createExecutionSession("Sleep"),r=ld();await t.appendAndRun({type:"Action Space",subType:r.name,param:{timeMs:e},executor:async t=>{let{task:n}=t;e4(Number.isFinite(e)&&e>0,`ms for sleep must be a finite number greater than 0, but got ${e}`),lV(n.timing,"callActionStart");try{await r.call({timeMs:e})}finally{lV(n.timing,"callActionEnd")}}})}async runPlans(e,t,r,n,i){let o=this.createExecutionSession(e,i),a=o.getRunner(),s={...r,executionId:a.id},l={...n,executionId:a.id},{tasks:A}=await this.convertPlanToExecutable(t,s,l),{output:c}=await o.appendAndRun(A)??{};return{output:c,runner:a}}async action(e,t,r,n,i,o){let a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"balance",s=arguments.length>7?arguments[7]:void 0,l=arguments.length>8?arguments[8]:void 0,A=arguments.length>9?arguments[9]:void 0,c=arguments.length>10?arguments[10]:void 0;return AV(this.interface,s,async()=>this.runAction(e,t,r,n,i,o,a,l,A,c))}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){var a;let s,l,A,c,u=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"balance",d=arguments.length>7?arguments[7]:void 0,p=arguments.length>8?arguments[8]:void 0,h=arguments.length>9?arguments[9]:void 0,f=new oJ,m=(null==h?void 0:h.prompt)||iP(e),g=this.createExecutionSession(cc((null==h?void 0:h.type)||"Act",m),{referenceImages:null==(a=iR(e))?void 0:a.images,onTaskEvent:async e=>{await (null==l?void 0:l(e))}}),y=g.getRunner();t={...t,executionId:y.id},r={...r,executionId:y.id};let v="default"===t.config.slot,b="deepThink"!==u&&v,w="deepThink"===u?2:1;cp("setting includeLocateInPlanning to",b,{effort:u,noIndividualLocateModel:v});let E=0,x=[],k=o??this.replanningCycleLimit;if(void 0===k)throw Error("replanningCycleLimit is required for TaskExecutor.action");await this.emitAiActProgress("start",{prompt:m,planLimit:k});let S=async(e,t)=>(await this.emitAiActProgress("failed",{...t?{planIndex:t}:{},planLimit:k,error:e}),g.appendErrorPlan(e)),C=0,I=0;if(null==p?void 0:p.aborted)return S(`Task aborted: ${p.reason||"abort signal received"}`);let j=()=>(s??(s=oF(e)),s);for(;;){let o,a=E+1;if(I=a,null==p?void 0:p.aborted)return S(`Task aborted: ${p.reason||"abort signal received"}`,a);let s=f.subGoalsToText()||void 0,m=f.memoriesToText()||void 0,v=await g.appendAndRun({type:"Planning",subType:"Plan",param:{userInstruction:e,...(null==h?void 0:h.prompt)?{userInstructionDisplay:h.prompt}:{},replanningCycleLimit:k,aiActContext:n,imagesIncludeCount:w,effort:u,...s?{subGoalStatus:s}:{},...m?{memoriesStatus:m}:{}},executor:async e=>{let r,{uiContext:i}=e;e4(i,"uiContext is required for Planning task");let o=e.task.timing;await this.emitAiActProgress("plan_thinking",{planIndex:a,planLimit:k,screenshot:i.screenshot});let s=this.getActionSpace();cp("actionSpace for this interface is:",s.map(e=>e.name).join(", ")),e4(Array.isArray(s),"actionSpace must be an array"),0===s.length&&console.warn(`ActionSpace for ${this.interface.interfaceType} is empty. This may lead to unexpected behavior.`);let l="custom"===t.adapter.planning.kind?t.adapter.planning.planFn:lC;try{let e=await j();lV(o,"callAiStart"),r=await l(e,{context:i,actionContext:sv(n),actionSpace:s,modelRuntime:t,conversationHistory:f,includeLocateInPlanning:b,imagesIncludeCount:w,effort:u,abortSignal:p})}catch(t){throw t instanceof nI&&(e.task.usage=A9(t.usage,"planning"),e.task.log={...e.task.log||{},rawResponse:t.rawResponse,rawChoiceMessage:t.rawChoiceMessage}),await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:k,error:A3(t)}),t}finally{lV(o,"callAiEnd")}cp("planResult",JSON.stringify(r,null,2));let{actions:c,thought:d,log:h,memory:m,error:g,usage:y,rawResponse:v,rawChoiceMessage:E,reasoning_content:x,finalizeSuccess:S,finalizeMessage:C,updateSubGoals:I,markFinishedIndexes:O}=r;if(A=C,e.task.log={...e.task.log||{},rawResponse:v,rawChoiceMessage:E},e.task.usage=A9(y,"planning"),e.task.reasoning_content=x,e.task.output={actions:c||[],log:h,thought:d,memory:m,yamlFlow:r.yamlFlow,output:C,shouldContinuePlanning:r.shouldContinuePlanning,updateSubGoals:I,markFinishedIndexes:O},e.uiContext=i,(h||d)&&await this.emitAiActProgress("plan_planned",{planIndex:a,planLimit:k,...h?{log:h}:{},...d?{thought:d}:{}}),g){let e=`Failed to continue: ${g}
|
|
838
838
|
${h||""}`;await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:k,error:e})}if(e4(!g,`Failed to continue: ${g}
|
|
839
839
|
${h||""}`),!1===S){let e=`Task failed: ${C||"No error message provided"}
|
|
840
|
-
${h||""}`;await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:k,error:e}),e4(!1,e)}return{cache:{hit:!1}}}},{allowWhenError:!0}),O=null==v?void 0:v.output;c=O;let P=(null==O?void 0:O.actions)||[];x.push(...(null==O?void 0:O.yamlFlow)||[]);try{o=await this.convertPlanToExecutable(P,t,r,{cacheable:i,deepLocate:d,abortSignal:p})}catch(e){return S(`Error converting plans to executable tasks: ${
|
|
841
|
-
${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]=
|
|
840
|
+
${h||""}`;await this.emitAiActProgress("plan_failed",{planIndex:a,planLimit:k,error:e}),e4(!1,e)}return{cache:{hit:!1}}}},{allowWhenError:!0}),O=null==v?void 0:v.output;c=O;let P=(null==O?void 0:O.actions)||[];x.push(...(null==O?void 0:O.yamlFlow)||[]);try{o=await this.convertPlanToExecutable(P,t,r,{cacheable:i,deepLocate:d,abortSignal:p})}catch(e){return S(`Error converting plans to executable tasks: ${A3(e)}, plans: ${JSON.stringify(P)}`,a)}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;l=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(A1(e)){for(let t of A6){let r=e[t];if(A7(r))return r}return Object.values(e).find(A7)}}(e.param);if(i){let e=A4(i);if(e){let t=function(e){let t=function(e,t){let r=e[t];if(!Array.isArray(r)||r.length<4)return;let n=A5(r[0]),i=A5(r[1]),o=A5(r[2]),a=A5(r[3]);if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return[n,i,o,a]}(e,"bbox");if(t)return t;if(!A1(e.rect))return;let r=A5(e.rect.left),n=A5(e.rect.top),i=A5(e.rect.width),o=A5(e.rect.height);if(void 0!==r&&void 0!==n&&void 0!==i&&void 0!==o)return[r,n,r+i,n+o]}(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(A1(t=e.param)&&Object.entries(t).some(e=>{let[t,r]=e;return!!A6.includes(t)&&"string"==typeof r||A7(r)&&!A4(r)}))return;let o=(r=e.param)&&"object"==typeof r?"string"==typeof r.prompt?A2(r.prompt):r.locate&&"object"==typeof r.locate&&null!==r.locate?{locate:A2(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,A2(r)]}))}:A2(r):A2(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})}}}(a,k,(e,t)=>this.emitAiActProgress(e,t));try{await g.appendAndRun(o.tasks),this.setPendingFeedbackMessage(f,R,this.collectPlanningFeedback(y.tasks.slice(M)))}catch(t){C++;let e=await this.getTimeString();this.setPendingFeedbackMessage(f,e,`Error executing running tasks: ${(null==t?void 0:t.message)||String(t)}`),cp("error when executing running tasks, but continue to run if it is not too many errors:",t instanceof Error?t.message:String(t),"current error count in one planning loop:",C)}finally{l=void 0}if(C>5)return S("Too many errors in one planning loop",a);if(null==p?void 0:p.aborted)return S(`Task aborted: ${p.reason||"abort signal received"}`,a);if(!(null==O?void 0:O.shouldContinuePlanning))break;if(this.invalidateFailedCacheHitLocates(y,M),++E>k)return S(`Replanned ${k} times, exceeding the limit. Please configure a larger value for replanningCycleLimit (or use MIDSCENE_REPLANNING_CYCLE_LIMIT) to handle more complex tasks.`,a);if(!f.pendingFeedbackMessage){let e=await this.getTimeString();f.pendingFeedbackMessage=`Time: ${e}, I have finished the action previously planned.`}}return await this.emitAiActProgress("complete",{planIndex:I,planLimit:k,...A??(null==c?void 0:c.output)?{output:A??(null==c?void 0:c.output)}:{},...(null==c?void 0:c.log)?{log:c.log}:{},...(null==c?void 0:c.thought)?{thought:c.thought}:{}}),{output:{yamlFlow:x,output:A},runner:y}}createTypeQueryTask(e,t,r,n,i,o){return{type:"Insight",subType:e,param:{domIncluded:null==n?void 0:n.domIncluded,...(null==n?void 0:n.context)!==void 0?{context:n.context}:{},dataDemand:i?{demand:t,multimodalPrompt:i}:t},executor:async a=>{let s,l,{task:A}=a,c=e=>{var t,r,n,i,o;s=e,A.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},A.usage=A9(null==(i=e.taskInfo)?void 0:i.usage,"insight"),(null==(o=e.taskInfo)?void 0:o.reasoning_content)&&(A.reasoning_content=e.taskInfo.reasoning_content)},u=a.uiContext;e4(u,"uiContext is required for Query task");let d="Query"!==e,p=t,h="result";d&&("Assert"===e||"WaitFor"===e)?p={[h="StatementIsTruthy"]:sb(e,t)}:d&&(p={[h=e]:sb(e,t)});let f="";if((null==n?void 0:n.domIncluded)&&this.interface.getElementsNodeTree){cp("appending tree info for page");let e=await this.interface.getElementsNodeTree();f=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}="${ca(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+=`
|
|
841
|
+
${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]=ca(n,t)),e},{})))} ${i(r)}>`;let o=ca(n.node.content,t);l=o?`
|
|
842
842
|
${u} ${o}`:"",A=`</${e}>`}else r||d.trim().startsWith("<>")||(s="<>",l="",A="</>");if(c&&!d.trim())return"";let f=`${u}${s}${l}${d}
|
|
843
|
-
${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{l=await this.service.extract(p,r,n,f,i,u,o)}catch(e){throw e instanceof sx&&c(e.dump),e}finally{var m=A,g=u;let e=null==g?void 0:g.screenshotSequence;if(e&&e.length>1){let t=[];for(let r=0;r<e.length-1;r++){let n=e[r];t.push({type:"screenshot",ts:n.capturedAt,screenshot:n,description:`Observed frame ${r+1}/${e.length}`,timing:"observed-frame"})}m.recorder=m.recorder?[...t,...m.recorder]:t}(null==g?void 0:g.screenshotSequence)&&(g.screenshotSequence=void 0)}let{data:y,thought:v,dump:b}=l;c(b);let w=y;return d&&("string"==typeof y?w=y:"WaitFor"===e?w=null!=y&&y[h]:null==y?w=null:(null==y?void 0:y[h])!==void 0?w=y[h]:(null==y?void 0:y.result)!==void 0?w=y.result:e4(!1,"No result in query data")),"Assert"===e&&(w=!!w),{output:w,log:s,thought:v}}}}async createTypeQueryExecution(e,t,r,n,i,o){let a=this.createExecutionSession(
|
|
844
|
-
Reason: ${n||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:l,thought:n,message:A};if(!l)throw Error(A)}catch(e){if(e instanceof
|
|
845
|
-
Reason: ${n||i||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:!1,thought:n,message:o};throw Error(o,{cause:e.cause})}throw e}}constructor(e,t,r,n){cf(this,"taskExecutor",void 0),cf(this,"resolveModelRuntime",void 0),cf(this,"resolveAgentContext",void 0),cf(this,"getUIContext",void 0),this.taskExecutor=e,this.resolveModelRuntime=t,this.resolveAgentContext=r,this.getUIContext=n}}function cy(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cv=(e,t,r,n,i)=>{e[t]||(e[t]={promptTokens:0,completionTokens:0,totalTokens:0,calls:0});let o=e[t];o.promptTokens+=r,o.completionTokens+=n,o.totalTokens+=i,o.calls+=1};class cb{add(e){let t=e.prompt_tokens??0,r=e.completion_tokens??0,n=e.total_tokens??0;this.totalPromptTokens+=t,this.totalCompletionTokens+=r,this.totalTokens+=n,this.totalCachedInput+=e.cached_input??0,this.totalTimeCostMs+=e.time_cost??0,this.calls+=1,cv(this.byIntent,e.intent??"unknown",t,r,n),cv(this.byModel,e.model_name??"unknown",t,r,n)}snapshot(){let e=e=>{let t={};for(let[r,n]of Object.entries(e))t[r]={...n};return t};return{totalPromptTokens:this.totalPromptTokens,totalCompletionTokens:this.totalCompletionTokens,totalTokens:this.totalTokens,totalCachedInput:this.totalCachedInput,totalTimeCostMs:this.totalTimeCostMs,calls:this.calls,byIntent:e(this.byIntent),byModel:e(this.byModel)}}reset(){this.totalPromptTokens=0,this.totalCompletionTokens=0,this.totalTokens=0,this.totalCachedInput=0,this.totalTimeCostMs=0,this.calls=0,this.byIntent={},this.byModel={}}constructor(){cy(this,"totalPromptTokens",0),cy(this,"totalCompletionTokens",0),cy(this,"totalTokens",0),cy(this,"totalCachedInput",0),cy(this,"totalTimeCostMs",0),cy(this,"calls",0),cy(this,"byIntent",{}),cy(this,"byModel",{})}}let cw=/^(Given|When|Then|And|But)\s+(.+)$/i,cE=/^(Scenario):\s*(.*)$/i,cx=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,ck=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},cS=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},cC=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,cI=(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})`},cj=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",cO=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(cx.test(l))throw Error(`runGherkinScenario does not support "${l}" at line ${n}.`);let A=l.match(cE);if(A){a+=1,t=A[2].trim()||void 0,s="scenario";continue}let c=l.match(cw);if(c){let e={keyword:ck(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){cS(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",o=cC(t);try{"aiAct"===n?await e.aiAct(o,i):(null==r?void 0:r.context)!==void 0||(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 ${cI(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${cj(e)}`,{cause:e})}}},cP=e=>e?` in ${e}`:"",cR=async(e,t)=>{let n,i,{fromMarkdown:o}=await r(95902)("mdast-util-from-markdown"),{toMarkdown:a}=await r(75845)("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}"${cP(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}${cP(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,tc.isAbsolute)(r)?r:(0,tc.resolve)((0,tc.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${cP(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 cM=r(64564);let cT=e=>cM.Yj().regex(/\S/,"value must contain a non-whitespace character").describe(e),cN=cM.re({name:cT("The name used to identify this reference image."),url:cT("The URL, data URL, or file path of this reference image.")}),cD=cM.re({prompt:cT("The natural-language prompt."),images:cM.YO(cN).min(1).optional(),convertHttpImage2Base64:cM.zM().optional().describe("Whether HTTP reference images are converted to base64 first.")}),cB=cM.KC([cT("The natural-language prompt."),cD]),cz=cM.re({cacheable:cM.zM().optional().describe("Whether this action may use the Midscene cache."),fileChooserAccept:cM.KC([cM.Yj(),cM.YO(cM.Yj())]).optional().describe("Accepted file types for a file chooser."),fileChooserAllowedDir:cM.Yj().optional().describe("Directory allowed for prompt-driven file uploads."),deepThink:cM.KC([cM.eu("unset"),cM.zM()]).optional().describe("Whether to enable deep thinking for this action."),deepLocate:cM.zM().optional().describe("Whether to use deep element location."),context:cM.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),cF=cM.re({prompt:cB,options:cz.optional()}),cL=cM.re({domIncluded:cM.KC([cM.zM(),cM.eu("visible-only")]).optional().describe("How DOM information is included."),screenshotIncluded:cM.zM().optional().describe("Whether the request includes a screenshot."),context:cM.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),cU=cL.extend({keepRawResponse:cM.zM().optional().describe("Whether the Agent returns the structured assertion result.")}),cK=cM.re({prompt:cB,message:cM.Yj().optional().describe("The assertion failure message."),options:cU.optional()}),cQ=cM.re({context:cM.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context."),deepLocate:cM.zM().optional().describe("Whether to use deep element location."),deepThink:cM.zM().optional().describe("Deprecated alias for deepLocate."),cacheable:cM.zM().optional().describe("Whether this location may use the Midscene cache."),xpath:cM.Yj().optional().describe("A web XPath location hint."),fileChooserAccept:cM.KC([cM.Yj(),cM.YO(cM.Yj())]).optional().describe("Files accepted when tapping opens a file chooser.")}),cJ=cM.re({prompt:cB,options:cQ.optional()}),cZ=cM.re({prompt:cB,options:cL.optional()}),cX=cM.re({base64:cM.Yj().min(1).describe("A base64-encoded screenshot."),description:cM.Yj().optional().describe("What the screenshot shows.")}),cq=cM.re({content:cM.Yj().optional().describe("The report text content."),screenshotBase64:cM.Yj().optional().describe("One base64-encoded screenshot."),screenshots:cM.YO(cX).min(1).optional().describe("Screenshots attached to the report section.")}).superRefine((e,t)=>{void 0!==e.screenshotBase64&&void 0!==e.screenshots&&t.addIssue({code:"custom",message:"screenshotBase64 and screenshots are mutually exclusive"})}),cH=cM.re({title:cM.Yj().optional().describe("The report section title."),options:cq.optional()}),cW=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"an Agent";return t=>({name:t.name??t.method,...void 0===t.title?{}:{title:t.title},...void 0===t.description?{}:{description:t.description},...void 0===t.stringInputKey?{}:{stringInputKey:t.stringInputKey},inputSchema:t.inputSchema,async execute(r,n,i){var o;if("object"!=typeof r||null===r||"function"!=typeof r[t.method])throw TypeError(`getAgent() must return ${e} with ${t.method}().`);let a=r[t.method],s=await a.apply(r,t.toArgs(n,i));return null==(o=t.toResult)?void 0:o.call(t,s,n)}})}("an Agent"),cG=e=>"string"==typeof e?e:e.prompt,cV=cW({method:"aiAct",description:"Perform a natural-language task with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cF,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:e=>void 0===e?void 0:{summary:e}}),cY=cW({method:"aiTap",description:"Locate and tap an element with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cJ,toArgs:e=>[e.prompt,e.options],toResult:(e,t)=>({summary:`Tapped: ${cG(t.prompt)}`})}),c$=cW({method:"aiAssert",description:"Assert a natural-language condition with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cK,toArgs:(e,t)=>[e.prompt,e.message,{...e.options,abortSignal:t.signal}],toResult:(e,t)=>({summary:`Assertion passed: ${cG(t.prompt)}`,...void 0===e?{}:{data:{pass:e.pass,...void 0===e.thought?{}:{thought:e.thought},...void 0===e.message?{}:{message:e.message}}}})}),c_=e=>"aiBoolean"===e||"aiNumber"===e?cW({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cZ,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${t}`,data:{value:t}})}):"aiString"===e?cW({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cZ,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${JSON.stringify(t)}`,data:{value:t}})}):cW({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cZ,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${JSON.stringify(t)}`,data:{value:t}})}),c0=cW({method:"recordToReport",description:"Add text or screenshots to the current Midscene report.",stringInputKey:"title",inputSchema:cH,toArgs:e=>[e.title,e.options],toResult:(e,t)=>({summary:`Recorded to report: ${t.title??"untitled"}`})}),c1=[cV,cY,c$,c_("aiBoolean"),c_("aiNumber"),c_("aiString"),c_("aiAsk"),c0];var c2=r(57012),c3=r(85409),c5=r(8963).Buffer;function c4(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let c7=ik.Ik({type:ik.eu("midscene_ui_observation"),version:ik.eu(1),startedAt:ik.ai().finite().nonnegative(),endedAt:ik.ai().finite().nonnegative(),frames:ik.YO(ik.Ik({path:ik.Yj().min(1),mimeType:ik.k5(["image/png","image/jpeg"]),capturedAt:ik.ai().finite().nonnegative()}).strict()).min(1),shotSize:ik.Ik({width:ik.ai().finite().positive(),height:ik.ai().finite().positive()}).strict(),shrunkShotToLogicalRatio:ik.ai().finite().positive()}).strict().refine(e=>e.endedAt>=e.startedAt,{path:["endedAt"],message:"must be greater than or equal to startedAt"});function c6(e){return{...e,frames:e.frames.map(e=>({...e})),shotSize:{...e.shotSize}}}class c8{persistFrame(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized)throw Error("UI observation record has already been finalized");let r=/^data:image\/(png|jpe?g);base64,([\s\S]+)$/i.exec(e);if(!r)throw Error("UI observation frame must be a PNG or JPEG data URL");let n="png"===r[1].toLowerCase()?"png":"jpeg",i="png"===n?"image/png":"image/jpeg",o=c5.from(r[2],"base64");if(0===o.length)throw Error("UI observation frame contains no image data");let a=(0,sS.createHash)("sha256").update(o).digest("hex"),s=`${a}.${n}`;(0,c2.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0});let l=(0,tc.join)(this.temporaryFramesDirectory,s);return(0,c2.existsSync)(l)||(0,c2.writeFileSync)(l,o),{path:`${(0,tc.basename)(this.framesDirectory)}/${s}`,mimeType:i,capturedAt:t}}resolveFramePath(e){if(this.disposed)throw Error("UI observation record writer has been disposed");let t=this.finalized?this.framesDirectory:this.temporaryFramesDirectory;return(0,tc.join)(t,(0,tc.basename)(e.path))}pruneFrames(e){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized||!(0,c2.existsSync)(this.temporaryFramesDirectory))return;let t=new Set(e.map(e=>(0,tc.basename)(e.path)));for(let e of(0,c2.readdirSync)(this.temporaryFramesDirectory))t.has(e)||(0,c2.rmSync)((0,tc.join)(this.temporaryFramesDirectory,e),{force:!0})}finalize(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalizedRecord)return this.finalizedRecord;let r=function(e){let t=c7.safeParse(e);if(!t.success){let e=t.error.issues[0],r=e.path.length>0?e.path.join("."):"record";throw Error(`Invalid UI observation record at ${r}: ${e.message}`)}return t.data}({type:"midscene_ui_observation",version:1,frames:e,...t});return this.pruneFrames(r.frames),(0,c2.mkdirSync)((0,tc.dirname)(this.outputPath),{recursive:!0}),(0,c2.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0}),(0,c2.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),(0,c2.renameSync)(this.temporaryFramesDirectory,this.framesDirectory),this.finalized=!0,this.finalizedRecord={...r,frames:r.frames.map(e=>({...e,path:(0,tc.resolve)((0,tc.dirname)(this.outputPath),e.path)}))},this.finalizedRecord}dispose(){this.disposed||((0,c2.rmSync)(this.temporaryFramesDirectory,{recursive:!0,force:!0}),(0,c2.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),this.disposed=!0,this.finalizedRecord=null)}constructor(e){c4(this,"outputPath",void 0),c4(this,"framesDirectory",void 0),c4(this,"temporaryFramesDirectory",void 0),c4(this,"finalized",!1),c4(this,"disposed",!1),c4(this,"finalizedRecord",null),this.outputPath=e?(0,tc.resolve)(e):function(){let e=Math.random().toString(36).slice(2,10);return(0,tc.resolve)(rL("output"),`observation-${Date.now()}-${e}.json`)}();const t=(0,tc.extname)(this.outputPath),r=(0,tc.basename)(this.outputPath,t);this.framesDirectory=(0,tc.join)((0,tc.dirname)(this.outputPath),`${r}.frames`),this.temporaryFramesDirectory=`${this.framesDirectory}.tmp-${c3.pid}-${Math.random().toString(36).slice(2,10)}`}}function c9(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ue=rq("ui-observer"),ut=rq("ui-observer",{console:!0});class ur{get frameCount(){return this.record.frames.length}get startedAt(){return this.record.startedAt}get endedAt(){return this.record.endedAt}ensureUsable(){e4(!this.disposed,"UI observation has been disposed")}ensureFixedWindowOptions(e){e4((null==e?void 0:e.domIncluded)===void 0,"UIObservation does not support domIncluded because it only evaluates recorded screenshots")}async aiQuery(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiQuery(e,t)}async aiBoolean(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiBoolean(e,t)}async aiNumber(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiNumber(e,t)}async aiString(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiString(e,t)}async aiAsk(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiAsk(e,t)}async aiAssert(e,t,r){return this.ensureUsable(),this.ensureFixedWindowOptions(r),this.insight.aiAssert(e,t,r)}async exportRecord(){return this.ensureUsable(),c6(this.record)}async dispose(){var e,t;this.disposed||(null==(e=this.disposeRecord)||e.call(this),this.disposed=!0,null==(t=this.onDisposed)||t.call(this))}constructor(e,t,r,n){c9(this,"insight",void 0),c9(this,"disposeRecord",void 0),c9(this,"onDisposed",void 0),c9(this,"disposed",void 0),c9(this,"record",void 0),this.insight=t,this.disposeRecord=r,this.onDisposed=n,this.disposed=!1,this.record=c6(e)}}function un(e){return"string"==typeof e&&/^data:image\/(?:png|jpe?g);base64,/i.test(e)}class ui{get bufferedFrameCount(){return this.frames.length}async start(){e4(!this.loopPromise&&!this.stopped,"observer has already started"),this.startedAt=Date.now();try{this.source=await this.deps.openFrameSource()??null}catch(e){ue(`frame source unavailable, using screenshot fallback: ${e}`),this.source=null}if(this.usingFallback=!this.source,this.usingFallback)ue("no continuous frame source; sampling via plain screenshots");else{let e=Date.now();for(;!this.source.latest()&&Date.now()-e<3e3;)await new Promise(e=>setTimeout(e,50));this.source.latest()||ue("no first frame within 3000ms; starting anyway")}await this.captureOnce(),this.loopPromise=this.runLoop(),this.watchdogMs>0&&(this.watchdogTimer=setTimeout(()=>{ut(`UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`),this.stop().catch(()=>{})},this.watchdogMs),"function"==typeof this.watchdogTimer.unref&&this.watchdogTimer.unref())}stop(){return this.stopPromise||(this.stopPromise=this.finalizeStop()),this.stopPromise}async finalizeStop(){this.stopped=!0,this.watchdogTimer&&(clearTimeout(this.watchdogTimer),this.watchdogTimer=null),await this.loopPromise;try{this.frames.length>0&&(this.persistPromise=this.persistUnstoredFrames().catch(e=>{ue(`frame persistence failed, will retry during export: ${e}`)}));let e=this.deps.capturePreparedRepresentative(),[,t]=await Promise.all([this.persistPromise,e]),r=this.frames.at(-1);this.source&&(null==r?void 0:r.persisted)&&(this.representativeFrame={...r.persisted,capturedAt:r.capturedAt},t.screenshot=ot.fromFile(this.writer.resolveFramePath(r.persisted),r.persisted.mimeType,r.capturedAt),ue("representative screenshot aligned with last sampled frame")),this.representative=t;let n=Date.now(),i=await this.finalizeRecord(n);return this.observation=new ur(i,this.deps.createInsight(i),()=>this.writer.dispose(),this.deps.onDisposed),this.observation}finally{var e,t;if(this.source)try{await this.source.stop()}catch(e){ue(`error stopping frame source: ${e}`)}ue(`observation stopped with ${this.frames.length} buffered frames (+1 representative)`),null==(e=(t=this.deps).onStopped)||e.call(t)}}async finalizeRecord(e){e4(this.stopped&&this.representative,"observation must be stopped before finalizing the observed window"),this.persistPromise&&(await this.persistPromise,this.persistPromise=null),await this.persistUnstoredFrames();let t=this.frames.map(e=>(e4(e.persisted,"observation frame was not persisted"),{...e.persisted,capturedAt:e.capturedAt}));if(!this.representativeFrame){let e=this.representative;this.representativeFrame=this.writer.persistFrame(e.screenshot.base64,e.screenshot.capturedAt),e.screenshot=ot.fromFile(this.writer.resolveFramePath(this.representativeFrame),this.representativeFrame.mimeType,this.representativeFrame.capturedAt)}let r=[...t,this.representativeFrame];r.length>50&&ut(`WARNING: exporting ${r.length} frames (soft limit 50). Running insight against this observation sends every frame to the model; consider increasing intervalMs or decreasing maxFrames to reduce token cost.`),ue(`exporting ${r.length} file-backed observation frames (${this.persistedByRef.size} decoded source refs)`);let n={startedAt:this.startedAt,endedAt:e,shotSize:{...this.representative.shotSize},shrunkShotToLogicalRatio:this.representative.shrunkShotToLogicalRatio};return this.writer.finalize(r,n)}async dispose(){if(!this.disposed)try{this.stopPromise?await this.stopPromise:this.stopped||await this.stop()}finally{if(this.observation)await this.observation.dispose();else{var e,t;this.writer.dispose(),null==(e=(t=this.deps).onDisposed)||e.call(t)}this.frames=[],this.persistedByRef.clear(),this.observation=null,this.disposed=!0}}async persistUnstoredFrames(){let e=this.dedupeRefs(this.frames.filter(e=>!e.persisted)).filter(e=>!this.persistedByRef.has(e.ref));for(let t=0;t<e.length;t+=4){let r=e.slice(t,t+4),n=this.source?await this.source.decode(r):r.map(e=>(e4(un(e.ref),"fallback observation frame must be an image data URL"),e.ref));e4(n.length===r.length,"frame source decode() must return one image per frame handle");let i=await Promise.all(n.map(e=>AS(e,{shrinkFactor:this.screenshotShrinkFactor})));for(let e=0;e<r.length;e++)this.persistedByRef.set(r[e].ref,this.writer.persistFrame(i[e],r[e].capturedAt))}for(let e of this.frames)e.persisted??(e.persisted=this.persistedByRef.get(e.ref));e.length>0&&ue(`decoded and persisted ${e.length} source frames`)}async captureOnce(){try{if(this.source){let e=this.source.latest();if(!e)return;if(un(e.ref)){let t=await AS(e.ref,{shrinkFactor:this.screenshotShrinkFactor}),r=this.writer.persistFrame(t,e.capturedAt);this.pushFrame({ref:r.path,capturedAt:e.capturedAt,persisted:r})}else this.pushFrame(e);return}let e=await AS(await this.deps.captureRawScreenshot(),{shrinkFactor:this.screenshotShrinkFactor}),t=this.writer.persistFrame(e,Date.now());this.pushFrame({ref:t.path,capturedAt:t.capturedAt,persisted:t})}catch(e){ue(`frame capture failed, skipping tick: ${e}`)}}async runLoop(){for(;!this.stopped;){let e=Date.now();for(await this.captureOnce();!this.stopped&&Date.now()-e<this.intervalMs;)await new Promise(e=>setTimeout(e,50))}}pushFrame(e){this.frames.push(e),this.frames.length>this.maxFrames&&(this.frames=this.thinBuffer(this.frames),this.writer.pruneFrames(this.frames.flatMap(e=>e.persisted?[e.persisted]:[])),ue(`frame buffer thinned to ${this.frames.length} frames`))}thinBuffer(e){if(e.length<=1)return e;let t=Array(e.length).fill(!1);t[0]=!0;for(let r=1;r<e.length;r++)e[r].ref!==e[r-1].ref&&(t[r]=!0);t[e.length-1]=!0;let r=[],n=0;for(let i=0;i<e.length;i++)t[i]?(r.push(e[i]),n=0):(n%2==0&&r.push(e[i]),n++);if(r.length>this.maxFrames){let e=r.length/this.maxFrames,t=[];for(let n=0;n<this.maxFrames;n++)t.push(r[Math.floor(n*e)]);t[this.maxFrames-1]=r[r.length-1],r=t}return r}dedupeRefs(e){let t=new Set,r=[];for(let n of e)t.has(n.ref)||(t.add(n.ref),r.push(n));return r}constructor(e,t){c9(this,"deps",void 0),c9(this,"frames",void 0),c9(this,"source",void 0),c9(this,"usingFallback",void 0),c9(this,"stopped",void 0),c9(this,"disposed",void 0),c9(this,"loopPromise",void 0),c9(this,"stopPromise",void 0),c9(this,"representative",void 0),c9(this,"representativeFrame",void 0),c9(this,"watchdogTimer",void 0),c9(this,"persistPromise",void 0),c9(this,"persistedByRef",void 0),c9(this,"observation",void 0),c9(this,"startedAt",void 0),c9(this,"intervalMs",void 0),c9(this,"maxFrames",void 0),c9(this,"watchdogMs",void 0),c9(this,"screenshotShrinkFactor",void 0),c9(this,"writer",void 0),this.deps=e,this.frames=[],this.source=null,this.usingFallback=!1,this.stopped=!1,this.disposed=!1,this.loopPromise=null,this.stopPromise=null,this.representative=null,this.representativeFrame=null,this.watchdogTimer=null,this.persistPromise=null,this.persistedByRef=new Map,this.observation=null,this.startedAt=0,this.intervalMs=Math.max(200,(null==t?void 0:t.intervalMs)??1e3),this.maxFrames=Math.max(2,(null==t?void 0:t.maxFrames)??30),this.watchdogMs=(null==t?void 0:t.watchdogMs)??3e5,this.screenshotShrinkFactor=e.screenshotShrinkFactor??1,this.writer=e.observationRecordWriter??new c8}}function uo(e){e4("midscene_ui_observation"===e.type&&1===e.version,"invalid UI observation record type or version"),e4(e.frames.length>0,"UI observation record contains no frames"),e4(Number.isFinite(e.shotSize.width)&&e.shotSize.width>0,"UI observation record shot width must be positive"),e4(Number.isFinite(e.shotSize.height)&&e.shotSize.height>0,"UI observation record shot height must be positive"),e4(Number.isFinite(e.shrunkShotToLogicalRatio)&&e.shrunkShotToLogicalRatio>0,"UI observation record screenshot ratio must be positive");let t=e.frames.map(e=>ot.fromFile(e.path,e.mimeType,e.capturedAt));return{screenshot:t[t.length-1],screenshotSequence:t,shotSize:{...e.shotSize},shrunkShotToLogicalRatio:e.shrunkShotToLogicalRatio}}function ua(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let us=rq("agent"),ul=rq("agent",{console:!0});class uA extends r2{getModelConfig(e){return{...this.baseManager.getModelConfig(e),createOpenAIClient:this.createOpenAIClient}}constructor(e,t){super(),ua(this,"baseManager",void 0),ua(this,"createOpenAIClient",void 0),this.baseManager=e,this.createOpenAIClient=t}}class uc{static getTestRunnerNodeDefinitions(){return c1}get onDumpUpdate(){return this.dumpUpdateListeners[0]}set onDumpUpdate(e){this.dumpUpdateListeners=[],e&&this.dumpUpdateListeners.push(e)}get aiContexts(){return this.opts.aiContexts||(this.opts.aiContexts={}),this.opts.aiContexts}resolveUserContext(e,t){var r,n;if(void 0!==t)return t;let i=null==(r=this.opts.aiContexts)?void 0:r[e];if(void 0!==i)return i;let o=null==(n=this.opts.aiContexts)?void 0:n.default;if(void 0!==o)return o}withContext(e,t){let r=this.resolveUserContext(e,null==t?void 0:t.context);return void 0===r?t:{...t??{},context:r}}get page(){return this.interface}assertModelFamilyForNonWebContext(){"puppeteer"!==this.interface.interfaceType&&"playwright"!==this.interface.interfaceType&&"static"!==this.interface.interfaceType&&"chrome-extension-proxy"!==this.interface.interfaceType&&"page-over-chrome-extension-bridge"!==this.interface.interfaceType&&this.modelConfigManager.throwErrorIfNonVLModel()}resolveReplanningCycleLimit(e){return this.opts.replanningCycleLimit??r5.getEnvConfigValueAsNumber(t_)??e.adapter.planning.defaultReplanningCycleLimit}resolveModelRuntime(e){return{...sr(this.modelConfigManager.getModelConfig(e)),onUsage:e=>{this.usageCallCounter+=1;let t=e.intent?e:{...e,intent:e.slot};this.consumeUsage(t,`callai:${e.request_id??this.usageCallCounter}`)}}}createInsight(e){return new cg(this.taskExecutor,()=>this.resolveModelRuntime("insight"),(e,t)=>this.resolveUserContext(e,t),e)}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return us("Using frozen page context for action:",e),this.frozenUIContext;let t=uc.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await AL(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){us(`retryable context error (attempt ${e+1}/${t}), retrying in ${uc.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,uc.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}async startObserving(e){e4(!this.frozenUIContext,"startObserving() cannot be used while the UI context is frozen (call unfreezePageContext() first)"),e4(!this.activeObserver,"An observation window is already active on this agent. Stop the existing observer first (await observer.stop()) before starting a new one.");let t=new ui({openFrameSource:async()=>{var e,t;return await (null==(e=(t=this.interface).openFrameSource)?void 0:e.call(t))??void 0},captureRawScreenshot:()=>this.interface.screenshotBase64(),capturePreparedRepresentative:()=>this.getUIContext("assert"),createInsight:e=>this.createInsight(()=>uo(e)),onStopped:()=>{this.activeObserver===t&&(this.activeObserver=null)},onDisposed:()=>this.ownedObservers.delete(t),screenshotShrinkFactor:this.opts.screenshotShrinkFactor},e);this.activeObserver=t,this.ownedObservers.add(t);try{await t.start()}catch(e){throw this.activeObserver=null,this.ownedObservers.delete(t),await t.dispose().catch(e=>{us(`error disposing failed observer start: ${e}`)}),e}return t}async setAIActionContext(e){ul('setAIActionContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}async setAIActContext(e){ul('setAIActContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}setAIContext(e,t){if(!Ay(e))throw TypeError(`Unknown Agent context key: ${String(e)}`);if(void 0!==t&&"string"!=typeof t)throw TypeError("Agent context must be a string or undefined");this.aiContexts[e]=t,"aiAct"===e&&(void 0===t?(this.opts.aiActContext=void 0,this.opts.aiActionContext=void 0):(this.opts.aiActContext=t,this.opts.aiActionContext=t))}resetDump(){return this.dump=new sK({sdkVersion:nA(),groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[],modelBriefs:[],deviceType:this.interface.interfaceType}),this.executionDumpIndexByRunner=new WeakMap,this.dump}appendExecutionDump(e,t){let r=this.dump;if(t){let n=this.executionDumpIndexByRunner.get(t);if(void 0!==n){r.executions[n]=e;return}r.executions.push(e),this.executionDumpIndexByRunner.set(t,r.executions.length-1);return}r.executions.push(e)}collectUsageMetrics(e){for(let t of e.tasks)this.consumeUsage(t.usage,`${t.taskId}:usage`),this.consumeUsage(t.searchAreaUsage,`${t.taskId}:searchAreaUsage`)}consumeUsage(e,t){let r;if(e&&(r=e.request_id?`req:${e.request_id}`:e[nj]?`int:${e[nj]}`:t,!this.countedUsageKeys.has(r)&&(this.countedUsageKeys.add(r),this.metricsCollector.add(e),this.opts.onLLMUsage)))try{this.opts.onLLMUsage(e)}catch(e){ul(`onLLMUsage listener threw, ignoring: ${e}`)}}get metrics(){return this.metricsCollector.snapshot()}dumpDataString(e){return(this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,e0||(null==e?void 0:e.inlineScreenshots))?this.dump.serializeWithInlineScreenshots():this.dump.serialize()}reportHTMLString(e){return ne?"":ns(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=cc(e),r=t?`${ca(e)} - ${t}`:ca(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t){us("callActionInActionSpace",e,",",t);let r={type:e,param:t||{},thought:""};us("actionPlan",r);let n=[r].filter(Boolean),i=cA(e,cs((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){e4(e,"missing locate prompt for tap");let r=lD(e,this.withContext("aiTap",t)),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await AG(this.interface,n,async()=>{await this.callActionInActionSpace("Tap",{locate:r})})}async aiRightClick(e,t){e4(e,"missing locate prompt for right click");let r=lD(e,this.withContext("aiRightClick",t));await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){e4(e,"missing locate prompt for double click");let r=lD(e,this.withContext("aiDoubleClick",t));await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){e4(e,"missing locate prompt for hover");let r=lD(e,this.withContext("aiHover",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}),e4("string"==typeof n||"number"==typeof n,"input value must be a string or number, use empty string if you want to clear the input"),e4(i,"missing locate prompt for input");let{locateParam:a,restParams:s}=lB(i,this.withContext("aiInput",o)),l="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",{...s,value:l,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}),e4(null==i?void 0:i.keyName,"missing keyName for keyboard press");let{locateParam:o,restParams:a}=lB(n||"",this.withContext("aiKeyboardPress",i));await this.callActionInActionSpace("KeyboardPress",{...a,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 AF?AF[e]:e})(i.scrollType);e!==i.scrollType&&(i={...i||{},scrollType:e})}let{locateParam:o,restParams:a}=lB(n||"",this.withContext("aiScroll",i));await this.callActionInActionSpace("Scroll",{...a,locate:o})}async aiPinch(e,t){let{locateParam:r,restParams:n}=lB(e||"",this.withContext("aiPinch",t));await this.callActionInActionSpace("Pinch",{...n,locate:r})}async aiLongPress(e,t){e4(e,"missing locate prompt for long press");let{locateParam:r,restParams:n}=lB(e,this.withContext("aiLongPress",t));await this.callActionInActionSpace("LongPress",{...n,locate:r})}async aiClearInput(e,t){e4(e,"missing locate prompt for clear input");let r=lD(e,this.withContext("aiClearInput",t));await this.callActionInActionSpace("ClearInput",{locate:r})}async aiAct(e,t){let r,n,i,o=null==t?void 0:t._internalReportDisplay,a="string"==typeof e?e:e.prompt,s=(null==o?void 0:o.prompt)||a,l=(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 c=async()=>{var r,n,i,a;let l=this.resolveModelRuntime("planning"),c=this.resolveModelRuntime("default"),u=this.resolveUserContext("aiAct",null==t?void 0:t.context),d=((e,t)=>{let r=sv(t);if(!r)return e;let n="string"==typeof e?e:e.prompt,i=`${r}
|
|
843
|
+
${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{l=await this.service.extract(p,r,n,f,i,u,o)}catch(e){throw e instanceof sx&&c(e.dump),e}finally{var m=A,g=u;let e=null==g?void 0:g.screenshotSequence;if(e&&e.length>1){let t=[];for(let r=0;r<e.length-1;r++){let n=e[r];t.push({type:"screenshot",ts:n.capturedAt,screenshot:n,description:`Observed frame ${r+1}/${e.length}`,timing:"observed-frame"})}m.recorder=m.recorder?[...t,...m.recorder]:t}(null==g?void 0:g.screenshotSequence)&&(g.screenshotSequence=void 0)}let{data:y,thought:v,dump:b}=l;c(b);let w=y;return d&&("string"==typeof y?w=y:"WaitFor"===e?w=null!=y&&y[h]:null==y?w=null:(null==y?void 0:y[h])!==void 0?w=y[h]:(null==y?void 0:y.result)!==void 0?w=y.result:e4(!1,"No result in query data")),"Assert"===e&&(w=!!w),{output:w,log:s,thought:v}}}}async createTypeQueryExecution(e,t,r,n,i,o){let a=this.createExecutionSession(cc(e,"string"==typeof t?t:JSON.stringify(t)),{...(null==o?void 0:o.uiContext)?{uiContext:o.uiContext}:{},referenceImages:null==i?void 0:i.images}),s=a.getRunner(),l={...r,executionId:s.id},A=await this.createTypeQueryTask(e,t,l,n,i,o),c=await a.appendAndRun(A);if(!c)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:u,thought:d}=c;return{output:u,thought:d,runner:s}}async waitFor(e,t,r){let{textPrompt:n,multimodalPrompt:i}=AX(e),o=`waitFor: ${n}`,a=this.createExecutionSession(cc("WaitFor",o),{referenceImages:null==i?void 0:i.images}),s=a.getRunner(),l={...r,executionId:s.id},{timeoutMs:A,checkIntervalMs:c,domIncluded:u,screenshotIncluded:d,...p}=t,h={domIncluded:u,screenshotIncluded:d,...p};e4(e,"No assertion for waitFor"),e4(A,"No timeoutMs for waitFor"),e4(c,"No checkIntervalMs for waitFor"),e4(c<=A,`wrong config for waitFor: checkIntervalMs must be less than timeoutMs, config: {checkIntervalMs: ${c}, timeoutMs: ${A}}`);let f=Date.now(),m=f,g="";for(;m-f<=A;){let e=Date.now();m=e;let t=await this.createTypeQueryTask("WaitFor",n,l,h,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<c){let t=A-e,n=c-t,i=`Check interval is ${c}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){cd(this,"interface",void 0),cd(this,"service",void 0),cd(this,"taskCache",void 0),cd(this,"providedActionSpace",void 0),cd(this,"taskBuilder",void 0),cd(this,"onTaskStartCallback",void 0),cd(this,"hooks",void 0),cd(this,"replanningCycleLimit",void 0),cd(this,"waitAfterAction",void 0),cd(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 co({interfaceInstance:e,service:t,taskCache:r.taskCache,actionSpace:this.getActionSpace(),waitAfterAction:r.waitAfterAction})}}function cm(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cg={domIncluded:!1,screenshotIncluded:!0};class cy{resolveContext(e,t){return this.resolveAgentContext(e,null==t?void 0:t.context)}withContext(e,t){let r=this.resolveContext(e,t);return void 0===r?t:{...t,context:r}}executionOptions(e){var t;let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null==(t=this.getUIContext)?void 0:t.call(this);if(n||r||(null==e?void 0:e.abortSignal))return{...r||(null==e?void 0:e.abortSignal)?{abortSignal:null==e?void 0:e.abortSignal}:{},...n?{uiContext:n}:{}}}async aiQuery(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cg,r=this.resolveModelRuntime(),n=this.executionOptions(),i=this.withContext("aiQuery",t),{output:o}=n?await this.taskExecutor.createTypeQueryExecution("Query",e,r,i,void 0,n):await this.taskExecutor.createTypeQueryExecution("Query",e,r,i);return o}async aiBoolean(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cg;return this.queryPrimitive("Boolean","aiBoolean",e,t)}async aiNumber(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cg;return this.queryPrimitive("Number","aiNumber",e,t)}async aiString(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cg;return this.queryPrimitive("String","aiString",e,t)}async aiAsk(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cg;return this.queryPrimitive("String","aiAsk",e,t)}async queryPrimitive(e,t,r,n){let{textPrompt:i,multimodalPrompt:o}=AX(r),a=this.withContext(t,n),{output:s}=await this.taskExecutor.createTypeQueryExecution(e,i,this.resolveModelRuntime(),a,o,this.executionOptions());return s}async aiAssert(e,t,r){let n=this.withContext("aiAssert",r??{}),i={domIncluded:(null==r?void 0:r.domIncluded)??cg.domIncluded,screenshotIncluded:(null==r?void 0:r.screenshotIncluded)??cg.screenshotIncluded,...void 0!==n.context?{context:n.context}:{}},{textPrompt:o,multimodalPrompt:a}=AX(e),s="string"==typeof e?e:e.prompt;try{let{output:e,thought:n}=await this.taskExecutor.createTypeQueryExecution("Assert",o,this.resolveModelRuntime(),i,a,this.executionOptions(r,!0)),l=!!e,A=l?void 0:`Assertion failed: ${t||s}
|
|
844
|
+
Reason: ${n||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:l,thought:n,message:A};if(!l)throw Error(A)}catch(e){if(e instanceof l6){var l,A;let n=null==(l=e.task)?void 0:l.thought,i=(null==(A=e.task)?void 0:A.errorMessage)||e.cause.message,o=`Assertion failed: ${t||s}
|
|
845
|
+
Reason: ${n||i||"(no_reason)"}`;if(null==r?void 0:r.keepRawResponse)return{pass:!1,thought:n,message:o};throw Error(o,{cause:e.cause})}throw e}}constructor(e,t,r,n){cm(this,"taskExecutor",void 0),cm(this,"resolveModelRuntime",void 0),cm(this,"resolveAgentContext",void 0),cm(this,"getUIContext",void 0),this.taskExecutor=e,this.resolveModelRuntime=t,this.resolveAgentContext=r,this.getUIContext=n}}function cv(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let cb=(e,t,r,n,i)=>{e[t]||(e[t]={promptTokens:0,completionTokens:0,totalTokens:0,calls:0});let o=e[t];o.promptTokens+=r,o.completionTokens+=n,o.totalTokens+=i,o.calls+=1};class cw{add(e){let t=e.prompt_tokens??0,r=e.completion_tokens??0,n=e.total_tokens??0;this.totalPromptTokens+=t,this.totalCompletionTokens+=r,this.totalTokens+=n,this.totalCachedInput+=e.cached_input??0,this.totalTimeCostMs+=e.time_cost??0,this.calls+=1,cb(this.byIntent,e.intent??"unknown",t,r,n),cb(this.byModel,e.model_name??"unknown",t,r,n)}snapshot(){let e=e=>{let t={};for(let[r,n]of Object.entries(e))t[r]={...n};return t};return{totalPromptTokens:this.totalPromptTokens,totalCompletionTokens:this.totalCompletionTokens,totalTokens:this.totalTokens,totalCachedInput:this.totalCachedInput,totalTimeCostMs:this.totalTimeCostMs,calls:this.calls,byIntent:e(this.byIntent),byModel:e(this.byModel)}}reset(){this.totalPromptTokens=0,this.totalCompletionTokens=0,this.totalTokens=0,this.totalCachedInput=0,this.totalTimeCostMs=0,this.calls=0,this.byIntent={},this.byModel={}}constructor(){cv(this,"totalPromptTokens",0),cv(this,"totalCompletionTokens",0),cv(this,"totalTokens",0),cv(this,"totalCachedInput",0),cv(this,"totalTimeCostMs",0),cv(this,"calls",0),cv(this,"byIntent",{}),cv(this,"byModel",{})}}let cE=/^(Given|When|Then|And|But)\s+(.+)$/i,cx=/^(Scenario):\s*(.*)$/i,ck=/^(Feature|Background|Scenario Outline|Scenario Template|Examples|Rule):/i,cS=e=>{let t=e.toLowerCase();return"given"===t?"Given":"when"===t?"When":"then"===t?"Then":"and"===t?"And":"But"},cC=e=>{if(null==e?void 0:e.aborted)throw"function"==typeof e.throwIfAborted&&e.throwIfAborted(),Error(`runGherkinScenario aborted: ${e.reason||"signal already aborted"}`)},cI=e=>"Given"===e.effectiveKeyword?`Set up this precondition: ${e.text}`:"When"===e.effectiveKeyword?`Perform this user action: ${e.text}`:`Verify that ${e.text}`,cj=(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})`},cO=e=>e instanceof Error&&e.message?` Original error: ${e.message}`:"",cP=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(ck.test(l))throw Error(`runGherkinScenario does not support "${l}" at line ${n}.`);let A=l.match(cx);if(A){a+=1,t=A[2].trim()||void 0,s="scenario";continue}let c=l.match(cE);if(c){let e={keyword:cS(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){cC(null==r?void 0:r.abortSignal);let n="Then"===t.effectiveKeyword?"aiAssert":"aiAct",o=cI(t);try{"aiAct"===n?await e.aiAct(o,i):(null==r?void 0:r.context)!==void 0||(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 ${cj(t,n)} at line ${t.lineNumber}: ${t.keyword} ${t.text}.${cO(e)}`,{cause:e})}}},cR=e=>e?` in ${e}`:"",cM=async(e,t)=>{let n,i,{fromMarkdown:o}=await r(95902)("mdast-util-from-markdown"),{toMarkdown:a}=await r(75845)("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}"${cR(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}${cR(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,tc.isAbsolute)(r)?r:(0,tc.resolve)((0,tc.dirname)(t),r))}),n.length>20)throw Error(`runMarkdown supports at most 20 images, but found ${n.length} images${cR(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 cT=r(64564);let cN=e=>cT.Yj().regex(/\S/,"value must contain a non-whitespace character").describe(e),cD=cT.re({name:cN("The name used to identify this reference image."),url:cN("The URL, data URL, or file path of this reference image.")}),cB=cT.re({prompt:cN("The natural-language prompt."),images:cT.YO(cD).min(1).optional(),convertHttpImage2Base64:cT.zM().optional().describe("Whether HTTP reference images are converted to base64 first.")}),cz=cT.KC([cN("The natural-language prompt."),cB]),cF=cT.re({cacheable:cT.zM().optional().describe("Whether this action may use the Midscene cache."),fileChooserAccept:cT.KC([cT.Yj(),cT.YO(cT.Yj())]).optional().describe("Accepted file types for a file chooser."),fileChooserAllowedDir:cT.Yj().optional().describe("Directory allowed for prompt-driven file uploads."),deepThink:cT.KC([cT.eu("unset"),cT.zM()]).optional().describe("Whether to enable deep thinking for this action."),deepLocate:cT.zM().optional().describe("Whether to use deep element location."),context:cT.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),cL=cT.re({prompt:cz,options:cF.optional()}),cU=cT.re({domIncluded:cT.KC([cT.zM(),cT.eu("visible-only")]).optional().describe("How DOM information is included."),screenshotIncluded:cT.zM().optional().describe("Whether the request includes a screenshot."),context:cT.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context.")}),cK=cU.extend({keepRawResponse:cT.zM().optional().describe("Whether the Agent returns the structured assertion result.")}),cQ=cT.re({prompt:cz,message:cT.Yj().optional().describe("The assertion failure message."),options:cK.optional()}),cJ=cT.re({context:cT.Yj().optional().describe("Additional facts, rules, constraints, or output requirements for this AI call. Overrides inherited aiContexts; an empty string disables inherited user context."),deepLocate:cT.zM().optional().describe("Whether to use deep element location."),deepThink:cT.zM().optional().describe("Deprecated alias for deepLocate."),cacheable:cT.zM().optional().describe("Whether this location may use the Midscene cache."),xpath:cT.Yj().optional().describe("A web XPath location hint."),fileChooserAccept:cT.KC([cT.Yj(),cT.YO(cT.Yj())]).optional().describe("Files accepted when tapping opens a file chooser.")}),cZ=cT.re({prompt:cz,options:cJ.optional()}),cX=cT.re({prompt:cz,options:cU.optional()}),cq=cT.re({base64:cT.Yj().min(1).describe("A base64-encoded screenshot."),description:cT.Yj().optional().describe("What the screenshot shows.")}),cH=cT.re({content:cT.Yj().optional().describe("The report text content."),screenshotBase64:cT.Yj().optional().describe("One base64-encoded screenshot."),screenshots:cT.YO(cq).min(1).optional().describe("Screenshots attached to the report section.")}).superRefine((e,t)=>{void 0!==e.screenshotBase64&&void 0!==e.screenshots&&t.addIssue({code:"custom",message:"screenshotBase64 and screenshots are mutually exclusive"})}),cW=cT.re({title:cT.Yj().optional().describe("The report section title."),options:cH.optional()}),cG=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"an Agent";return t=>({name:t.name??t.method,...void 0===t.title?{}:{title:t.title},...void 0===t.description?{}:{description:t.description},...void 0===t.stringInputKey?{}:{stringInputKey:t.stringInputKey},inputSchema:t.inputSchema,async execute(r,n,i){var o;if("object"!=typeof r||null===r||"function"!=typeof r[t.method])throw TypeError(`getAgent() must return ${e} with ${t.method}().`);let a=r[t.method],s=await a.apply(r,t.toArgs(n,i));return null==(o=t.toResult)?void 0:o.call(t,s,n)}})}("an Agent"),cV=e=>"string"==typeof e?e:e.prompt,cY=cG({method:"aiAct",description:"Perform a natural-language task with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cL,toArgs:(e,t)=>[e.prompt,{...e.options,abortSignal:t.signal}],toResult:e=>void 0===e?void 0:{summary:e}}),c$=cG({method:"aiTap",description:"Locate and tap an element with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cZ,toArgs:e=>[e.prompt,e.options],toResult:(e,t)=>({summary:`Tapped: ${cV(t.prompt)}`})}),c_=cG({method:"aiAssert",description:"Assert a natural-language condition with a Midscene UI Agent.",stringInputKey:"prompt",inputSchema:cQ,toArgs:(e,t)=>[e.prompt,e.message,{...e.options,abortSignal:t.signal}],toResult:(e,t)=>({summary:`Assertion passed: ${cV(t.prompt)}`,...void 0===e?{}:{data:{pass:e.pass,...void 0===e.thought?{}:{thought:e.thought},...void 0===e.message?{}:{message:e.message}}}})}),c0=e=>"aiBoolean"===e||"aiNumber"===e?cG({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cX,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${t}`,data:{value:t}})}):"aiString"===e?cG({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cX,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${JSON.stringify(t)}`,data:{value:t}})}):cG({method:e,description:`Run ${e} with a Midscene UI Agent and store its value.`,stringInputKey:"prompt",inputSchema:cX,toArgs:e=>[e.prompt,e.options],toResult:t=>({summary:`${e} returned ${JSON.stringify(t)}`,data:{value:t}})}),c1=cG({method:"recordToReport",description:"Add text or screenshots to the current Midscene report.",stringInputKey:"title",inputSchema:cW,toArgs:e=>[e.title,e.options],toResult:(e,t)=>({summary:`Recorded to report: ${t.title??"untitled"}`})}),c2=[cY,c$,c_,c0("aiBoolean"),c0("aiNumber"),c0("aiString"),c0("aiAsk"),c1];var c3=r(57012),c5=r(85409),c4=r(8963).Buffer;function c7(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let c6=ik.Ik({type:ik.eu("midscene_ui_observation"),version:ik.eu(1),startedAt:ik.ai().finite().nonnegative(),endedAt:ik.ai().finite().nonnegative(),frames:ik.YO(ik.Ik({path:ik.Yj().min(1),mimeType:ik.k5(["image/png","image/jpeg"]),capturedAt:ik.ai().finite().nonnegative()}).strict()).min(1),shotSize:ik.Ik({width:ik.ai().finite().positive(),height:ik.ai().finite().positive()}).strict(),shrunkShotToLogicalRatio:ik.ai().finite().positive()}).strict().refine(e=>e.endedAt>=e.startedAt,{path:["endedAt"],message:"must be greater than or equal to startedAt"});function c8(e){return{...e,frames:e.frames.map(e=>({...e})),shotSize:{...e.shotSize}}}class c9{persistFrame(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized)throw Error("UI observation record has already been finalized");let r=/^data:image\/(png|jpe?g);base64,([\s\S]+)$/i.exec(e);if(!r)throw Error("UI observation frame must be a PNG or JPEG data URL");let n="png"===r[1].toLowerCase()?"png":"jpeg",i="png"===n?"image/png":"image/jpeg",o=c4.from(r[2],"base64");if(0===o.length)throw Error("UI observation frame contains no image data");let a=(0,sS.createHash)("sha256").update(o).digest("hex"),s=`${a}.${n}`;(0,c3.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0});let l=(0,tc.join)(this.temporaryFramesDirectory,s);return(0,c3.existsSync)(l)||(0,c3.writeFileSync)(l,o),{path:`${(0,tc.basename)(this.framesDirectory)}/${s}`,mimeType:i,capturedAt:t}}resolveFramePath(e){if(this.disposed)throw Error("UI observation record writer has been disposed");let t=this.finalized?this.framesDirectory:this.temporaryFramesDirectory;return(0,tc.join)(t,(0,tc.basename)(e.path))}pruneFrames(e){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalized||!(0,c3.existsSync)(this.temporaryFramesDirectory))return;let t=new Set(e.map(e=>(0,tc.basename)(e.path)));for(let e of(0,c3.readdirSync)(this.temporaryFramesDirectory))t.has(e)||(0,c3.rmSync)((0,tc.join)(this.temporaryFramesDirectory,e),{force:!0})}finalize(e,t){if(this.disposed)throw Error("UI observation record writer has been disposed");if(this.finalizedRecord)return this.finalizedRecord;let r=function(e){let t=c6.safeParse(e);if(!t.success){let e=t.error.issues[0],r=e.path.length>0?e.path.join("."):"record";throw Error(`Invalid UI observation record at ${r}: ${e.message}`)}return t.data}({type:"midscene_ui_observation",version:1,frames:e,...t});return this.pruneFrames(r.frames),(0,c3.mkdirSync)((0,tc.dirname)(this.outputPath),{recursive:!0}),(0,c3.mkdirSync)(this.temporaryFramesDirectory,{recursive:!0}),(0,c3.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),(0,c3.renameSync)(this.temporaryFramesDirectory,this.framesDirectory),this.finalized=!0,this.finalizedRecord={...r,frames:r.frames.map(e=>({...e,path:(0,tc.resolve)((0,tc.dirname)(this.outputPath),e.path)}))},this.finalizedRecord}dispose(){this.disposed||((0,c3.rmSync)(this.temporaryFramesDirectory,{recursive:!0,force:!0}),(0,c3.rmSync)(this.framesDirectory,{recursive:!0,force:!0}),this.disposed=!0,this.finalizedRecord=null)}constructor(e){c7(this,"outputPath",void 0),c7(this,"framesDirectory",void 0),c7(this,"temporaryFramesDirectory",void 0),c7(this,"finalized",!1),c7(this,"disposed",!1),c7(this,"finalizedRecord",null),this.outputPath=e?(0,tc.resolve)(e):function(){let e=Math.random().toString(36).slice(2,10);return(0,tc.resolve)(rL("output"),`observation-${Date.now()}-${e}.json`)}();const t=(0,tc.extname)(this.outputPath),r=(0,tc.basename)(this.outputPath,t);this.framesDirectory=(0,tc.join)((0,tc.dirname)(this.outputPath),`${r}.frames`),this.temporaryFramesDirectory=`${this.framesDirectory}.tmp-${c5.pid}-${Math.random().toString(36).slice(2,10)}`}}function ue(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ut=rq("ui-observer"),ur=rq("ui-observer",{console:!0});class un{get frameCount(){return this.record.frames.length}get startedAt(){return this.record.startedAt}get endedAt(){return this.record.endedAt}ensureUsable(){e4(!this.disposed,"UI observation has been disposed")}ensureFixedWindowOptions(e){e4((null==e?void 0:e.domIncluded)===void 0,"UIObservation does not support domIncluded because it only evaluates recorded screenshots")}async aiQuery(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiQuery(e,t)}async aiBoolean(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiBoolean(e,t)}async aiNumber(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiNumber(e,t)}async aiString(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiString(e,t)}async aiAsk(e,t){return this.ensureUsable(),this.ensureFixedWindowOptions(t),this.insight.aiAsk(e,t)}async aiAssert(e,t,r){return this.ensureUsable(),this.ensureFixedWindowOptions(r),this.insight.aiAssert(e,t,r)}async exportRecord(){return this.ensureUsable(),c8(this.record)}async dispose(){var e,t;this.disposed||(null==(e=this.disposeRecord)||e.call(this),this.disposed=!0,null==(t=this.onDisposed)||t.call(this))}constructor(e,t,r,n){ue(this,"insight",void 0),ue(this,"disposeRecord",void 0),ue(this,"onDisposed",void 0),ue(this,"disposed",void 0),ue(this,"record",void 0),this.insight=t,this.disposeRecord=r,this.onDisposed=n,this.disposed=!1,this.record=c8(e)}}function ui(e){return"string"==typeof e&&/^data:image\/(?:png|jpe?g);base64,/i.test(e)}class uo{get bufferedFrameCount(){return this.frames.length}async start(){e4(!this.loopPromise&&!this.stopped,"observer has already started"),this.startedAt=Date.now();try{this.source=await this.deps.openFrameSource()??null}catch(e){ut(`frame source unavailable, using screenshot fallback: ${e}`),this.source=null}if(this.usingFallback=!this.source,this.usingFallback)ut("no continuous frame source; sampling via plain screenshots");else{let e=Date.now();for(;!this.source.latest()&&Date.now()-e<3e3;)await new Promise(e=>setTimeout(e,50));this.source.latest()||ut("no first frame within 3000ms; starting anyway")}await this.captureOnce(),this.loopPromise=this.runLoop(),this.watchdogMs>0&&(this.watchdogTimer=setTimeout(()=>{ur(`UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`),this.stop().catch(()=>{})},this.watchdogMs),"function"==typeof this.watchdogTimer.unref&&this.watchdogTimer.unref())}stop(){return this.stopPromise||(this.stopPromise=this.finalizeStop()),this.stopPromise}async finalizeStop(){this.stopped=!0,this.watchdogTimer&&(clearTimeout(this.watchdogTimer),this.watchdogTimer=null),await this.loopPromise;try{this.frames.length>0&&(this.persistPromise=this.persistUnstoredFrames().catch(e=>{ut(`frame persistence failed, will retry during export: ${e}`)}));let e=this.deps.capturePreparedRepresentative(),[,t]=await Promise.all([this.persistPromise,e]),r=this.frames.at(-1);this.source&&(null==r?void 0:r.persisted)&&(this.representativeFrame={...r.persisted,capturedAt:r.capturedAt},t.screenshot=ot.fromFile(this.writer.resolveFramePath(r.persisted),r.persisted.mimeType,r.capturedAt),ut("representative screenshot aligned with last sampled frame")),this.representative=t;let n=Date.now(),i=await this.finalizeRecord(n);return this.observation=new un(i,this.deps.createInsight(i),()=>this.writer.dispose(),this.deps.onDisposed),this.observation}finally{var e,t;if(this.source)try{await this.source.stop()}catch(e){ut(`error stopping frame source: ${e}`)}ut(`observation stopped with ${this.frames.length} buffered frames (+1 representative)`),null==(e=(t=this.deps).onStopped)||e.call(t)}}async finalizeRecord(e){e4(this.stopped&&this.representative,"observation must be stopped before finalizing the observed window"),this.persistPromise&&(await this.persistPromise,this.persistPromise=null),await this.persistUnstoredFrames();let t=this.frames.map(e=>(e4(e.persisted,"observation frame was not persisted"),{...e.persisted,capturedAt:e.capturedAt}));if(!this.representativeFrame){let e=this.representative;this.representativeFrame=this.writer.persistFrame(e.screenshot.base64,e.screenshot.capturedAt),e.screenshot=ot.fromFile(this.writer.resolveFramePath(this.representativeFrame),this.representativeFrame.mimeType,this.representativeFrame.capturedAt)}let r=[...t,this.representativeFrame];r.length>50&&ur(`WARNING: exporting ${r.length} frames (soft limit 50). Running insight against this observation sends every frame to the model; consider increasing intervalMs or decreasing maxFrames to reduce token cost.`),ut(`exporting ${r.length} file-backed observation frames (${this.persistedByRef.size} decoded source refs)`);let n={startedAt:this.startedAt,endedAt:e,shotSize:{...this.representative.shotSize},shrunkShotToLogicalRatio:this.representative.shrunkShotToLogicalRatio};return this.writer.finalize(r,n)}async dispose(){if(!this.disposed)try{this.stopPromise?await this.stopPromise:this.stopped||await this.stop()}finally{if(this.observation)await this.observation.dispose();else{var e,t;this.writer.dispose(),null==(e=(t=this.deps).onDisposed)||e.call(t)}this.frames=[],this.persistedByRef.clear(),this.observation=null,this.disposed=!0}}async persistUnstoredFrames(){let e=this.dedupeRefs(this.frames.filter(e=>!e.persisted)).filter(e=>!this.persistedByRef.has(e.ref));for(let t=0;t<e.length;t+=4){let r=e.slice(t,t+4),n=this.source?await this.source.decode(r):r.map(e=>(e4(ui(e.ref),"fallback observation frame must be an image data URL"),e.ref));e4(n.length===r.length,"frame source decode() must return one image per frame handle");let i=await Promise.all(n.map(e=>AC(e,{shrinkFactor:this.screenshotShrinkFactor})));for(let e=0;e<r.length;e++)this.persistedByRef.set(r[e].ref,this.writer.persistFrame(i[e],r[e].capturedAt))}for(let e of this.frames)e.persisted??(e.persisted=this.persistedByRef.get(e.ref));e.length>0&&ut(`decoded and persisted ${e.length} source frames`)}async captureOnce(){try{if(this.source){let e=this.source.latest();if(!e)return;if(ui(e.ref)){let t=await AC(e.ref,{shrinkFactor:this.screenshotShrinkFactor}),r=this.writer.persistFrame(t,e.capturedAt);this.pushFrame({ref:r.path,capturedAt:e.capturedAt,persisted:r})}else this.pushFrame(e);return}let e=await AC(await this.deps.captureRawScreenshot(),{shrinkFactor:this.screenshotShrinkFactor}),t=this.writer.persistFrame(e,Date.now());this.pushFrame({ref:t.path,capturedAt:t.capturedAt,persisted:t})}catch(e){ut(`frame capture failed, skipping tick: ${e}`)}}async runLoop(){for(;!this.stopped;){let e=Date.now();for(await this.captureOnce();!this.stopped&&Date.now()-e<this.intervalMs;)await new Promise(e=>setTimeout(e,50))}}pushFrame(e){this.frames.push(e),this.frames.length>this.maxFrames&&(this.frames=this.thinBuffer(this.frames),this.writer.pruneFrames(this.frames.flatMap(e=>e.persisted?[e.persisted]:[])),ut(`frame buffer thinned to ${this.frames.length} frames`))}thinBuffer(e){if(e.length<=1)return e;let t=Array(e.length).fill(!1);t[0]=!0;for(let r=1;r<e.length;r++)e[r].ref!==e[r-1].ref&&(t[r]=!0);t[e.length-1]=!0;let r=[],n=0;for(let i=0;i<e.length;i++)t[i]?(r.push(e[i]),n=0):(n%2==0&&r.push(e[i]),n++);if(r.length>this.maxFrames){let e=r.length/this.maxFrames,t=[];for(let n=0;n<this.maxFrames;n++)t.push(r[Math.floor(n*e)]);t[this.maxFrames-1]=r[r.length-1],r=t}return r}dedupeRefs(e){let t=new Set,r=[];for(let n of e)t.has(n.ref)||(t.add(n.ref),r.push(n));return r}constructor(e,t){ue(this,"deps",void 0),ue(this,"frames",void 0),ue(this,"source",void 0),ue(this,"usingFallback",void 0),ue(this,"stopped",void 0),ue(this,"disposed",void 0),ue(this,"loopPromise",void 0),ue(this,"stopPromise",void 0),ue(this,"representative",void 0),ue(this,"representativeFrame",void 0),ue(this,"watchdogTimer",void 0),ue(this,"persistPromise",void 0),ue(this,"persistedByRef",void 0),ue(this,"observation",void 0),ue(this,"startedAt",void 0),ue(this,"intervalMs",void 0),ue(this,"maxFrames",void 0),ue(this,"watchdogMs",void 0),ue(this,"screenshotShrinkFactor",void 0),ue(this,"writer",void 0),this.deps=e,this.frames=[],this.source=null,this.usingFallback=!1,this.stopped=!1,this.disposed=!1,this.loopPromise=null,this.stopPromise=null,this.representative=null,this.representativeFrame=null,this.watchdogTimer=null,this.persistPromise=null,this.persistedByRef=new Map,this.observation=null,this.startedAt=0,this.intervalMs=Math.max(200,(null==t?void 0:t.intervalMs)??1e3),this.maxFrames=Math.max(2,(null==t?void 0:t.maxFrames)??30),this.watchdogMs=(null==t?void 0:t.watchdogMs)??3e5,this.screenshotShrinkFactor=e.screenshotShrinkFactor??1,this.writer=e.observationRecordWriter??new c9}}function ua(e){e4("midscene_ui_observation"===e.type&&1===e.version,"invalid UI observation record type or version"),e4(e.frames.length>0,"UI observation record contains no frames"),e4(Number.isFinite(e.shotSize.width)&&e.shotSize.width>0,"UI observation record shot width must be positive"),e4(Number.isFinite(e.shotSize.height)&&e.shotSize.height>0,"UI observation record shot height must be positive"),e4(Number.isFinite(e.shrunkShotToLogicalRatio)&&e.shrunkShotToLogicalRatio>0,"UI observation record screenshot ratio must be positive");let t=e.frames.map(e=>ot.fromFile(e.path,e.mimeType,e.capturedAt));return{screenshot:t[t.length-1],screenshotSequence:t,shotSize:{...e.shotSize},shrunkShotToLogicalRatio:e.shrunkShotToLogicalRatio}}function us(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}let ul=rq("agent"),uA=rq("agent",{console:!0});class uc extends r2{getModelConfig(e){return{...this.baseManager.getModelConfig(e),createOpenAIClient:this.createOpenAIClient}}constructor(e,t){super(),us(this,"baseManager",void 0),us(this,"createOpenAIClient",void 0),this.baseManager=e,this.createOpenAIClient=t}}class uu{static getTestRunnerNodeDefinitions(){return c2}get onDumpUpdate(){return this.dumpUpdateListeners[0]}set onDumpUpdate(e){this.dumpUpdateListeners=[],e&&this.dumpUpdateListeners.push(e)}get aiContexts(){return this.opts.aiContexts||(this.opts.aiContexts={}),this.opts.aiContexts}resolveUserContext(e,t){var r,n;if(void 0!==t)return t;let i=null==(r=this.opts.aiContexts)?void 0:r[e];if(void 0!==i)return i;let o=null==(n=this.opts.aiContexts)?void 0:n.default;if(void 0!==o)return o}withContext(e,t){let r=this.resolveUserContext(e,null==t?void 0:t.context);return void 0===r?t:{...t??{},context:r}}get page(){return this.interface}assertModelFamilyForNonWebContext(){"puppeteer"!==this.interface.interfaceType&&"playwright"!==this.interface.interfaceType&&"static"!==this.interface.interfaceType&&"chrome-extension-proxy"!==this.interface.interfaceType&&"page-over-chrome-extension-bridge"!==this.interface.interfaceType&&this.modelConfigManager.throwErrorIfNonVLModel()}resolveReplanningCycleLimit(e){return this.opts.replanningCycleLimit??r5.getEnvConfigValueAsNumber(t_)??e.adapter.planning.defaultReplanningCycleLimit}resolveModelRuntime(e){return{...sr(this.modelConfigManager.getModelConfig(e)),onUsage:e=>{this.usageCallCounter+=1;let t=e.intent?e:{...e,intent:e.slot};this.consumeUsage(t,`callai:${e.request_id??this.usageCallCounter}`)}}}createInsight(e){return new cy(this.taskExecutor,()=>this.resolveModelRuntime("insight"),(e,t)=>this.resolveUserContext(e,t),e)}async getActionSpace(){return this.fullActionSpace}isRetryableContextError(e){return!1}async getUIContext(e){if(this.assertModelFamilyForNonWebContext(),this.frozenUIContext)return ul("Using frozen page context for action:",e),this.frozenUIContext;let t=uu.CONTEXT_RETRY_MAX;for(let e=0;;e++)try{return await AU(this.interface,{uploadServerUrl:this.modelConfigManager.getUploadTestServerUrl(),screenshotShrinkFactor:this.opts.screenshotShrinkFactor})}catch(r){if(e<t&&this.isRetryableContextError(r)){ul(`retryable context error (attempt ${e+1}/${t}), retrying in ${uu.CONTEXT_RETRY_DELAY_MS}ms: ${r}`),await new Promise(e=>setTimeout(e,uu.CONTEXT_RETRY_DELAY_MS));continue}throw r}}async _snapshotContext(){return await this.getUIContext("locate")}async startObserving(e){e4(!this.frozenUIContext,"startObserving() cannot be used while the UI context is frozen (call unfreezePageContext() first)"),e4(!this.activeObserver,"An observation window is already active on this agent. Stop the existing observer first (await observer.stop()) before starting a new one.");let t=new uo({openFrameSource:async()=>{var e,t;return await (null==(e=(t=this.interface).openFrameSource)?void 0:e.call(t))??void 0},captureRawScreenshot:()=>this.interface.screenshotBase64(),capturePreparedRepresentative:()=>this.getUIContext("assert"),createInsight:e=>this.createInsight(()=>ua(e)),onStopped:()=>{this.activeObserver===t&&(this.activeObserver=null)},onDisposed:()=>this.ownedObservers.delete(t),screenshotShrinkFactor:this.opts.screenshotShrinkFactor},e);this.activeObserver=t,this.ownedObservers.add(t);try{await t.start()}catch(e){throw this.activeObserver=null,this.ownedObservers.delete(t),await t.dispose().catch(e=>{ul(`error disposing failed observer start: ${e}`)}),e}return t}async setAIActionContext(e){uA('setAIActionContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}async setAIActContext(e){uA('setAIActContext() is deprecated; use setAIContext("aiAct", context) instead.'),this.setAIContext("aiAct",e)}setAIContext(e,t){if(!Av(e))throw TypeError(`Unknown Agent context key: ${String(e)}`);if(void 0!==t&&"string"!=typeof t)throw TypeError("Agent context must be a string or undefined");this.aiContexts[e]=t,"aiAct"===e&&(void 0===t?(this.opts.aiActContext=void 0,this.opts.aiActionContext=void 0):(this.opts.aiActContext=t,this.opts.aiActionContext=t))}resetDump(){return this.dump=new sK({sdkVersion:nA(),groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[],modelBriefs:[],deviceType:this.interface.interfaceType}),this.executionDumpIndexByRunner=new WeakMap,this.dump}appendExecutionDump(e,t){let r=this.dump;if(t){let n=this.executionDumpIndexByRunner.get(t);if(void 0!==n){r.executions[n]=e;return}r.executions.push(e),this.executionDumpIndexByRunner.set(t,r.executions.length-1);return}r.executions.push(e)}collectUsageMetrics(e){for(let t of e.tasks)this.consumeUsage(t.usage,`${t.taskId}:usage`),this.consumeUsage(t.searchAreaUsage,`${t.taskId}:searchAreaUsage`)}consumeUsage(e,t){let r;if(e&&(r=e.request_id?`req:${e.request_id}`:e[nj]?`int:${e[nj]}`:t,!this.countedUsageKeys.has(r)&&(this.countedUsageKeys.add(r),this.metricsCollector.add(e),this.opts.onLLMUsage)))try{this.opts.onLLMUsage(e)}catch(e){uA(`onLLMUsage listener threw, ignoring: ${e}`)}}get metrics(){return this.metricsCollector.snapshot()}dumpDataString(e){return(this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,e0||(null==e?void 0:e.inlineScreenshots))?this.dump.serializeWithInlineScreenshots():this.dump.serialize()}reportHTMLString(e){return ne?"":ns(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=cu(e),r=t?`${cs(e)} - ${t}`:cs(e);this.onTaskStartTip&&await this.onTaskStartTip(r)}wrapActionInActionSpace(e){return async t=>await this.callActionInActionSpace(e,t)}async callActionInActionSpace(e,t){ul("callActionInActionSpace",e,",",t);let r={type:e,param:t||{},thought:""};ul("actionPlan",r);let n=[r].filter(Boolean),i=cc(e,cl((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){e4(e,"missing locate prompt for tap");let r=lB(e,this.withContext("aiTap",t)),n=(null==t?void 0:t.fileChooserAccept)?this.normalizeFileInput(t.fileChooserAccept):void 0;await AV(this.interface,n,async()=>{await this.callActionInActionSpace("Tap",{locate:r})})}async aiRightClick(e,t){e4(e,"missing locate prompt for right click");let r=lB(e,this.withContext("aiRightClick",t));await this.callActionInActionSpace("RightClick",{locate:r})}async aiDoubleClick(e,t){e4(e,"missing locate prompt for double click");let r=lB(e,this.withContext("aiDoubleClick",t));await this.callActionInActionSpace("DoubleClick",{locate:r})}async aiHover(e,t){e4(e,"missing locate prompt for hover");let r=lB(e,this.withContext("aiHover",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}),e4("string"==typeof n||"number"==typeof n,"input value must be a string or number, use empty string if you want to clear the input"),e4(i,"missing locate prompt for input");let{locateParam:a,restParams:s}=lz(i,this.withContext("aiInput",o)),l="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",{...s,value:l,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}),e4(null==i?void 0:i.keyName,"missing keyName for keyboard press");let{locateParam:o,restParams:a}=lz(n||"",this.withContext("aiKeyboardPress",i));await this.callActionInActionSpace("KeyboardPress",{...a,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 AL?AL[e]:e})(i.scrollType);e!==i.scrollType&&(i={...i||{},scrollType:e})}let{locateParam:o,restParams:a}=lz(n||"",this.withContext("aiScroll",i));await this.callActionInActionSpace("Scroll",{...a,locate:o})}async aiPinch(e,t){let{locateParam:r,restParams:n}=lz(e||"",this.withContext("aiPinch",t));await this.callActionInActionSpace("Pinch",{...n,locate:r})}async aiLongPress(e,t){e4(e,"missing locate prompt for long press");let{locateParam:r,restParams:n}=lz(e,this.withContext("aiLongPress",t));await this.callActionInActionSpace("LongPress",{...n,locate:r})}async aiClearInput(e,t){e4(e,"missing locate prompt for clear input");let r=lB(e,this.withContext("aiClearInput",t));await this.callActionInActionSpace("ClearInput",{locate:r})}async aiAct(e,t){let r,n,i,o=null==t?void 0:t._internalReportDisplay,a="string"==typeof e?e:e.prompt,s=(null==o?void 0:o.prompt)||a,l=(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 c=async()=>{var r,n,i,a;let l=this.resolveModelRuntime("planning"),c=this.resolveModelRuntime("default"),u=this.resolveUserContext("aiAct",null==t?void 0:t.context),d=((e,t)=>{let r=sv(t);if(!r)return e;let n="string"==typeof e?e:e.prompt,i=`${r}
|
|
846
846
|
|
|
847
|
-
${n}`;return"string"==typeof e?i:{...e,prompt:i}})(e,u),p=(()=>{let e=(null==t?void 0:t.effort)??((null==t?void 0:t.deepThink)===!0?"deepThink":"balance");if((null==t?void 0:t.effort)!==void 0&&
|
|
848
|
-
${e}`)}return{result:t.result}}async evaluateJavaScript(e){return e4(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;for(let e of(this.destroyed=!0,this.ownedObservers))try{await e.dispose()}catch(e){us(`error disposing unexported observer during destroy: ${e}`)}this.ownedObservers.clear(),this.activeObserver=null;try{var t,r;await (null==(t=(r=this.interface).destroy)?void 0:t.call(r))}catch(t){e=t}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(ov);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 oE(e,t)}if(n.startsWith("data:")||!ob.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return oE("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),i=r+t;return{type:"screenshot",ts:i,screenshot:ot.create(n.base64,i),description:n.description}}),A={taskId:e3(),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 sU({id:e3(),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=l2(t.error),i=[],o=t.screenshotBase64??await this.interface.screenshotBase64();o&&i.push({type:"screenshot",ts:r,screenshot:ot.create(o,r)});let a={taskId:e3(),type:"Log",subType:"Error",status:"failed",recorder:i,timing:{start:r,end:r,cost:0},param:{content:t.content||""},error:n,errorMessage:n.message,errorStack:n.stack,executor:async()=>{}},s=new sU({id:e3(),logTime:r,name:e,description:t.content||n.message,tasks:[a]});this.appendExecutionDump(s),this.writeOutActionDumps(s),await this.reportGenerator.flush(),this.notifyDumpUpdateListeners(s)}async logScreenshot(e,t){await this.recordToReport(e,t)}_unstableLogContent(){let{groupName:e,groupDescription:t,executions:r}=this.dump;return{groupName:e,groupDescription:t,executions:r||[]}}async freezePageContext(){us("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,us("Page context frozen successfully")}async unfreezePageContext(){us("Unfreezing page context"),this.frozenUIContext=void 0,us("Page context unfrozen successfully")}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&&!Ab.some(e=>e===t))throw Error(`cache.strategy must be one of ${Aw}, 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(r5.getEnvConfigInBoolean(tQ)&&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 AU(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;let n;if(ua(this,"interface",void 0),ua(this,"service",void 0),ua(this,"dump",void 0),ua(this,"reportFile",void 0),ua(this,"reportFileName",void 0),ua(this,"taskExecutor",void 0),ua(this,"opts",void 0),ua(this,"dryMode",!1),ua(this,"onTaskStartTip",void 0),ua(this,"taskCache",void 0),ua(this,"metricsCollector",new cb),ua(this,"usageCallCounter",0),ua(this,"countedUsageKeys",new Set),ua(this,"dumpUpdateListeners",[]),ua(this,"progressBus",new A_),ua(this,"destroyed",!1),ua(this,"modelConfigManager",void 0),ua(this,"frozenUIContext",void 0),ua(this,"activeObserver",null),ua(this,"ownedObservers",new Set),ua(this,"executionDumpIndexByRunner",new WeakMap),ua(this,"fullActionSpace",void 0),ua(this,"activeFileChooserAccepter",void 0),ua(this,"activeFileChooserAllowedDir",void 0),ua(this,"reportGenerator",void 0),ua(this,"lastExecutionDump",void 0),this.interface=e,this.opts=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},t||{}),Ap(this.opts),void 0!==this.opts.aiContexts&&("object"!=typeof this.opts.aiContexts||null===this.opts.aiContexts||Array.isArray(this.opts.aiContexts)))throw TypeError("opts.aiContexts must be a plain object");for(const[e,t]of Object.entries(this.opts.aiContexts??{})){if(!Ay(e))throw TypeError(`Unknown Agent context key: ${e}`);if(void 0!==t&&"string"!=typeof t)throw TypeError(`Agent context "${e}" must be a string`)}const i=void 0!==this.opts.aiActContext?"aiActContext":void 0!==this.opts.aiActionContext?"aiActionContext":void 0;i&&ul(`Agent option "${i}" is deprecated; use "aiContexts.aiAct" instead. When both are provided, "aiContexts.aiAct" takes precedence.`);const o={...this.opts.aiContexts},a=o.aiAct??this.opts.aiActContext??this.opts.aiActionContext;if(void 0!==a&&(o.aiAct=a,this.opts.aiActContext=a,this.opts.aiActionContext=a),this.opts.aiContexts=o,(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)}`);this.modelConfigManager=(null==t?void 0:t.modelConfig)?new r2(t.modelConfig,t.createOpenAIClient):(null==t?void 0:t.createOpenAIClient)?new uA(r3,t.createOpenAIClient):r3,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new s6(async()=>this.getUIContext());const s=this.processCacheConfig(t||{});s&&(this.taskCache=new AT(s.id,s.enabled,void 0,{readOnly:s.readOnly,writeOnly:s.writeOnly,cacheDir:s.cacheDir}));const l=this.interface.actionSpace(),A=this.interface.registerFileChooserListener?[(n=async e=>{if(!this.activeFileChooserAccepter)throw Error("RegisterFileChooserAccept can only be used while aiAct is running");if(!this.activeFileChooserAllowedDir)throw Error("RegisterFileChooserAccept requires aiAct option fileChooserAllowedDir");await this.activeFileChooserAccepter.registerFromAllowedDir(e,this.activeFileChooserAllowedDir)},{name:"RegisterFileChooserAccept",description:"Configure files for file chooser dialogs triggered by later actions in this aiAct",interfaceAlias:"registerFileChooserAccept",paramSchema:lA,sample:{files:["fixtures/document.pdf"]},call:async e=>{await n(e.files)}})]:[];this.fullActionSpace=[...l,...A,{name:"Sleep",description:"Wait for a specified duration before continuing. Defaults to 1 second (1000ms) if not specified.",paramSchema:lu,sample:{timeMs:2e3},call:async e=>{let t=(null==e?void 0:e.timeMs)??1e3;rq("device:common-action")(`Sleeping for ${t}ms`),await new Promise(e=>setTimeout(e,t))}}],this.taskExecutor=new ch(this.interface,this.service,{taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this),replanningCycleLimit:this.opts.replanningCycleLimit,waitAfterAction:this.opts.waitAfterAction,useDeviceTime:this.opts.useDeviceTime,actionSpace:this.fullActionSpace,hooks:{onSnapshotChange:async e=>{let t=e.dump();this.appendExecutionDump(t,e),this.collectUsageMetrics(t),this.writeOutActionDumps(t),await this.reportGenerator.flush();let r=this.dumpDataString();for(let e of this.dumpUpdateListeners)try{e(r,t)}catch(e){console.error("Error in onDumpUpdate listener",e)}},onProgress:this.progressBus.publish}}),this.dump=this.resetDump(),this.reportFileName=(null==t?void 0:t.reportFileName)??AB((null==t?void 0:t.testId)||this.interface.interfaceType||"web"),this.reportGenerator=Ah.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}),Object.defineProperty(this,Av,{value:{exportRecord:async e=>(e4(e instanceof ur,"Cannot export an observation that was not created by this Midscene runtime"),e.exportRecord()),loadRecord:e=>(uo(e),new ur(e,this.createInsight(()=>uo(e))))}})}}ua(uc,"CONTEXT_RETRY_MAX",3),ua(uc,"CONTEXT_RETRY_DELAY_MS",1500),r(8963).Buffer;RegExp(`${i2}="(inline|directory)"`);r(8963).Buffer;ik.k5(["split","to-markdown","merge-html"]).optional().describe("Report action to run. Supports: split, to-markdown, merge-html. Defaults to split."),ik.Yj().optional().describe("Input report HTML path (e.g. ./report/index.html). Used by split and to-markdown."),ik.KC([ik.Yj(),ik.YO(ik.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)."),ik.Yj().optional().describe("Output directory for generated report artifacts. For merge, defaults to the Midscene report directory."),ik.Yj().optional().describe("Output report file/directory name (without .html) for the merge action. Defaults to an auto-generated name."),ik.KC([ik.zM(),ik.Yj()]).optional().describe("Overwrite the existing merged report file if present (merge action only).");class uu{async getActionSpace(e){return[]}getRecorderScreenshotAssetUrl(e){return null}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};try{let r=this.prepareParamsForValidation(e.params,t);return t.paramSchema.parse(r),{valid:!0}}catch(e){return this.handleValidationError(e)}}createDisplayContent(e,t,r){return t&&e.params&&(null==r?void 0:r.paramSchema)?this.buildParamsDisplayList(e.params,r).join("\n")||e.prompt||"":e.prompt||""}formatBasicErrorMessage(e){return(null==e?void 0:e.message)||"Unknown error"}getSchemaKeys(e){if(!(null==e?void 0:e.paramSchema)||!("shape"in e.paramSchema))return[];let t=e.paramSchema;return t&&"shape"in t?Object.keys(t.shape):[]}filterValidParams(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return Object.keys(e).forEach(n=>{t.includes(n)||void 0===e[n]||null===e[n]||""===e[n]||(r[n]=e[n])}),r}actionNeedsStructuredParams(e){return"object"!=typeof e.paramSchema||!("shape"in e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0}prepareParamsForValidation(e,t){let r={...e};return t.paramSchema&&iN(t.paramSchema).forEach(e=>{"string"==typeof r[e]&&(r[e]={prompt:r[e],center:[0,0],rect:{left:0,top:0,width:0,height:0}})}),r}handleValidationError(e){if(e.errors&&e.errors.length>0){let t=e.errors.filter(e=>{let t=e.path.join(".");return!t.includes("center")&&!t.includes("rect")}).map(e=>{let t=e.path.join(".");return`${t}: ${e.message}`});if(t.length>0)return{valid:!1,errorMessage:`Validation error: ${t.join(", ")}`}}let t=e instanceof Error?e.message:"Unknown validation error";return{valid:!1,errorMessage:`Parameter validation failed: ${t}`}}buildParamsDisplayList(e,t){let r=[],n=t.paramSchema;if(!(n&&"shape"in n))return r;let i=iN(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 ud(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class up extends uu{get id(){return this._id}onDumpUpdate(e){this.dumpUpdateCallback=void 0,this.dumpUpdateCallback=e}setProgressCallback(e){this.progressCallback=void 0,this.progressCallback=e}async parseStructuredParams(e,t,r){return await lq(e,t,r)}formatErrorMessage(e){return((null==e?void 0:e.message)||"").includes("of different extension")?"Conflicting extension detected. Please disable the suspicious plugins and refresh the page. Guide: https://midscenejs.com/quick-start.html#chrome-extension-faq":this.formatBasicErrorMessage(e)}async getActionSpace(e){var t;if(!this.agent&&this.agentFactory)try{this.agent=await this.agentFactory()}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){r7(e),console.log("Config updated. Agent will be recreated on next execution.")}async runConnectivityTest(e){let t=new r2(e);return ls({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 lH(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=sK.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=sK.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&&(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=sK.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(),ud(this,"agent",void 0),ud(this,"agentFactory",void 0),ud(this,"dumpUpdateCallback",void 0),ud(this,"progressCallback",void 0),ud(this,"_id",void 0),ud(this,"currentRequestId",void 0),this.agent=e??null,this.agentFactory=t,this._id=e3()}}function uh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class uf extends uu{resolveReportUrl(e){if(!e||!this.serverUrl)return e;let t={...e,url:new URL(e.url,this.serverUrl).toString()};return e.replayUrl&&(t.replayUrl=new URL(e.replayUrl,this.serverUrl).toString()),t}onDumpUpdate(e){this.dumpUpdateCallback=void 0,this.dumpUpdateCallback=e}get id(){return this._id}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};if(t.paramSchema&&"object"==typeof t.paramSchema){let r=t.paramSchema;if(r.shape||"ZodObject"===r.type){let t=r.shape||{},n=Object.keys(t).filter(r=>{var n,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 lq(e,t,r)}formatErrorMessage(e){let t=(null==e?void 0:e.message)||"",r=[{keyword:"adb",message:"ADB connection error. Please ensure device is connected and USB debugging is enabled."},{keyword:"UIAutomator",message:"UIAutomator error. Please ensure the UIAutomator server is running on the device."}].find(e=>{let{keyword:r}=e;return t.includes(r)});return r?r.message:this.formatBasicErrorMessage(e)}async executeAction(e,t,r){if(this.serverUrl&&"undefined"!=typeof window)return this.executeViaServer(e,t,r);throw Error("Remote execution adapter requires server URL for execution")}async executeViaServer(e,t,r){let n={type:e,prompt:t.prompt,...this.buildOptionalPayloadParams(r,t)};r.context&&(n.context=r.context),r.requestId&&this.dumpUpdateCallback&&this.startProgressPolling(r.requestId);try{let e=await fetch(`${this.serverUrl}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!e.ok){let t=await e.text().catch(()=>"Unknown error");throw Error(`Server request failed (${e.status}): ${t}`)}let t=await e.json();return(null==t?void 0:t.report)&&(t.report=this.resolveReportUrl(t.report)),t}catch(e){throw console.error("Execute via server failed:",e),e}finally{this.stopProgressPolling()}}buildOptionalPayloadParams(e,t){let r={};return[{key:"requestId",value:e.requestId},{key:"deepLocate",value:e.deepLocate},{key:"deepThink",value:e.deepThink},{key:"screenshotIncluded",value:e.screenshotIncluded},{key:"domIncluded",value:e.domIncluded},{key:"deviceOptions",value:e.deviceOptions},{key:"reportDisplay",value:e.reportDisplay},{key:"params",value:t.params}].forEach(e=>{let{key:t,value:n}=e;null!=n&&""!==n&&(r[t]=n)}),r}async getActionSpace(e){if(this.serverUrl&&"undefined"!=typeof window)try{let t=await fetch(`${this.serverUrl}/action-space`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e})});if(!t.ok)throw Error(`Failed to get action space: ${t.statusText}`);let r=await t.json();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from server:",e)}if(e&&"object"==typeof e&&"actionSpace"in e)try{let t=e.actionSpace,r=await t();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from context:",e)}return[]}async checkStatus(){if(!this.serverUrl)return!1;try{let e=await fetch(`${this.serverUrl}/status`);if(200===e.status){try{let t=await e.json();t.id&&"string"==typeof t.id&&(this._id=t.id)}catch(e){console.debug("Failed to parse status response:",e)}return!0}return!1}catch(e){return console.warn("Server status check failed:",e),!1}}async overrideConfig(e){if(!this.serverUrl)throw Error("Server URL not configured");try{let t=await fetch(`${this.serverUrl}/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aiConfig:e})});if(!t.ok){let e=await t.json().catch(()=>null),r=(null==e?void 0:e.error)||t.statusText;throw Error(r)}}catch(e){throw console.error("Failed to override server config:",e),e}}async runConnectivityTest(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/connectivity-test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:e})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return t.json()}async getTaskProgress(e){if(!this.serverUrl)return{};if(!(null==e?void 0:e.trim()))return console.warn("Invalid requestId provided for task progress"),{};try{let t=await fetch(`${this.serverUrl}/task-progress/${encodeURIComponent(e)}`);if(!t.ok)return console.warn(`Task progress request failed: ${t.statusText}`),{};return await t.json()}catch(e){return console.error("Failed to poll task progress:",e),{}}}startProgressPolling(e){this.stopProgressPolling(),this.pollingIntervalId=setInterval(async()=>{try{let t=await this.getTaskProgress(e);t.executionDump&&this.dumpUpdateCallback&&this.dumpUpdateCallback("",t.executionDump)}catch(e){console.error("Error polling task progress:",e)}},500)}stopProgressPolling(){this.pollingIntervalId&&(clearInterval(this.pollingIntervalId),this.pollingIntervalId=void 0)}async cancelTask(e){if(!this.serverUrl)return{error:"No server URL configured"};if(!(null==e?void 0:e.trim()))return{error:"Invalid request ID"};try{let t=await fetch(`${this.serverUrl}/cancel/${encodeURIComponent(e)}`,{method:"POST"});if(!t.ok)return{error:`Cancel request failed: ${t.statusText}`};let r=await t.json();return(null==r?void 0:r.report)&&(r.report=this.resolveReportUrl(r.report)),{success:!0,...r}}catch(e){return console.error("Failed to cancel task:",e),{error:"Failed to cancel task"}}}async getScreenshot(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/screenshot`);if(!e.ok)return 409!==e.status&&console.warn(`Screenshot request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get screenshot:",e),null}}async interact(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/interact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Interact request failed (${t.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async startRecorderSession(e){if(!this.serverUrl)return{ok:!1,supported:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,supported:(null==r?void 0:r.supported)??!1,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:(null==r?void 0:r.error)||`Recorder start request failed (${t.status})`};return{ok:(null==r?void 0:r.ok)??!0,supported:(null==r?void 0:r.supported)??!0,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:null==r?void 0:r.error}}catch(e){return{ok:!1,supported:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderCapabilities(){if(!this.serverUrl)return{supported:!1,source:"unsupported",error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/capabilities`),t=await e.json().catch(()=>null);if(!e.ok)return{supported:!1,source:"unsupported",error:(null==t?void 0:t.error)||`Recorder capabilities request failed (${e.status})`};return{supported:(null==t?void 0:t.supported)===!0,source:(null==t?void 0:t.source)||"unsupported",platformId:null==t?void 0:t.platformId,error:null==t?void 0:t.error}}catch(e){return{supported:!1,source:"unsupported",error:e instanceof Error?e.message:"Unknown error"}}}async stopRecorderSession(){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/stop`,{method:"POST"});if(!e.ok)return{ok:!1,error:`Recorder stop request failed (${e.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(!this.serverUrl)return{events:[],nextIndex:e};try{let t=await fetch(`${this.serverUrl}/recorder/events?since=${encodeURIComponent(String(e))}&flushPending=false`);if(!t.ok)return{events:[],nextIndex:e};let r=await t.json().catch(()=>null);return{events:Array.isArray(null==r?void 0:r.events)?r.events:[],nextIndex:"number"==typeof(null==r?void 0:r.nextIndex)&&Number.isFinite(r.nextIndex)?r.nextIndex:e}}catch(t){return console.error("Failed to poll recorder events:",t),{events:[],nextIndex:e}}}async describeRecorderEventAtPoint(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/describe-event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({event:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Recorder describe request failed (${t.status})`};return r||{ok:!1,error:"Empty recorder describe response"}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Failed to describe recorder event"}}}async getRecorderScreenshotAsset(e){if(!this.serverUrl||!e)return null;try{let t=await fetch(`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`);if(!t.ok)return null;let r=await t.blob();return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e("string"==typeof n.result?n.result:null),n.onerror=()=>t(n.error),n.readAsDataURL(r)})}catch(e){return console.error("Failed to fetch recorder screenshot asset:",e),null}}getRecorderScreenshotAssetUrl(e){return this.serverUrl&&/^[a-zA-Z0-9_-]+$/.test(e)?`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`:null}async clearRecorderScreenshotAssets(e){if(!this.serverUrl||!e)return;let t=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok)throw Error(`Recorder screenshot cleanup request failed (${t.status})`)}async pruneRecorderScreenshotAssets(e,t){if(!this.serverUrl||!e)return;let r=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}/prune`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({assetIds:t})});if(!r.ok)throw Error(`Recorder screenshot prune request failed (${r.status})`)}async getInterfaceInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/interface-info`);if(!e.ok)return console.warn(`Interface info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get interface info:",e),null}}async getRuntimeInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/runtime-info`);if(!e.ok)return console.warn(`Runtime info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get runtime info:",e),null}}async getSessionInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/session`);if(!e.ok)return console.warn(`Session info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get session info:",e),null}}async getSessionSetup(e){if(!this.serverUrl)return null;try{let t=new URLSearchParams;Object.entries(e||{}).forEach(e=>{let[r,n]=e;("string"==typeof n||"number"==typeof n||"boolean"==typeof n)&&t.set(r,String(n))});let r=t.size>0?`?${t.toString()}`:"",n=await fetch(`${this.serverUrl}/session/setup${r}`);if(!n.ok){let e=await n.json().catch(()=>null);throw Error((null==e?void 0:e.error)||n.statusText||"Failed to load session setup")}return await n.json()}catch(e){throw console.error("Failed to get session setup:",e),e}}async listSessionTargets(){if(!this.serverUrl)return[];try{let e=await fetch(`${this.serverUrl}/session/targets`);if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText||"Failed to load session targets")}let t=await e.json();return Array.isArray(t)?t:[]}catch(e){throw console.error("Failed to get session targets:",e),e}}async createSession(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e||{})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return await t.json()}async destroySession(){if(!this.serverUrl)throw Error("Server URL not configured");let e=await fetch(`${this.serverUrl}/session`,{method:"DELETE"});if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText)}return await e.json()}constructor(e){super(),uh(this,"serverUrl",void 0),uh(this,"_id",void 0),uh(this,"dumpUpdateCallback",void 0),uh(this,"pollingIntervalId",void 0),this.serverUrl=e}}function um(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ug{createAdapter(e,t,r,n){switch(e){case"local-execution":if(!r&&!n)throw Error("Agent or agentFactory is required for local execution");return new up(r,n);case"remote-execution":return new uf(t||("undefined"!=typeof window&&window.location.protocol.includes("http")?window.location.origin:"http://localhost:5800"));default:throw Error(`Unsupported execution type: ${e}`)}}runtimeMetadataAdapter(){return this.adapter instanceof up||this.adapter instanceof uf?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 uf||this.adapter instanceof up)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof uf)||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 uf?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof uf?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof up?this.adapter.onDumpUpdate(e):this.adapter instanceof uf&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof up&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof uf){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:t.report||null}}else if(this.adapter instanceof up){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:null}}return null}async getCurrentExecutionData(){return this.adapter instanceof up&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof uf?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof uf?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof uf?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof uf?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof uf?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof uf?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof uf?this.adapter.describeRecorderEventAtPoint(e):{ok:!1,error:"Recorder aiDescribe requires remote execution"}}async getRecorderScreenshotAsset(e){return this.adapter instanceof uf?this.adapter.getRecorderScreenshotAsset(e):null}getRecorderScreenshotAssetUrl(e){return this.adapter.getRecorderScreenshotAssetUrl(e)}async clearRecorderScreenshotAssets(e){this.adapter instanceof uf&&await this.adapter.clearRecorderScreenshotAssets(e)}async pruneRecorderScreenshotAssets(e,t){this.adapter instanceof uf&&await this.adapter.pruneRecorderScreenshotAssets(e,t)}async getInterfaceInfo(){let e=this.runtimeMetadataAdapter();return e?e.getInterfaceInfo():null}async getRuntimeInfo(){let e=this.runtimeMetadataAdapter();return e?e.getRuntimeInfo():null}async getSessionInfo(){return this.adapter instanceof uf?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof uf?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof uf?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof uf)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof uf)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof up?"In-Browser-Extension":"Server"}constructor(e){um(this,"adapter",void 0),um(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var uy=r(13819);function uv(e){var t,r,n;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};uy.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})}var ub=r(85810);function uw(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e?Object.fromEntries(e.fields.map(e=>[e.key,function(e,t){var r,n,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 uE(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=uw(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}function ux(e,t,r,n,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 uk(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 uS(e){return Object.keys(e).length>0}function uC(e){return e?JSON.stringify(e):null}let uI="npx puppeteer@24.6.0 browsers install chrome",uj="https://pptr.dev/guides/configuration",uO=/could not find (?:google )?chrome/;function uP(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 uR(){return(0,A.jsxs)("span",{"aria-hidden":!0,style:{display:"block",height:16,position:"relative",width:16},children:[(0,A.jsx)("span",{style:{border:"1.5px solid currentColor",borderRadius:3,height:10,left:5,position:"absolute",top:3,width:8}}),(0,A.jsx)("span",{style:{background:"#f6f8fa",border:"1.5px solid currentColor",borderRadius:3,height:10,left:2,position:"absolute",top:0,width:8}})]})}function uM(e){let{error:t}=e,r=uP(t),[n,i]=(0,c.useState)(!1);return(0,A.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(0,A.jsx)("div",{children:"Studio could not find the Chrome browser required to create a Web Agent."}),(0,A.jsx)("div",{children:"Run this command, then try again:"}),(0,A.jsxs)("div",{onMouseEnter:()=>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,A.jsx)("pre",{style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:14,lineHeight:1.4,margin:0,overflowX:"auto",padding:"12px 44px 12px 12px",whiteSpace:"nowrap"},children:uI}),(0,A.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>i(!1),onClick:()=>(function(e){if("undefined"!=typeof navigator)try{var t;null==(t=navigator.clipboard)||t.writeText(e).catch(()=>void 0)}catch(e){}})(uI),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,A.jsx)(uR,{})})]}),(0,A.jsxs)("div",{children:["Guide:"," ",(0,A.jsx)("a",{href:uj,rel:"noreferrer",target:"_blank",children:uj})]}),(0,A.jsx)(g.A,{getPopupContainer:()=>document.body,overlayInnerStyle:{width:"min(680px, calc(100vw - 48px))"},overlayStyle:{maxWidth:"min(680px, calc(100vw - 48px))"},placement:"topRight",title:(0,A.jsx)("pre",{style:{margin:0,maxHeight:280,overflow:"auto",whiteSpace:"pre-wrap",width:"100%"},children:r}),zIndex:1e4,children:(0,A.jsx)("button",{style:{alignSelf:"flex-start",background:"transparent",border:0,color:"inherit",cursor:"help",padding:0,textDecoration:"underline"},type:"button",children:"Original error"})})]})}function uT(e,t,r,n,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 uN(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){uT(o,n,i,a,s,"next",e)}function s(e){uT(o,n,i,a,s,"throw",e)}a(void 0)})}}function uD(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function uB(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let uz=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:400,height:283,fill:"none",viewBox:"0 0 400 283"},e),r=r={children:[(0,A.jsx)("path",{fill:"url(#server-offline-background_svg__a)",fillOpacity:.7,d:"M0 283h283v400H0z",transform:"rotate(-90 0 283)"}),(0,A.jsx)("path",{fill:"url(#server-offline-background_svg__b)",d:"M0 0h400v283H0z"}),(0,A.jsxs)("defs",{children:[(0,A.jsxs)("radialGradient",{id:"server-offline-background_svg__b",cx:0,cy:0,r:1,gradientTransform:"matrix(0 115.5 -163.251 0 200 141.5)",gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#F2F4F7",stopOpacity:0}),(0,A.jsx)("stop",{offset:1,stopColor:"#F2F4F7"})]}),(0,A.jsx)("pattern",{id:"server-offline-background_svg__a",width:1,height:1,patternTransform:"matrix(18 0 0 18 0 283)",patternUnits:"userSpaceOnUse",preserveAspectRatio:"none",viewBox:"0 0 12 12",children:(0,A.jsx)("path",{stroke:"#A1A1A1",strokeWidth:.2,d:"M.1.1h11.8v11.8H.1z"})})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},uF=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:178,height:135,fill:"none",viewBox:"0 0 178 135"},e),r=r={children:[(0,A.jsx)("g",{filter:"url(#server-offline-foreground_svg__a)",children:(0,A.jsx)("rect",{width:74,height:97.5,fill:"url(#server-offline-foreground_svg__b)",rx:12,transform:"matrix(.86603 .5 -.86603 .5 99.136 28.5)"})}),(0,A.jsx)("rect",{width:78,height:101.5,y:-2,fill:"url(#server-offline-foreground_svg__c)",stroke:"url(#server-offline-foreground_svg__d)",strokeWidth:4,rx:14,transform:"matrix(.86603 .5 -.86603 .5 97.404 4)"}),(0,A.jsx)("path",{fill:"url(#server-offline-foreground_svg__e)",d:"M78.147 31.404a.9.9 0 0 1 .156-.559c.117-.178.295-.34.524-.478.228-.138.503-.248.806-.322a4 4 0 0 1 .961-.114c.33 0 .657.038.961.113s.578.184.807.322c.23.137.407.3.525.478.117.178.17.368.157.559v3c.014.19-.04.38-.156.559a1.6 1.6 0 0 1-.524.478 3 3 0 0 1-.806.322c-.304.075-.631.114-.961.114s-.657-.038-.961-.113a3 3 0 0 1-.807-.321 1.6 1.6 0 0 1-.525-.479.9.9 0 0 1-.157-.559zm-9.678 8.414c-.632-.015-1.23-.17-1.668-.434s-.682-.615-.682-.98c0-.366.246-.717.684-.98.438-.264 1.036-.42 1.669-.434h5.196c.33-.007.659.024.968.091.308.068.59.17.828.303s.428.29.557.466a.93.93 0 0 1 .196.555.93.93 0 0 1-.197.554c-.13.176-.32.334-.558.466s-.52.235-.829.303a4 4 0 0 1-.968.09zm38.106 11a4 4 0 0 1-.956-.098 3 3 0 0 1-.815-.305 1.7 1.7 0 0 1-.547-.463.93.93 0 0 1-.193-.55c0-.188.066-.375.193-.549s.313-.331.547-.463c.233-.132.511-.235.815-.304.304-.07.629-.102.956-.098h5.196c.327-.004.652.029.956.098s.582.172.815.304c.234.132.42.29.547.463s.193.361.193.55a.93.93 0 0 1-.193.55 1.7 1.7 0 0 1-.547.462 3 3 0 0 1-.815.305 4 4 0 0 1-.956.097zm-9.38 2.585c.017-.369.281-.72.74-.978.457-.258 1.071-.402 1.71-.402.64 0 1.255.144 1.713.402.457.258.722.61.738.978v3a.9.9 0 0 1-.169.552c-.12.176-.299.336-.527.471a3 3 0 0 1-.803.316 4 4 0 0 1-.951.11c-.327 0-.65-.037-.952-.11a3 3 0 0 1-.802-.316 1.6 1.6 0 0 1-.527-.47.9.9 0 0 1-.17-.553zm8.515-18.5c-1.838-1.06-4.33-1.656-6.93-1.656-2.598 0-5.09.596-6.928 1.657l-5.196 3c-.225.14-.495.252-.796.33s-.626.12-.956.123a4 4 0 0 1-.963-.102 3 3 0 0 1-.817-.312 1.7 1.7 0 0 1-.54-.471.9.9 0 0 1-.178-.557.95.95 0 0 1 .215-.551c.135-.174.33-.33.571-.46l5.196-3c2.757-1.591 6.495-2.485 10.393-2.485s7.636.894 10.392 2.485c2.756 1.592 4.305 3.75 4.305 6s-1.549 4.409-4.305 6l-5.196 3a2.9 2.9 0 0 1-.796.33 4.087 4.087 0 0 1-1.919.021 3 3 0 0 1-.817-.311 1.7 1.7 0 0 1-.54-.472.9.9 0 0 1-.177-.556.95.95 0 0 1 .214-.552c.135-.174.33-.33.572-.46l5.196-3c1.837-1.06 2.87-2.5 2.87-4s-1.033-2.94-2.87-4m-29.444 5c.224-.14.494-.252.795-.33s.626-.12.956-.123.657.03.963.102c.306.071.584.177.817.312.234.135.417.295.54.472a.9.9 0 0 1 .178.556.95.95 0 0 1-.215.551c-.135.174-.329.33-.571.46l-5.196 3c-1.838 1.06-2.87 2.5-2.87 4s1.032 2.94 2.87 4c1.838 1.062 4.33 1.658 6.929 1.658s5.091-.596 6.929-1.657l5.196-3c.465-.249 1.079-.384 1.712-.376.633.007 1.238.155 1.686.414.448.258.705.607.717.973s-.221.72-.652.988l-5.196 3c-2.756 1.592-6.494 2.486-10.392 2.486s-7.636-.894-10.392-2.486c-2.757-1.591-4.305-3.75-4.305-6s1.548-4.408 4.305-6z"}),(0,A.jsx)("path",{fill:"#000",d:"m108.005 6.698 3.211-1.854c.954-.55 2.247-.86 3.596-.86s2.642.31 3.596.86c.953.55 1.489 1.297 1.489 2.076 0 .778-.536 1.525-1.489 2.076l-9.589 5.535c-.317.184-.749.287-1.198.287-.45 0-.881-.103-1.199-.287-.317-.183-.496-.432-.496-.692s.179-.508.496-.692l9.589-5.535-2.398-1.384-9.588 5.535c-.953.551-1.489 1.298-1.489 2.076 0 .779.536 1.526 1.489 2.076s2.247.86 3.596.86c1.348 0 2.642-.31 3.595-.86l9.589-5.535c1.589-.918 2.482-2.163 2.482-3.46s-.893-2.543-2.482-3.46c-1.59-.918-3.745-1.433-5.993-1.433s-4.403.515-5.993 1.433l-4.394 2.537z"}),(0,A.jsxs)("defs",{children:[(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__b",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#D9D9D9"}),(0,A.jsx)("stop",{offset:1,stopColor:"#E9E9EB"})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__c",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#7D7E80"}),(0,A.jsx)("stop",{offset:1,stopColor:"#C7C9CC"})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__d",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#fff"}),(0,A.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.2})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__e",x1:72.75,x2:90.111,y1:33.874,y2:63.944,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#fff"}),(0,A.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.5})]}),(0,A.jsxs)("filter",{id:"server-offline-foreground_svg__a",width:176.348,height:118.721,x:.786,y:16.015,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,A.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,A.jsx)("feColorMatrix",{in:"SourceAlpha",result:"hardAlpha",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"}),(0,A.jsx)("feOffset",{dy:4}),(0,A.jsx)("feGaussianBlur",{stdDeviation:10}),(0,A.jsx)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,A.jsx)("feColorMatrix",{values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0"}),(0,A.jsx)("feBlend",{in2:"BackgroundImageFix",result:"effect1_dropShadow_4624_2901"}),(0,A.jsx)("feBlend",{in:"SourceGraphic",in2:"effect1_dropShadow_4624_2901",result:"shape"})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var uL=r(24707),uU=r(36820),uK=r(9870),uQ=r(99877),uJ=r(63147),uZ=r(90638);let uX="Auto dismiss keyboard",uq={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"}},uH=["aiAct","aiTap","aiQuery","aiAssert"],uW=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
|
|
847
|
+
${n}`;return"string"==typeof e?i:{...e,prompt:i}})(e,u),p=(()=>{let e=(null==t?void 0:t.effort)??((null==t?void 0:t.deepThink)===!0?"deepThink":"balance");if((null==t?void 0:t.effort)!==void 0&&uA('The "effort" option is experimental and not yet open for public use. Do not use it. When both "effort" and "deepThink" are provided, "effort" takes precedence.'),"fast"===e&&"custom"===l.adapter.planning.kind)throw Error(`The "fast" aiAct effort is not supported with custom planning adapters (modelFamily: ${l.config.modelFamily??"unknown"}).`);return"deepThink"===e&&"custom"===l.adapter.planning.kind?(uA(`The "deepThink" aiAct effort is not supported with custom planning adapters (modelFamily: ${l.config.modelFamily??"unknown"}). It will be ignored.`),"balance"):e})(),h=null==t?void 0:t.deepLocate;h&&!l.adapter.planning.supportsActionDeepLocate&&(uA(`The "deepLocate" option is not supported for aiAct with the current planning adapter (modelFamily: ${l.config.modelFamily??"unknown"}). It will be ignored.`),h=!1);let f=null==t?void 0:t.cacheable,m=this.resolveReplanningCycleLimit(l),g=l.adapter.planning.cacheEnabled&&!1!==f?null==(r=this.taskCache)?void 0:r.matchPlanCache(d):void 0,y=!1;if((null==g?void 0:g.cacheUsable)&&(null==(n=this.taskCache)?void 0:n.isCacheResultUsed)&&(null==(a=g.cacheContent)||null==(i=a.yamlWorkflow)?void 0:i.trim())){let t=g.cacheContent.yamlWorkflow;try{await this.taskExecutor.loadYamlFlowAsPlanning(e,t,o),ul("matched cache, will call .runYaml to run the action"),await this.runYaml(t);return}catch(e){y=!0,uA(`cached aiAct plan failed, will replan and disable the stale cache: ${e instanceof Error?e.message:String(e)}`)}}let{output:v}=await this.taskExecutor.action(e,l,c,u,f,m,p,void 0,h,A,o);if(this.taskCache&&!1!==f){let e=y?[]:null==v?void 0:v.yamlFlow;if(!y&&!(null==e?void 0:e.length))return null==v?void 0:v.output;let t=e??[],r=lm.Ay.dump({tasks:[{name:s,flow:t}]});this.taskCache.updateOrAppendCacheRecord({type:"plan",prompt:d,yamlWorkflow:r},g)}return null==v?void 0:v.output},u=this.interface.registerFileChooserListener?new AG(this.interface):void 0;this.activeFileChooserAccepter=u,this.activeFileChooserAllowedDir=(null==t?void 0:t.fileChooserAllowedDir)?(0,tc.resolve)(t.fileChooserAllowedDir):void 0;try{if(null==l?void 0:l.length){if(!u)throw Error(`File upload is not supported on ${this.interface.interfaceType}`);await u.register(l)}i=await c()}catch(e){r={error:e}}finally{this.activeFileChooserAccepter=void 0,this.activeFileChooserAllowedDir=void 0;try{n=await (null==u?void 0:u.clear())}catch(e){uA(`Failed to clear file chooser registration: ${e}`)}}if(r)throw r.error;if(n)throw n;return i}async runMarkdown(e,t){let r=await (0,Ag.readFile)(e,"utf-8"),{prompt:n}=await cM(r,e);return this.aiAct(n,{...t,_internalReportDisplay:{type:"Markdown",prompt:(0,tc.basename)(e)}})}async runGherkinScenario(e,t){return cP(this,e,t)}async aiAction(e,t){return this.aiAct(e,t)}async aiQuery(e,t){return this.createInsight().aiQuery(e,t)}async aiBoolean(e,t){return this.createInsight().aiBoolean(e,t)}async aiNumber(e,t){return this.createInsight().aiNumber(e,t)}async aiString(e,t){return this.createInsight().aiString(e,t)}async aiAsk(e,t){return this.createInsight().aiAsk(e,t)}async aiLocate(e,t){let r=lB(e,this.withContext("aiLocate",t));e4(r,"cannot get locate param for aiLocate");let n=ci(r),i=this.resolveModelRuntime("default"),o=this.resolveModelRuntime("planning"),{output:a}=await this.taskExecutor.runPlans(cc("Locate",cl(r)),[n],o,i,(null==t?void 0:t.uiContext)?{uiContext:t.uiContext}:void 0),{element:s}=a;return{rect:s?s.rect??{left:Math.max(s.center[0]-3.5,0),top:Math.max(s.center[1]-3.5,0),width:8,height:8}:void 0,center:null==s?void 0:s.center,dpr:null==s?void 0:s.dpr}}async aiAssert(e,t,r){return this.createInsight().aiAssert(e,t,r)}async aiWaitFor(e,t){let r=this.resolveModelRuntime("insight"),n=this.withContext("aiWaitFor",t);await this.taskExecutor.waitFor(e,{...n,timeoutMs:(null==n?void 0:n.timeoutMs)||15e3,checkIntervalMs:(null==n?void 0:n.checkIntervalMs)||3e3},r)}async ai(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return this.aiAct(...t)}async runYaml(e){let t=new lJ(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(lR.test(t))return r=!0,e;lM.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=lO.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=lm.Ay.load(i,{schema:lm.Ay.JSON_SCHEMA}),a=t?`, failed to load ${t}`:"";return!function(e){let t=lT.map(t=>[t,e[t]]).filter(e=>void 0!==e[1]);if(0===t.length)return;if(t.length>1){let e=t.map(e=>{let[t]=e;return t});throw Error(`[midscene] Only one web target can be specified, but found multiple: ${e.join(", ")}. Please specify only one of: page, browser, web, or target.`)}let[r,n]=t[0],i=n.mode;if(void 0!==i&&"page"!==i&&"browser"!==i)throw Error(`[midscene] web target mode must be either "page" or "browser", but got "${i}".`);if("page"===r&&"browser"===i)throw Error("[midscene] page target cannot use mode: browser. Use browser: instead.");if("browser"===r&&"page"===i)throw Error("[midscene] browser target cannot use mode: page. Use page: instead.");let o="page"===r?"page":"browser"===r?"browser":i??"page";if("page"===o&&n.autoFollowNewPage)throw Error("[midscene] autoFollowNewPage requires browser mode. Use browser: or web.mode: browser.");if("browser"===o&&void 0!==n.forceSameTabNavigation)throw Error("[midscene] forceSameTabNavigation cannot be used in browser mode. Use page: or web.mode: page when same-tab navigation is required.");({...n,mode:o})}(o),e4(o.tasks,`property "tasks" is required in yaml script ${a}`),e4(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:
|
|
848
|
+
${e}`)}return{result:t.result}}async evaluateJavaScript(e){return e4(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;for(let e of(this.destroyed=!0,this.ownedObservers))try{await e.dispose()}catch(e){ul(`error disposing unexported observer during destroy: ${e}`)}this.ownedObservers.clear(),this.activeObserver=null;try{var t,r;await (null==(t=(r=this.interface).destroy)?void 0:t.call(r))}catch(t){e=t}await this.reportGenerator.flush();let n=await this.reportGenerator.finalize();if(this.reportFile=n,this.resetDump(),e)throw e}async sleep(e){await this.taskExecutor.sleep(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(ov);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 oE(e,t)}if(n.startsWith("data:")||!ob.test(n))throw Error(`${r} must be a PNG/JPEG data URI or raw PNG base64 string`);return oE("png",n)})(e.base64,{label:`recordToReport: screenshot #${t+1} base64`}),description:e.description}}(e,t),i=r+t;return{type:"screenshot",ts:i,screenshot:ot.create(n.base64,i),description:n.description}}),A={taskId:e3(),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 sU({id:e3(),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=l3(t.error),i=[],o=t.screenshotBase64??await this.interface.screenshotBase64();o&&i.push({type:"screenshot",ts:r,screenshot:ot.create(o,r)});let a={taskId:e3(),type:"Log",subType:"Error",status:"failed",recorder:i,timing:{start:r,end:r,cost:0},param:{content:t.content||""},error:n,errorMessage:n.message,errorStack:n.stack,executor:async()=>{}},s=new sU({id:e3(),logTime:r,name:e,description:t.content||n.message,tasks:[a]});this.appendExecutionDump(s),this.writeOutActionDumps(s),await this.reportGenerator.flush(),this.notifyDumpUpdateListeners(s)}async logScreenshot(e,t){await this.recordToReport(e,t)}_unstableLogContent(){let{groupName:e,groupDescription:t,executions:r}=this.dump;return{groupName:e,groupDescription:t,executions:r||[]}}async freezePageContext(){ul("Freezing page context");let e=await this._snapshotContext();e._isFrozen=!0,this.frozenUIContext=e,ul("Page context frozen successfully")}async unfreezePageContext(){ul("Unfreezing page context"),this.frozenUIContext=void 0,ul("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&&!Aw.some(e=>e===t))throw Error(`cache.strategy must be one of ${AE}, 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(r5.getEnvConfigInBoolean(tQ)&&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 AK(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;let n;if(us(this,"interface",void 0),us(this,"service",void 0),us(this,"dump",void 0),us(this,"reportFile",void 0),us(this,"reportFileName",void 0),us(this,"taskExecutor",void 0),us(this,"opts",void 0),us(this,"dryMode",!1),us(this,"onTaskStartTip",void 0),us(this,"taskCache",void 0),us(this,"metricsCollector",new cw),us(this,"usageCallCounter",0),us(this,"countedUsageKeys",new Set),us(this,"dumpUpdateListeners",[]),us(this,"progressBus",new A0),us(this,"destroyed",!1),us(this,"modelConfigManager",void 0),us(this,"frozenUIContext",void 0),us(this,"activeObserver",null),us(this,"ownedObservers",new Set),us(this,"executionDumpIndexByRunner",new WeakMap),us(this,"fullActionSpace",void 0),us(this,"activeFileChooserAccepter",void 0),us(this,"activeFileChooserAllowedDir",void 0),us(this,"reportGenerator",void 0),us(this,"lastExecutionDump",void 0),this.interface=e,this.opts=Object.assign({generateReport:!0,persistExecutionDump:!1,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},t||{}),Ah(this.opts),void 0!==this.opts.aiContexts&&("object"!=typeof this.opts.aiContexts||null===this.opts.aiContexts||Array.isArray(this.opts.aiContexts)))throw TypeError("opts.aiContexts must be a plain object");for(const[e,t]of Object.entries(this.opts.aiContexts??{})){if(!Av(e))throw TypeError(`Unknown Agent context key: ${e}`);if(void 0!==t&&"string"!=typeof t)throw TypeError(`Agent context "${e}" must be a string`)}const i=void 0!==this.opts.aiActContext?"aiActContext":void 0!==this.opts.aiActionContext?"aiActionContext":void 0;i&&uA(`Agent option "${i}" is deprecated; use "aiContexts.aiAct" instead. When both are provided, "aiContexts.aiAct" takes precedence.`);const o={...this.opts.aiContexts},a=o.aiAct??this.opts.aiActContext??this.opts.aiActionContext;if(void 0!==a&&(o.aiAct=a,this.opts.aiActContext=a,this.opts.aiActionContext=a),this.opts.aiContexts=o,(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)}`);this.modelConfigManager=(null==t?void 0:t.modelConfig)?new r2(t.modelConfig,t.createOpenAIClient):(null==t?void 0:t.createOpenAIClient)?new uc(r3,t.createOpenAIClient):r3,this.onTaskStartTip=this.opts.onTaskStartTip,this.service=new s6(async()=>this.getUIContext());const s=this.processCacheConfig(t||{});s&&(this.taskCache=new AN(s.id,s.enabled,void 0,{readOnly:s.readOnly,writeOnly:s.writeOnly,cacheDir:s.cacheDir}));const l=this.interface.actionSpace(),A=this.interface.registerFileChooserListener?[(n=async e=>{if(!this.activeFileChooserAccepter)throw Error("RegisterFileChooserAccept can only be used while aiAct is running");if(!this.activeFileChooserAllowedDir)throw Error("RegisterFileChooserAccept requires aiAct option fileChooserAllowedDir");await this.activeFileChooserAccepter.registerFromAllowedDir(e,this.activeFileChooserAllowedDir)},{name:"RegisterFileChooserAccept",description:"Configure files for file chooser dialogs triggered by later actions in this aiAct",interfaceAlias:"registerFileChooserAccept",paramSchema:lA,sample:{files:["fixtures/document.pdf"]},call:async e=>{await n(e.files)}})]:[];this.fullActionSpace=[...l,...A,ld()],this.taskExecutor=new cf(this.interface,this.service,{taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this),replanningCycleLimit:this.opts.replanningCycleLimit,waitAfterAction:this.opts.waitAfterAction,useDeviceTime:this.opts.useDeviceTime,actionSpace:this.fullActionSpace,hooks:{onSnapshotChange:async e=>{let t=e.dump();this.appendExecutionDump(t,e),this.collectUsageMetrics(t),this.writeOutActionDumps(t),await this.reportGenerator.flush();let r=this.dumpDataString();for(let e of this.dumpUpdateListeners)try{e(r,t)}catch(e){console.error("Error in onDumpUpdate listener",e)}},onProgress:this.progressBus.publish}}),this.dump=this.resetDump(),this.reportFileName=(null==t?void 0:t.reportFileName)??Az((null==t?void 0:t.testId)||this.interface.interfaceType||"web"),this.reportGenerator=Af.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}),Object.defineProperty(this,Ab,{value:{exportRecord:async e=>(e4(e instanceof un,"Cannot export an observation that was not created by this Midscene runtime"),e.exportRecord()),loadRecord:e=>(ua(e),new un(e,this.createInsight(()=>ua(e))))}})}}us(uu,"CONTEXT_RETRY_MAX",3),us(uu,"CONTEXT_RETRY_DELAY_MS",1500),r(8963).Buffer;RegExp(`${i2}="(inline|directory)"`);r(8963).Buffer;ik.k5(["split","to-markdown","merge-html"]).optional().describe("Report action to run. Supports: split, to-markdown, merge-html. Defaults to split."),ik.Yj().optional().describe("Input report HTML path (e.g. ./report/index.html). Used by split and to-markdown."),ik.KC([ik.Yj(),ik.YO(ik.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)."),ik.Yj().optional().describe("Output directory for generated report artifacts. For merge, defaults to the Midscene report directory."),ik.Yj().optional().describe("Output report file/directory name (without .html) for the merge action. Defaults to an auto-generated name."),ik.KC([ik.zM(),ik.Yj()]).optional().describe("Overwrite the existing merged report file if present (merge action only).");class ud{async getActionSpace(e){return[]}getRecorderScreenshotAssetUrl(e){return null}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};try{let r=this.prepareParamsForValidation(e.params,t);return t.paramSchema.parse(r),{valid:!0}}catch(e){return this.handleValidationError(e)}}createDisplayContent(e,t,r){return t&&e.params&&(null==r?void 0:r.paramSchema)?this.buildParamsDisplayList(e.params,r).join("\n")||e.prompt||"":e.prompt||""}formatBasicErrorMessage(e){return(null==e?void 0:e.message)||"Unknown error"}getSchemaKeys(e){if(!(null==e?void 0:e.paramSchema)||!("shape"in e.paramSchema))return[];let t=e.paramSchema;return t&&"shape"in t?Object.keys(t.shape):[]}filterValidParams(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return Object.keys(e).forEach(n=>{t.includes(n)||void 0===e[n]||null===e[n]||""===e[n]||(r[n]=e[n])}),r}actionNeedsStructuredParams(e){return"object"!=typeof e.paramSchema||!("shape"in e.paramSchema)||Object.keys(e.paramSchema.shape||{}).length>0}prepareParamsForValidation(e,t){let r={...e};return t.paramSchema&&iN(t.paramSchema).forEach(e=>{"string"==typeof r[e]&&(r[e]={prompt:r[e],center:[0,0],rect:{left:0,top:0,width:0,height:0}})}),r}handleValidationError(e){if(e.errors&&e.errors.length>0){let t=e.errors.filter(e=>{let t=e.path.join(".");return!t.includes("center")&&!t.includes("rect")}).map(e=>{let t=e.path.join(".");return`${t}: ${e.message}`});if(t.length>0)return{valid:!1,errorMessage:`Validation error: ${t.join(", ")}`}}let t=e instanceof Error?e.message:"Unknown validation error";return{valid:!1,errorMessage:`Parameter validation failed: ${t}`}}buildParamsDisplayList(e,t){let r=[],n=t.paramSchema;if(!(n&&"shape"in n))return r;let i=iN(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 up(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class uh extends ud{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 lH(e,t,r)}formatErrorMessage(e){return((null==e?void 0:e.message)||"").includes("of different extension")?"Conflicting extension detected. Please disable the suspicious plugins and refresh the page. Guide: https://midscenejs.com/quick-start.html#chrome-extension-faq":this.formatBasicErrorMessage(e)}async getActionSpace(e){var t;if(!this.agent&&this.agentFactory)try{this.agent=await this.agentFactory()}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){r7(e),console.log("Config updated. Agent will be recreated on next execution.")}async runConnectivityTest(e){let t=new r2(e);return ls({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 lW(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=sK.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=sK.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&&(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=sK.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(),up(this,"agent",void 0),up(this,"agentFactory",void 0),up(this,"dumpUpdateCallback",void 0),up(this,"progressCallback",void 0),up(this,"_id",void 0),up(this,"currentRequestId",void 0),this.agent=e??null,this.agentFactory=t,this._id=e3()}}function uf(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class um extends ud{resolveReportUrl(e){if(!e||!this.serverUrl)return e;let t={...e,url:new URL(e.url,this.serverUrl).toString()};return e.replayUrl&&(t.replayUrl=new URL(e.replayUrl,this.serverUrl).toString()),t}onDumpUpdate(e){this.dumpUpdateCallback=void 0,this.dumpUpdateCallback=e}get id(){return this._id}validateParams(e,t){if(!(null==t?void 0:t.paramSchema)||!this.actionNeedsStructuredParams(t))return{valid:!0};if(!e.params)return{valid:!1,errorMessage:"Parameters are required"};if(t.paramSchema&&"object"==typeof t.paramSchema){let r=t.paramSchema;if(r.shape||"ZodObject"===r.type){let t=r.shape||{},n=Object.keys(t).filter(r=>{var n,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 lH(e,t,r)}formatErrorMessage(e){let t=(null==e?void 0:e.message)||"",r=[{keyword:"adb",message:"ADB connection error. Please ensure device is connected and USB debugging is enabled."},{keyword:"UIAutomator",message:"UIAutomator error. Please ensure the UIAutomator server is running on the device."}].find(e=>{let{keyword:r}=e;return t.includes(r)});return r?r.message:this.formatBasicErrorMessage(e)}async executeAction(e,t,r){if(this.serverUrl&&"undefined"!=typeof window)return this.executeViaServer(e,t,r);throw Error("Remote execution adapter requires server URL for execution")}async executeViaServer(e,t,r){let n={type:e,prompt:t.prompt,...this.buildOptionalPayloadParams(r,t)};r.context&&(n.context=r.context),r.requestId&&this.dumpUpdateCallback&&this.startProgressPolling(r.requestId);try{let e=await fetch(`${this.serverUrl}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!e.ok){let t=await e.text().catch(()=>"Unknown error");throw Error(`Server request failed (${e.status}): ${t}`)}let t=await e.json();return(null==t?void 0:t.report)&&(t.report=this.resolveReportUrl(t.report)),t}catch(e){throw console.error("Execute via server failed:",e),e}finally{this.stopProgressPolling()}}buildOptionalPayloadParams(e,t){let r={};return[{key:"requestId",value:e.requestId},{key:"deepLocate",value:e.deepLocate},{key:"deepThink",value:e.deepThink},{key:"screenshotIncluded",value:e.screenshotIncluded},{key:"domIncluded",value:e.domIncluded},{key:"deviceOptions",value:e.deviceOptions},{key:"reportDisplay",value:e.reportDisplay},{key:"params",value:t.params}].forEach(e=>{let{key:t,value:n}=e;null!=n&&""!==n&&(r[t]=n)}),r}async getActionSpace(e){if(this.serverUrl&&"undefined"!=typeof window)try{let t=await fetch(`${this.serverUrl}/action-space`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({context:e})});if(!t.ok)throw Error(`Failed to get action space: ${t.statusText}`);let r=await t.json();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from server:",e)}if(e&&"object"==typeof e&&"actionSpace"in e)try{let t=e.actionSpace,r=await t();return Array.isArray(r)?r:[]}catch(e){console.error("Failed to get action space from context:",e)}return[]}async checkStatus(){if(!this.serverUrl)return!1;try{let e=await fetch(`${this.serverUrl}/status`);if(200===e.status){try{let t=await e.json();t.id&&"string"==typeof t.id&&(this._id=t.id)}catch(e){console.debug("Failed to parse status response:",e)}return!0}return!1}catch(e){return console.warn("Server status check failed:",e),!1}}async overrideConfig(e){if(!this.serverUrl)throw Error("Server URL not configured");try{let t=await fetch(`${this.serverUrl}/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aiConfig:e})});if(!t.ok){let e=await t.json().catch(()=>null),r=(null==e?void 0:e.error)||t.statusText;throw Error(r)}}catch(e){throw console.error("Failed to override server config:",e),e}}async runConnectivityTest(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/connectivity-test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:e})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return t.json()}async getTaskProgress(e){if(!this.serverUrl)return{};if(!(null==e?void 0:e.trim()))return console.warn("Invalid requestId provided for task progress"),{};try{let t=await fetch(`${this.serverUrl}/task-progress/${encodeURIComponent(e)}`);if(!t.ok)return console.warn(`Task progress request failed: ${t.statusText}`),{};return await t.json()}catch(e){return console.error("Failed to poll task progress:",e),{}}}startProgressPolling(e){this.stopProgressPolling(),this.pollingIntervalId=setInterval(async()=>{try{let t=await this.getTaskProgress(e);t.executionDump&&this.dumpUpdateCallback&&this.dumpUpdateCallback("",t.executionDump)}catch(e){console.error("Error polling task progress:",e)}},500)}stopProgressPolling(){this.pollingIntervalId&&(clearInterval(this.pollingIntervalId),this.pollingIntervalId=void 0)}async cancelTask(e){if(!this.serverUrl)return{error:"No server URL configured"};if(!(null==e?void 0:e.trim()))return{error:"Invalid request ID"};try{let t=await fetch(`${this.serverUrl}/cancel/${encodeURIComponent(e)}`,{method:"POST"});if(!t.ok)return{error:`Cancel request failed: ${t.statusText}`};let r=await t.json();return(null==r?void 0:r.report)&&(r.report=this.resolveReportUrl(r.report)),{success:!0,...r}}catch(e){return console.error("Failed to cancel task:",e),{error:"Failed to cancel task"}}}async getScreenshot(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/screenshot`);if(!e.ok)return 409!==e.status&&console.warn(`Screenshot request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get screenshot:",e),null}}async interact(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/interact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Interact request failed (${t.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async startRecorderSession(e){if(!this.serverUrl)return{ok:!1,supported:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,supported:(null==r?void 0:r.supported)??!1,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:(null==r?void 0:r.error)||`Recorder start request failed (${t.status})`};return{ok:(null==r?void 0:r.ok)??!0,supported:(null==r?void 0:r.supported)??!0,source:null==r?void 0:r.source,platformId:null==r?void 0:r.platformId,error:null==r?void 0:r.error}}catch(e){return{ok:!1,supported:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderCapabilities(){if(!this.serverUrl)return{supported:!1,source:"unsupported",error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/capabilities`),t=await e.json().catch(()=>null);if(!e.ok)return{supported:!1,source:"unsupported",error:(null==t?void 0:t.error)||`Recorder capabilities request failed (${e.status})`};return{supported:(null==t?void 0:t.supported)===!0,source:(null==t?void 0:t.source)||"unsupported",platformId:null==t?void 0:t.platformId,error:null==t?void 0:t.error}}catch(e){return{supported:!1,source:"unsupported",error:e instanceof Error?e.message:"Unknown error"}}}async stopRecorderSession(){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let e=await fetch(`${this.serverUrl}/recorder/stop`,{method:"POST"});if(!e.ok)return{ok:!1,error:`Recorder stop request failed (${e.status})`};return{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Unknown error"}}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(!this.serverUrl)return{events:[],nextIndex:e};try{let t=await fetch(`${this.serverUrl}/recorder/events?since=${encodeURIComponent(String(e))}&flushPending=false`);if(!t.ok)return{events:[],nextIndex:e};let r=await t.json().catch(()=>null);return{events:Array.isArray(null==r?void 0:r.events)?r.events:[],nextIndex:"number"==typeof(null==r?void 0:r.nextIndex)&&Number.isFinite(r.nextIndex)?r.nextIndex:e}}catch(t){return console.error("Failed to poll recorder events:",t),{events:[],nextIndex:e}}}async describeRecorderEventAtPoint(e){if(!this.serverUrl)return{ok:!1,error:"No server URL configured"};try{let t=await fetch(`${this.serverUrl}/recorder/describe-event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({event:e})}),r=await t.json().catch(()=>null);if(!t.ok)return{ok:!1,error:(null==r?void 0:r.error)||`Recorder describe request failed (${t.status})`};return r||{ok:!1,error:"Empty recorder describe response"}}catch(e){return{ok:!1,error:e instanceof Error?e.message:"Failed to describe recorder event"}}}async getRecorderScreenshotAsset(e){if(!this.serverUrl||!e)return null;try{let t=await fetch(`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`);if(!t.ok)return null;let r=await t.blob();return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e("string"==typeof n.result?n.result:null),n.onerror=()=>t(n.error),n.readAsDataURL(r)})}catch(e){return console.error("Failed to fetch recorder screenshot asset:",e),null}}getRecorderScreenshotAssetUrl(e){return this.serverUrl&&/^[a-zA-Z0-9_-]+$/.test(e)?`${this.serverUrl}/recorder/assets/${encodeURIComponent(e)}`:null}async clearRecorderScreenshotAssets(e){if(!this.serverUrl||!e)return;let t=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok)throw Error(`Recorder screenshot cleanup request failed (${t.status})`)}async pruneRecorderScreenshotAssets(e,t){if(!this.serverUrl||!e)return;let r=await fetch(`${this.serverUrl}/recorder/assets/session/${encodeURIComponent(e)}/prune`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({assetIds:t})});if(!r.ok)throw Error(`Recorder screenshot prune request failed (${r.status})`)}async getInterfaceInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/interface-info`);if(!e.ok)return console.warn(`Interface info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get interface info:",e),null}}async getRuntimeInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/runtime-info`);if(!e.ok)return console.warn(`Runtime info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get runtime info:",e),null}}async getSessionInfo(){if(!this.serverUrl)return null;try{let e=await fetch(`${this.serverUrl}/session`);if(!e.ok)return console.warn(`Session info request failed: ${e.statusText}`),null;return await e.json()}catch(e){return console.error("Failed to get session info:",e),null}}async getSessionSetup(e){if(!this.serverUrl)return null;try{let t=new URLSearchParams;Object.entries(e||{}).forEach(e=>{let[r,n]=e;("string"==typeof n||"number"==typeof n||"boolean"==typeof n)&&t.set(r,String(n))});let r=t.size>0?`?${t.toString()}`:"",n=await fetch(`${this.serverUrl}/session/setup${r}`);if(!n.ok){let e=await n.json().catch(()=>null);throw Error((null==e?void 0:e.error)||n.statusText||"Failed to load session setup")}return await n.json()}catch(e){throw console.error("Failed to get session setup:",e),e}}async listSessionTargets(){if(!this.serverUrl)return[];try{let e=await fetch(`${this.serverUrl}/session/targets`);if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText||"Failed to load session targets")}let t=await e.json();return Array.isArray(t)?t:[]}catch(e){throw console.error("Failed to get session targets:",e),e}}async createSession(e){if(!this.serverUrl)throw Error("Server URL not configured");let t=await fetch(`${this.serverUrl}/session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e||{})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||t.statusText)}return await t.json()}async destroySession(){if(!this.serverUrl)throw Error("Server URL not configured");let e=await fetch(`${this.serverUrl}/session`,{method:"DELETE"});if(!e.ok){let t=await e.json().catch(()=>null);throw Error((null==t?void 0:t.error)||e.statusText)}return await e.json()}constructor(e){super(),uf(this,"serverUrl",void 0),uf(this,"_id",void 0),uf(this,"dumpUpdateCallback",void 0),uf(this,"pollingIntervalId",void 0),this.serverUrl=e}}function ug(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class uy{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 uh(r,n);case"remote-execution":return new um(t||("undefined"!=typeof window&&window.location.protocol.includes("http")?window.location.origin:"http://localhost:5800"));default:throw Error(`Unsupported execution type: ${e}`)}}runtimeMetadataAdapter(){return this.adapter instanceof uh||this.adapter instanceof um?this.adapter:null}async executeAction(e,t,r){var n;return await (null==(n=this.beforeActionHook)?void 0:n.call(this,e,t,r)),await this.adapter.executeAction(e,t,r)}setBeforeActionHook(e){this.beforeActionHook=e}async getActionSpace(e){return this.adapter.getActionSpace(e)}validateStructuredParams(e,t){return this.adapter.validateParams(e,t)}formatErrorMessage(e){return this.adapter.formatErrorMessage(e)}createDisplayContent(e,t,r){return this.adapter.createDisplayContent(e,t,r)}get id(){if(this.adapter instanceof um||this.adapter instanceof uh)return this.adapter.id}async checkStatus(){return!(this.adapter instanceof um)||this.adapter.checkStatus()}async overrideConfig(e){return this.adapter.overrideConfig(e)}async runConnectivityTest(e){return this.adapter.runConnectivityTest(e)}async getTaskProgress(e){return this.adapter instanceof um?this.adapter.getTaskProgress(e):{}}async cancelTask(e){return this.adapter instanceof um?this.adapter.cancelTask(e):{error:"Cancel task not supported in local execution mode"}}onDumpUpdate(e){this.adapter instanceof uh?this.adapter.onDumpUpdate(e):this.adapter instanceof um&&this.adapter.onDumpUpdate(e)}onProgressUpdate(e){this.adapter instanceof uh&&this.adapter.setProgressCallback(e)}async cancelExecution(e){if(this.adapter instanceof um){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:t.report||null}}else if(this.adapter instanceof uh){let t=await this.adapter.cancelTask(e);if(t.success)return{dump:t.dump||null,reportHTML:t.reportHTML||null,report:null}}return null}async getCurrentExecutionData(){return this.adapter instanceof uh&&this.adapter.getCurrentExecutionData?await this.adapter.getCurrentExecutionData():{dump:null,reportHTML:null}}async getScreenshot(){return this.adapter instanceof um?this.adapter.getScreenshot():null}async interact(e){return this.adapter instanceof um?this.adapter.interact(e):{ok:!1,error:"Direct interaction requires remote execution"}}async startRecorderSession(e){return this.adapter instanceof um?this.adapter.startRecorderSession(e):{ok:!1,supported:!1,error:"Recorder requires remote execution"}}async getRecorderCapabilities(){return this.adapter instanceof um?this.adapter.getRecorderCapabilities():{supported:!1,source:"unsupported",error:"Recorder requires remote execution"}}async stopRecorderSession(){return this.adapter instanceof um?this.adapter.stopRecorderSession():{ok:!0}}async getRecorderEvents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.adapter instanceof um?this.adapter.getRecorderEvents(e):{events:[],nextIndex:e}}async describeRecorderEventAtPoint(e){return this.adapter instanceof um?this.adapter.describeRecorderEventAtPoint(e):{ok:!1,error:"Recorder aiDescribe requires remote execution"}}async getRecorderScreenshotAsset(e){return this.adapter instanceof um?this.adapter.getRecorderScreenshotAsset(e):null}getRecorderScreenshotAssetUrl(e){return this.adapter.getRecorderScreenshotAssetUrl(e)}async clearRecorderScreenshotAssets(e){this.adapter instanceof um&&await this.adapter.clearRecorderScreenshotAssets(e)}async pruneRecorderScreenshotAssets(e,t){this.adapter instanceof um&&await this.adapter.pruneRecorderScreenshotAssets(e,t)}async getInterfaceInfo(){let e=this.runtimeMetadataAdapter();return e?e.getInterfaceInfo():null}async getRuntimeInfo(){let e=this.runtimeMetadataAdapter();return e?e.getRuntimeInfo():null}async getSessionInfo(){return this.adapter instanceof um?this.adapter.getSessionInfo():null}async getSessionSetup(e){return this.adapter instanceof um?this.adapter.getSessionSetup(e):null}async listSessionTargets(){return this.adapter instanceof um?this.adapter.listSessionTargets():[]}async createSession(e){if(this.adapter instanceof um)return this.adapter.createSession(e);throw Error("Session creation is only supported in server mode")}async destroySession(){if(this.adapter instanceof um)return this.adapter.destroySession();throw Error("Session destruction is only supported in server mode")}getServiceMode(){return this.adapter instanceof uh?"In-Browser-Extension":"Server"}constructor(e){ug(this,"adapter",void 0),ug(this,"beforeActionHook",void 0),this.adapter=this.createAdapter(e.type,e.serverUrl,e.agent,e.agentFactory)}}var uv=r(13819);function ub(e){var t,r,n;let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};uv.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})}var uw=r(85810);function uE(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 ux(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(null==e?void 0:e.autoSubmitWhenReady))return null;let r=uE(e,t);for(let t of e.fields){var n;if(t.required&&(null==(n=r[t.key])||""===n))return null}return r}function uk(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 uS(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 uC(e){return Object.keys(e).length>0}function uI(e){return e?JSON.stringify(e):null}let uj="npx puppeteer@24.6.0 browsers install chrome",uO="https://pptr.dev/guides/configuration",uP=/could not find (?:google )?chrome/;function uR(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 uM(){return(0,A.jsxs)("span",{"aria-hidden":!0,style:{display:"block",height:16,position:"relative",width:16},children:[(0,A.jsx)("span",{style:{border:"1.5px solid currentColor",borderRadius:3,height:10,left:5,position:"absolute",top:3,width:8}}),(0,A.jsx)("span",{style:{background:"#f6f8fa",border:"1.5px solid currentColor",borderRadius:3,height:10,left:2,position:"absolute",top:0,width:8}})]})}function uT(e){let{error:t}=e,r=uR(t),[n,i]=(0,c.useState)(!1);return(0,A.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(0,A.jsx)("div",{children:"Studio could not find the Chrome browser required to create a Web Agent."}),(0,A.jsx)("div",{children:"Run this command, then try again:"}),(0,A.jsxs)("div",{onMouseEnter:()=>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,A.jsx)("pre",{style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:14,lineHeight:1.4,margin:0,overflowX:"auto",padding:"12px 44px 12px 12px",whiteSpace:"nowrap"},children:uj}),(0,A.jsx)("button",{"aria-label":"Copy install command",onBlur:()=>i(!1),onClick:()=>(function(e){if("undefined"!=typeof navigator)try{var t;null==(t=navigator.clipboard)||t.writeText(e).catch(()=>void 0)}catch(e){}})(uj),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,A.jsx)(uM,{})})]}),(0,A.jsxs)("div",{children:["Guide:"," ",(0,A.jsx)("a",{href:uO,rel:"noreferrer",target:"_blank",children:uO})]}),(0,A.jsx)(g.A,{getPopupContainer:()=>document.body,overlayInnerStyle:{width:"min(680px, calc(100vw - 48px))"},overlayStyle:{maxWidth:"min(680px, calc(100vw - 48px))"},placement:"topRight",title:(0,A.jsx)("pre",{style:{margin:0,maxHeight:280,overflow:"auto",whiteSpace:"pre-wrap",width:"100%"},children:r}),zIndex:1e4,children:(0,A.jsx)("button",{style:{alignSelf:"flex-start",background:"transparent",border:0,color:"inherit",cursor:"help",padding:0,textDecoration:"underline"},type:"button",children:"Original error"})})]})}function uN(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 uD(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){uN(o,n,i,a,s,"next",e)}function s(e){uN(o,n,i,a,s,"throw",e)}a(void 0)})}}function uB(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function uz(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}let uF=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:400,height:283,fill:"none",viewBox:"0 0 400 283"},e),r=r={children:[(0,A.jsx)("path",{fill:"url(#server-offline-background_svg__a)",fillOpacity:.7,d:"M0 283h283v400H0z",transform:"rotate(-90 0 283)"}),(0,A.jsx)("path",{fill:"url(#server-offline-background_svg__b)",d:"M0 0h400v283H0z"}),(0,A.jsxs)("defs",{children:[(0,A.jsxs)("radialGradient",{id:"server-offline-background_svg__b",cx:0,cy:0,r:1,gradientTransform:"matrix(0 115.5 -163.251 0 200 141.5)",gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#F2F4F7",stopOpacity:0}),(0,A.jsx)("stop",{offset:1,stopColor:"#F2F4F7"})]}),(0,A.jsx)("pattern",{id:"server-offline-background_svg__a",width:1,height:1,patternTransform:"matrix(18 0 0 18 0 283)",patternUnits:"userSpaceOnUse",preserveAspectRatio:"none",viewBox:"0 0 12 12",children:(0,A.jsx)("path",{stroke:"#A1A1A1",strokeWidth:.2,d:"M.1.1h11.8v11.8H.1z"})})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},uL=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:178,height:135,fill:"none",viewBox:"0 0 178 135"},e),r=r={children:[(0,A.jsx)("g",{filter:"url(#server-offline-foreground_svg__a)",children:(0,A.jsx)("rect",{width:74,height:97.5,fill:"url(#server-offline-foreground_svg__b)",rx:12,transform:"matrix(.86603 .5 -.86603 .5 99.136 28.5)"})}),(0,A.jsx)("rect",{width:78,height:101.5,y:-2,fill:"url(#server-offline-foreground_svg__c)",stroke:"url(#server-offline-foreground_svg__d)",strokeWidth:4,rx:14,transform:"matrix(.86603 .5 -.86603 .5 97.404 4)"}),(0,A.jsx)("path",{fill:"url(#server-offline-foreground_svg__e)",d:"M78.147 31.404a.9.9 0 0 1 .156-.559c.117-.178.295-.34.524-.478.228-.138.503-.248.806-.322a4 4 0 0 1 .961-.114c.33 0 .657.038.961.113s.578.184.807.322c.23.137.407.3.525.478.117.178.17.368.157.559v3c.014.19-.04.38-.156.559a1.6 1.6 0 0 1-.524.478 3 3 0 0 1-.806.322c-.304.075-.631.114-.961.114s-.657-.038-.961-.113a3 3 0 0 1-.807-.321 1.6 1.6 0 0 1-.525-.479.9.9 0 0 1-.157-.559zm-9.678 8.414c-.632-.015-1.23-.17-1.668-.434s-.682-.615-.682-.98c0-.366.246-.717.684-.98.438-.264 1.036-.42 1.669-.434h5.196c.33-.007.659.024.968.091.308.068.59.17.828.303s.428.29.557.466a.93.93 0 0 1 .196.555.93.93 0 0 1-.197.554c-.13.176-.32.334-.558.466s-.52.235-.829.303a4 4 0 0 1-.968.09zm38.106 11a4 4 0 0 1-.956-.098 3 3 0 0 1-.815-.305 1.7 1.7 0 0 1-.547-.463.93.93 0 0 1-.193-.55c0-.188.066-.375.193-.549s.313-.331.547-.463c.233-.132.511-.235.815-.304.304-.07.629-.102.956-.098h5.196c.327-.004.652.029.956.098s.582.172.815.304c.234.132.42.29.547.463s.193.361.193.55a.93.93 0 0 1-.193.55 1.7 1.7 0 0 1-.547.462 3 3 0 0 1-.815.305 4 4 0 0 1-.956.097zm-9.38 2.585c.017-.369.281-.72.74-.978.457-.258 1.071-.402 1.71-.402.64 0 1.255.144 1.713.402.457.258.722.61.738.978v3a.9.9 0 0 1-.169.552c-.12.176-.299.336-.527.471a3 3 0 0 1-.803.316 4 4 0 0 1-.951.11c-.327 0-.65-.037-.952-.11a3 3 0 0 1-.802-.316 1.6 1.6 0 0 1-.527-.47.9.9 0 0 1-.17-.553zm8.515-18.5c-1.838-1.06-4.33-1.656-6.93-1.656-2.598 0-5.09.596-6.928 1.657l-5.196 3c-.225.14-.495.252-.796.33s-.626.12-.956.123a4 4 0 0 1-.963-.102 3 3 0 0 1-.817-.312 1.7 1.7 0 0 1-.54-.471.9.9 0 0 1-.178-.557.95.95 0 0 1 .215-.551c.135-.174.33-.33.571-.46l5.196-3c2.757-1.591 6.495-2.485 10.393-2.485s7.636.894 10.392 2.485c2.756 1.592 4.305 3.75 4.305 6s-1.549 4.409-4.305 6l-5.196 3a2.9 2.9 0 0 1-.796.33 4.087 4.087 0 0 1-1.919.021 3 3 0 0 1-.817-.311 1.7 1.7 0 0 1-.54-.472.9.9 0 0 1-.177-.556.95.95 0 0 1 .214-.552c.135-.174.33-.33.572-.46l5.196-3c1.837-1.06 2.87-2.5 2.87-4s-1.033-2.94-2.87-4m-29.444 5c.224-.14.494-.252.795-.33s.626-.12.956-.123.657.03.963.102c.306.071.584.177.817.312.234.135.417.295.54.472a.9.9 0 0 1 .178.556.95.95 0 0 1-.215.551c-.135.174-.329.33-.571.46l-5.196 3c-1.838 1.06-2.87 2.5-2.87 4s1.032 2.94 2.87 4c1.838 1.062 4.33 1.658 6.929 1.658s5.091-.596 6.929-1.657l5.196-3c.465-.249 1.079-.384 1.712-.376.633.007 1.238.155 1.686.414.448.258.705.607.717.973s-.221.72-.652.988l-5.196 3c-2.756 1.592-6.494 2.486-10.392 2.486s-7.636-.894-10.392-2.486c-2.757-1.591-4.305-3.75-4.305-6s1.548-4.408 4.305-6z"}),(0,A.jsx)("path",{fill:"#000",d:"m108.005 6.698 3.211-1.854c.954-.55 2.247-.86 3.596-.86s2.642.31 3.596.86c.953.55 1.489 1.297 1.489 2.076 0 .778-.536 1.525-1.489 2.076l-9.589 5.535c-.317.184-.749.287-1.198.287-.45 0-.881-.103-1.199-.287-.317-.183-.496-.432-.496-.692s.179-.508.496-.692l9.589-5.535-2.398-1.384-9.588 5.535c-.953.551-1.489 1.298-1.489 2.076 0 .779.536 1.526 1.489 2.076s2.247.86 3.596.86c1.348 0 2.642-.31 3.595-.86l9.589-5.535c1.589-.918 2.482-2.163 2.482-3.46s-.893-2.543-2.482-3.46c-1.59-.918-3.745-1.433-5.993-1.433s-4.403.515-5.993 1.433l-4.394 2.537z"}),(0,A.jsxs)("defs",{children:[(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__b",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#D9D9D9"}),(0,A.jsx)("stop",{offset:1,stopColor:"#E9E9EB"})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__c",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#7D7E80"}),(0,A.jsx)("stop",{offset:1,stopColor:"#C7C9CC"})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__d",x1:37,x2:37,y1:0,y2:97.5,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#fff"}),(0,A.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.2})]}),(0,A.jsxs)("linearGradient",{id:"server-offline-foreground_svg__e",x1:72.75,x2:90.111,y1:33.874,y2:63.944,gradientUnits:"userSpaceOnUse",children:[(0,A.jsx)("stop",{stopColor:"#fff"}),(0,A.jsx)("stop",{offset:1,stopColor:"#fff",stopOpacity:.5})]}),(0,A.jsxs)("filter",{id:"server-offline-foreground_svg__a",width:176.348,height:118.721,x:.786,y:16.015,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,A.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,A.jsx)("feColorMatrix",{in:"SourceAlpha",result:"hardAlpha",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"}),(0,A.jsx)("feOffset",{dy:4}),(0,A.jsx)("feGaussianBlur",{stdDeviation:10}),(0,A.jsx)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,A.jsx)("feColorMatrix",{values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0"}),(0,A.jsx)("feBlend",{in2:"BackgroundImageFix",result:"effect1_dropShadow_4624_2901"}),(0,A.jsx)("feBlend",{in:"SourceGraphic",in2:"effect1_dropShadow_4624_2901",result:"shape"})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var uU=r(24707),uK=r(36820),uQ=r(9870),uJ=r(99877),uZ=r(63147),uX=r(90638);let uq="Auto dismiss keyboard",uH={aiAct:{group:"interaction",title:"Auto Planning: plan the steps and execute"},aiTap:{group:"interaction",title:"Click an element"},aiDoubleClick:{group:"interaction",title:"Double-click an element"},aiHover:{group:"interaction",title:"Hover over an element"},aiInput:{group:"interaction",title:"Input text into an element"},aiRightClick:{group:"interaction",title:"Right-click an element"},aiKeyboardPress:{group:"interaction",title:"Press keyboard keys"},aiScroll:{group:"interaction",title:"Scroll the page or element"},aiLocate:{group:"interaction",title:"Locate an element on the page"},aiQuery:{group:"extraction",title:"Extract data directly from the UI"},aiBoolean:{group:"extraction",title:"Get true/false answer"},aiNumber:{group:"extraction",title:"Extract numeric value"},aiString:{group:"extraction",title:"Extract text value"},aiAsk:{group:"extraction",title:"Ask a question about the UI"},aiAssert:{group:"validation",title:"Assert a condition is true"},aiWaitFor:{group:"validation",title:"Wait for a condition to be met"}},uW=["aiAct","aiTap","aiQuery","aiAssert"],uG=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"web page";return{type:"system",content:`
|
|
849
849
|
Welcome to Midscene.js Playground!
|
|
850
850
|
|
|
851
851
|
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.
|
|
852
852
|
|
|
853
853
|
Please enter your instructions in the input box below to start experiencing.
|
|
854
|
-
`,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};uW();let uG={result:void 0,dump:null,reportHTML:null,report:null,error:null},uV="data:image/png;base64,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",uY="data:image/png;base64,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";function u$(e){return"object"==typeof e&&null!==e}let u_=e=>({left:e.center[0]-4,top:e.center[1]-4,width:8,height:8});function u0(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let u1=(e,t,r)=>{let n,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)}},u2=(e,t)=>u1({left:0,top:0,width:e,height:t},e,t),u3=(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}},u5=e=>e.map((e,t)=>({execution:e,index:t})).sort((e,t)=>(Number.isFinite(e.execution.logTime)?e.execution.logTime:1/0)-(Number.isFinite(t.execution.logTime)?t.execution.logTime:1/0)||e.index-t.index).map(e=>{let{execution:t}=e;return t}),u4=e=>{var t,r;let n,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=[],(u5((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=u5((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=u7(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}},u7=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=u0({},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,m,g,y,v,b;let w=null==(b=a[t])?void 0:b.taskId;if(o=w,0===t&&(c=cc(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=ca(e),a=cc(e),c=e.uiContext,h=null==c?void 0:c.screenshot;if(c&&h){let{width:u,height:d}=u3(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,m;let g;r=u0({},u1(u_(t),u,d)),n=n={pointerLeft:t.center[0],pointerTop:t.center[1]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(n)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(n,e))}),i=r,l.push(s({type:"insight",context:c,camera:i,highlightElement:t,searchArea:(null==e?void 0:e.searchArea)??(null==(f=u$(g=null==e?void 0:e.log)&&u$(m=g.dump)&&"string"==typeof m.type&&u$(m.taskInfo)?g.dump:null)||null==(p=f.taskInfo)?void 0:p.searchArea),duration:400,insightCameraDuration:800,title:o,subTitle:t.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}=u3(e,r,n);l.push(s({type:"img",duration:900,title:ca(e),subTitle:cc(e),imageWidth:i,imageHeight:o,taskId:w},t))}}else if("Action Space"===e.type){let t=ca(e),i=cc(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:uV,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}=u3(e,r,n);l.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?u2(a,c):void 0,title:t,subTitle:i,imageWidth:a,imageHeight:c,taskId:w},o))}else{let t=ca(e),i=cc(e),o=null==(g=e.recorder)||null==(m=g[e.recorder.length-1])?void 0:m.screenshot;if(o){let{width:a,height:A}=u3(e,r,n);l.push(s({type:"img",duration:900,camera:u2(a,A),title:t,subTitle:i,imageWidth:a,imageHeight:A,taskId:w},o))}}if("finished"!==e.status){let t=ca(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}=u3(e,r,n);l.push(s({type:"img",camera:u2(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?u3(a[a.length-1],r,n):{width:r,height:n};return l.push({title:"End",subTitle:c,type:"img",duration:200,camera:u2(u.width,u.height),taskId:void 0}),l};function u6(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 u8(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){u6(o,n,i,a,s,"next",e)}function s(e){u6(o,n,i,a,s,"throw",e)}a(void 0)})}}function u9(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function dt(e){if(!e)return"Unknown error";if("string"==typeof e)return e;if("object"==typeof e){var t,r;if(null==(t=e.dump)?void 0:t.error)return dt(e.dump.error);if(e.message)return String(e.message);if(null==(r=e.cause)?void 0:r.message)return String(e.cause.message)}try{let t=JSON.stringify(e);if(t&&"{}"!==t)return t}catch(e){}let n=String(e);return"[object Object]"===n?"Unknown error (an empty error object was received)":n}function dr(e,t){return e?Array.isArray(null==e?void 0:e.executions)?u4(e):e.tasks&&Array.isArray(e.tasks)?u4({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function dn(e,t){return(null==e?void 0:e.dump)?dr(e.dump,t):(null==e?void 0:e.reportHTML)?function(e,t){try{var r;let n=(r=function(e){let t={};for(let r of e.matchAll(/<script type="midscene-image" data-id="([^"]+)">([\s\S]*?)<\/script>/g)){let[,e,n]=r;t[e]=tr(n)}return t}(e),e=>{let t=r[e.id];if(!t)throw Error(`Missing inline report image "${e.id}"`);return t}),i=sk(JSON.parse(function(e){let t=iW(),r=e.lastIndexOf('<script type="midscene_web_dump"');if(-1===r)throw Error("No dump script found in HTML");let n=e.indexOf(">",r);if(-1===n)throw Error("No dump script found in HTML");let i=e.indexOf(t,n);if(-1===i)throw Error("No dump script found in HTML");return tr(e.substring(n+1,i))}(e)),n);return dr(i,t)}catch(e){return console.error("Failed to restore replay from playground report:",e),null}}(e.reportHTML,t):null}function di(e){return u8(function*(){var t,r,n;if(!e.dump&&(null==(t=e.report)?void 0:t.replayUrl))try{let t=yield fetch(e.report.replayUrl);if(!t.ok)throw Error(`Report replay request failed (${t.status})`);r=yield t.json(),n=e.report.url,e.dump=sk(r,e=>new URL("file"===e.storage&&e.path?e.path:`./screenshots/${encodeURIComponent(e.id)}.${i9(e)}`,n).toString())}catch(e){console.error("Failed to load playground report replay:",e)}})()}function da(e){return"aiAct"===e||"runMarkdown"===e}function ds(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class dl{initDB(){return new Promise((e,t)=>{let r=indexedDB.open(this.dbName,this.version);r.onerror=()=>t(r.error),r.onsuccess=()=>e(r.result),r.onupgradeneeded=e=>{let t=e.target.result;this.storeConfigs.forEach(e=>{let{name:r,keyPath:n}=e;t.objectStoreNames.contains(r)||t.createObjectStore(r,{keyPath:n}).createIndex("timestamp","timestamp",{unique:!1})})}})}async withTransaction(e,t,r){let n=(await this.dbPromise).transaction(e,t);return r(Array.isArray(e)?e.map(e=>n.objectStore(e)):n.objectStore(e))}promisifyRequest(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}async put(e,t){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.put(t))})}async get(e,t){return this.withTransaction(e,"readonly",async e=>this.promisifyRequest(e.get(t)))}async getAll(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return this.withTransaction(e,"readonly",async e=>{let r=t?await this.promisifyRequest(e.index("timestamp").getAll()):await this.promisifyRequest(e.getAll());return t?r.sort((e,t)=>e.timestamp-t.timestamp):r})}async clear(e){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.clear())})}async delete(e,t){await this.withTransaction(e,"readwrite",async e=>{await this.promisifyRequest(e.delete(t))})}async count(e){return this.withTransaction(e,"readonly",async e=>this.promisifyRequest(e.count()))}getDBPromise(){return this.dbPromise}constructor(e,t,r){ds(this,"dbPromise",void 0),ds(this,"dbName",void 0),ds(this,"version",void 0),ds(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let dA=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}},dc=(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 du(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 dd(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){du(o,n,i,a,s,"next",e)}function s(e){du(o,n,i,a,s,"throw",e)}a(void 0)})}}function dp(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dh(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){dp(e,t,r[t])})}return e}function df(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 dm="playground_messages",dg="playground_results";class dy{saveMessages(e){return dd(function*(){yield dA(()=>dd(function*(){yield this.dbManager.clear(dm);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=df(dh({},e),{result:"result"===e.type?void 0:e.result}),n={id:e.id||`msg-${t}`,data:r,timestamp:e.timestamp?e.timestamp.getTime():Date.now()+t};return this.dbManager.put(dm,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return dd(function*(){return(yield dA(()=>dd(function*(){let e=yield this.dbManager.getAll(dm,!0);return 0===e.length?[]:Promise.all(e.map(e=>dd(function*(){let t=e.data,r=df(dh({},t),{timestamp:new Date(t.timestamp)});if("result"===t.type&&t.id){let e=yield this.loadResult(t.id);e&&(r.result=e.result,r.replayScriptsInfo=e.replayScriptsInfo,r.replayCounter=e.replayCounter,r.verticalMode=e.verticalMode)}return r}).call(this)))}).call(this),"Failed to load messages from IndexedDB",[],this.messagesCleanup))||[]}).call(this)}clearMessages(){return dd(function*(){yield dA(()=>dd(function*(){yield Promise.all([this.dbManager.clear(dm),this.dbManager.clear(dg)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return dd(function*(){yield dA(()=>dd(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(dg,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return dd(function*(){return(yield dA(()=>dd(function*(){let t=yield this.dbManager.get(dg,e);return(null==t?void 0:t.data)||null}).call(this),"Failed to load result from IndexedDB",null))||null}).call(this)}compressResultForStorage(e){let t=e.result,r=null==t?void 0:t.dump;return t&&r?Array.isArray(null==r?void 0:r.executions)?df(dh({},e),{result:df(dh({},t),{dump:df(dh({},r),{executions:r.executions.map(e=>df(dh({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?df(dh({},e),{result:df(dh({},t),{dump:df(dh({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return df(dh({},e),{uiContext:e.uiContext?df(dh({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>df(dh({},e),{screenshot:e.screenshot}))})})}compressScreenshotIfNeeded(e){if(!e)return e;if(e.length>1048576){let t=Math.round(e.length/1024);return`[COMPRESSED: ${t}KB screenshot removed for storage]`}return e}getStorageStats(){return dd(function*(){return(yield dA(()=>dd(function*(){let[e,t]=yield Promise.all([this.dbManager.count(dm),this.dbManager.count(dg)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return dd(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){dp(this,"dbManager",void 0),dp(this,"namespace",void 0),dp(this,"messagesCleanup",void 0),dp(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new dl(`midscene_playground_${e}`,1,[{name:dm,keyPath:"id"},{name:dg,keyPath:"id"}]),this.messagesCleanup=dc(this.dbManager,dm,100),this.resultsCleanup=dc(this.dbManager,dg,50)}}function dv(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 db(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){dv(o,n,i,a,s,"next",e)}function s(e){dv(o,n,i,a,s,"throw",e)}a(void 0)})}}function dw(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dE(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){dw(e,t,r[t])})}return e}function dx(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}class dk{checkStorageSpace(){try{let e="storage-test",t="x".repeat(102400);return localStorage.setItem(e,t),localStorage.removeItem(e),!0}catch(e){return!1}}saveMessages(e){return db(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>dx(dE({},e),{result:"result"===e.type?void 0:e.result})),r=JSON.stringify(t);localStorage.setItem(this.messagesKey,r)}catch(t){if(t instanceof DOMException&&"QuotaExceededError"===t.name){console.warn("LocalStorage quota exceeded, attempting to clear old data and retry..."),yield this.handleQuotaExceeded();try{let t=e.slice(-10).map(e=>dx(dE({},e),{result:"result"===e.type?void 0:e.result})),r=JSON.stringify(t);localStorage.setItem(this.messagesKey,r),console.info("Successfully saved recent messages after clearing storage")}catch(e){console.error("Failed to save even after clearing storage:",e),yield this.clearMessages()}}else console.error("Failed to save messages to localStorage:",t)}}).call(this)}loadMessages(){return db(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>db(function*(){if("result"===e.type&&e.id){let t=`${this.resultsKey}-${e.id}`,r=localStorage.getItem(t);if(r)try{let t=JSON.parse(r);return dE({},e,t)}catch(e){console.warn("Failed to parse stored result:",e)}}return e}).call(this)))}catch(e){return console.error("Failed to load messages from localStorage:",e),[]}}).call(this)}clearMessages(){return db(function*(){try{localStorage.removeItem(this.messagesKey),Object.keys(localStorage).forEach(e=>{e.startsWith(this.resultsKey)&&localStorage.removeItem(e)})}catch(e){console.error("Failed to clear messages from localStorage:",e)}}).call(this)}saveResult(e,t){return db(function*(){try{let r=`${this.resultsKey}-${e}`;localStorage.setItem(r,JSON.stringify(t))}catch(r){if(r instanceof DOMException&&"QuotaExceededError"===r.name){console.warn("LocalStorage quota exceeded when saving result, clearing old results..."),yield this.handleQuotaExceeded();try{let r=`${this.resultsKey}-${e}`;localStorage.setItem(r,JSON.stringify(t))}catch(e){console.error("Failed to save result even after clearing storage:",e)}}else console.error("Failed to save result to localStorage:",r)}}).call(this)}handleQuotaExceeded(){return db(function*(){try{let e=Object.keys(localStorage),t=e.filter(e=>e.startsWith(this.resultsKey)),r=t.slice(0,Math.max(1,Math.floor(t.length/2)));r.forEach(e=>{localStorage.removeItem(e)}),console.info(`Cleared ${r.length} old result entries to free up storage space`);let n=e.filter(e=>e.includes("playground")||e.includes("agent")||e.startsWith("midscene"));if(n.length>10){let e=n.slice(0,Math.floor(n.length/3));e.forEach(e=>{e!==this.messagesKey&&localStorage.removeItem(e)}),console.info(`Cleared ${e.length} additional playground-related entries`)}}catch(e){console.error("Failed to handle quota exceeded:",e)}}).call(this)}constructor(e="playground"){dw(this,"messagesKey",void 0),dw(this,"resultsKey",void 0),dw(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class dS{saveMessages(e){return db(function*(){this.messages=[...e]}).call(this)}loadMessages(){return db(function*(){return[...this.messages]}).call(this)}clearMessages(){return db(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return db(function*(){this.results.set(e,t)}).call(this)}constructor(){dw(this,"messages",[]),dw(this,"results",new Map)}}class dC{saveMessages(e){return db(function*(){})()}loadMessages(){return db(function*(){return[]})()}clearMessages(){return db(function*(){})()}saveResult(e,t){return db(function*(){})()}}function dI(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"indexeddb",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"playground";switch(e){case"indexeddb":if("undefined"!=typeof indexedDB)return new dy(t);return console.warn("IndexedDB not available, falling back to localStorage"),dI("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new dk(t);return console.warn("localStorage not available, falling back to memory storage"),dI("memory",t);case"memory":return new dS;case"none":return new dC;default:throw Error(`Unknown storage type: ${e}`)}}function dj(){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 dO(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 dP(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){dO(o,n,i,a,s,"next",e)}function s(e){dO(o,n,i,a,s,"throw",e)}a(void 0)})}}function dR(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function dM(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}let dT=e=>{var t;let r=e.highlightElements||[],n=e.highlightRect,i=null==(t=e.uiContext)?void 0:t.shotSize;if(!i)return(0,A.jsx)("div",{className:"blackboard",children:(0,A.jsx)("div",{className:"blackboard-main-content",style:{padding:"20px"},children:"No UI context available"})});let o=e.uiContext,a=i.width,s=i.height,l=c.useMemo(()=>(function(e){if(!(null==e?void 0:e.length))return[];let t=new Map;return e.forEach((e,r)=>{var n;if(!(null==e?void 0:e.center))return;let i="content"in e&&e.content?e.content:"description"in e&&e.description?e.description:void 0,o=["id"in e?e.id:"",i||"",(n=e.center,`${n[0]}:${n[1]}`)].join("|");t.has(o)||t.set(o,{key:"id"in e&&e.id||`${o||"highlight"}-${r}`,label:i,center:e.center})}),Array.from(t.values())})(r),[r]),u=c.useMemo(()=>{var e;return(null==o||null==(e=o.screenshot)?void 0:e.base64)||""},[o]),d=l.map(e=>u_(e)),p=null;return 1===d.length?p=(0,A.jsx)("div",{className:"bottom-tip",children:(0,A.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d[0])]})}):d.length>1&&(p=(0,A.jsx)("div",{className:"bottom-tip",children:(0,A.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d)]})})),(0,A.jsxs)("div",{className:"blackboard",children:[(0,A.jsxs)("div",{className:"blackboard-main-content",style:{width:"fit-content",maxWidth:"100%",position:"relative"},children:[u&&(0,A.jsx)("img",{src:u,alt:"screenshot",className:"blackboard-screenshot",draggable:!1}),(0,A.jsxs)("div",{className:"blackboard-overlay",style:{aspectRatio:`${a}/${s}`,"--ui-scale":Math.max(1,Math.sqrt(a/1920))},children:[n&&(0,A.jsx)("div",{className:"blackboard-rect blackboard-rect-search",style:{left:`${n.left/a*100}%`,top:`${n.top/s*100}%`,width:`${n.width/a*100}%`,height:`${n.height/s*100}%`},children:(0,A.jsx)("span",{className:"blackboard-rect-label",children:"Search Area"})}),l.map(e=>{let t=u_(e);return(0,A.jsx)("div",{className:"blackboard-rect blackboard-rect-highlight",style:{left:`${t.left/a*100}%`,top:`${t.top/s*100}%`,width:`${t.width/a*100}%`,height:`${t.height/s*100}%`}},`${e.key}-rect`)})]})]}),(0,A.jsx)("div",{className:"bottom-tip",style:{display:e.hideController?"none":"block"},children:p})]})};var dN=r(49783),dD=r(37294),dB=r(14985),dz=r(31090),dF=r(92946),dL=r(60090),dU=r(53776);let dK=e=>{let{text:t,disabled:r=!1,speed:n=5,className:i="",colorTheme:o="blue"}=e,a={"--animation-duration":`${n}s`},s=`theme-${o}`;return(0,A.jsx)("div",{className:`shiny-text ${s} ${r?"disabled":""} ${i}`,style:a,children:t})},dQ=(0,A.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,A.jsx)("br",{}),"Please run one of the commands under the midscene project directory:",(0,A.jsx)("br",{}),"a. ",(0,A.jsx)("strong",{children:"npx midscene-playground"}),(0,A.jsx)("br",{}),"b. ",(0,A.jsx)("strong",{children:"npx --yes @midscene/web"})]}),dJ=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:dQ;return(0,A.jsx)("div",{className:"server-tip",children:(0,A.jsx)(V.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},dZ=(0,A.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,A.jsx)(dK,{disabled:!0,text:"The result will be shown here"})});var dX=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 dq=e=>{let{uiContextPreview:t,setUiContextPreview:r,showContextPreview:n}=e;return n?(0,A.jsxs)("div",{className:"form-part context-panel",children:[(0,A.jsx)("h3",{children:"UI Context"}),t?(0,A.jsx)(dT,{uiContext:t,hideController:!0}):(0,A.jsxs)("div",{children:[(e=>{switch(e){case"finished":case"passed":case"success":case"connected":return(0,A.jsx)("span",{style:{color:"#00AD4B"},children:(0,A.jsx)(dN.A,{})});case"finishedWithWarning":return(0,A.jsx)("span",{style:{color:"#f7bb05"},children:(0,A.jsx)(dD.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,A.jsx)("span",{style:{color:"#FF0A0A"},children:(0,A.jsx)(dB.A,{})});case"pending":return(0,A.jsx)(dz.A,{});case"cancelled":case"skipped":return(0,A.jsx)("span",{style:{color:"#8c8c8c"},children:(0,A.jsx)(dF.A,{})});case"running":return(0,A.jsx)(dL.A,{});default:return(0,A.jsx)(dU.A,{})}})("failed")," No UI context",(0,A.jsx)(W.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(dX)},children:"Load Demo"}),(0,A.jsx)("div",{children:"To load the UI context, you can either use the demo data above, or click the 'Send to Playground' in the report page."})]})]}):null};var dH=r(54291);let dW=e=>{let{className:t="",playgroundSDK:r,onVerify:n,agentOptions:i,onAgentOptionsSave:o,configModalClassName:a,configModalWidth:s,envTextareaAutoSize:l,envTextareaMinRows:c}=e,{config:u}=X();return Object.keys(u||{}).length>=1?null:(0,A.jsxs)("div",{className:`env-config-reminder ${t}`,children:[(0,A.jsx)(dH.A,{className:"reminder-icon"}),(0,A.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,A.jsx)(eu,{agentOptions:i,configModalClassName:a,configModalWidth:s,envTextareaAutoSize:l,envTextareaMinRows:c,mode:"text",onAgentOptionsSave:o,onVerify:n,playgroundSDK:r,showTooltipWhenEmpty:!1})]})};var dG=r(67062),dV=r(36130),dY=r(12297),d$=r(15862),d_=r(17615),d0=r(52107),d1=r(74544),d2=r(91235),d3=r(61879),d5=r(99876),d4=r(11269);let d7=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,A.jsx)("path",{fill:"currentColor",d:"M1.333 13v-2.5a.667.667 0 0 1 1.334 0V13c0 .184.149.333.333.333h2.5a.667.667 0 0 1 0 1.334H3c-.92 0-1.667-.746-1.667-1.667m12 0v-2.5a.667.667 0 0 1 1.334 0V13c0 .92-.746 1.667-1.667 1.667h-2.5a.667.667 0 0 1 0-1.334H13a.333.333 0 0 0 .333-.333m-12-7.5V3c0-.92.747-1.667 1.667-1.667h2.5a.667.667 0 0 1 0 1.334H3A.333.333 0 0 0 2.667 3v2.5a.667.667 0 0 1-1.334 0m12 0V3A.333.333 0 0 0 13 2.667h-2.5a.667.667 0 0 1 0-1.334H13c.92 0 1.667.747 1.667 1.667v2.5a.667.667 0 0 1-1.334 0M5.667 10.333h4.666V5.667H5.667zm6 .167c0 .644-.523 1.167-1.167 1.167h-5A1.167 1.167 0 0 1 4.333 10.5v-5c0-.644.523-1.167 1.167-1.167h5c.644 0 1.167.523 1.167 1.167z"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},d6=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,A.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M11.333 13.667 14.667 8l-3.334-5.667H4.667L1.333 8l3.334 5.667z"}),(0,A.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M8 9.667a1.667 1.667 0 1 0 0-3.334 1.667 1.667 0 0 0 0 3.334Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function d8(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 d9(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function pe(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function pt(e,t,r,n){if(!t.img)return;e.img&&t.img!==e.img&&(e.prevImg=e.img,e.imageChanged=!0);let 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=pe(i,o);e.camera=d9({},t),e.prevCamera=d9({},t),e.pointerMoved=!1}}function pr(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function pn(e,t,r,n,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 pi(e,t,r,n,i){let o=pe(r,n),a={img:"",imgW:r,imgH:n,camera:d9({},o),prevCamera:d9({},o),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:uV,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){pt(e,t,n,i);let o=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=d9({},e.camera),e.camera=d9({},t.cameraTarget),e.pointerMoved=pr(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(pt(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=d9({},e.camera),e.camera=d9({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=pr(e.prevCamera,e.camera))}e.spinning=!1}(a,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=d9({},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=d9({},a.camera)))}if(!a.img){let t=e.find(e=>"img"===e.type&&e.img);t&&(a.img=t.img,a.imgW=t.imageWidth||r,a.imgH=t.imageHeight||n)}return{img:a.img,imageWidth:a.imgW,imageHeight:a.imgH,prevImg:a.imageChanged?a.prevImg:null,camera:a.camera,prevCamera:a.prevCamera,insights:a.insights,spinning:a.spinning,spinningElapsedMs:a.spinningElapsedMs,currentPointerImg:a.pointerImg,pointerVisible:a.pointerVisible,title:a.title,subTitle:a.subTitle,taskId:a.taskId,frameInScript:a.frameInScript,scriptIndex:a.scriptIndex,imageChanged:a.imageChanged,pointerMoved:a.pointerMoved,rawProgress:a.rawProgress}}function po(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 pa(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function ps(e){return{scale:e,width:44*e,height:56*e,hotspotX:6*e,hotspotY:4*e,centerOffsetX:44*e/2,centerOffsetY:56*e/2}}function pl(e){return pa(e,"imageWidth"),ps(Math.max(1,Math.sqrt(e/1920)))}function pA(e){let t=e.height;return{size:t,centerOffset:t/2}}let pc=e=>{let{frameMap:t,autoZoom:r,frame:n,width:i,height:o,fps:a}=e,{scriptFrames:s,imageWidth:l,imageHeight:u}=t,d=(0,c.useMemo)(()=>pi(s,n,l,u,a),[s,n,l,u,a]);if(!d.img)return null;let{img:p,imageWidth:h,imageHeight:f,prevImg:m,camera:g,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+(g.pointerLeft-y.pointerLeft)*P,T=y.pointerTop+(g.pointerTop-y.pointerTop)*P,N=r?y.left+(g.left-y.left)*R:0,D=r?y.top+(g.top-y.top)*R:0,B=r?y.width+(g.width-y.width)*R:h,{offsetX:z,offsetY:F,contentWidth:L,contentHeight:U}=po(i,o,h,f),K=h/B,Q=-(L/h*N),J=-(U/f*D),Z=`scale(${K}) translate(${Q}px, ${J}px)`,X=f/h*B,q=(M-N)/B*L,H=(T-D)/X*U,W=pn(x,g,y,h,f),G=pl(h),V=pA(G),Y=G.scale,$=I?Math.min(C/10,1):1,_=b?(Math.sin(w/500-Math.PI/2)+1)/2*Math.PI*2:0;return(0,A.jsx)("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"#000"},children:(0,A.jsx)("div",{style:{position:"absolute",left:z,top:F,width:L,height:U,overflow:"hidden"},children:(0,A.jsxs)("div",{style:{width:L,height:U,position:"relative",overflow:"hidden"},children:[I&&m&&$<1&&(0,A.jsx)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:1-$},children:(0,A.jsx)("img",{alt:"",src:m,style:{width:L,height:U,transformOrigin:"0 0",transform:Z}})}),(0,A.jsxs)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:I?$:1},children:[(0,A.jsx)("img",{alt:"",src:p,style:{width:L,height:U,transformOrigin:"0 0",transform:Z}}),(0,A.jsx)("div",{style:{position:"absolute",top:0,left:0,width:L,height:U,transformOrigin:"0 0",transform:Z,pointerEvents:"none"},children:0===v.length?null:v.map((e,t)=>{let r=[];if(e.highlightElement){let n=u_(e.highlightElement);r.push((0,A.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(253, 89, 7, 0.4)",border:`${2*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,A.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(2, 131, 145, 0.4)",border:`${2*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,A.jsx)("img",{alt:"",src:uY,style:{position:"absolute",left:q-V.centerOffset,top:H-V.centerOffset,width:V.size,height:V.size,transform:`rotate(${_}rad)`,transformOrigin:"center center",filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}}),W&&!b&&(0,A.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:q-G.hotspotX,top:H-G.hotspotY,width:G.width,height:G.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};function pu(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 pd(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){pu(o,n,i,a,s,"next",e)}function s(e){pu(o,n,i,a,s,"throw",e)}a(void 0)})}}let pp=!1;function ph(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function pf(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 pm(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 pg(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){pm(o,n,i,a,s,"next",e)}function s(e){pm(o,n,i,a,s,"throw",e)}a(void 0)})}}function py(e,t){let r=Math.floor(e/t),n=Math.floor(r/60);return`${String(n).padStart(2,"0")}:${String(r%60).padStart(2,"0")}`}function pv(e){var t,r,n,i,o;let a,{message:s}=ek.A.useApp(),{autoZoom:l,setAutoZoom:u,playbackSpeed:d,setPlaybackSpeed:p,subtitleEnabled:h,setSubtitleEnabled:f}=P();(0,c.useEffect)(()=>{(null==e?void 0:e.autoZoom)!==void 0&&u(e.autoZoom)},[null==e?void 0:e.autoZoom,u]);let m=null==e?void 0:e.replayScripts,y=(0,c.useMemo)(()=>m&&0!==m.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}}(m,{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,m]),v=(0,c.useRef)(null),b=(0,c.useRef)(null),w=(0,c.useRef)(null),[E,x]=(0,c.useState)({width:0,height:0});(0,c.useEffect)(()=>{let e=b.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;x(t=>t.width===e&&t.height===r?t:{width:e,height:r})}});return t.observe(e),()=>t.disconnect()},[]);let k=function(e){var t,r;let{durationInFrames:n,fps:i,autoPlay:o=!1,loop:a=!1}=e,[s,l]=(0,c.useState)(0),[A,u]=(0,c.useState)(o),d=(0,c.useRef)(A),p=(0,c.useRef)(s),h=(0,c.useRef)(null!=(t=e.playbackRate)?t:1),f=(0,c.useRef)(n),m=(0,c.useRef)(i),g=(0,c.useRef)(a);d.current=A,p.current=s,h.current=null!=(r=e.playbackRate)?r:1,f.current=n,m.current=i,g.current=a,(0,c.useEffect)(()=>{let e;if(!A)return;let t=null,r=0,n=i=>{if(null!==t){let e=(i-t)*h.current;r+=e;let n=1e3/m.current;for(;r>=n;){r-=n;let e=p.current+1;if(e>=f.current)if(g.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)},[A]);let y=()=>{p.current>=f.current-1&&(p.current=0,l(0))},v=(0,c.useCallback)(()=>{y(),u(!0)},[]),b=(0,c.useCallback)(()=>u(!1),[]);return{currentFrame:s,playing:A,play:v,pause:b,toggle:(0,c.useCallback)(()=>{d.current?u(!1):(y(),u(!0))},[]),seekTo:(0,c.useCallback)(e=>{let t=Math.max(0,Math.min(e,f.current-1));p.current=t,l(t)},[])}}({durationInFrames:Math.max(null!=(t=null==y?void 0:y.totalDurationInFrames)?t:1,1),fps:null!=(r=null==y?void 0:y.fps)?r:30,autoPlay:null==(n=null==e?void 0:e.autoPlay)||n,loop:!1,playbackRate:d}),S=(0,c.useMemo)(()=>{if(!y)return 0;for(let e=y.scriptFrames.length-1;e>=0;e--){let t=y.scriptFrames[e];if(t.taskId)return t.startFrame+t.durationInFrames-1}return Math.max(0,y.totalDurationInFrames-1)},[y]),C=(0,c.useCallback)(()=>{var e;k.playing?k.pause():(e=k.currentFrame,S>0&&e>=S&&k.seekTo(0),k.play())},[S,k.currentFrame,k.pause,k.play,k.playing,k.seekTo]);(0,c.useEffect)(()=>{!y||k.playing||!(k.currentFrame<y.totalDurationInFrames-1)&&S>0&&k.seekTo(S)},[S,y,k.currentFrame,k.playing,k.seekTo]),(0,c.useEffect)(()=>{if(!y||!(null==e?void 0:e.onTaskChange))return;if(!k.playing){null!==w.current&&(w.current=null,e.onTaskChange(null));return}let t=function(e,t){let r=null;for(let 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}(y.scriptFrames,k.currentFrame);t!==w.current&&(w.current=t,e.onTaskChange(t))},[y,null==e?void 0:e.onTaskChange,k.currentFrame,k.playing]);let I=(0,c.useMemo)(()=>{var e;let t;return y?(e=k.currentFrame,(t=pi(y.scriptFrames,e,y.imageWidth,y.imageHeight,y.fps)).img?t:null):null},[y,k.currentFrame]),j=(0,c.useCallback)(()=>pg(function*(){if((null==e?void 0:e.reportFormat)==="html-and-external-assets"&&e.reportUrl)return void globalThis.open(e.reportUrl,"_blank","noopener,noreferrer");try{var t,r;let n=null==e?void 0:e.reportFileContent;if(!n&&(null==e?void 0:e.reportUrl)){let t=yield fetch(e.reportUrl);if(!t.ok)throw Error(`Report request failed (${t.status})`);n=yield t.text()}if(!n)return;yield(t={content:n,onDownloadReport:null==e?void 0:e.onDownloadReport},(r=function*(){let{content:e,defaultFileName:r="midscene_report.html",onDownloadReport:n,documentRef: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){d8(o,n,i,a,s,"next",e)}function s(e){d8(o,n,i,a,s,"throw",e)}a(void 0)})})())}catch(e){uv(e,{title:"Failed to download report"})}})(),[null==e?void 0:e.onDownloadReport,null==e?void 0:e.reportFileContent,null==e?void 0:e.reportFormat,null==e?void 0:e.reportUrl]),O=(0,c.useMemo)(()=>I&&(I.title||I.subTitle)?{title:I.title,subTitle:I.subTitle}:null,[I]),[R,M]=(0,c.useState)(!1),[T,N]=(0,c.useState)(0),D=(0,c.useRef)(!1),[B,z]=(0,c.useState)(!0),F=(0,c.useRef)(null),L=(0,c.useCallback)(()=>{z(!0),F.current&&clearTimeout(F.current),R||(F.current=setTimeout(()=>z(!1),3e3))},[R]),U=(0,c.useCallback)(()=>{z(!0),F.current&&clearTimeout(F.current)},[]),K=(0,c.useCallback)(()=>{F.current&&clearTimeout(F.current),R||(F.current=setTimeout(()=>z(!1),1e3))},[R]);(0,c.useEffect)(()=>{R&&(z(!0),F.current&&(clearTimeout(F.current),F.current=null))},[R]),(0,c.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(),C())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[C]);let Q=(0,c.useRef)(null),J=(0,c.useCallback)(e=>{if(!y||!Q.current)return;let t=Q.current;t.setPointerCapture(e.pointerId);let r=e=>{let r=t.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e-r.left)/r.width));k.seekTo(Math.round(n*S))};r(e.clientX);let n=e=>r(e.clientX),i=()=>{t.removeEventListener("pointermove",n),t.removeEventListener("pointerup",i)};t.addEventListener("pointermove",n),t.addEventListener("pointerup",i)},[y,k,S]),[Z,X]=(0,c.useState)(!1),q=(0,c.useCallback)(()=>{let e=v.current;e&&(document.fullscreenElement?document.exitFullscreen().then(()=>X(!1)):e.requestFullscreen().then(()=>X(!0)))},[]);(0,c.useEffect)(()=>{let e=()=>X(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let H=(0,c.useCallback)(()=>pg(function*(){if(y&&!D.current){D.current=!0,M(!0),N(0);try{var e,t;yield(e={autoZoom:l},t=e=>N(Math.round(100*e)),pd(function*(){if(pp)throw Error("Video export is already in progress");pp=!0;try{var r,n,i;yield(r=y,n=e,i=t,pd(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=>pd(function*(){try{l.set(e,(yield ph(e)))}catch(e){}})()));let A=new Set([uV]);for(let e of r.scriptFrames)e.pointerImg&&A.add(e.pointerImg);let c=new Map;yield Promise.all([...A].map(e=>pd(function*(){try{c.set(e,(yield ph(e)))}catch(e){}})()));let u=null;try{u=yield ph(uY)}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"}),m=[];return f.ondataavailable=e=>{e.data.size>0&&m.push(e.data)},new Promise((e,n)=>{let s=null,A=!1,d=0,g=performance.now(),y=g,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===m.length)return void n(Error("No video data"));let t=new Blob(m,{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,m,g,y,v,b,w,E,x;let k,{scriptFrames:S,imageWidth:C,imageHeight:I,fps:j}=r,O=pi(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:F,frameInScript:L,spinning:U,spinningElapsedMs:K,currentPointerImg:Q,pointerVisible:J,insights:Z}=O,X=a?B?Math.min(F/.375,1):F:1,{camLeft:q,camTop:H,camWidth:W}=(h=D,f=N,m=M,g=B?F<=.375?0:Math.min((F-.375)/.625,1):F,a?{camLeft:(y=h.left,v=f.left,y+(v-y)*g),camTop:(b=h.top,w=f.top,b+(w-b)*g),camWidth:(E=h.width,x=f.width,E+(x-E)*g)}:{camLeft:0,camTop:0,camWidth:m}),G=(l=D.pointerLeft,A=N.pointerLeft,l+(A-l)*X),V=(c=D.pointerTop,u=N.pointerTop,c+(u-c)*X),Y=M/W,{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et}=po(960,540,M,T),er=-(ee/M*q),en=-(et/T*H),ei=z?Math.min(Math.max(L/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),Z.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=pf(u_(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=pf(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,Z,{zoom:Y,tx:er,ty:en},{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et,imageWidth:M,imageHeight:T});let ea=T/M*W,es=$+(G-q)/W*ee,el=_+(V-H)/ea*et,eA=(pa(ee,"contentWidth"),ps(pl(M).scale*(ee/M))),ec=pA(eA),eu=null!=(s=i.get(Q))?s:i.get(uV),ed=pn(J,N,D,M,T);U&&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(K/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()),!U&&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?(g+=w,b=setTimeout(()=>{requestAnimationFrame(S)},Math.max(0,g-performance.now()))):v=setTimeout(()=>{"inactive"!==f.state&&f.stop()},2*w)}};requestAnimationFrame(e=>{y=e,g=e,S(e)})})})())}finally{pp=!1}})()),s.success("Video exported")}catch(e){console.error("Export failed:",e),uv(e,{title:"Video export failed"})}finally{D.current=!1,M(!1),N(0)}}})(),[l,y]),G=(0,c.useMemo)(()=>{if(!y||S<=0)return[];let e=[];for(let t of y.scriptFrames){if("img"!==t.type&&"insight"!==t.type||0===t.durationInFrames)continue;let r=t.startFrame,n=r/S*100;if(n>1&&n<99){let 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},[y,S]),V=!!((null!=(i=null==e?void 0:e.reportFileContent)?i:null)||(null==e?void 0:e.reportUrl)),Y=(null==e?void 0:e.reportFormat)==="html-and-external-assets"?"Open report":"Download report",$=(null==e?void 0:e.canDownloadReport)!==!1,_=null!=(o=null==e?void 0:e.presentation)?o:"default";if(!m||0===m.length||!y)return V&&$?(0,A.jsx)("div",{className:"player-container player-container-empty","data-presentation":_,children:(0,A.jsxs)("div",{className:"player-empty-state",children:[(0,A.jsx)("span",{className:"player-empty-text",children:"No replay available"}),(0,A.jsx)(W.Ay,{icon:(0,A.jsx)(dG.A,{}),onClick:()=>{j()},children:Y})]})}):null;let ee=(null==I?void 0:I.imageWidth)||y.imageWidth,et=(null==I?void 0:I.imageHeight)||y.imageHeight,er=et>ee,en=S>0?Math.min(100,k.currentFrame/S*100):0;return(0,A.jsx)("div",{className:"player-container","data-fit-mode":null==e?void 0:e.fitMode,"data-presentation":_,children:(0,A.jsxs)("div",{className:"canvas-container",ref:v,onMouseMove:L,onMouseEnter:U,onMouseLeave:K,children:[(0,A.jsx)("div",{className:"player-wrapper","data-portrait":er?"":void 0,style:{aspectRatio:`${ee}/${et}`},children:(0,A.jsx)("div",{ref:b,style:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",overflow:"hidden"},onClick:C,children:(a=E.width>0&&E.height>0?Math.min(E.width/ee,E.height/et):1,(0,A.jsx)("div",{style:{width:ee*a,height:et*a,flexShrink:0,position:"relative",overflow:"hidden"},children:(0,A.jsx)("div",{style:{width:ee,height:et,transformOrigin:"0 0",transform:`scale(${a})`},children:(0,A.jsx)(pc,{frameMap:y,autoZoom:l&&k.playing,frame:k.currentFrame,width:ee,height:et,fps:y.fps})})}))})}),h&&O&&(0,A.jsxs)("div",{className:"player-subtitle",children:[O.title&&(0,A.jsx)("span",{className:"player-subtitle-badge",children:O.title}),O.subTitle&&(0,A.jsx)("span",{className:"player-subtitle-text",children:O.subTitle})]}),!(null==e?void 0:e.hideControls)&&(0,A.jsxs)("div",{className:`control-bar ${B?"":"hidden"}`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)("div",{className:"status-icon",onClick:C,children:k.playing?(0,A.jsx)(dV.A,{}):(0,A.jsx)(dY.A,{})}),(0,A.jsxs)("span",{className:"time-display",children:[py(Math.min(k.currentFrame,S),y.fps)," ","/ ",py(S+1,y.fps)]}),(0,A.jsxs)("div",{className:"seek-bar-track",ref:Q,onPointerDown:J,children:[(0,A.jsx)("div",{className:"seek-bar-fill",style:{width:`${en}%`}}),(0,A.jsx)("div",{className:"seek-bar-knob",style:{left:`${en}%`}}),G.map(e=>(0,A.jsx)(g.A,{title:e.title,overlayClassName:"chapter-tooltip",children:(0,A.jsx)("div",{className:"chapter-marker",style:{left:`${e.percent}%`},onClick:t=>{t.stopPropagation(),k.seekTo(e.frame)}})},e.percent))]}),(0,A.jsxs)("div",{className:"player-custom-controls",children:[V&&$?(0,A.jsx)(g.A,{title:Y,children:(0,A.jsx)("div",{className:"status-icon",onClick:()=>{j()},children:(0,A.jsx)(dG.A,{})})}):null,(0,A.jsx)(d3.A,{trigger:["hover","click"],placement:"topRight",overlayStyle:{minWidth:"148px"},dropdownRender:()=>(0,A.jsxs)("div",{className:"player-settings-dropdown",children:[(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px",borderRadius:"4px",cursor:R?"not-allowed":"pointer",opacity:R?.5:1},onClick:R?void 0:H,children:[(0,A.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:R?(0,A.jsx)(d5.A,{type:"circle",percent:T,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,A.jsx)(d$.A,{style:{width:"16px",height:"16px"}})}),(0,A.jsx)("span",{className:"player-export-label",children:R?`Exporting ${T}%`:"Export video"})]}),(0,A.jsx)("div",{className:"player-settings-divider"}),(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,A.jsx)(d7,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,A.jsx)(d4.A,{size:"small",checked:l,onChange:e=>u(e)})]}),(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,A.jsx)(d_.A,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,A.jsx)(d4.A,{size:"small",checked:h,onChange:e=>f(e)})]}),(0,A.jsx)("div",{className:"player-settings-divider"}),(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px"},children:[(0,A.jsx)(d0.A,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px"},children:"Playback speed"})]}),[.5,1,1.5,2].map(e=>(0,A.jsxs)("div",{onClick:()=>p(e),style:{height:"32px",lineHeight:"32px",padding:"0 8px 0 28px",fontSize:"14px",cursor:"pointer",borderRadius:"4px"},className:`player-speed-option${d===e?" active":""}`,children:[e,"x"]},e))]}),menu:{items:[]},children:(0,A.jsx)("div",{className:"status-icon",children:(0,A.jsx)(d6,{style:{width:"16px",height:"16px"}})})}),!(null==e?void 0:e.hideFullscreenControl)&&(0,A.jsx)("div",{className:"status-icon",onClick:q,children:Z?(0,A.jsx)(d1.A,{}):(0,A.jsx)(d2.A,{})})]})]})]})})}let pb=e=>{let{result:t,loading:r,serverValid:n,serviceMode:i,replayScriptsInfo:o,replayCounter:a,loadingProgressText:s,verticalMode:l=!1,notReadyMessage:c,fitMode:u,autoZoom:d,showOutputAlongsideReport:p=!1,canDownloadReport:h,onDownloadReport:f,playerPresentation:m,hidePlayerFullscreenControl:g}=e,y="result-wrapper";l&&(y+=" vertical-mode-result"),o&&l&&(y+=" result-wrapper-compact");let v=dZ;if(n||"Server"!==i){var b,w,E,x,k,S,C,I,j,O;if(r)v=(0,A.jsxs)("div",{className:"loading-container",children:[(0,A.jsx)(ev.A,{spinning:r,indicator:(0,A.jsx)(uK.A,{spin:!0})}),(0,A.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,A.jsx)(dK,{text:s,speed:3})})]});else if(null==t?void 0:t.error){let e=(0,A.jsx)("pre",{style:{color:"#ff4d4f",whiteSpace:"pre-wrap"},children:null==t?void 0:t.error});v=t.reportHTML||t.report||o?(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto",maxHeight:"40%",overflow:"auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Error:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pv,{replayScripts:null==o?void 0:o.scripts,imageWidth:null==o?void 0:o.width,imageHeight:null==o?void 0:o.height,reportFileContent:t.reportHTML||null,reportUrl:null==(b=t.report)?void 0:b.url,reportFormat:null==(w=t.report)?void 0:w.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]}):e}else if(p&&(null==t?void 0:t.result)!==void 0&&o){let e="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}),r=(null==t?void 0:t.reportHTML)||null;v=(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pv,{replayScripts:o.scripts,imageWidth:o.width,imageHeight:o.height,reportFileContent:r,reportUrl:null==(E=t.report)?void 0:E.url,reportFormat:null==(x=t.report)?void 0:x.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]})}else if(o){let e=(null==t?void 0:t.reportHTML)||null;v=(0,A.jsx)(pv,{replayScripts:o.scripts,imageWidth:o.width,imageHeight:o.height,reportFileContent:e,reportUrl:null==t||null==(k=t.report)?void 0:k.url,reportFormat:null==t||null==(S=t.report)?void 0:S.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)}else if(p&&(null==t?void 0:t.result)!==void 0&&((null==t?void 0:t.reportHTML)||(null==t?void 0:t.report))){let e="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)});v=(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pv,{reportFileContent:t.reportHTML||null,reportUrl:null==(C=t.report)?void 0:C.url,reportFormat:null==(I=t.report)?void 0:I.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]})}else p&&(null==t?void 0:t.result)!==void 0?v="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}):(null==t?void 0:t.reportHTML)||(null==t?void 0:t.report)?v=(0,A.jsx)(pv,{reportFileContent:t.reportHTML||null,reportUrl:null==(j=t.report)?void 0:j.url,reportFormat:null==(O=t.report)?void 0:O.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a):(null==t?void 0:t.result)!==void 0&&(v="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}))}else v=dJ(c);return(0,A.jsx)("div",{className:y,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:v})},pw=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:20,height:20,fill:"none","aria-label":"Playground",viewBox:"0 0 20 20"},e),r=r={children:[(0,A.jsx)("rect",{width:20,height:20,fill:"#2B83FF",rx:10}),(0,A.jsx)("path",{fill:"#2B83FF",stroke:"#fff",strokeLinejoin:"round",strokeWidth:1.125,d:"M6.866 5.882a.56.56 0 0 1 .667-.078l3.248 1.875 3.247 1.875a.563.563 0 0 1 0 .974l-3.247 1.875-3.248 1.875a.563.563 0 0 1-.784-.74l1.749-3.497-1.75-3.498a.56.56 0 0 1 .118-.661Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function pE(){return(0,c.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,c.createElement)("path",{d:"M3 7.99984L6.33333 11.3332L13 4.6665",stroke:"#188F4D",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"}))}function px(){return(0,c.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,c.createElement)("path",{d:"M5 5L11 11M11 5L5 11",stroke:"#FF4D4F",strokeWidth:"1.2",strokeLinecap:"round"}))}let pk="ZodOptional",pS="ZodDefault",pC="ZodNullable",pI="ZodObject",pj=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),pO=e=>{var t,r,n;let i=e=>!!(null==e?void 0:e.prompt);if((null==(t=e._def)?void 0:t.typeName)===pI){let t;if(e._def.shape&&(t="function"==typeof e._def.shape?e._def.shape():e._def.shape),!t&&e.shape&&(t=e.shape),t&&"prompt"in t&&t.prompt||i(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!!i(e.shape)||"string"==typeof t&&t.toLowerCase().includes("input field")}return!1},pP=e=>{var t,r,n,i,o;let a=e,s=!1,l=!1;for(;(null==(t=a._def)?void 0:t.typeName)===pk||(null==(r=a._def)?void 0:r.typeName)===pS||(null==(n=a._def)?void 0:n.typeName)===pC;)(null==(i=a._def)?void 0:i.typeName)===pk&&(s=!0),(null==(o=a._def)?void 0:o.typeName)===pS&&(l=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:l}},pR=(e,t)=>null==e?void 0:e.find(e=>e.interfaceAlias===t||e.name===t),pM=(e,t)=>{var r,n;if(!(null==e?void 0:e.length)||!t)return null;let i=pR(e,t);if(!(null==i?void 0:i.paramSchema)||!pj(i.paramSchema))return null;let o=i.paramSchema.shape||{},a=Object.keys(o);if(1!==a.length)return null;let[s]=a,{actualField:l}=pP(o[s]),A=pO(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 pT=r(28460),pN=r(3246),pD=r(91631),pB=r(64665);let pz=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:6,height:10,fill:"none",viewBox:"0 0 6 10"},e),r=r={children:(0,A.jsx)("path",{fill:"#000",fillOpacity:.25,fillRule:"evenodd",d:"M.195 9.138a.667.667 0 0 1 0-.943l3.529-3.528L.195 1.138a.667.667 0 0 1 .943-.943l4 4c.26.26.26.683 0 .943l-4 4a.667.667 0 0 1-.943 0",clipRule:"evenodd"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},pF=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,A.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M1.505 4.164c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,A.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M7.57 3.465v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var pL={};pL.d=(e,t)=>{for(var r in t)pL.o(t,r)&&!pL.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},pL.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),pL.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var pU={};function pK(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}pL.r(pU),pL.d(pU,{create:()=>y.vt});let{create:pQ}=pU,pJ="midscene-prompt-history-v2",pZ="midscene-last-selected-type",pX=pQ((e,t)=>{let r;return{history:(r=localStorage.getItem(pJ))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(pZ)||"aiAct",clearHistory:r=>{let n=pK({},t().history);delete n[r],e({history:n}),localStorage.setItem(pJ,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=pK({},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(pJ,JSON.stringify(c))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(pZ,t)}}}),pq=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 pH(e){return{supportsImeStrategy:"android"===e,supportsScreenshotStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function pW(e){return Object.values(pH(e)).some(Boolean)}var pG=r(16356);let pV=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:27,height:27,fill:"none",viewBox:"0 0 27 27"},e),r=r={children:(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.333,d:"M19.527 8.855h-2M14.86 7.522v2.667M14.86 8.855H7.527M10.194 13.522H7.527M12.86 12.189v2.666M20.193 13.522H12.86M19.527 18.189h-2M14.86 16.855v2.667M14.86 18.189H7.527"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},pY=e=>{let t,{showDeepLocateOption:r=!1,showDeepThinkOption:n=!1,enableTracking:i=!1,showDataExtractionOptions:o=!1,hideDomAndScreenshotOptions:a=!1,deviceType:s,trigger:l,popupPlacement:c="bottomRight"}=e,u=X(e=>e.forceSameTabNavigation),d=X(e=>e.setForceSameTabNavigation),p=X(e=>e.deepLocate),h=X(e=>e.setDeepLocate),f=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.screenshotStrategy),S=X(e=>e.setScreenshotStrategy),C=X(e=>e.autoDismissKeyboard),I=X(e=>e.setAutoDismissKeyboard),j=X(e=>e.keyboardDismissStrategy),O=X(e=>e.setKeyboardDismissStrategy),P=X(e=>e.alwaysRefreshScreenInfo),R=X(e=>e.setAlwaysRefreshScreenInfo),M=pH(s),T=pW(s);if(!i&&!r&&!n&&!o&&!T)return null;let N=(t=[],i&&t.push({label:(0,A.jsx)(pG.A,{onChange:e=>d(e.target.checked),checked:u,children:"Limit popup to current tab"}),key:"track-config"}),r&&t.push({label:(0,A.jsx)(pG.A,{onChange:e=>{h(e.target.checked)},checked:p,children:"Deep Locate"}),key:"deep-locate-config"}),n&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Deep Think"}),(0,A.jsxs)(pB.A.Group,{size:"small",value:f,onChange:e=>m(e.target.value),children:[(0,A.jsx)(g.A,{title:"Controlled by MIDSCENE_MODEL_REASONING_ENABLED env variable",children:(0,A.jsx)(pB.A,{value:"unset",children:"Auto"})}),(0,A.jsx)(pB.A,{value:!0,children:"On"}),(0,A.jsx)(pB.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),o&&!a&&(t.push({label:(0,A.jsx)(pG.A,{onChange:e=>{v(e.target.checked)},checked:y,children:"Include screenshot in request"}),key:"screenshot-included-config"}),t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Include DOM info in request"}),(0,A.jsxs)(pB.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,A.jsx)(pB.A,{value:!1,children:"Off"}),(0,A.jsx)(pB.A,{value:!0,children:"All"}),(0,A.jsx)(pB.A,{value:"visible-only",children:"Visible only"})]})]}),key:"dom-included-config"})),M.supportsImeStrategy&&(t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"IME strategy"}),(0,A.jsxs)(pB.A.Group,{size:"small",value:E,onChange:e=>x(e.target.value),children:[(0,A.jsx)(pB.A,{value:"always-yadb",children:"Always YADB"}),(0,A.jsx)(pB.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),M.supportsScreenshotStrategy&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Screenshot strategy"}),(0,A.jsxs)(pB.A.Group,{size:"small",value:k,onChange:e=>S(e.target.value),children:[(0,A.jsx)(pB.A,{value:"auto",children:"Auto"}),(0,A.jsx)(pB.A,{value:"always-yadb",children:"Always YADB"})]})]}),key:"screenshot-strategy-config"}),M.supportsAutoDismissKeyboard&&t.push({label:(0,A.jsx)(pG.A,{onChange:e=>I(e.target.checked),checked:C,children:uX}),key:"auto-dismiss-keyboard-config"}),M.supportsKeyboardDismissStrategy&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Keyboard dismiss strategy"}),(0,A.jsxs)(pB.A.Group,{size:"small",value:j,onChange:e=>O(e.target.value),children:[(0,A.jsx)(pB.A,{value:"esc-first",children:"ESC first"}),(0,A.jsx)(pB.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),M.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,A.jsx)(pG.A,{onChange:e=>R(e.target.checked),checked:P,children:"Always refresh screen info"}),key:"always-refresh-screen-info-config"})),!M.supportsImeStrategy&&M.supportsAutoDismissKeyboard&&t.push({label:(0,A.jsx)(pG.A,{onChange:e=>I(e.target.checked),checked:C,children:uX}),key:"auto-dismiss-keyboard-config"}),t),D=null!=l?l:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"selector-trigger-button",type:"button",children:(0,A.jsx)(pV,{width:24,height:24})});return(0,A.jsx)("div",{className:"selector-trigger",children:(0,A.jsx)(d3.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:N},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:c,trigger:["click"],children:D})})};var p$=r(82752);let{TextArea:p_}=q.A,p0=(e,t)=>`${e}${t?" (Optional)":""}`,p1=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=o||`Enter ${t}`;return(0,A.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(q.A,{placeholder:a})},t)},p2=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=o||`Describe the ${t}, use natural language`;return(0,A.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(p_,{rows:2,placeholder:a})},t)},p3=e=>{var t;let{name:r,label:n,fieldSchema:i,isRequired:o,marginBottom:a,placeholder:s}=e,l=((null==(t=i._def)?void 0:t.values)||[]).map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)}));return(0,A.jsx)(ub.A.Item,{name:["params",r],label:n,rules:o?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:a},colon:!1,children:(0,A.jsx)(G.A,{placeholder:s||`Select ${r}`,options:l})},r)},p5=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=500*("distance"===t),s=o&&Number(o)||a,l="distance"===t?1e4:void 0;return(0,A.jsx)(ub.A.Item,{name:["params",t],label:`${r}${"distance"===t?" (px)":""}`,rules:n?[{required:!0,message:`Please input ${t}`},{type:"number",min:0,message:`${r} must be at least 0`}]:[{type:"number",min:0,message:`${r} must be at least 0`}],style:{flex:"distance"===t?1:void 0,marginBottom:i},colon:!1,children:(0,A.jsx)(p$.A,{placeholder:s.toString(),min:0,max:l,step:"distance"===t?10:1,style:{width:"100%"}})},t)},p4=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e;return(0,A.jsx)(ub.A.Item,{name:["params",t],label:p0(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(G.A,{placeholder:o||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var p7=r(70316);let p6=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:18,height:16,fill:"none",viewBox:"0 0 18 16"},e),r=r={children:(0,A.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m3.124 2.667 11.162 10.666M3.124 13.333 14.286 2.667"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p8=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:25,height:25,fill:"none",viewBox:"0 0 25 25"},e),r=r={children:[(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M6.63 9.021c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M12.695 8.322v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p9=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:19,height:19,fill:"none",viewBox:"0 0 19 19"},e),r=r={children:[(0,A.jsxs)("g",{stroke:"currentColor",strokeLinejoin:"round",strokeOpacity:.65,strokeWidth:1.5,clipPath:"url(#magnifying-glass_svg__a)",children:[(0,A.jsx)("path",{d:"M8.397 14.29a6.375 6.375 0 1 0 0-12.75 6.375 6.375 0 0 0 0 12.75Z"}),(0,A.jsx)("path",{strokeLinecap:"round",d:"M10.519 5.42a3 3 0 0 0-2.122-.88 3 3 0 0 0-2.121.88M12.98 12.499l3.182 3.182"})]}),(0,A.jsx)("defs",{children:(0,A.jsx)("clipPath",{id:"magnifying-glass_svg__a",children:(0,A.jsx)("path",{fill:"#fff",d:"M.522.04h18v18h-18z"})})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},{Text:he}=f.A,ht=e=>{let{onSelect:t,history:r,currentType:n,trigger:i,popupPlacement:o="bottom",title:a="History",showClear:s=!0,onClear:l,searchPlaceholder:u="Search",emptyText:d="No history record",noMatchText:p="No matching history record",renderItemActions:h,renderItemLabel:f,overlayClassName:m,popupWidth:g=320,popupHeight:y=400,portalContainerSelector:v}=e,[b,w]=(0,c.useState)(!1),[E,x]=(0,c.useState)(""),[k,S]=(0,c.useState)(0),C=pX(e=>e.clearHistory),I=(0,c.useRef)(null),j=(0,c.useRef)(null),[O,P]=(0,c.useState)(null),[R,M]=(0,c.useState)(null),[T,N]=(0,c.useState)(!1),D=(0,c.useMemo)(()=>{let e=Date.now(),t=e-6048e5,n=e-31536e6,i=r.filter(e=>e.prompt.toLowerCase().includes(E.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,E]),B=()=>{w(!1)};(0,c.useEffect)(()=>{if(!b)return;let e=()=>{var e,t;if(!j.current)return;let r=j.current.getBoundingClientRect(),n=v?j.current.closest(v):null,i=null==n?void 0:n.getBoundingClientRect(),a=null!=(e=null==i?void 0:i.width)?e:window.innerWidth,s=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,a-g-16),d=Math.max(16,s-y-16);P({left:Math.min(Math.max(16,l-g),u),top:Math.min(Math.max(16,"top"===o?A-y-8:c+8),d)}),M(null!=n?n:document.body),N(!!n)},t=e=>{I.current&&!I.current.contains(e.target)&&j.current&&!j.current.contains(e.target)&&w(!1)};e();let r=setTimeout(()=>{document.addEventListener("click",t)},100);return window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{clearTimeout(r),document.removeEventListener("click",t),window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[b,y,o,g,v]);let z=(e,r)=>0===r.length?null:(0,A.jsxs)("div",{className:"history-group",children:[(0,A.jsx)("div",{className:"history-group-title",children:e}),r.map((e,r)=>(0,A.jsxs)("div",{className:"history-item",onClick:()=>{t(e),w(!1)},children:[(0,A.jsx)("span",{className:"history-item-label",children:f?f(e,{close:B}):e.prompt}),h?(0,A.jsx)("span",{className:"history-item-actions",onClick:e=>e.stopPropagation(),children:h(e,{close:B,scrollVersion:k})}):null]},`${e.timestamp}-${r}`))]},e);return(0,A.jsxs)("div",{className:"history-selector-wrapper",children:[(0,A.jsx)("div",{className:"selector-trigger",onClick:()=>w(e=>!e),ref:j,children:null!=i?i:(0,A.jsx)(p8,{width:24,height:24})}),b&&O&&R&&(0,p7.createPortal)((0,A.jsx)("div",{className:m?`history-modal-overlay ${m}${T?" history-modal-overlay-in-container":""}`:`history-modal-overlay${T?" history-modal-overlay-in-container":""}`,ref:I,style:O,children:(0,A.jsxs)("div",{className:"history-modal-container",children:[(0,A.jsxs)("div",{className:"history-modal-header",children:[(0,A.jsxs)(he,{strong:!0,style:{fontSize:"16px"},children:[a," (",r.length,")"]}),(0,A.jsx)(W.Ay,{size:"small",type:"text",icon:(0,A.jsx)(p6,{width:16,height:16}),onClick:()=>w(!1),className:"close-button"})]}),(0,A.jsx)("div",{className:"history-search-section",children:(0,A.jsxs)("div",{className:"search-input-wrapper",children:[(0,A.jsx)(q.A,{placeholder:u,value:E,onChange:e=>x(e.target.value),prefix:(0,A.jsx)(p9,{width:18,height:18}),className:"search-input",allowClear:!0}),s?(0,A.jsx)(W.Ay,{type:"link",onClick:()=>{l?l():C(n),x(""),w(!1)},className:"clear-button",disabled:0===r.length,children:"Clear"}):null]})}),(0,A.jsx)("div",{className:"history-content",onScroll:()=>{S(e=>e+1)},children:0===r.length?(0,A.jsx)("div",{className:"no-results",children:(0,A.jsx)(he,{type:"secondary",children:d})}):(0,A.jsxs)(A.Fragment,{children:[z("Last 7 days",D.recent7Days),z("Last 1 year",D.recent1Year),z("Earlier",D.older),E&&0===D.recent7Days.length&&0===D.recent1Year.length&&0===D.older.length&&(0,A.jsx)("div",{className:"no-results",children:(0,A.jsx)(he,{type:"secondary",children:p})})]})})]})}),R)]})};function hr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let{TextArea:hn}=q.A;function hi(){return(0,A.jsx)("span",{"aria-hidden":"true",className:"prompt-stop-square-icon"})}let ho=e=>{var t,r,n,i,o,a,s,l;let{runButtonEnabled:u,form:d,serviceMode:p,selectedType:h,dryMode:f,stoppable:m,loading:y,onRun:v,onStop:b,clearPromptAfterRun:w=!0,actionSpace:E,hideDomAndScreenshotOptions:x=!1,deviceType:k,chrome:S}=e,[C,I]=(0,c.useState)(!1),[j,O]=(0,c.useState)(""),P="aiQuery"===h?"What do you want to query?":"aiAssert"===h?"What do you want to assert?":"aiTap"===h?"What element do you want to tap?":"aiDoubleClick"===h?"What element do you want to double-click?":"aiHover"===h?"What element do you want to hover over?":"aiInput"===h?"Format: <value> | <element>\nExample: hello world | search box":"aiRightClick"===h?"What element do you want to right-click?":"aiKeyboardPress"===h?"Format: <key> | <element (optional)>\nExample: Enter | text field":"aiScroll"===h?"Format: <direction> <amount> | <element (optional)>\nExample: down 500 | main content":"aiLocate"===h?"What element do you want to locate?":"aiBoolean"===h?"What do you want to check (returns true/false)?":"aiNumber"===h?"What number do you want to extract?":"aiString"===h?"What text do you want to extract?":"aiAsk"===h?"What do you want to ask?":"aiWaitFor"===h?"What condition do you want to wait for?":"What do you want to do?",R=(null==S?void 0:S.variant)==="minimal",M=(null==S?void 0:S.placeholder)||P,T=(l=null==S?void 0:S.primaryActionLabel)?l:pq(h)||"Action",N=null!=(o=null==S?void 0:S.settingsPlacement)?o:"toolbar",D=(0,c.useRef)(null),B=(0,c.useRef)(null),z=ub.A.useWatch("params",d),F=(0,c.useRef)(null),L=pX(e=>e.history),U=pX(e=>e.lastSelectedType),K=pX(e=>e.addHistory),Q=pX(e=>e.setLastSelectedType),J=(0,c.useMemo)(()=>L[h]||[],[L,h]),Z=(0,c.useMemo)(()=>pR(E,h),[E,h]),{markExplicitSelection:X,skipNextRestore:H,shouldSkipRestoreOnce:G}=function(e){let{enabled:t,form:r,selectedType:n,onAfterReset:i,defaultType:o="aiAct"}=e,[a,s]=(0,c.useState)(!1),l=(0,c.useRef)(!1);(0,c.useEffect)(()=>{t&&!a&&n&&n!==o&&(l.current=!1,r.setFieldsValue({type:o,prompt:"",params:{}}),null==i||i())},[t,a,n,o,r,i]);let A=(0,c.useCallback)(()=>{t&&s(!0)},[t]),u=(0,c.useCallback)(()=>{l.current=!0},[]),d=(0,c.useCallback)(()=>!!l.current&&(l.current=!1,!0),[]);return(0,c.useMemo)(()=>({markExplicitSelection:A,skipNextRestore:u,shouldSkipRestoreOnce:d}),[A,u,d])}({enabled:R,form:d,selectedType:h,onAfterReset:(0,c.useCallback)(()=>{F.current=null,O("")},[])}),V=(0,c.useMemo)(()=>!!E&&!!(null==Z?void 0:Z.paramSchema)&&(!pj(Z.paramSchema)||Object.keys(Z.paramSchema.shape||{}).length>0),[h,Z,E]),Y=(0,c.useMemo)(()=>{if(E&&E.length>0&&Z){if(Z.paramSchema&&pj(Z.paramSchema)){let e=Z.paramSchema.shape||{};return Object.keys(e).some(t=>{let{isOptional:r}=pP(e[t]);return!r})}return!!Z.paramSchema}return!0},[h,Z,E]),$=(0,c.useMemo)(()=>["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert"].includes(h),[h]),_=(0,c.useMemo)(()=>{if("aiAct"===h||"aiLocate"===h)return!0;if(E&&(null==Z?void 0:Z.paramSchema)&&pj(Z.paramSchema)){let e=Z.paramSchema.shape||{};return Object.keys(e).some(t=>{let{actualField:r}=pP(e[t]);return pO(r)})}return!1},[h,Z,E]),ee=(0,c.useMemo)(()=>"aiAct"===h,[h]),et=(0,c.useMemo)(()=>{let e="In-Browser-Extension"===p,t=$&&!x,r=pW(k);return e||_||ee||t||r},[p,_,ee,$,x,k]),er=(0,c.useMemo)(()=>(e=>{let t=Object.keys(uq);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=uq[e];"aiAct"===e||(null==t?void 0:t.group)==="extraction"||(null==t?void 0:t.group)==="validation"?n.add(e):r.includes(e)&&n.add(e)}),r.forEach(e=>{n.add(e)}),Array.from(n)})(E),[E]),en=(0,c.useMemo)(()=>er.filter(e=>!uH.includes(e)),[er]),ei=(0,c.useCallback)(e=>{X(),d.setFieldValue("type",e)},[d,X]),eo=(0,c.useMemo)(()=>[{key:"interaction-group",label:"Interaction APIs",match:e=>{var t;return(null==(t=uq[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=uq[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=uq[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!uq[e]}],[]),ea=(0,c.useCallback)(e=>{var t;return{key:e,label:pq(e),title:(null==(t=uq[e])?void 0:t.title)||"",onClick:()=>ei(e)}},[ei]),es=(0,c.useMemo)(()=>{let e=[];for(let t of eo){let r=en.filter(t.match);0!==r.length&&e.push({key:t.key,type:"group",label:t.label,children:r.map(ea)})}return e},[eo,en,ea]),el=(0,c.useMemo)(()=>{let e=uH.filter(e=>er.includes(e)),t=[];return e.length>0&&t.push({key:"primary-group",type:"group",label:"Primary APIs",children:e.map(ea)}),t.push(...es),{items:t}},[er,ea,es]),eA=(0,c.useMemo)(()=>({items:es}),[es]),ec=(0,c.useCallback)(()=>{if(!V||!E)return{};if((null==Z?void 0:Z.paramSchema)&&pj(Z.paramSchema)){let e={},t=Z.paramSchema.shape||{};return Object.keys(t).forEach(r=>{let n=(e=>{var t;let r=e;for(;null==(t=r._def)?void 0:t.innerType;){if(r._def.typeName===pS){if("function"==typeof r._def.defaultValue)return r._def.defaultValue();if(void 0!==r._def._serializedDefaultValue)return r._def._serializedDefaultValue}r=r._def.innerType}})(t[r]);void 0!==n&&(e[r]=n)}),e}return{}},[h,V,Z,E]);(0,c.useEffect)(()=>{R||d.getFieldValue("type")||!U||d.setFieldValue("type",U)},[d,R,U]),(0,c.useEffect)(()=>{!R&&h&&h!==U&&Q(h)},[h,R,U,Q]);let eu=(0,c.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,c.useEffect)(()=>{if(G())return;if(R){let e=ec();d.setFieldsValue({prompt:"",params:e}),O(""),F.current=null;return}let e=J[0];if(!e||!F.current||e.timestamp!==F.current.timestamp)if(e)d.setFieldsValue({type:e.type,prompt:e.prompt||"",params:e.params}),O(e.prompt||""),F.current=e;else{let e=ec();d.setFieldsValue({prompt:"",params:e}),O(""),F.current=null}},[h,J,d,ec,R,G]),(0,c.useEffect)(()=>{let e=setTimeout(()=>{eu()},100);return()=>clearTimeout(e)},[h,eu]);let ed=ub.A.useWatch("prompt",d);(0,c.useEffect)(()=>{ed!==j&&O(ed||"")},[ed,j]);let ep=(0,c.useCallback)(e=>{X(),e.type!==h&&H(),d.setFieldsValue({prompt:e.prompt,type:e.type,params:e.params}),O(e.prompt)},[d,X,h,H]),eh=(0,c.useCallback)(e=>{O(e.target.value)},[]),ef=(0,c.useMemo)(()=>!!V&&!!E&&!!((null==Z?void 0:Z.paramSchema)&&pj(Z.paramSchema))&&1===Object.keys(Z.paramSchema.shape||{}).length,[h,V,Z,E]),em=(0,c.useMemo)(()=>R?pM(E,h):null,[E,R,h]),eg=(0,c.useMemo)(()=>((e,t,r,n,i)=>{if(!e)return!1;if(!(()=>{if(n){if(!n.paramSchema)return!1;if("object"==typeof n.paramSchema&&"shape"in n.paramSchema)return Object.keys(n.paramSchema.shape||{}).length>0}return!0})())return!0;if(t){let e=r||{};if((null==n?void 0:n.paramSchema)&&pj(n.paramSchema)){let t=n.paramSchema.shape||{};return Object.keys(t).every(r=>{let{isOptional:n}=pP(t[r]),i=e[r];return n||void 0!==i&&""!==i&&null!==i})}return!0}return i.trim().length>0})(u,!!V,z,Z,j),[u,V,Z,j,z]),ey=Y&&!V&&!j.trim()&&!y&&!m,ev=(0,c.useCallback)(()=>{let e=d.getFieldsValue(),t="";if(V&&e.params&&E)if((null==Z?void 0:Z.paramSchema)&&pj(Z.paramSchema)){let r="",n=[],i=Z.paramSchema.shape||{};Object.keys(i).forEach(t=>{var o;let a=null==(o=e.params)?void 0:o[t];if(null!=a&&""!==a){let{actualField:e}=pP(i[t]);pO(e)?r=String(a):"distance"===t?n.push(`${a}`):n.push(String(a))}});let o=n.join(" ");t=r?`${r} - ${o}`:o}else t=e.prompt||"";else t=e.prompt||"";let r={type:e.type,prompt:t,params:e.params,timestamp:Date.now()};if(K(r),v(),w)if(F.current=r,O(""),V){let e=ec();d.setFieldValue("params",e)}else d.setFieldValue("prompt","")},[d,K,v,V,h,w,E,Z,ec]),eb=(0,c.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg?(ev(),e.preventDefault(),e.stopPropagation()):"Enter"===e.key&&setTimeout(()=>{if(D.current){var e;let t=null==(e=D.current.resizableTextArea)?void 0:e.textArea;if(t){let e=t.selectionStart,r=t.value.lastIndexOf("\n");(-1===r||e>r)&&(t.scrollTop=t.scrollHeight)}}},0)},[ev,eg]),ew=(0,c.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg&&(ev(),e.preventDefault(),e.stopPropagation())},[ev,eg]),eE=(0,c.useCallback)(()=>{if(!V)return null;if(E&&(null==Z?void 0:Z.paramSchema)&&pj(Z.paramSchema)){let e=Z.paramSchema.shape||{},t=Object.keys(e);if(1===t.length){let r=t[0],{actualField:n}=pP(e[r]),i=pO(n),o=(()=>{var e,t;if(null==(e=n._def)?void 0:e.description)return n._def.description;if(n.description)return n.description;if(E&&(null==Z?void 0:Z.paramSchema)&&"object"==typeof Z.paramSchema&&"shape"in Z.paramSchema){let e=(Z.paramSchema.shape||{})[r];if(null==e||null==(t=e._def)?void 0:t.description)return e._def.description;if(null==e?void 0:e.description)return e.description}return i?"Describe the element you want to interact with":"keyName"===r?"Enter key name or text to type":"value"===r?"Enter text to input":`Enter ${r}`})();return(0,A.jsx)(ub.A.Item,{name:["params",r],style:{margin:0},children:(0,A.jsx)(q.A.TextArea,{className:"main-side-console-input-textarea",rows:3,placeholder:o,autoFocus:!0,onKeyDown:ew})})}let r=[],n=t.sort((t,r)=>{let n=e[t],i=e[r],{isOptional:o}=pP(n),{isOptional:a}=pP(i);return!o&&a?-1:o&&!a?1:0});if(n.forEach((t,i)=>{var o,a,s;let{actualField:l,isOptional:c}=pP(e[t]),u=pO(l),d=t.charAt(0).toUpperCase()+t.slice(1),p=12*(i!==n.length-1),h=(()=>{var e,r;if(null==(e=l._def)?void 0:e.description)return l._def.description;if(l.description)return l.description;if(E&&(null==Z?void 0:Z.paramSchema)&&"object"==typeof Z.paramSchema&&"shape"in Z.paramSchema){let e=(Z.paramSchema.shape||{})[t];if(null==e||null==(r=e._def)?void 0:r.description)return e._def.description;if(null==e?void 0:e.description)return e.description}if(u)return"Describe the element you want to interact with"})(),f={name:t,label:d,fieldSchema:l,isRequired:!c,marginBottom:p,placeholder:h};u?r.push((0,A.jsx)(p2,hr({},f),t)):(null==(o=l._def)?void 0:o.typeName)==="ZodEnum"?r.push((0,A.jsx)(p3,hr({},f),t)):(null==(a=l._def)?void 0:a.typeName)==="ZodNumber"?r.push((0,A.jsx)(p5,hr({},f),t)):(null==(s=l._def)?void 0:s.typeName)==="ZodBoolean"?r.push((0,A.jsx)(p4,hr({},f),t)):r.push((0,A.jsx)(p1,hr({},f),t))}),"aiScroll"===h){let e=r.find(e=>c.isValidElement(e)&&"direction"===e.props.name),t=r.find(e=>c.isValidElement(e)&&"distance"===e.props.name),n=r.filter(e=>c.isValidElement(e)&&"direction"!==e.props.name&&"distance"!==e.props.name);if(e&&t)return(0,A.jsxs)("div",{className:"structured-params",children:[(0,A.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:12},children:[e,t]}),n]})}return(0,A.jsx)("div",{className:"structured-params",children:r})}return null},[h,V,E,Z,ew]),ex=(0,c.useCallback)(()=>{I(!0)},[]),ek=(0,c.useCallback)(()=>{I(!1)},[]),eS=(0,c.useCallback)(()=>{let e=e=>(0,A.jsx)(W.Ay,{type:"primary",icon:(0,A.jsx)(pT.A,{}),style:{borderRadius:20,zIndex:999},onClick:ev,disabled:!eg,loading:y,children:e});return f?"aiAct"===h?(0,A.jsx)(g.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"):m?(0,A.jsx)(W.Ay,{className:"prompt-stop-button",icon:(0,A.jsx)(hi,{}),onClick:b,style:{borderRadius:20,zIndex:999},children:"Stop"}):e("Run")},[f,y,ev,b,eg,h,m]),eC=(0,c.useCallback)(()=>{let e=e=>(0,A.jsx)(W.Ay,{"aria-label":e,className:"minimal-run-trigger",type:"primary",icon:(0,A.jsx)(pN.A,{}),onClick:ev,disabled:!eg,loading:y});return f?"aiAct"===h?(0,A.jsx)(g.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"):m?(0,A.jsx)(W.Ay,{"aria-label":"Stop running",className:"minimal-run-trigger minimal-run-trigger-stop prompt-stop-button",icon:(0,A.jsx)(hi,{}),onClick:b}):e("Run")},[f,y,ev,eg,b,h,m]),eI=null!=(a=null==S||null==(t=S.icons)?void 0:t.action)?a:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAASdJREFUeAHtlt3NgjAUhg8/CVx+G8gGX5xAnUDdQMcgkIgJBLbQEXQD3MAR6gZewgXgOUn9iRp6vAC96JM07YG36Zv+nBZAwySO4ymWgUoXRdEfaYGJyRElSbKyLGuHJVdpHcc5khb7RMCAZcA0TU82PYZ8IPsoZ4ttoEu0ga8bMB6DNE1X8H6jTUBuLmQL7SxkLbDkzz/ruhZBEKxfDGRZNm2aZgc9UFXVLAzDPbVvS1AUxQGrE3SPwHK8BganBy7NBuTU+r5vKLSNbG5RuwQF+hRoA9rA76RifMl4+JjI4Z5yu0KUZTnE8c4U3GbAdd3/HgYnPNu2R9eg98uIvmOGfL2M2tCpWBv4BQPiqW7j9IGWZ4CODT7X5pRAVFrUjEn7eNQ0bVwAyWpjMDlJKpAAAAAASUVORK5CYII=",ej=null==S||null==(r=S.icons)?void 0:r.actionChevron,eO=null!=(s=null==S||null==(n=S.icons)?void 0:n.settings)?s:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg==",eP=null==S||null==(i=S.icons)?void 0:i.history,eR=(0,c.useCallback)(()=>et&&"input"===N?(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(pY,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topLeft",trigger:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"input-icon-trigger",type:"button",children:(0,A.jsx)("img",{alt:"",className:"input-toolbar-icon",src:eO})})})}):null,[k,ex,ek,et,x,C,eO,p,N,$,_,ee]),eM=Y?V?em?(0,A.jsx)(ub.A.Item,{name:["params",em.name],style:{margin:0},children:(0,A.jsx)(hn,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:"prompt"===em.name?M:em.placeholder,autoFocus:!0,onKeyDown:ew})}):ef?eE():(0,A.jsx)("div",{className:"structured-params-container",children:eE()}):(0,A.jsx)(ub.A.Item,{name:"prompt",style:{margin:0},children:(0,A.jsx)(hn,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:M,autoFocus:!0,onKeyDown:eb,onChange:eh,ref:D})}):(0,A.jsxs)("div",{className:"no-input-method",children:['Click "Run" to execute ',pq(h)]});return R?(0,A.jsxs)("div",{className:"prompt-input-wrapper prompt-input-wrapper-minimal",children:[(0,A.jsx)(ub.A.Item,{hidden:!0,name:"type",style:{margin:0},children:(0,A.jsx)(q.A,{})}),(0,A.jsxs)("div",{className:`main-side-console-input minimal-main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,A.jsxs)("div",{className:"minimal-toolbar-row",children:[(0,A.jsxs)("div",{className:"minimal-toolbar-left",children:[(0,A.jsx)(d3.A,{menu:el,placement:"topLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,A.jsxs)("button",{"aria-label":`Select action type (current: ${T})`,className:"minimal-action-trigger",disabled:!u,type:"button",children:[(0,A.jsx)("img",{alt:"",className:"minimal-action-icon",src:eI}),(0,A.jsx)("span",{className:"minimal-action-label",children:T}),ej?(0,A.jsx)("img",{alt:"",className:"minimal-action-chevron",src:ej}):(0,A.jsx)(pz,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,A.jsx)(ht,{onSelect:ep,history:J,currentType:h,popupPlacement:"top",trigger:(0,A.jsx)("button",{"aria-label":"Open prompt history",className:"minimal-icon-trigger",type:"button",children:eP?(0,A.jsx)("img",{alt:"",className:"minimal-toolbar-icon minimal-toolbar-icon-history",src:eP}):(0,A.jsx)(pF,{"aria-hidden":"true",className:"minimal-toolbar-icon minimal-toolbar-icon-history",focusable:"false"})})}),et&&"hidden"!==N?(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(pY,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topRight",trigger:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"minimal-icon-trigger",type:"button",children:(0,A.jsx)("img",{alt:"",className:"minimal-toolbar-icon",src:eO})})})}):null]}),(0,A.jsxs)("div",{className:"form-controller-wrapper",children:[null==S?void 0:S.inputActions,eC()]})]})]})]}):(0,A.jsxs)("div",{className:"prompt-input-wrapper",children:[(0,A.jsxs)("div",{className:"mode-radio-group-wrapper",children:[(0,A.jsxs)("div",{className:"mode-radio-group",ref:B,children:[(0,A.jsx)(ub.A.Item,{name:"type",style:{margin:0},children:(0,A.jsx)(pB.A.Group,{buttonStyle:"solid",disabled:!u,children:uH.map(e=>{var t;return(0,A.jsx)(g.A,{title:(null==(t=uq[e])?void 0:t.title)||"",children:(0,A.jsx)(pB.A.Button,{value:e,children:pq(e)})},e)})})}),(0,A.jsx)(d3.A,{menu:eA,placement:"bottomLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,A.jsxs)(W.Ay,{className:`more-apis-button ${!uH.includes(h)?"selected-from-dropdown":""}`,children:[h&&!uH.includes(h)?pq(h):"more",(0,A.jsx)(pD.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,A.jsxs)("div",{className:"action-icons",children:[(0,A.jsx)(ht,{onSelect:ep,history:J,currentType:h}),et&&"toolbar"===N&&(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(pY,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k})})]})]}),(0,A.jsxs)("div",{className:`main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,A.jsxs)("div",{className:"form-controller-wrapper",children:[(0,A.jsxs)("div",{className:"input-actions-wrapper",children:[eR(),null==S?void 0:S.inputActions]}),eS()]})]})]})};function ha(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)}let hs=[...lJ,...lZ,"aiAct"];function hl(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 hA(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){hl(o,n,i,a,s,"next",e)}function s(e){hl(o,n,i,a,s,"throw",e)}a(void 0)})}}function hc(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}let hu=new Set;function hd(e){let{error:t}=e;if(!t)return null;let r=t.replace(/^(Error:\s*)+/,"Error: ");return(0,A.jsx)(V.A,{message:(0,A.jsx)("span",{style:{color:"#ff4d4f"},children:r}),type:"error",showIcon:!0})}function hp(e){let{action:t,content:r,description:n,error:i,shouldShowLoading:o}=e,{ref:a,truncated:s}=function(e,t){let r=(0,c.useRef)(null),[n,i]=(0,c.useState)(!1),o=(0,c.useCallback)(()=>{var e;i((e=r.current,!!e&&("multi-line"===t?e.scrollHeight-e.clientHeight>1:e.scrollWidth>e.clientWidth)))},[t]);return(0,c.useLayoutEffect)(()=>{if(o(),window.addEventListener("resize",o),"undefined"==typeof ResizeObserver||!r.current)return()=>window.removeEventListener("resize",o);let e=new ResizeObserver(o);return e.observe(r.current),()=>{window.removeEventListener("resize",o),e.disconnect()}},[e,o]),{ref:r,truncated:n}}(r,"multi-line"),l=(0,A.jsxs)("div",{className:"progress-row-content",children:[(0,A.jsxs)("div",{className:"progress-row-copy",ref:a,children:[t?(0,A.jsx)("span",{className:"progress-action-item",children:t}):null,n?(0,A.jsx)("div",{className:"progress-description-wrap",children:o?(0,A.jsx)(dK,{text:n,className:"progress-description"}):(0,A.jsx)("span",{className:"progress-description",children:n})}):null]}),i&&(0,A.jsx)(hd,{error:i})]});return s?(0,A.jsx)(g.A,{title:r,children:l}):l}function hh(e){var t,r,n,i,o,a,s;let{playgroundSDK:l,storage:u,contextProvider:d,config:p={},envConfigReminderProps:h,branding:f={},className:m="",dryMode:g=!1,showContextPreview:y=!0}=e,[v]=ub.A.useForm(),{config:b}=X(),[w,E]=(0,c.useState)(!1),x=(0,c.useRef)(null);(0,c.useEffect)(()=>{hA(function*(){if(l&&"function"==typeof l.checkStatus)try{yield l.checkStatus(),E(!0)}catch(e){console.warn("Failed to initialize SDK, using default namespace:",e),E(!0)}else E(!0)})()},[l]);let k=p.storageNamespace,S=k?void 0:l&&l.id&&"string"==typeof l.id?`agent-${l.id}`:"playground-default",C=(0,c.useMemo)(()=>{if(!1===p.persistMessages)return null;if(u)return u;if(!w)return null;let e=k||S,t=dj();return console.log(`Using ${t} storage for namespace: ${e}`),dI(t,e)},[u,w,k,p.persistMessages,S]),{loading:I,setLoading:j,infoList:O,setInfoList:P,actionSpace:R,actionSpaceLoading:M,uiContextPreview:T,setUiContextPreview:N,showScrollToBottomButton:D,verticalMode:B,replayCounter:z,setReplayCounter:F,messagesInitialized:L,infoListRef:U,currentRunningIdRef:K,interruptedFlagRef:Q,clearInfoList:J,handleScrollToBottom:Z}=function(e,t,r,n){let i=!(arguments.length>4)||void 0===arguments[4]||arguments[4],[o,a]=(0,c.useState)(!1),[s,l]=(0,c.useState)([]),[A,u]=(0,c.useState)([]),[d,p]=(0,c.useState)(!0),[h,f]=(0,c.useState)(),[m,g]=(0,c.useState)(!1),[y,v]=(0,c.useState)(!0),b=(0,c.useRef)(0),[w,E]=(0,c.useState)(!1),[x,k]=(0,c.useState)(0),S=(0,c.useRef)(null),C=(0,c.useRef)(null),I=(0,c.useRef)({}),j=(0,c.useRef)(),[,O]=(0,c.useState)(0);(0,c.useEffect)(()=>{let e=!1,r=null!=t?t:null,o=t=>{e||l(t)};return j.current!==r&&(t||0===s.length)&&dP(function*(){let a=dM(dR({},uW(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield dP(function*(){if(!i)return[];let e=dI(dj(),"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,c.useEffect)(()=>{(null==t?void 0:t.saveMessages)&&s.length>1&&t.saveMessages(s).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)})},[s,t]),(0,c.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,c.useEffect)(()=>{dP(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,c.useEffect)(()=>{E(window.innerWidth<750);let e=()=>{E(window.innerWidth<750)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let P=(0,c.useCallback)(()=>{setTimeout(()=>{S.current&&(S.current.scrollTop=S.current.scrollHeight)},100)},[]),R=(0,c.useCallback)(()=>{if(S.current){let{scrollTop:e,scrollHeight:t,clientHeight:r}=S.current,n=e+r>=t-10;g(!n);let i=e<b.current;b.current=e,n?v(!0):i&&v(!1)}},[]),M=(0,c.useCallback)(()=>{S.current&&(S.current.scrollTo({top:S.current.scrollHeight,behavior:"smooth"}),g(!1),v(!0))},[]);(0,c.useEffect)(()=>{s.length>0&&y&&P()},[s,P,y]),(0,c.useEffect)(()=>{let e=S.current;if(e)return e.addEventListener("scroll",R),R(),()=>{e.removeEventListener("scroll",R)}},[R]);let T=(0,c.useCallback)(()=>dP(function*(){if(l([dM(dR({},uW(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,c.useCallback)(()=>dP(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:a,infoList:s,setInfoList:l,messagesInitialized:j.current===(null!=t?t:null),actionSpace:A,actionSpaceLoading:d,uiContextPreview:h,setUiContextPreview:f,showScrollToBottomButton:m,verticalMode:w,replayCounter:x,setReplayCounter:k,infoListRef:S,currentRunningIdRef:C,interruptedFlagRef:I,clearInfoList:T,refreshContext:N,handleScrollToBottom:M,scrollToBottom:P}}(l,C,d,f.targetName,!1!==p.persistMessages&&!p.storageNamespace),{handleRun:q,handleStop:H,cancelCurrentExecution:G,canStop:V}=function(e){let{playgroundSDK:t,storage:r,actionSpace:n,loading:i,setLoading:o,setInfoList:a,replayCounter:s,setReplayCounter:l,verticalMode:A,currentRunningIdRef:u,interruptedFlagRef:d,deviceType:p}=e,{deepLocate:h,deepThink:f,screenshotIncluded:m,domIncluded:g,imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}=X(),x=(0,c.useCallback)(function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u8(function*(){if(!t)return void console.warn("PlaygroundSDK is not available");let i=Date.now(),c=e.type,x=n.displayContent||`${e.type}: ${e.prompt||JSON.stringify(e.params)}`,k={id:`user-${Date.now()}`,type:"user",content:x,timestamp:new Date};a(e=>[...e,k]),o(!0);let S=u9({},uG),C={id:`system-${i}`,type:"system",content:"",timestamp:new Date,loading:!0,loadingProgressText:""};a(e=>[...e,C]);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=ca(e),(o=cc(e))?`${n} - ${o}`:n),actionKind:ca(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:dt(e.error),result:null}:void 0}});a(e=>{let t=e.findIndex(e=>e.id===`system-${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)]})}),da(c)||!0!==f||console.warn("[Playground] Non-aiAct action will be executed without deepThink. deepThink is only forwarded for aiAct and runMarkdown.",{actionType:c,requestId:i.toString()});let r="unset"===f?void 0:f,o=u9(de(u9({requestId:i.toString(),deepLocate:h},da(c)&&void 0!==r?{deepThink:r}:{}),{screenshotIncluded:m,domIncluded:g,deviceOptions:{imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}}),n.reportDisplay?{reportDisplay:n.reportDisplay}:{});if(S.result=yield t.executeAction(c,e,o),"object"==typeof S.result&&null!==S.result){let e=S.result;e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report),e.error&&(S.error=dt(e.error)),"result"in e&&(S.result=e.result)}}catch(e){if(d.current[i])return;S.error=dt(e),console.error("Playground execution error:",e),"object"==typeof e&&null!==e&&(e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report))}if(yield di(S),d.current[i])return;o(!1),u.current=null;let I=null,j=s,O=dn(S,p);O&&(l(e=>e+1),I=O,j=s+1),a(e=>e.map(e=>e.id===`system-${i}`?de(u9({},e),{content:"",loading:!1,loadingProgressText:""}):e));let P={id:`result-${i}`,type:"result",content:"Execution result",timestamp:new Date,result:S,loading:!1,replayScriptsInfo:I,replayCounter:j,loadingProgressText:"",verticalMode:A,actionType:c};if(a(e=>[...e,P]),null==r?void 0:r.saveResult)try{yield r.saveResult(P.id,P)}catch(e){console.error("Failed to save result:",e)}})()},[t,r,n,o,a,s,l,A,u,d,h,f,m,g,p,y,v,b,w,E]),k=(0,c.useCallback)(function(){let{appendStopMessage:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u8(function*(){let r=u.current;if(!(r&&t&&t.cancelExecution))return;d.current[r]=!0,u.current=null,o(!1);let n=t=>{a(n=>{let i=n.map(e=>e.id===`system-${r}`?de(u9({},e),{content:"",loading:!1,loadingProgressText:""}):e);if(!e||i.some(e=>e.id===`stop-${r}`||e.id===`stop-result-${r}`))return i;if(t&&(t.dump||t.reportHTML||t.report)){let e=null,n=s;return(e=dn(t,p))&&(l(e=>e+1),n=s+1),[...i,{id:`stop-result-${r}`,type:"result",content:"Execution stopped by user",timestamp:new Date,result:{result:null,dump:t.dump,reportHTML:t.reportHTML,report:t.report||null,error:null},loading:!1,verticalMode:A,replayScriptsInfo:e,replayCounter:n}]}return[...i,{id:`stop-${r}`,type:"system",content:"Operation stopped",timestamp:new Date,loading:!1}]})};try{let e=yield t.cancelExecution(r.toString()),i=null;if(e)i=e;else if(t.getCurrentExecutionData)try{i=yield t.getCurrentExecutionData()}catch(e){console.error("Failed to get execution data before stop:",e)}i&&(yield di(i)),n(i)}catch(e){console.error("Failed to stop execution:",e),n()}})()},[t,u,d,o,a,A,s,l,p]),S=(0,c.useCallback)(()=>u8(function*(){u.current&&(yield k({appendStopMessage:!0}))})(),[k,u]);return{cancelCurrentExecution:k,handleRun:x,handleStop:S,canStop:i&&!!u.current&&!!t&&!!t.cancelExecution}}({playgroundSDK:l,storage:C,actionSpace:R,loading:I,setLoading:j,setInfoList:P,replayCounter:z,setReplayCounter:F,verticalMode:B,currentRunningIdRef:K,interruptedFlagRef:Q,deviceType:p.deviceType}),Y=(0,c.useRef)(G),$=(0,c.useRef)(p.onExecutionStatusChange),_=(0,c.useRef)(p.onBeforeExecutionStart),ee=null!=(t=p.executionScopeKey)?t:null,et=(0,c.useRef)(ee);(0,c.useEffect)(()=>{Y.current=G},[G]),(0,c.useEffect)(()=>{$.current=p.onExecutionStatusChange},[p.onExecutionStatusChange]),(0,c.useEffect)(()=>{_.current=p.onBeforeExecutionStart},[p.onBeforeExecutionStart]);let er=(0,c.useCallback)(()=>(function(e){var t;return(t=function*(e){let{clearTimeline:t,clearTimelineBeforeRun:r=!1,onBeforeExecutionStart:n}=e;yield null==n?void 0:n(),r&&(yield t())},function(){var e=this,r=arguments;return new Promise(function(n,i){var o=t.apply(e,r);function a(e){ha(o,n,i,a,s,"next",e)}function s(e){ha(o,n,i,a,s,"throw",e)}a(void 0)})}).apply(this,arguments)})({clearTimeline:J,clearTimelineBeforeRun:p.clearTimelineBeforeRun,onBeforeExecutionStart:_.current}),[J,p.clearTimelineBeforeRun]);(0,c.useEffect)(()=>{var e;null==(e=p.onExecutionStatusChange)||e.call(p,{running:I,stoppable:V,stop:H})},[V,p.onExecutionStatusChange,H,I]),(0,c.useEffect)(()=>()=>{var e;Y.current(),null==(e=$.current)||e.call($,{running:!1,stoppable:!1,stop:()=>void 0})},[]),(0,c.useEffect)(()=>{et.current!==ee&&(et.current=ee,G())},[G,ee]),(0,c.useEffect)(()=>{(null==l?void 0:l.overrideConfig)&&b&&l.overrideConfig(b).catch(e=>{console.error("Failed to override SDK config:",e),p.suppressConfigErrorToast||uv(e,{title:"Failed to apply AI configuration"})})},[l,b,p.suppressConfigErrorToast]);let en=(0,c.useCallback)(()=>hA(function*(){try{let e=v.getFieldsValue();yield er(),yield q(e)}catch(e){uv(e,{title:"Execution failed"})}})(),[v,q,er]);(0,c.useEffect)(()=>{let e=p.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:hu,lastRequestId:x.current,sdkReady:w,messagesInitialized:L})){if(x.current=e.id,hu.add(e.id),hu.size>100){let e=hu.values().next().value;e&&hu.delete(e)}hA(function*(){yield er(),yield q(e.value,hc({displayContent:e.displayContent},e.reportDisplay?{reportDisplay:e.reportDisplay}:{}))})().catch(e=>{uv(e,{title:"Execution failed"})})}},[p.externalRunRequest,q,L,er,w]);let ei=Object.keys(b||{}).length>=1,eo=p.serverMode||!g&&!M&&ei,ea=ub.A.useWatch("type",v)||uH["0"],es=(0,c.useMemo)(()=>l&&"function"==typeof l.getServiceMode?l.getServiceMode():"Server",[l]),el=y&&!1!==p.showContextPreview,eA=p.layout||"vertical",ec=!1!==p.showVersionInfo,eu=p.deviceType,ed=null!=(r=p.executionFlow)?r:{},ep=!0===ed.collapsible,eh=null!=(n=ed.label)?n:"Execution Flow",[ef,em]=(0,c.useState)(()=>new Set),eg=(0,c.useCallback)(e=>{em(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),{firstInProgressGroup:ey,visibleInfoList:ev}=(0,c.useMemo)(()=>{let e=new Set,t=[],r=null,n=O.length>1;for(let i of O)if(!n||"welcome"!==i.id)if("progress"===i.type){if(null===r){r=i.id,e.add(i.id),t.push(i);continue}ep&&ef.has(r)||t.push(i)}else r=null,t.push(i);return{firstInProgressGroup:e,visibleInfoList:t}},[ef,ep,O]),eb=(0,c.useMemo)(()=>{for(let e=O.length-1;e>=0;e--)if("progress"===O[e].type)return O[e].id;return null},[O]),ew=(0,c.useMemo)(()=>(function(e){let t=new Set;for(let n=0;n<e.length;n++){var r;let i=e[n];(null==i?void 0:i.type)==="progress"&&(null==(r=e[n+1])?void 0:r.type)!=="progress"&&t.add(i.id)}return t})(ev),[ev]),eE=void 0!==p.emptyState&&1===ev.length&&(null==(o=ev[0])?void 0:o.id)==="welcome",ex=(0,c.useMemo)(()=>eE&&((e,t)=>{if(!(null==e?void 0:e.length)||!t||pM(e,t))return!1;let r=pR(e,t);return!!(null==r?void 0:r.paramSchema)&&!!pj(r.paramSchema)&&Object.keys(r.paramSchema.shape||{}).length>1})(R,ea),[R,eE,ea]),ek=!eE;(0,c.useEffect)(()=>{if(!ex)return;let e=()=>{let e=U.current;if(!e)return;let t=e.querySelector(".playground-empty-state-wrapper"),r=null==t?void 0:t.querySelector("[data-playground-empty-state-content-start]"),n=null==t?void 0:t.querySelector("[data-playground-empty-state-content-end]");if(!(r instanceof HTMLElement)||!(n instanceof HTMLElement))return;let 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)}},[U,ea,ex]);let eS=["playground-empty-state-wrapper",ex?"playground-empty-state-wrapper-offset-for-prompt":""].filter(Boolean).join(" "),eC=!1!==p.showClearButton,eI=(0,c.useCallback)(()=>{G().finally(()=>{J()})},[G,J]),ej=eC&&ek?(0,A.jsx)("div",{className:"clear-button-container",children:(0,A.jsx)(W.Ay,{size:"small",icon:(0,A.jsx)(uL.A,{}),onClick:eI,type:"text",className:"clear-button"})}):null,eO=null!=(i=p.timelineWrapper)?i:(e,t)=>e,eP=p.hidePromptInput?null:(0,A.jsxs)("div",{className:"bottom-input-section",children:[p.showEnvConfigReminder?(0,A.jsx)(dW,(a=hc({},h),s=s={playgroundSDK:l},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(s)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(s)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(s,e))}),a)):null,(0,A.jsx)(ho,{runButtonEnabled:eo,form:v,serviceMode:es,selectedType:ea,dryMode:g,stoppable:V,loading:I,onRun:en,onStop:H,actionSpace:R,chrome:p.promptInputChrome,deviceType:eu})]}),eR="before-timeline"===p.promptInputPlacement;return(0,A.jsx)("div",{className:`playground-container ${eA}-mode ${m}`.trim(),children:(0,A.jsxs)(ub.A,{form:v,onFinish:en,className:"command-form",initialValues:{type:uH["0"]},children:[el&&(0,A.jsx)("div",{className:"context-preview-section",children:(0,A.jsx)(dq,{uiContextPreview:T,setUiContextPreview:N,showContextPreview:el})}),eR?eP:null,(0,A.jsx)("div",{className:"playground-timeline-region",children:eO((0,A.jsxs)("div",{className:["middle-dialog-area",eE?"middle-dialog-area-empty":""].filter(Boolean).join(" "),children:[p.timelineHeader,(0,A.jsx)("div",{ref:U,className:["info-list-container",eE?"info-list-container-empty":""].filter(Boolean).join(" "),children:eE?(0,A.jsx)("div",{className:eS,children:p.emptyState}):(0,A.jsx)(uZ.A,{itemLayout:"vertical",dataSource:ev,renderItem:e=>{var t,r,n,i;let o,a,s,l,u,d,h,m,g=ep&&ey.has(e.id),y=g&&ef.has(e.id);return(0,A.jsxs)(uZ.A.Item,{className:"list-item",children:[g?(0,A.jsxs)("button",{type:"button",className:`progress-group-toggle ${ef.has(e.id)?"is-collapsed":"is-expanded"}`,"aria-expanded":!ef.has(e.id),onClick:()=>eg(e.id),children:[(0,A.jsx)("span",{className:"progress-group-toggle-label",children:eh}),(0,A.jsx)(uU.A,{className:"progress-group-toggle-chevron"})]}):null,y?null:"user"===e.type?(0,A.jsx)("div",{className:"user-message-container",children:(0,A.jsx)("div",{className:"user-message-bubble",children:e.content})}):"progress"===e.type?(0,A.jsx)("div",{children:(a=null==(t=(o=e.content.split(" - "))[0])?void 0:t.trim(),s=o.slice(1).join(" - ").trim(),l=e.id===eb,u=ew.has(e.id),m="completed"==(h=(d=I&&l)?"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,c.createElement)(pE)}(e.actionKind,ed.resolveActionIcon):null,(0,A.jsxs)("div",{className:`progress-row ${u?"progress-row-last":""}`,children:[a?(0,A.jsx)("span",{className:`progress-status-icon ${h}`,children:"loading"===h?(0,A.jsx)(uK.A,{spin:!0}):"error"===h?(0,c.createElement)(px):null!==m?m:"✓"}):null,(0,A.jsx)(hp,{action:a,content:e.content,description:s,error:null==(n=e.result)?void 0:n.error,shouldShowLoading:d})]}))}):(0,A.jsxs)("div",{className:"system-message-container",children:[!1!==p.showSystemMessageHeader&&(0,A.jsxs)("div",{className:"system-message-header",children:[(0,A.jsx)(uQ.A,{className:"system-message-icon",component:f.icon||pw,style:{fontSize:20}}),(0,A.jsx)("span",{className:"system-message-title",children:f.title||"Playground"})]}),(e.content||e.result)&&(0,A.jsx)("div",{className:"system-message-content",children:"result"===e.type?(0,A.jsx)(pb,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:es,replayScriptsInfo:e.replayScriptsInfo||null,replayCounter:e.replayCounter||0,loadingProgressText:e.loadingProgressText||"",verticalMode:e.verticalMode||!1,fitMode:"width",showOutputAlongsideReport:void 0!==(i=e.actionType)&&hs.includes(i),onDownloadReport:p.onDownloadReport,playerPresentation:"timeline",hidePlayerFullscreenControl:p.hidePlayerFullscreenControl}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)("div",{className:"system-message-text",children:e.content}),e.loading&&e.loadingProgressText&&(0,A.jsx)("div",{className:"loading-progress-text",children:(0,A.jsx)("span",{children:e.loadingProgressText})})]})})]})]},e.id)}})}),ek&&D&&!1!==p.enableScrollToBottom&&(0,A.jsx)(W.Ay,{"aria-label":"Scroll to latest message",className:"scroll-to-bottom-button",shape:"circle",icon:(0,A.jsx)(uJ.A,{}),onClick:Z})]}),{empty:eE,headerAction:ej})}),eR?null:eP,ec&&f.version&&(0,A.jsx)("div",{className:"version-info-section",children:(0,A.jsxs)("span",{className:"version-text",children:["Midscene.js version: ",f.version]})})]})})}let hf=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,A.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m12 6-4 4-4-4"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},hm=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:55,height:52,fill:"none",viewBox:"0 0 55 52"},e),r=r={children:[(0,A.jsxs)("mask",{id:"midscene-logo_svg__a",width:55.371,height:52.35,x:-.202,y:-.201,fill:"#000",maskUnits:"userSpaceOnUse",children:[(0,A.jsx)("path",{fill:"#fff",d:"M-.202-.201h55.371v52.35H-.202z"}),(0,A.jsx)("path",{fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"})]}),(0,A.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"}),(0,A.jsx)("path",{fill:"#3A4953",d:"m36.328 4.056 1.3 1.263zm-.83.853L34.2 3.646l-1.95 2.006 2.628.96zm13.968 14.069-1.707.609.14.39.295.291zm3.714 13.116 1.812.031zm-4.24 9.99 1.187 1.369zm-6.322 3.224.543 1.73.002-.002zm-.069.022-.543-1.729-.012.004zm-.088.029.546 1.727.01-.003zm-1.328.378-.446-1.757-.335.086-.28.202zm-13.634 4.399v1.812zm-13.632-4.399 1.06-1.47-.28-.202-.334-.084zm-1.328-.379-.55 1.727.004.001zm-.09-.028-.55 1.727zm-.067-.022.55-1.726-.005-.002zm-6.323-3.224-1.187 1.369zm-4.24-9.99-1.811.031zm3.715-13.116 1.272 1.29.295-.29.14-.391zm14.02-14.089.618 1.704 2.636-.955-1.954-2.011zm-.81-.833-1.3 1.262zm.948-2.244V0zm.563 4.935.615 1.704-1.23-3.409zM7.25 20.086l1.211 1.347.357-.32.151-.456zM3.803 32.06l-1.812.03zm9.244 11.378.55-1.726-.004-.002zm.09.029-.55 1.727h.004zm1.586.437 1.087-1.45-.304-.227-.369-.087zM27.5 48.152v1.812h.75l.532-.531zm.001-.001 1.282 1.281 3.093-3.093H27.5zm-12.776-4.247 1.087-1.45-.304-.227-.369-.087zm-1.586-.437-.55 1.727h.004zm-.09-.029.55-1.726-.004-.002zM3.805 32.06l-1.812.032zm3.447-11.973 1.211 1.347.357-.32.151-.456zm24.043 27.727.32 1.784-.64-3.567zm-.573.096-.271-1.792.542 3.584zm.892-.155-.348-1.778.695 3.557zm.255-.05.37 1.774.23-.048.21-.105zm.002 0 .81 1.62-1.179-3.395zm.623-.141L32.07 45.8l.845 3.524zm.215-.051.441 1.757.192-.048.177-.089zm.002-.001.81 1.62-1.251-3.378zM21.084 6.465V4.653h-.278l-.266.084zm-.572.191-.593-1.712 1.186 3.424zm.573-.19.545 1.728-.545-3.54zM35.38 1.811v1.812a.49.49 0 0 1-.351-.83l1.3 1.262 1.3 1.262C39.558 3.33 38.15 0 35.379 0zm.949 2.244-1.3-1.264-.829.854 1.3 1.263 1.298 1.263.83-.853zm-.83.853-.621 1.702a21.57 21.57 0 0 1 12.882 12.976l1.707-.61 1.706-.608A25.2 25.2 0 0 0 36.12 3.207zm13.968 14.069-1.272 1.29c2.043 2.015 3.29 5.063 3.174 11.795l1.812.03 1.812.032c.123-7.147-1.178-11.405-4.254-14.438zm3.714 13.116-1.812-.031c-.074 4.3-1.658 6.955-3.615 8.651l1.187 1.37 1.187 1.369c2.758-2.391 4.773-6.03 4.865-11.328zm-4.24 9.99-1.187-1.37c-1.919 1.663-4.188 2.395-5.68 2.866l.545 1.728.545 1.728c1.488-.469 4.421-1.379 6.964-3.583zm-6.322 3.224-.543-1.728-.069.021.543 1.729.544 1.729.068-.022zm-.069.022-.555-1.725-.089.029.556 1.724.556 1.725.088-.028zm-.088.029-.546-1.728q-.626.197-1.228.35l.446 1.756.445 1.756q.704-.178 1.429-.407zm-1.328.378-1.06-1.47a21.4 21.4 0 0 1-12.574 4.057v3.624c5.48 0 10.562-1.759 14.694-4.742zm-13.634 4.399v-1.812a21.4 21.4 0 0 1-12.571-4.056l-1.06 1.469-1.061 1.47a25.03 25.03 0 0 0 14.692 4.74zm-13.632-4.399.446-1.757q-.602-.151-1.228-.35l-.546 1.728-.546 1.728q.723.229 1.429.407zm-1.328-.379.55-1.726-.09-.029-.55 1.727-.55 1.727.09.028zm-.09-.028.55-1.727-.067-.021-.55 1.726-.55 1.727.067.022zm-.067-.022.545-1.728c-1.492-.47-3.762-1.202-5.681-2.866l-1.187 1.37-1.187 1.369c2.543 2.204 5.477 3.114 6.964 3.583zm-6.323-3.224 1.187-1.37c-1.957-1.696-3.54-4.35-3.615-8.651l-1.811.03-1.812.032c.091 5.297 2.106 8.937 4.864 11.328zm-4.24-9.99 1.812-.031c-.116-6.733 1.13-9.78 3.175-11.795l-1.272-1.29-1.272-1.29C1.185 20.72-.115 24.977.008 32.124zm3.715-13.116 1.707.609A21.57 21.57 0 0 1 20.172 6.593l-.617-1.704-.618-1.703a25.2 25.2 0 0 0-15.11 15.183zm14.02-14.089 1.3-1.262-.81-.834-1.3 1.263-1.3 1.262.811.834zm-.81-.833 1.3-1.263a.49.49 0 0 1-.351.831V1.812L19.691 0c-2.771 0-4.177 3.332-2.247 5.318zm.948-2.244v1.812H35.38V0H19.692zm.563 4.935-.616-1.705A23.2 23.2 0 0 0 5.53 19.514l1.72.572 1.72.571a19.58 19.58 0 0 1 11.9-12.206zM7.25 20.086l-1.212-1.348C3.27 21.228 1.866 24.83 1.99 32.091l1.812-.032 1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596zM3.803 32.06l-1.812.03c.082 4.753 1.861 7.854 4.18 9.864 2.236 1.938 4.852 2.746 6.33 3.212l.546-1.728.546-1.728c-1.511-.477-3.445-1.105-5.047-2.494-1.519-1.316-2.867-3.433-2.932-7.188zm9.244 11.378-.55 1.727.09.029.55-1.727.55-1.727-.09-.028zm.09.029-.546 1.728q.875.276 1.718.474l.414-1.765.414-1.764q-.706-.164-1.454-.401zm1.586.437-1.086 1.45a23.05 23.05 0 0 0 13.862 4.61V46.34a19.43 19.43 0 0 1-11.69-3.886zM27.5 48.152l1.282 1.281v-.001l-1.28-1.281-1.282-1.282-.001.001zm.001-.001v-1.812a19.43 19.43 0 0 1-11.69-3.885l-1.086 1.45-1.086 1.45A23.05 23.05 0 0 0 27.5 49.964zm-12.776-4.247.414-1.764c-.472-.11-.954-.243-1.454-.401l-.546 1.728-.546 1.728q.875.276 1.718.474zm-1.586-.437.55-1.727-.09-.028-.55 1.726-.55 1.727.09.029zm-.09-.029.546-1.728c-1.511-.477-3.444-1.105-5.047-2.494-1.518-1.316-2.866-3.433-2.93-7.188l-1.812.032-1.812.03c.082 4.752 1.86 7.853 4.18 9.864 2.235 1.938 4.85 2.745 6.33 3.212zM3.805 32.06l1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596l-1.211-1.347-1.212-1.348c-2.767 2.49-4.172 6.092-4.047 13.353zm3.447-11.973 1.72.571A19.58 19.58 0 0 1 20.87 8.451l-.615-1.704-.616-1.705A23.2 23.2 0 0 0 5.532 19.514zm24.043 27.727-.32-1.783q-.266.048-.524.087l.271 1.792.271 1.791q.319-.048.622-.103zm-.573.096.272 1.791q.316-.048.622-.103l-.32-1.784-.321-1.783a20 20 0 0 1-.524.087zm.892-.155.347 1.779c.061-.012.179-.034.278-.055l-.37-1.774-.369-1.774c-.071.015-.124.025-.234.046zm.255-.05.81 1.621h.003l-.81-1.622-.811-1.62h-.002zm.002 0-.369-1.775-.235.047.347 1.778.347 1.779.28-.056zm.623-.141.422 1.762c.023-.006.159-.037.234-.056l-.441-1.757-.441-1.758-.197.047zm.215-.051.81 1.62h.002l-.81-1.621-.81-1.621h-.002zm.002-.001-.441-1.758-.199.047.423 1.763.422 1.762.236-.057zM21.084 6.465l-.544-1.728q-.325.104-.621.207l.593 1.712.593 1.712q.273-.095.524-.174zm-.572.191.594 1.712q.27-.093.524-.174l-.545-1.729-.544-1.728q-.323.103-.622.207zm.573-.19V4.652zv1.812z",mask:"url(#midscene-logo_svg__a)"}),(0,A.jsx)("mask",{id:"midscene-logo_svg__b",width:53,height:50,x:1,y:1,maskUnits:"userSpaceOnUse",style:{maskType:"alpha"},children:(0,A.jsx)("path",{fill:"#F0F0F0",fillRule:"evenodd",d:"M24.214 12.537a4.63 4.63 0 0 0 6.64 0l6.608-6.805a23.4 23.4 0 0 1 12 13.247c2.56 2.524 3.833 6.176 3.714 13.114-.083 4.8-1.883 7.947-4.24 9.991-2.231 1.934-4.833 2.755-6.322 3.225l-.158.05q-.675.213-1.328.378a23.22 23.22 0 0 1-13.632 4.399 23.22 23.22 0 0 1-13.632-4.399q-.654-.165-1.33-.378l-.157-.05c-1.49-.47-4.092-1.291-6.322-3.225-2.358-2.044-4.157-5.192-4.24-9.99-.12-6.941 1.155-10.593 3.716-13.117a23.4 23.4 0 0 1 12.05-13.27zM35.38 1.812c1.168 0 1.763 1.406.949 2.244l-6.895 7.1c-.52.534-1.21.8-1.899.8h-.012a2.65 2.65 0 0 1-1.536-.503 2.7 2.7 0 0 1-.35-.299L19.552 4.89l.001-.001-.808-.833c-.814-.838-.22-2.244.949-2.244z",clipRule:"evenodd"})}),(0,A.jsxs)("g",{mask:"url(#midscene-logo_svg__b)",children:[(0,A.jsx)("path",{fill:"#fff",d:"M-4.044-9.086h63.087V65.49H-4.044z"}),(0,A.jsx)("g",{filter:"url(#midscene-logo_svg__c)",opacity:.8,children:(0,A.jsx)("path",{fill:"#005EEC",fillOpacity:.01,d:"M41.85 43.36c-.378-.748-3.453.67-7.362 2.242s-7.175 2.702-6.798 3.45c.378.746 3.853.078 7.763-1.494s6.773-3.452 6.396-4.199"})})]}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__d)",d:"M5.773 18.412h43.601v24.223H5.773z"}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__e)",d:"M5.773 18.473h43.086v24.454H5.773z"}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__f)",d:"M5.926 18.075h43.092v24.457H5.926z"}),(0,A.jsx)("foreignObject",{width:27.157,height:19.138,x:21.193,y:36.687,children:(0,A.jsx)("div",{xmlns:"http://www.w3.org/1999/xhtml",style:{backdropFilter:"blur(2.96px)",clipPath:"url(#midscene-logo_svg__g)",height:"100%",width:"100%"}})}),(0,A.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",stroke:"#3A4953",strokeWidth:.514,d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253Zm17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901Z",clipRule:"evenodd","data-figma-bg-blur-radius":5.911}),(0,A.jsxs)("defs",{children:[(0,A.jsx)("pattern",{id:"midscene-logo_svg__d",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__h",transform:"scale(.00483 .0087)"})}),(0,A.jsx)("pattern",{id:"midscene-logo_svg__e",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__i",transform:"scale(.009 .01587)"})}),(0,A.jsx)("pattern",{id:"midscene-logo_svg__f",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__j",transform:"scale(.009 .01587)"})}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__h",width:207,height:115,preserveAspectRatio:"none"}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__i",width:111,height:63,preserveAspectRatio:"none"}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__j",width:111,height:63,preserveAspectRatio:"none"}),(0,A.jsx)("clipPath",{id:"midscene-logo_svg__g",transform:"translate(-21.193 -36.687)",children:(0,A.jsx)("path",{fillRule:"evenodd",d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253m17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901",clipRule:"evenodd"})}),(0,A.jsxs)("filter",{id:"midscene-logo_svg__c",width:27.157,height:19.138,x:21.193,y:36.687,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,A.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,A.jsx)("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),(0,A.jsx)("feGaussianBlur",{result:"effect1_foregroundBlur_8049_134028",stdDeviation:3.212})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function hg(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function hy(){return(0,A.jsx)(hf,{"aria-hidden":"true",className:"session-setup-select-icon"})}let hv="Create Agent";function hb(e){var t,r,n,i;let{form:o,sessionSetup:a,sessionSetupError:s,sessionViewState:l,sessionLoading:c,sessionMutating:u,onCreateSession:d}=e,p=u||c||"blocked"===l.setupState,h=null!=(t=null==a?void 0:a.primaryActionLabel)?t:hv,f=null!=(r=null==a?void 0:a.title)?r:hv,m=null!=(n=null==a?void 0:a.description)?n:"Create a platform session before running actions.";return(0,A.jsx)("div",{className:"session-setup-panel",children:(0,A.jsxs)("div",{className:"session-setup-card",children:[(0,A.jsx)(hm,{"aria-hidden":"true",className:"session-setup-logo"}),(0,A.jsx)("h1",{className:"session-setup-title",children:f}),(0,A.jsx)("p",{className:"session-setup-description",children:m}),"blocked"===l.setupState&&l.setupBlockingReason&&(0,A.jsx)(V.A,{type:"error",showIcon:!0,message:"Setup blocked",description:l.setupBlockingReason,className:"session-setup-alert"}),s?(0,A.jsx)(V.A,{type:"error",showIcon:!0,message:"Failed to load setup",description:s,className:"session-setup-alert"}):null,(null==a?void 0:a.notice)?(0,A.jsx)(V.A,{type:a.notice.type,showIcon:!0,message:a.notice.message,description:a.notice.description,className:"session-setup-alert"}):null,(0,A.jsxs)(ub.A,{form:o,layout:"vertical",className:"session-setup-form",onFinish:()=>{p||d()},children:[(null!=(i=null==a?void 0:a.fields)?i:[]).map(e=>(0,A.jsx)(ub.A.Item,{label:e.label,name:e.key,tooltip:e.description,rules:e.required?[{required:!0,message:`${e.label} is required`}]:void 0,children:function(e,t){if("number"===e.type)return(0,A.jsx)(p$.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let i=hg(t),o=function(e,t){var r;if(hg(t)!==e.key||!(null==t||null==(r=t.platformRegistry)?void 0:r.length))return e.options;let n=t.platformRegistry.map(e=>({label:e.label,value:e.id,description:[e.description,e.unavailableReason].filter(Boolean).join(" \xb7 ")||void 0}));return n.length>0?n:e.options}(e,t);return i===e.key&&(null==t||null==(r=t.platformSelector)?void 0:r.variant)==="cards"?(0,A.jsx)(pB.A.Group,{className:"platform-selector-group",children:(o||[]).map(e=>(0,A.jsxs)(pB.A.Button,{value:e.value,className:"platform-selector-card",children:[(0,A.jsx)("div",{className:"platform-selector-title",children:e.label}),e.description?(0,A.jsx)("div",{className:"platform-selector-description",children:e.description}):null]},String(e.value)))}):(0,A.jsx)(G.A,{placeholder:e.placeholder,suffixIcon:(0,A.jsx)(hy,{}),options:(null!=(n=null!=o?o:e.options)?n:[]).map(e=>({label:e.label,value:e.value,description:e.description})),optionRender:e=>{let t=e.data.description;return t?(0,A.jsxs)("div",{className:"session-select-option",children:[(0,A.jsx)("div",{className:"session-select-option-label",children:e.data.label}),(0,A.jsx)("div",{className:"session-select-option-description",children:t})]}):e.data.label}})}return(0,A.jsx)(q.A,{placeholder:e.placeholder})}(e,a)},e.key)),(0,A.jsx)("button",{type:"submit",className:"session-setup-submit",disabled:p,children:u?"Creating...":h})]})]})})}function hw(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function hE(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function hx(e,t,r,n,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 hk(e){var t,r,n,i,o,a;let s,{controller:l,appVersion:c,title:u="Playground",branding:d,playgroundConfig:p,header:h,className:f,playgroundClassName:m,notConnectedFallback:g}=e,{state:y,actions:v}=l,b=hE(hw({},s={showContextPreview:!1,layout:"vertical",showVersionInfo:!1,enableScrollToBottom:!1,serverMode:!0,showEnvConfigReminder:!1,showClearButton:!1,showSystemMessageHeader:!1,promptInputChrome:{variant:"minimal"},executionFlow:{collapsible:!0},deviceType:y.deviceType,executionUx:{hints:y.executionUxHints,countdownSeconds:y.countdownSeconds}},p),{executionFlow:hw({},s.executionFlow,null==p?void 0:p.executionFlow),executionUx:hw({},s.executionUx,null==p?void 0:p.executionUx)}),w=(t=y.runtimeInfo,r=y.deviceType,hE(hw({},d),{title:null!=(n=null==t?void 0:t.title)?n:u,version:c,targetName:null!=(a=null!=(o=null!=(i=null==t?void 0:t.platformId)?i:null==d?void 0:d.targetName)?o:r)?a:"screen"}));return(0,A.jsxs)("div",{className:["playground-conversation-panel",f].filter(Boolean).join(" "),children:[(0,A.jsx)(H.A,{open:null!==y.countdown,footer:(0,A.jsx)(W.Ay,{onClick:v.finishCountdown,type:"default",children:"Skip countdown"}),closable:!0,maskClosable:!0,onCancel:v.finishCountdown,centered:!0,width:400,styles:{mask:{backgroundColor:"rgba(0, 0, 0, 0.75)"}},children:(0,A.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,A.jsx)("div",{style:{fontSize:"120px",fontWeight:"bold",color:"GO!"===y.countdown?"#52c41a":"#1890ff",marginBottom:"24px",lineHeight:1},children:y.countdown}),(0,A.jsx)("div",{style:{fontSize:"18px",fontWeight:500,marginBottom:"12px"},children:"Automation Starting Soon"}),(0,A.jsxs)("div",{style:{fontSize:"14px",color:"var(--midscene-text-secondary)"},children:["The selected session requested a countdown before execution.",(0,A.jsx)("br",{}),"Please wait until the run starts."]})]})}),h,(0,A.jsx)("div",{className:"playground-conversation-body",children:y.serverOnline?y.sessionViewState.connected?(0,A.jsx)(hh,{playgroundSDK:y.playgroundSDK,config:b,branding:w,className:["playground-container","playground-conversation-skin",m].filter(Boolean).join(" ")}):void 0!==g?(0,A.jsx)(A.Fragment,{children:g}):(0,A.jsx)(hb,{form:y.form,sessionSetup:y.sessionSetup,sessionSetupError:y.sessionSetupError,sessionViewState:y.sessionViewState,sessionLoading:y.sessionLoading,sessionMutating:y.sessionMutating,onCreateSession:()=>{var e;return(e=function*(){yield v.createSession()},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){hx(o,n,i,a,s,"next",e)}function s(e){hx(o,n,i,a,s,"throw",e)}a(void 0)})})()}}):(0,A.jsx)("div",{className:"playground-conversation-offline",children:(0,A.jsx)(V.A,{type:"warning",showIcon:!0,message:"Playground server offline",description:"Reconnect the runtime to continue using the Android playground."})})})]})}let{Content:hS}=ep.A;function hC(e){var t;let{serverUrl:r,appVersion:n,title:i="Playground",defaultDeviceType:o="web",branding:a,playgroundConfig:s,offlineTitle:l="Midscene Playground",offlineStatusText:u="Server offline...",pollIntervalMs:p=5e3}=e,[h,f]=(0,c.useState)(!1),m=function(e){var t;let{serverUrl:r,defaultDeviceType:n="web",pollIntervalMs:i=5e3,countdownSeconds:o=3,initialFormValues:a,onCountdownFinish:s}=e,{message:l}=ek.A.useApp(),[u]=ub.A.useForm(),d=(0,c.useRef)(a);(0,c.useLayoutEffect)(()=>{let e=d.current;if(e)for(let[t,r]of Object.entries(e))void 0===u.getFieldValue(t)&&u.setFieldsValue({[t]:r})},[u]);let p=null!=(t=ub.A.useWatch([],u))?t:{},[h,f]=(0,c.useState)(null),[m,g]=(0,c.useState)(null),[y,v]=(0,c.useState)(null),[b,w]=(0,c.useState)(!1),[E,x]=(0,c.useState)(!1),k=X(e=>e.config),S=(0,c.useMemo)(()=>JSON.stringify(Object.entries(k).sort((e,t)=>{let[r]=e,[n]=t;return r.localeCompare(n)})),[k]),C=uB(m),I="string"==typeof C?p[C]:void 0,j=(0,c.useMemo)(()=>new ug({type:"remote-execution",serverUrl:r}),[r]),{serverOnline:O,isUserOperating:P,deviceType:R,runtimeInfo:M,executionUxHints:T,refreshServerState:N}=function(e,t,r){let[n,i]=(0,c.useState)(!1),[o,a]=(0,c.useState)(!1),[s,l]=(0,c.useState)(t),[A,u]=(0,c.useState)(null),[d,p]=(0,c.useState)([]),h=(0,c.useRef)(null),f=(0,c.useRef)(!0);(0,c.useEffect)(()=>(f.current=!0,()=>{f.current=!1}),[]),(0,c.useEffect)(()=>{h.current=A},[A]),(0,c.useEffect)(()=>{e.onProgressUpdate(e=>{a(!!e)})},[e]);let m=(0,c.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(eJ(r,t)),p(eZ(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(eJ(a,t)),p(eZ(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){ux(o,n,i,a,s,"next",e)}function s(e){ux(o,n,i,a,s,"throw",e)}a(void 0)})})()},[t,e]);return(0,c.useEffect)(()=>{m();let e=window.setInterval(()=>{m()},r);return()=>{window.clearInterval(e)}},[r,m]),{serverOnline:n,isUserOperating:o,deviceType:s,runtimeInfo:A,executionUxHints:d,refreshServerState:m}}(j,n,i),D=(0,c.useMemo)(()=>{let e,t;return t=(e=(null==M?void 0:M.metadata)||{}).setupState,{connected:!!e.sessionConnected,displayName:"string"==typeof e.sessionDisplayName?e.sessionDisplayName:void 0,setupState:"blocked"===t||"ready"===t||"required"===t?t:"ready",setupBlockingReason:"string"==typeof e.setupBlockingReason?e.setupBlockingReason:void 0}},[M]),B=(0,c.useRef)(null),z=(0,c.useRef)(null),F=(0,c.useRef)(!0),L=(0,c.useRef)(void 0),U=(0,c.useRef)(null),K=(0,c.useRef)(null),Q=(0,c.useRef)(!1),J=(0,c.useRef)(null),Z=(0,c.useRef)(null),q=(0,c.useRef)(null),H=(0,c.useCallback)(()=>uN(function*(){if(!uS(k))return J.current=null,q.current=null,!0;if(J.current===S)return!0;let e=q.current;if((null==e?void 0:e.signature)===S)return e.promise;let t={promise:Promise.resolve(!0),signature:S},r=uN(function*(){try{var e;return yield(e=function*(){return!!uS(k)&&(yield j.overrideConfig(k),!0)},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){uk(o,n,i,a,s,"next",e)}function s(e){uk(o,n,i,a,s,"throw",e)}a(void 0)})})(),J.current=S,!0}catch(e){return uv(e,{title:"Failed to apply AI configuration"}),!1}finally{q.current===t&&(q.current=null)}})();return t.promise=r,q.current=t,r})(),[k,S,j]),W=(0,c.useCallback)(()=>{let e=null!==B.current;null!==B.current&&(window.clearInterval(B.current),B.current=null);let t=z.current;z.current=null,F.current&&f(null),null==t||t(),e&&F.current&&(null==s||s())},[s]),G=(0,c.useCallback)(()=>uN(function*(){if(!(o<=0))return W(),new Promise(e=>{z.current=e;let t=o;F.current&&f(t),B.current=window.setInterval(()=>{if((t-=1)>0){F.current&&f(t);return}if(0===t){F.current&&f("GO!");return}W()},1e3)})})(),[o,W]);(0,c.useEffect)(()=>(F.current=!0,()=>{F.current=!1,W()}),[W]),(0,c.useEffect)(()=>T.includes("countdown-before-run")?(j.setBeforeActionHook(()=>uN(function*(){yield G()})()),()=>{j.setBeforeActionHook(void 0)}):void j.setBeforeActionHook(void 0),[T,j,G]);let V=(0,c.useCallback)(e=>uN(function*(){let t=uD({},u.getFieldsValue(!0),e||{});w(!0);try{let r=yield j.getSessionSetup(e);g(r),v(null);let n=uB(r);L.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(uw(r,t))}catch(e){console.error("Failed to load session setup:",e),v(e instanceof Error?e.message:"Failed to load session setup")}finally{w(!1)}})(),[u,j]),Y=(0,c.useCallback)((e,t)=>uN(function*(){if(Z.current)return Z.current;let r=uN(function*(){var r;let n;try{if(Q.current=!0,x(!0),!(yield H()))return!1;let r=null!=e?e:yield u.validateFields();return n=r,yield j.createSession(r),(null==t?void 0:t.silent)||(K.current=null),(null==t?void 0:t.silent)||l.success("Agent created"),yield N(),!0}catch(e){if(e.errorFields)return!1;if(null==t?void 0:t.silent)return K.current=uC(n),!1;return uv(e,null!=(r=function(e){let t;if(t=uP(e).toLowerCase(),uO.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,A.jsx)(uM,{error:e}),duration:0,title:"Failed to create Agent"}}(e))?r:{title:"Failed to create Agent"}),!1}finally{Q.current=!1,x(!1)}})(),n={promise:null};return n.promise=r.finally(()=>{Z.current===n.promise&&(Z.current=null)}),Z.current=n.promise,n.promise})(),[H,u,l,j,N]),$=(0,c.useCallback)(()=>uN(function*(){try{K.current=uC(uE(m,u.getFieldsValue(!0))),Q.current=!0,x(!0),yield j.destroySession(),l.success("Session disconnected"),yield N(),yield V()}catch(e){uv(e,{title:"Failed to disconnect session"})}finally{Q.current=!1,x(!1)}})(),[u,l,j,N,V,m]);return(0,c.useEffect)(()=>{O&&H()},[H,O]),(0,c.useEffect)(()=>{if(!O||D.connected)return;let e=!1,t=!1,r=()=>uN(function*(){if(!e&&!t){t=!0;try{yield V(u.getFieldsValue(!0))}finally{t=!1}}})();r();let n=window.setInterval(()=>{r()},i);return()=>{e=!0,window.clearInterval(n)}},[u,i,V,O,D.connected]),(0,c.useEffect)(()=>{if(!O||D.connected||!I)return;let e=uB(m);if(e&&L.current!==I){var t,r;V((t=uD({},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,V,I,O,m,D.connected]),(0,c.useEffect)(()=>{if(D.connected){U.current=null;return}if(!O||b||E||Q.current||y)return;let e=uE(m,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,i=uC(t);return i?{signature:i,shouldCreate:i!==r&&i!==n}:{signature:null,shouldCreate:!1}}({autoCreateInput:e,lastAttemptedSignature:U.current,blockedSignature:K.current});if(!r||!t){t||(U.current=null);return}U.current=t,uN(function*(){(yield Y(null!=e?e:void 0,{silent:!0}))||(U.current=null)})()},[Y,u,O,b,E,m,y,D.connected]),{state:{playgroundSDK:j,form:u,formValues:p,serverOnline:O,isUserOperating:P,deviceType:R,runtimeInfo:M,executionUxHints:T,sessionViewState:D,sessionSetup:m,sessionSetupError:y,sessionLoading:b,sessionMutating:E,countdown:h,countdownSeconds:o},actions:{refreshServerState:N,refreshSessionSetup:V,createSession:Y,destroySession:$,finishCountdown:W}}}({serverUrl:r,defaultDeviceType:o,countdownSeconds:null==s||null==(t=s.executionUx)?void 0:t.countdownSeconds,pollIntervalMs:p});return((0,c.useEffect)(()=>{let e=()=>{f(window.innerWidth<=1024)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),m.state.serverOnline)?(0,A.jsx)(eV,{children:(0,A.jsx)(ep.A,{className:"app-container playground-container",children:(0,A.jsx)(hS,{className:"app-content",children:(0,A.jsxs)(eh.YZ,{autoSaveId:"playground-layout",direction:h?"vertical":"horizontal",children:[(0,A.jsx)(eh.Zk,{defaultSize:h?67:32,maxSize:h?85:60,minSize:h?67:25,className:"app-panel left-panel",children:(0,A.jsxs)("div",{className:"panel-content left-panel-content",children:[(0,A.jsx)("div",{className:"playground-panel-header",children:(0,A.jsxs)("div",{className:"header-row",children:[(0,A.jsx)(d,{}),(0,A.jsx)(ed,{showTooltipWhenEmpty:!1,showModelName:!1,playgroundSDK:m.state.playgroundSDK})]})}),(0,A.jsx)("div",{className:"playground-panel-playground",children:(0,A.jsx)(hk,{controller:m,appVersion:n,branding:a,playgroundConfig:s,title:i})})]})}),(0,A.jsx)(eh.TW,{className:"panel-resize-handle"}),(0,A.jsx)(eh.Zk,{defaultSize:h?33:68,minSize:h?15:40,className:"app-panel right-panel",children:(0,A.jsx)("div",{className:"panel-content right-panel-content",children:m.state.sessionViewState.connected?(0,A.jsx)(eW,{playgroundSDK:m.state.playgroundSDK,runtimeInfo:m.state.runtimeInfo,serverUrl:r,serverOnline:m.state.serverOnline,isUserOperating:m.state.isUserOperating}):(0,A.jsx)(em,{})})})]})})})}):(0,A.jsx)(eV,{children:(0,A.jsx)("div",{className:"server-offline-container",children:(0,A.jsxs)("div",{className:"server-offline-message",children:[(0,A.jsx)(d,{}),(0,A.jsxs)("div",{className:"server-offline-content",children:[(0,A.jsxs)("div",{className:"server-offline-icon",children:[(0,A.jsx)(uz,{className:"icon-background"}),(0,A.jsx)(uF,{className:"icon-foreground"})]}),(0,A.jsx)("h1",{children:l}),(0,A.jsx)("p",{className:"connection-status",children:u})]})]})})})}let hI=document.getElementById("root");if(!hI)throw Error("Root element not found");(0,u.createRoot)(hI).render((0,A.jsx)(c.StrictMode,{children:(0,A.jsx)(function(){return(0,A.jsx)(hC,{serverUrl:"",appVersion:"1.12.7-beta-20260914023554.0",title:"Playground",offlineTitle:"Midscene Playground"})},{})}))},82297(e){"use strict";if("undefined"==typeof sharp){var t=Error("Cannot find module 'sharp'");throw t.code="MODULE_NOT_FOUND",t}e.exports=sharp},8908(){},10329(){},79476(){},26122(){},17407(){},20200(){},21460(){},50902(){},3710(){},9140(){},58973(){},94504(){},13009(){},52801(){},16390(){},76970(){},83147(){},63612(){},57012(){},53244(){},25592(){}},l={};function A(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={id:e,loaded:!1,exports:{}};return s[e].call(r.exports,r,r.exports,A),r.loaded=!0,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:"beaced02",236:"a5d2c1b1",466:"42c0aeb1"})[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})},A.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),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","415"],()=>A(2170));c=A.O(c)})();
|
|
855
|
-
//# sourceMappingURL=index.
|
|
854
|
+
`,loading:!1,result:void 0,replayScriptsInfo:null,replayCounter:0,loadingProgressText:"",verticalMode:!1}};uG();let uV={result:void 0,dump:null,reportHTML:null,report:null,error:null},uY="data:image/png;base64,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",u$="data:image/png;base64,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";function u_(e){return"object"==typeof e&&null!==e}let u0=e=>({left:e.center[0]-4,top:e.center[1]-4,width:8,height:8});function u1(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 u2=(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)}},u3=(e,t)=>u2({left:0,top:0,width:e,height:t},e,t),u5=(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}},u4=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}),u7=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=[],(u4((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=u4((null==(t=s.executions)?void 0:t.filter(Boolean))||[]);for(let e=0;e<d.length;e++){let t=u6(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}},u6=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=u1({},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,m,g,y,v,b;let w=null==(b=a[t])?void 0:b.taskId;if(o=w,0===t&&(c=cu(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=cs(e),a=cu(e),c=e.uiContext,h=null==c?void 0:c.screenshot;if(c&&h){let{width:u,height:d}=u5(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,m;let g;r=u1({},u2(u0(t),u,d)),n=n={pointerLeft:t.center[0],pointerTop:t.center[1]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(n)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(n,e))}),i=r,l.push(s({type:"insight",context:c,camera:i,highlightElement:t,searchArea:(null==e?void 0:e.searchArea)??(null==(f=u_(g=null==e?void 0:e.log)&&u_(m=g.dump)&&"string"==typeof m.type&&u_(m.taskInfo)?g.dump:null)||null==(p=f.taskInfo)?void 0:p.searchArea),duration:400,insightCameraDuration:800,title:o,subTitle:t.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}=u5(e,r,n);l.push(s({type:"img",duration:900,title:cs(e),subTitle:cu(e),imageWidth:i,imageHeight:o,taskId:w},t))}}else if("Action Space"===e.type){let t=cs(e),i=cu(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:uY,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}=u5(e,r,n);l.push(s({type:"img",duration:500,camera:"Sleep"===e.subType?u3(a,c):void 0,title:t,subTitle:i,imageWidth:a,imageHeight:c,taskId:w},o))}else{let t=cs(e),i=cu(e),o=null==(g=e.recorder)||null==(m=g[e.recorder.length-1])?void 0:m.screenshot;if(o){let{width:a,height:A}=u5(e,r,n);l.push(s({type:"img",duration:900,camera:u3(a,A),title:t,subTitle:i,imageWidth:a,imageHeight:A,taskId:w},o))}}if("finished"!==e.status){let t=cs(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}=u5(e,r,n);l.push(s({type:"img",camera:u3(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?u5(a[a.length-1],r,n):{width:r,height:n};return l.push({title:"End",subTitle:c,type:"img",duration:200,camera:u3(u.width,u.height),taskId:void 0}),l};function u8(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 u9(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){u8(o,n,i,a,s,"next",e)}function s(e){u8(o,n,i,a,s,"throw",e)}a(void 0)})}}function de(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){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 dt(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 dr(e){if(!e)return"Unknown error";if("string"==typeof e)return e;if("object"==typeof e){var t,r;if(null==(t=e.dump)?void 0:t.error)return dr(e.dump.error);if(e.message)return String(e.message);if(null==(r=e.cause)?void 0:r.message)return String(e.cause.message)}try{let t=JSON.stringify(e);if(t&&"{}"!==t)return t}catch(e){}let n=String(e);return"[object Object]"===n?"Unknown error (an empty error object was received)":n}function dn(e,t){return e?Array.isArray(null==e?void 0:e.executions)?u7(e):e.tasks&&Array.isArray(e.tasks)?u7({sdkVersion:"",groupName:"Playground Execution",modelBriefs:[],executions:[e],deviceType:t}):null:null}function di(e,t){return(null==e?void 0:e.dump)?dn(e.dump,t):(null==e?void 0:e.reportHTML)?function(e,t){try{var r;let n=(r=function(e){let t={};for(let r of e.matchAll(/<script type="midscene-image" data-id="([^"]+)">([\s\S]*?)<\/script>/g)){let[,e,n]=r;t[e]=tr(n)}return t}(e),e=>{let t=r[e.id];if(!t)throw Error(`Missing inline report image "${e.id}"`);return t}),i=sk(JSON.parse(function(e){let t=iW(),r=e.lastIndexOf('<script type="midscene_web_dump"');if(-1===r)throw Error("No dump script found in HTML");let n=e.indexOf(">",r);if(-1===n)throw Error("No dump script found in HTML");let i=e.indexOf(t,n);if(-1===i)throw Error("No dump script found in HTML");return tr(e.substring(n+1,i))}(e)),n);return dn(i,t)}catch(e){return console.error("Failed to restore replay from playground report:",e),null}}(e.reportHTML,t):null}function da(e){return u9(function*(){var t,r,n;if(!e.dump&&(null==(t=e.report)?void 0:t.replayUrl))try{let t=yield fetch(e.report.replayUrl);if(!t.ok)throw Error(`Report replay request failed (${t.status})`);r=yield t.json(),n=e.report.url,e.dump=sk(r,e=>new URL("file"===e.storage&&e.path?e.path:`./screenshots/${encodeURIComponent(e.id)}.${i9(e)}`,n).toString())}catch(e){console.error("Failed to load playground report replay:",e)}})()}function ds(e){return"aiAct"===e||"runMarkdown"===e}function dl(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class dA{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){dl(this,"dbPromise",void 0),dl(this,"dbName",void 0),dl(this,"version",void 0),dl(this,"storeConfigs",void 0),this.dbName=e,this.version=t,this.storeConfigs=r,this.dbPromise=this.initDB()}}let dc=async(e,t,r,n)=>{try{return await e()}catch(e){return console.error(t,e),e instanceof Error&&"QuotaExceededError"===e.name&&n&&(console.log("Storage quota exceeded, running cleanup..."),await n()),r}},du=(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 dd(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 dp(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){dd(o,n,i,a,s,"next",e)}function s(e){dd(o,n,i,a,s,"throw",e)}a(void 0)})}}function dh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function df(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){dh(e,t,r[t])})}return e}function dm(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}let dg="playground_messages",dy="playground_results";class dv{saveMessages(e){return dp(function*(){yield dc(()=>dp(function*(){yield this.dbManager.clear(dg);let t=e.slice(-100);yield Promise.all(t.map((e,t)=>{let r=dm(df({},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(dg,n)}))}).call(this),"Failed to save messages to IndexedDB",void 0,this.messagesCleanup)}).call(this)}loadMessages(){return dp(function*(){return(yield dc(()=>dp(function*(){let e=yield this.dbManager.getAll(dg,!0);return 0===e.length?[]:Promise.all(e.map(e=>dp(function*(){let t=e.data,r=dm(df({},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 dp(function*(){yield dc(()=>dp(function*(){yield Promise.all([this.dbManager.clear(dg),this.dbManager.clear(dy)])}).call(this),"Failed to clear messages from IndexedDB")}).call(this)}saveResult(e,t){return dp(function*(){yield dc(()=>dp(function*(){let r=this.compressResultForStorage(t),n={id:e,data:r,timestamp:Date.now(),size:JSON.stringify(r).length};yield this.dbManager.put(dy,n)}).call(this),"Failed to save result to IndexedDB",void 0,this.resultsCleanup)}).call(this)}loadResult(e){return dp(function*(){return(yield dc(()=>dp(function*(){let t=yield this.dbManager.get(dy,e);return(null==t?void 0:t.data)||null}).call(this),"Failed to load result from IndexedDB",null))||null}).call(this)}compressResultForStorage(e){let t=e.result,r=null==t?void 0:t.dump;return t&&r?Array.isArray(null==r?void 0:r.executions)?dm(df({},e),{result:dm(df({},t),{dump:dm(df({},r),{executions:r.executions.map(e=>dm(df({},e),{tasks:this.compressExecutionTasks(e.tasks)}))})})}):r.tasks?dm(df({},e),{result:dm(df({},t),{dump:dm(df({},r),{tasks:this.compressExecutionTasks(r.tasks)})})}):e:e}compressExecutionTasks(e){return e.map(e=>{var t;return dm(df({},e),{uiContext:e.uiContext?dm(df({},e.uiContext),{screenshot:e.uiContext.screenshot}):e.uiContext,recorder:null==(t=e.recorder)?void 0:t.map(e=>dm(df({},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 dp(function*(){return(yield dc(()=>dp(function*(){let[e,t]=yield Promise.all([this.dbManager.count(dg),this.dbManager.count(dy)]);return{messageCount:e,resultCount:t}}).call(this),"Failed to get storage statistics",{messageCount:0,resultCount:0}))||{messageCount:0,resultCount:0}}).call(this)}cleanup(){return dp(function*(){yield Promise.all([this.messagesCleanup(),this.resultsCleanup()])}).call(this)}constructor(e="playground"){dh(this,"dbManager",void 0),dh(this,"namespace",void 0),dh(this,"messagesCleanup",void 0),dh(this,"resultsCleanup",void 0),this.namespace=e,this.dbManager=new dA(`midscene_playground_${e}`,1,[{name:dg,keyPath:"id"},{name:dy,keyPath:"id"}]),this.messagesCleanup=du(this.dbManager,dg,100),this.resultsCleanup=du(this.dbManager,dy,50)}}function db(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 dw(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){db(o,n,i,a,s,"next",e)}function s(e){db(o,n,i,a,s,"throw",e)}a(void 0)})}}function dE(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dx(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){dE(e,t,r[t])})}return e}function dk(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 dS{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 dw(function*(){try{this.checkStorageSpace()||(console.warn("Low storage space detected, clearing old data..."),yield this.handleQuotaExceeded());let t=e.slice(-this.maxStorageItems).map(e=>dk(dx({},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=>dk(dx({},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 dw(function*(){try{let e=localStorage.getItem(this.messagesKey);if(!e)return[];let t=JSON.parse(e);return yield Promise.all(t.map(e=>dw(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 dx({},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 dw(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 dw(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 dw(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"){dE(this,"messagesKey",void 0),dE(this,"resultsKey",void 0),dE(this,"maxStorageItems",50),this.messagesKey=`${e}-messages`,this.resultsKey=`${e}-results`}}class dC{saveMessages(e){return dw(function*(){this.messages=[...e]}).call(this)}loadMessages(){return dw(function*(){return[...this.messages]}).call(this)}clearMessages(){return dw(function*(){this.messages=[],this.results.clear()}).call(this)}saveResult(e,t){return dw(function*(){this.results.set(e,t)}).call(this)}constructor(){dE(this,"messages",[]),dE(this,"results",new Map)}}class dI{saveMessages(e){return dw(function*(){})()}loadMessages(){return dw(function*(){return[]})()}clearMessages(){return dw(function*(){})()}saveResult(e,t){return dw(function*(){})()}}function dj(){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 dv(t);return console.warn("IndexedDB not available, falling back to localStorage"),dj("localStorage",t);case"localStorage":if("undefined"!=typeof localStorage)return new dS(t);return console.warn("localStorage not available, falling back to memory storage"),dj("memory",t);case"memory":return new dC;case"none":return new dI;default:throw Error(`Unknown storage type: ${e}`)}}function dO(){if("undefined"!=typeof indexedDB)try{return indexedDB.open("test",1).onerror=()=>{},"indexeddb"}catch(e){}if("undefined"!=typeof localStorage)try{return localStorage.setItem("test","test"),localStorage.removeItem("test"),"localStorage"}catch(e){}return"memory"}function dP(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 dR(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){dP(o,n,i,a,s,"next",e)}function s(e){dP(o,n,i,a,s,"throw",e)}a(void 0)})}}function dM(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 dT(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 dN=e=>{var t;let r=e.highlightElements||[],n=e.highlightRect,i=null==(t=e.uiContext)?void 0:t.shotSize;if(!i)return(0,A.jsx)("div",{className:"blackboard",children:(0,A.jsx)("div",{className:"blackboard-main-content",style:{padding:"20px"},children:"No UI context available"})});let o=e.uiContext,a=i.width,s=i.height,l=c.useMemo(()=>(function(e){if(!(null==e?void 0:e.length))return[];let t=new Map;return e.forEach((e,r)=>{var n;if(!(null==e?void 0:e.center))return;let i="content"in e&&e.content?e.content:"description"in e&&e.description?e.description:void 0,o=["id"in e?e.id:"",i||"",(n=e.center,`${n[0]}:${n[1]}`)].join("|");t.has(o)||t.set(o,{key:"id"in e&&e.id||`${o||"highlight"}-${r}`,label:i,center:e.center})}),Array.from(t.values())})(r),[r]),u=c.useMemo(()=>{var e;return(null==o||null==(e=o.screenshot)?void 0:e.base64)||""},[o]),d=l.map(e=>u0(e)),p=null;return 1===d.length?p=(0,A.jsx)("div",{className:"bottom-tip",children:(0,A.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d[0])]})}):d.length>1&&(p=(0,A.jsx)("div",{className:"bottom-tip",children:(0,A.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(d)]})})),(0,A.jsxs)("div",{className:"blackboard",children:[(0,A.jsxs)("div",{className:"blackboard-main-content",style:{width:"fit-content",maxWidth:"100%",position:"relative"},children:[u&&(0,A.jsx)("img",{src:u,alt:"screenshot",className:"blackboard-screenshot",draggable:!1}),(0,A.jsxs)("div",{className:"blackboard-overlay",style:{aspectRatio:`${a}/${s}`,"--ui-scale":Math.max(1,Math.sqrt(a/1920))},children:[n&&(0,A.jsx)("div",{className:"blackboard-rect blackboard-rect-search",style:{left:`${n.left/a*100}%`,top:`${n.top/s*100}%`,width:`${n.width/a*100}%`,height:`${n.height/s*100}%`},children:(0,A.jsx)("span",{className:"blackboard-rect-label",children:"Search Area"})}),l.map(e=>{let t=u0(e);return(0,A.jsx)("div",{className:"blackboard-rect blackboard-rect-highlight",style:{left:`${t.left/a*100}%`,top:`${t.top/s*100}%`,width:`${t.width/a*100}%`,height:`${t.height/s*100}%`}},`${e.key}-rect`)})]})]}),(0,A.jsx)("div",{className:"bottom-tip",style:{display:e.hideController?"none":"block"},children:p})]})};var dD=r(49783),dB=r(37294),dz=r(14985),dF=r(31090),dL=r(92946),dU=r(60090),dK=r(53776);let dQ=e=>{let{text:t,disabled:r=!1,speed:n=5,className:i="",colorTheme:o="blue"}=e,a={"--animation-duration":`${n}s`},s=`theme-${o}`;return(0,A.jsx)("div",{className:`shiny-text ${s} ${r?"disabled":""} ${i}`,style:a,children:t})},dJ=(0,A.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,A.jsx)("br",{}),"Please run one of the commands under the midscene project directory:",(0,A.jsx)("br",{}),"a. ",(0,A.jsx)("strong",{children:"npx midscene-playground"}),(0,A.jsx)("br",{}),"b. ",(0,A.jsx)("strong",{children:"npx --yes @midscene/web"})]}),dZ=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:dJ;return(0,A.jsx)("div",{className:"server-tip",children:(0,A.jsx)(V.A,{message:"Playground Server Not Ready",description:e,type:"warning"})})},dX=(0,A.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,A.jsx)(dQ,{disabled:!0,text:"The result will be shown here"})});var dq=JSON.parse('{"content":[{"content":"Swag Labs","rect":{"left":895,"top":38,"width":130,"height":32,"zoom":1},"center":[960,54],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"d6c5e2f100","attributes":{"nodeType":"TEXT Node"},"indexId":0},{"content":"Username","rect":{"left":814,"top":154,"width":292,"height":40,"zoom":1},"center":[960,174],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'a9021f480e\']","id":"a9021f480e","attributes":{"class":".input_error.form_input","placeholder":"Username","type":"text","data-test":"username","id":"user-name","name":"user-name","autocorrect":"off","autocapitalize":"none","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":1},{"content":"Password","rect":{"left":814,"top":209,"width":292,"height":40,"zoom":1},"center":[960,229],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'580f3b761d\']","id":"580f3b761d","attributes":{"class":".input_error.form_input","placeholder":"Password","type":"password","data-test":"password","id":"password","name":"password","autocorrect":"off","autocapitalize":"none","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":2},{"content":"","rect":{"left":814,"top":253,"width":292,"height":45,"zoom":1},"center":[960,275],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'3e1faf0fd6\']","id":"3e1faf0fd6","attributes":{"class":".error-message-container","nodeType":"CONTAINER Node"},"indexId":3},{"content":"Login","rect":{"left":814,"top":303,"width":292,"height":49,"zoom":1},"center":[960,327],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"[_midscene_retrieve_task_id=\'6db0b64062\']","id":"6db0b64062","attributes":{"type":"submit","class":".submit-button.btn_action","data-test":"login-button","id":"login-button","name":"login-button","value":"Login","htmlTagName":"<input>","nodeType":"FORM_ITEM Node"},"indexId":4},{"content":"Accepted usernames are:","rect":{"left":570,"top":435,"width":221,"height":21,"zoom":1},"center":[680,445],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"5ca36a5942","attributes":{"nodeType":"TEXT Node"},"indexId":5},{"content":"standard_user","rect":{"left":570,"top":479,"width":109,"height":19,"zoom":1},"center":[624,488],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"fd2fe54174","attributes":{"nodeType":"TEXT Node"},"indexId":6},{"content":"locked_out_user","rect":{"left":570,"top":503,"width":126,"height":19,"zoom":1},"center":[633,512],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"403daee75b","attributes":{"nodeType":"TEXT Node"},"indexId":7},{"content":"problem_user","rect":{"left":570,"top":527,"width":101,"height":19,"zoom":1},"center":[620,536],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"2b34f1e161","attributes":{"nodeType":"TEXT Node"},"indexId":8},{"content":"performance_glitch_user","rect":{"left":570,"top":551,"width":193,"height":19,"zoom":1},"center":[666,560],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"6ae63a4d9e","attributes":{"nodeType":"TEXT Node"},"indexId":9},{"content":"error_user","rect":{"left":570,"top":575,"width":84,"height":19,"zoom":1},"center":[612,584],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"76030282f1","attributes":{"nodeType":"TEXT Node"},"indexId":10},{"content":"visual_user","rect":{"left":570,"top":599,"width":92,"height":19,"zoom":1},"center":[616,608],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"f34b057726","attributes":{"nodeType":"TEXT Node"},"indexId":11},{"content":"Password for all users:","rect":{"left":960,"top":435,"width":221,"height":21,"zoom":1},"center":[1070,445],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"e693f608cd","attributes":{"nodeType":"TEXT Node"},"indexId":12},{"content":"secret_sauce","rect":{"left":960,"top":477,"width":101,"height":19,"zoom":1},"center":[1010,486],"page":{"page":{"_isDragging":false,"_timeoutSettings":{}},"pageType":"puppeteer"},"locator":"","id":"cde9de9828","attributes":{"nodeType":"TEXT Node"},"indexId":13}],"size":{"width":1920,"height":1080},"screenshotBase64":"data:image/png;base64,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8xecP25c2/qkSycuun/hzOuuG3nIiEcWLlz56xfbBgYAAIBPMwEagO3AQ4sW9evb9/h3q2tdXd2EsWN/8eCDlbeXfPOKsy+84OBhww4YMmTrb108YUJ9fd3Io46ccMklZ5xy6ueHD6+s9+nd1Kd3U9thu/bdpbFHQ1EUpVJp3uzZzzz/3NAv/uV5Ey+dMHbsgP79t23gqqqqAf37V1VVVd7W19f1/9znKq//dKedpl151Xev/96Bo7647De/mTJpUmW9saHhntvn/tfLr3xp9PGTp0z5m+OOG3/m2MpHN98255Irrjjh6GMuu+jCmbfOOXz06AcffnjbBgMAAIBPki04ANgObNq0afYP5559+uk/vvvuoihOPOaYt9ata9vxefkrLxdFsf7tt2u6dNn6W2vWvrnnwD0+22/Xp5Y8PeywUa2trR9+leqqqjETxv/n88/X1NQseeaZR375y6OOOOKaG25o359lwzvvbNmyZff+/ZcuW3b131+3Q8+epVKptbX1C8MPbm1tnXvXneVyefkrL9/xk5+cfPzxN82eVRTFaytWvPXWuqIofnD77Xf/9KftOw8AAADkCNAAbB9u/dGPLvzyOQcNPeDRxY+PGzPmlttu27Jly4d/ZcYPbimXSzdMndqvb99Fjz9+2ZWTX1q+/EOO39zcvN/gwdOnTOnevfuGDe/s1NT06muvtffPUbyxZs3Y888//eSTr7rs8tdXrZo1d26lMg8a+Bc79Oz5DzfNbDtyS3Pze767+Mkn230eAAAAyBGgAdg+rFq9+q5/vHfcmDFda2t3auoz9647P/IrfZqarp0x4+rrruvT1HTjtGu+dtFXzrrwgqIoVq5evc+gQZVjamtrBw0ceO+CBZXjr7zssr867rjnli6tbC29zdO+tW7dpk2b+u6888pVqyp7QBel3z29cIfGxueWvnD6+HO6VFePOvTQ22fe/PN/+edfL1u29MVlL7z44hEnjK4cVl9XX1fX9b3n/Yh7uAEAAODTxR7QAGw3Zt465/BRo75+8cVz75y3bv36tvVyuVwul4uiKJXL5XK59G7qnTxx4pRJk+rr6tesXbvmzbUtLS2V9V88+OCIgw46eNiwno2NE8+/4E+6daus79q3b9farpUzHHX4EYcceFDbJUqlUrlcLhWl37149xK/z8aNGx9+7LFxY8bs0Nh44P77/+2J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QoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoCE6ZwSAAAInUlEQVQGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIOJ/AFTldxexlFiCAAAAAElFTkSuQmCC","screenshotBase64WithElementMarker":"data:image/png;base64,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vn9Zpk27K62tozJ7ztxMn/5g9t9vdGruvufebGqvPQen5nOf/1K+9e2L06mpqTE77NAv+++3X0495eTstNNOebVd8J9fy/cvuSwvpl+/fvnhD76fTgfsv1923nmnPPXUghz+pqNyyCFvSEPXrrlj6rQ899zz+dAH359vf+fivJj9998v69evz2lnvCvDhg5J//79M/ePf8xTTy1IfX19vvPtr6d//x2yse2375NzPvyhfO0b38qnJ3w2l1z2g4wZ84YsXbI00+68MytWrMzee++V17/+oAAAALDtqA8AAADbjPr6+vznBV/Orrvskttu+02m3XlX7pg6LTU77NAvJ580Pp/8xL+nqakxmxq178jMn/9kRreOysZGj25NTV1dkZEjhmdTp/3TKVm3bl2+9/3LMvPhWZn58Kz06NEjb37TEfnSFz+bL37pq7n7nnuzqeOPPy5fvfCirF69JnvvtWcqlUqq1WqWr1iRRx+dlwcffCg/nXh1fnLl5Rk6dEheTU8//UyefvqZvJiVq1ZnY926dcvEn/w4Hz7n3Myc+XBuvPGm1AwevEc+8R8fT+uoUfn2dy7Oixm8x+4596Mfzoc/8i+597778/Cs2amrKzJy5Ii8591n5vUHH5QX8oEPvDfb990+3734kjz11IL87Gc/T0337t0zfvwJ+cynPpGGhoYAAACw7ags3rC6GgAAALZJq1atyh//9EgG7rxT+vXrl83tySf/kuUrVmTI3nunrq7I/+RTn/lsfvazn+ezEz6dU045ORtbt25dzj3v47nttt/kiMP/IRd/95vZWqxZsyZ//OMj2WWXgenTp3derjVr1uZPf/pTXve616W5uWdeio6Ojvz1r4uyYMGC9OnTJ7vuukuKoggAAADbnvoAAACwzerevXtGt47KlrLLLgPzUt1yy22pOfbYo7OphoaGfOB9Z+W2236TeY89lq1JU1NTRo0amVeqqakx++47Mi9HURQZMKB/BgzoHwAAALZtRQAAAGArtF2vXqmZPWduXsjDD89KzfB99gkAAADwX+oDAAAAW6Gjj/7HfOe738v73n92xh1zVIYP3yev221Q5sz9Y+6774Hc/pvfpq6uLm95y7EBAAAA/kt9AAAAYCv0kQ9/MGvWrMlPJ/4sP7v6mvzs6muysZ49e+Rb3/ha3vCGgwMAAAD8l/oAAADAVqhSqeTf/+1f84EPvDd3/GFqnn7mmSxduiyDBu2avffeK4P32CONjQ0BAAAA/j/1AQAAgK1YS3Nzxo07OgAAAMD/rggAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEJ9AAC2pPaOpK092dCRakdHAAAAyqhSFEl9kXStS+qKAABsKfUBANhS1qxPZUNHGhsb06WpS+rq6gIAAFBG7e3tWb9+fdauXptqfZE0dQkAwJZQHwCALWFVW7rU1adHr+YAAACUXV1dXerq6tLY2JiVq1Zl/aq2pHvXAABsbkUAADa3NevTpa4+Pbp3DwAAwLamR/fu6VJXn6xZHwCAza0IAMDm1N6RyoaO9OjePQAAANuqHt27p7KhI2nvCADA5lQEAGBzamtPY2NjAAAAtnWNjY1JW3sAADanIgAAm9OGjnTp0iUAAADbui5duiQbOgIAsDkVAQDYjKodHamrqwsAAMC2rq6uLtWOjgAAbE5FAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohfoAAABsTSqVALymVKsBAADYWtQHAABga1OtBuA1oVIJAADA1qQIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCfQAAADaXSiUAAAAAbDlFAAAAAAAAACiFIgAAAFtaS0uqjz2WjB2bl2L9+vX55je/meXLl2dT3/ve9/L0008HAAAAgKQIAADAltTSkup116Wy2255qarVap566qm0t7dnUwsXLsy6desCAAAAQFIfAACALWXs2GTSpFQCAAAAwOZQHwAAgC1l8uTk619PJk1KJk/Oq23x4sW59tprs2DBguywww45+OCDM2rUqHS66667cv/99+f555/PLrvskje96U0ZOHBgaiZOnJgRI0Zk7ty5mT17ds4777zccMMNGTFiRB566KE88sgj6dmzZ4444oiMHDkyne6+++5MnTo1K1asyIABA3LMMcdk4MCB6ejoyEUXXZSjjjoqt912W55//vnsvvvuOfnkk3PHHXdk+vTpqVQq2X///XPEEUek07x58/L73/8+Tz31VPr27ZuDDjooo0ePDgAAAMBLUR8AAIAtZdCgZP78ZOzYbA7XX399+vXrl3e+851ZsGBBLr/88uy+++5pbm7OnXfemXvuuSennnpqWlpaMmPGjFx22WX5yEc+kt69e2fx4sWZNGlSxowZk3e9611pamrK4sWLc91112X8+PF561vfmvvvvz8TJ07MwIED07t378yePTu//vWv8573vCc77rhj7r777lx22WX59Kc/nZpFixbl9ttvzzve8Y5s2LAhEydOzIUXXpghQ4bknHPOycKFC/PjH/84AwYMyLBhw/KXv/wlEydOzIknnpg99tgj8+bNyzXXXJOuXbtm+PDhAQAAAPjfFAEAANhS5s/P5lStVvPss89m8eLFGTRoUD75yU+mR48eqbnrrrtyxBFHpLm5OdVqNSNHjswOO+yQWbNmpdOQIUMyduzYDBw4MEVRpGafffbJkCFD0tjYmDe84Q3p0aNHnnzyydQMGDAgZ599dnbcccesWLEiQ4YMSVtbWxYuXJhORxxxRHr37p1+/fpl9OjRWb16dY477rh069Yte+yxRwYPHpzHH388NdOnT88+++yTXXfdNevXr88uu+yS1tbWPPDAAwEAAAB4KeoDAACwlSuKIkVRZMOGDdlYtVrNhg0b0qVLl9ScfPLJue222/KDH/wgGzZsSGtra4488sjU/PWvf80vf/nLtLS0ZGNtbW3p1L9//2xqhx12SKdKpZK+fftm5cqVqalUKvnFL36RZcuWpaWlJZVKJTVr1qxJp759+6bT9ttvn549e6axsTGdtt9++yxbtiw1Tz/9dB577LE88cQT2VivXr0CAAAA8FLUBwAAYCtXX1+fAQMGZOHChenbt286Pffcc6lUKunfv386OjqyZs2avOUtb0lRFHnuuedy2WWXpW/fvjnwwAPTt2/fHH/88dlzzz3Tqb29PZVKJZ2KosimKpVKXsztt9+eXr165X3ve19q1q5dmwkTJmRjRVFkY5VKJS+mX79+2XXXXXPUUUelU0dHRwAAAABeqiIAAACvASNGjMgtt9ySRYsWpWbVqlWZNGlShg4dmrq6ulQqlVx66aWZOnVqarbbbrt069Yt7e3tqRk1alRuueWWrFq1KjWPP/54JkyYkOeffz6v1Pr167N+/fpUq9V0dHTkxhtvTKVSySs1YsSI3HfffXnqqadSs3z58lxwwQWZPn16AAAAAF6K+gAAALwGvPGNb8yGDRvy3e9+Nx0dHeno6Mjw4cNz4oknpqZSqeS0007LxIkTM3ny5HR0dGTXXXdNa2trag4//PCsXbs2F1xwQerr69PR0ZG3ve1t6du3b16pN7/5zbn88svzuc99Lh0dHdl///3Tv3//vFJ77LFHxo0blx//+MepVqtZvXp1Dj300IwePToAAAAAL0V9AAAAXiPe9KY35U1velOWLVuWnj17piiKbGyXXXbJxz/+8axcuTL19fVpbGxMp0qlknHjxuXoo4/OihUr0tLSko198IMfzKY++MEPZlPvfe97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3LuXoyeO4xZcsSKB5ctzN0d+/pl8m437VbFCBZ576mkSkhLZtW8fQYGB+JYqxelz50jPyKBW9er4+fpyN7du3ebnX07g5elFo/r1+D0XL18m6eZN7kdxb2/atmlDGb/S7D6wn8tXr9KkUSNu3brNz7+cwM3L04snW7agauXKnDl3ngOHD5GXn8+dqlSqROcXXsBms3PyzBl27d+H0+nExTAMmjdpwt3cSEgg5upVCioXEMATjzfH38+Pn45GceLUKZxOJ3fzWMNGWCxmjhw7hsPhQET+2MUjUZisnoiIiIg8LKYUW44TERERkYfEmZ5LjaZNkP+vj5a8T6cOHVj+yUpCQkMRERH5b1azWjVK+/nR65VX6PbSy1y4dImW7doiIiL/08UjUZisnoiIiIg8LBZERERERERERP4N40aMpFOHDrjt3r8fERERERER+c+wICIiIiJ/uQvRFzlwuDRXrsYiIiLy3+7ipWgOHjmMS0xsLPOXLEZERERERET+MyyIiIiIyF9uwdKlLFi6FBERkcLg3Q8+4N0PPkBERERERET+8wxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERET+cmX8/WncoAEPk4eHB61btMBsNiMiIv+ddm/ZQonixRERERERERG5VwYiIiIi8pd76okneG/2HB4mfz8/Nq2KwMvTExER+e9Txt+fOrVqYzKZEBEREREREblXFkRERESEzh07Uqt6deYuXIiIiBReJpOJqWPH0bZNG0oUL86Pe/cwY/580jMycAsKDGTGpEm0bNqM+MRENm7ZzPsrVuBmNpuZOnYcL7Rti2EYfPvDDyz+cDk3k5Nx6diuHZNGv0VKagpTQ0OZGzKNxxo2ZM0XXzBm6hRcggIDmTFpEi2bNiM+MZGNWzbz/ooVuG1aFUGDunUxmUx8t3ETdoeDK7FX6TV4MPeqjL8/U8eO46lWrUhJTWXL9m9ZsHQpBbVr8wyTRo+iaqXKXPvtN2YveJdvvv8elzatW9O/V29eGzQQtwG9+xAcVJGQ0FDcenTuTP9evQkKDGTn3j18+MknnDxzBregwEBmTJpEy6bNiE9MZOOWzby/YgUiIiIiIiLycFgQEREREZo/1oTbeXmIiEjh1rFtOzq2a8cr/d7AZrOxaO5chvUfwDuLFuLiY7WyaVUEW3fsYFZYGJWDggkNmYrNZmdZ+Me4zJs2nRbNmjFi4gTy8vOZ/NZbTJ8wkRETJ+Cy58ABLkRfYt3KlaxcupR1mzYxc/48EpKScPGxWtm0KoKtO3YwKyyMykHBhIZMxWazsyz8Y1zemvI2geXL8/WazxkydgxZ2dnk5eVxP8YOH46XlydPvdiRsmUCWBcezpFjx9h78CAuwRUrsmr5coaOG8vuffvo+tJLLJg1m+07d+JwOChRvASVgoMoqLSfH+XLlsWtU4cOvDNtOqMnT+Z89EV6vvIKHy1eQqvn25OXn4+P1cqmVRFs3bGDWWFhVA4KJjRkKjabnWXhHyMiIiIiIiIPngURERGRQsxkMjF17DjatmlDieLF+XHvHmbMn096RgYuHZ57jukTJlKlUiVS09J4qlUrXEJCQ/lx315crCVLEjo1hDatW2OxWNi1bx/jpoWQkZmJy6C+fTGZTJQtE0CXF1/kt/gbhEes5ouvv8KtSaNGTB03nnqPPMKps2fZf+gnCjIMg9FDhvJa1674ly7NqbNnGTt1ChcuXcIlsHx51q38hNu3bzNj/jx6du1G+2ef4UZ8As2efQYXP19fFsyaTcvHH+dGfDzhqyO4H21at6Z/r968NmggbgN69yE4qCIhoaG4mEwmpo4dR9s2bShRvDg/7t3DjPnzSc/IwC0oMJAZkybRsmkz4hMT2bhlM++vWIHbV6vXUNrPj4h1a7FYijC8f3/K+PtTp0VzEhITERF5mNIy0rFarVSrXJmfoqLoNXgwnsWK4fZki5Y4nU4i1q/DMAxir8URuXEjr3bpwrLwj7GYzXTv3ImXe/Xi2C+/4DJw1ChaNG2KYRg4HA4yMjPJyMwkOSWFU+fOEvb++xT0ZIuWOJ1OItavwzAMYq/FEblxI6926cKy8I9xiY2Lw2az4RJz9SoZmZncr7T0DOrWfoRKFYM4ceokzZ59BqfTiVtGZiatOzzP+ehofKxWNmzezLg3R9Ds0cf4KeoI9+LVrl1ZuOyffP3tN7hMf+cdDh4+QokSJUhOSeHJFi1xOp1ErF+HYRjEXosjcuNGXu3ShWXhHyMiIiIiIiIPngURERGRQqxj23Z0bNeOV/q9gc1mY9HcuQzrP4B3Fi3EZe/Bg7w2aCBTxowlOyeHxR8ux+VGfDxuc0OmUbFCedp17Yq3txcfzA+j64svsXLNalxK+/kxrF9/Pt+4gZ6DBtK6RUuWhoWxc89uUtLSKF+2LJ9/9DFbtm9nxvx5tG7RgrHDh3P5ylXcenTuzODXX6d7/34kJiXx9pixTBg1iv4jRuCSkJhI32FDmTJmLB8tXsL2nTt5beBA0tIzcIv86GNycnPpP+JNygWUZcLIkdyPEsVLUCk4iIJK+/lRvmxZ3Dq2bUfHdu14pd8b2Gw2Fs2dy7D+A3hn0UJcfKxWNq2KYOuOHcwKC6NyUDChIVOx2ewsC/8Yl1GTJ/Fi+/aMHzGSU2fPMm5aCIlJN0lJSUFE5GHbe/AgYUuWMHroMFZ92ICLl6KZOT+MXfv34VKndi18S5Xis2XLKchus+FSKTgYL08vzpw/j1taejrffP89d3P0+HHuVKd2LXxLleKzZcspyG6z8SAt/ehfGIaJD+bPp2KFChw4coRJM2dwJTYWl7T0dCa/9RZPt2qNzWbDZrfj7e1NubIB3Ku6tWrz4cpPcHM6nWzf+QNudWrXwrdUKT5btpyC7DYbIiIiIiIi8nBYEBERESnE0jLSsVqtVKtcmZ+ioug1eDCexYrhlpmVRWZWFhmZmWRmZXEpJoY7ffCvFSQkJZGdk0NxLy+2bN/Oi+3bs3LNatwys7KYPGsWdrudU2fP0qd7d55+8kk2fP01T7ZsicPhYNy0EBwOB8dPnuTRBg2pWKECbvt++ok2L7/Eb/Hx+JQsyZovvmD9ypUUK1aMW7dukW+zcSkmhl+vxVG3dm1GTZ5EQUGBgTRu0IDWHZ7n7IULuJTysRI6NYQHKS0jHavVSrXKlfkpKopegwfjWawYbk+2aInT6SRi/ToMwyD2WhyRGzfyapcuLAv/GJfYuDjOR0djLVmS4ePH8Vt8PCIif5UK5cqxaesWwldHUNzbm9FDh7I0LIy6LVvgdDqJvhzDxcuXad+tK25enl54ehbD5ddr18jLz6dKcDDnLl7EpWjRolSvUoVzFy/icDgoyOl0cqfoyzFcvHyZ9t264ubl6YWnZzEepIAyZViwdCmh771HQJky/DPsXd5+awwDR4/C5flnn+WpJ1rx5AsdyM7JwWw2c/XEL7jdTEkmwL8MZrMZu92Oy6MNG5CZlYXbpSsxVKlUiR/37cWtZrVqXL9xg6zsbKIvx3Dx8mXad+uKm5enF56exRAREREREZGHw0BERESkENt78CBhS5Yweugwon8+xo4NG2hUrz73w7eUL58s/SdRO39kc+Ra+vXqRbmAAAo6GHUEu92O2+UrVwgsVx6XGlWr8VNUFA6HA7f9h36ioPx8G6FTQzixdx+bI9eyKDQUT09PrCVLcqeo48e4U42qVUlNS+PshQu47T90iAdt78GDhC1Zwuihw4j++Rg7NmygUb36uNWpXQvfUqX4bNlyVi3/kFXLP6R7p8447Hbu9Ft8PL/FxyMi8ld6sV17voyIoIy/Pzm5uSTdvInD6cRtz8EDVAkO5o2ePSlisVAuIIAtkZG81P55XPLy8vh+1y5Cp4bg5+uLj9VK2MyZTBw1GofDgYvJZMIwDEwmEyaTCcMwMJlMuO05eIAqwcG80bMnRSwWygUEsCUykpfaP09BNxISSExK4qXnO1DKx4fi3t7cjxkTJzJv+nS8PL1IS08nLSMdh8OBW/UqVTGZTBiGQdGiRQkZNx4PDw/cDh89imEYDOjdG28vLzp16ECr5i0oaOuOHYwaMoQ6tWpRtGhR+vTowReffobT6cRlz8EDVAkO5o2ePSlisVAuIIAtkZG81P55RERERERE5OGwICIiIlKIVShXjk1btxC+OoLi3t6MHjqUpWFh1G3ZAqfTyf/GZDLxTkgIKz9fw2eRkbiMGjKE17p0pSCHw8nvufJrLJ1eeIGCGtdvQEEjBw8mJzeHxk+2xma381jDRmzfsIG7cTr5H678+iulfHwIrliR2Lg4XBrXb8D9uJmSTIB/GcxmM3a7HZdHGzYgMysLtwrlyrFp6xbCV0dQ3Nub0UOHsjQsjLotW+B0Oom+HMPFy5dp360rbl6eXnh6FuNOTqcTEZG/Wvia1TSoW5cD327HYrGQk5PD8AnjcTqduCQmJdFjQH+Whr3LnLenkJWdzZfbtvJp5Oe4DRs3lo8WL+HU/gPY7XYOHDnCuJCpuM0NmcbAPn1wWfLOPJa8M48Vn37KlDmzcUlMSqLHgP4sDXuXOW9PISs7my+3beXTyM8pyOFwMP/9JYweOoRFoaFcuHSJlu3acq9mzJ/PvGnTOXvoEBazmfPR0fQfMQK3iHVref7ZZ7l49Geys7NZ/9VX/Lh3L275Nhszw+YzavAQZk1+mxOnTzF34Xs0rFcPt3999hllywSwde06PDw8OHPuHCMmTiA7JweXxKQkegzoz9Kwd5nz9hSysrP5cttWPo38HBEREREREXk4LIiIiIgUYi+2a0/3zp14pV8/biYnk3TzJg6nkzudOH2KXt1eoVJQEKlpaeTk5JBvs2E2DCpXCsYwDFxqVqvGwD59yM7O4V4dOHyYedOmM3LwYFatXUur5s155h//IO76ddyqV61CSkoqJpOJUj4+TBk7ljsZhoHJZMLFMAycTidOpxOXmKtXiY2LY8qYscxe8C4B/mV4o2dP7sfho0cxDIMBvXuzev16nnvqKVo1b8E333+H24vt2tO9cyde6dePm8nJJN28icPpxG3PwQPMmTKFN3r2ZPW6dZT282P1in+x5osvWLlmNS6GYWCYDFwMw8DF4XAgIvJXyMvLY8jYMZjNZvz9ShOfmMCdjp88Sct2bfHz9SUtPR273U5B2Tk5vDZoIF6eXhiGiazsbAqaPGsmk2fN5I8cP3mSlu3a4ufrS1p6Ona7nbv5LDKSzyIjudOw/gOYNXkyd7p85QrNnn0Gl0sxMXR9vS9enl4U8yhKSloaBSWnpvJcl86U9vMjMyuL27dvc6dPP/+cVWvXUspqJTk1lbuZ9W4YoQvfw8dqJTklhTsdP3mSlu3a4ufrS1p6Ona7HREREREREXl4LIiIiIgUYuFrVtOgbl0OfLsdi8VCTk4OwyeMx+l0UtCW7dtp+3QbDm7fQdGiRek/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 dH=e=>{let{uiContextPreview:t,setUiContextPreview:r,showContextPreview:n}=e;return n?(0,A.jsxs)("div",{className:"form-part context-panel",children:[(0,A.jsx)("h3",{children:"UI Context"}),t?(0,A.jsx)(dN,{uiContext:t,hideController:!0}):(0,A.jsxs)("div",{children:[(e=>{switch(e){case"finished":case"passed":case"success":case"connected":return(0,A.jsx)("span",{style:{color:"#00AD4B"},children:(0,A.jsx)(dD.A,{})});case"finishedWithWarning":return(0,A.jsx)("span",{style:{color:"#f7bb05"},children:(0,A.jsx)(dB.A,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,A.jsx)("span",{style:{color:"#FF0A0A"},children:(0,A.jsx)(dz.A,{})});case"pending":return(0,A.jsx)(dF.A,{});case"cancelled":case"skipped":return(0,A.jsx)("span",{style:{color:"#8c8c8c"},children:(0,A.jsx)(dL.A,{})});case"running":return(0,A.jsx)(dU.A,{});default:return(0,A.jsx)(dK.A,{})}})("failed")," No UI context",(0,A.jsx)(W.Ay,{type:"link",onClick:e=>{e.preventDefault(),r(dq)},children:"Load Demo"}),(0,A.jsx)("div",{children:"To load the UI context, you can either use the demo data above, or click the 'Send to Playground' in the report page."})]})]}):null};var dW=r(54291);let dG=e=>{let{className:t="",playgroundSDK:r,onVerify:n,agentOptions:i,onAgentOptionsSave:o,configModalClassName:a,configModalWidth:s,envTextareaAutoSize:l,envTextareaMinRows:c}=e,{config:u}=X();return Object.keys(u||{}).length>=1?null:(0,A.jsxs)("div",{className:`env-config-reminder ${t}`,children:[(0,A.jsx)(dW.A,{className:"reminder-icon"}),(0,A.jsx)("span",{className:"reminder-text",children:"Please set up your environment variables before using."}),(0,A.jsx)(eu,{agentOptions:i,configModalClassName:a,configModalWidth:s,envTextareaAutoSize:l,envTextareaMinRows:c,mode:"text",onAgentOptionsSave:o,onVerify:n,playgroundSDK:r,showTooltipWhenEmpty:!1})]})};var dV=r(67062),dY=r(36130),d$=r(12297),d_=r(15862),d0=r(17615),d1=r(52107),d2=r(74544),d3=r(91235),d5=r(61879),d4=r(99876),d7=r(11269);let d6=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,A.jsx)("path",{fill:"currentColor",d:"M1.333 13v-2.5a.667.667 0 0 1 1.334 0V13c0 .184.149.333.333.333h2.5a.667.667 0 0 1 0 1.334H3c-.92 0-1.667-.746-1.667-1.667m12 0v-2.5a.667.667 0 0 1 1.334 0V13c0 .92-.746 1.667-1.667 1.667h-2.5a.667.667 0 0 1 0-1.334H13a.333.333 0 0 0 .333-.333m-12-7.5V3c0-.92.747-1.667 1.667-1.667h2.5a.667.667 0 0 1 0 1.334H3A.333.333 0 0 0 2.667 3v2.5a.667.667 0 0 1-1.334 0m12 0V3A.333.333 0 0 0 13 2.667h-2.5a.667.667 0 0 1 0-1.334H13c.92 0 1.667.747 1.667 1.667v2.5a.667.667 0 0 1-1.334 0M5.667 10.333h4.666V5.667H5.667zm6 .167c0 .644-.523 1.167-1.167 1.167h-5A1.167 1.167 0 0 1 4.333 10.5v-5c0-.644.523-1.167 1.167-1.167h5c.644 0 1.167.523 1.167 1.167z"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},d8=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,A.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M11.333 13.667 14.667 8l-3.334-5.667H4.667L1.333 8l3.334 5.667z"}),(0,A.jsx)("path",{stroke:"currentColor",strokeLinejoin:"round",strokeWidth:1.333,d:"M8 9.667a1.667 1.667 0 1 0 0-3.334 1.667 1.667 0 0 0 0 3.334Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function d9(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 pe(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 pt(e,t){return{left:0,top:0,width:e,pointerLeft:Math.round(e/2),pointerTop:Math.round(t/2)}}function pr(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=pt(i,o);e.camera=pe({},t),e.prevCamera=pe({},t),e.pointerMoved=!1}}function pn(e,t){return Math.abs(e.pointerLeft-t.pointerLeft)>1||Math.abs(e.pointerTop-t.pointerTop)>1}function pi(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 po(e,t,r,n,i){let o=pt(r,n),a={img:"",imgW:r,imgH:n,camera:pe({},o),prevCamera:pe({},o),prevImg:null,insights:[],spinning:!1,spinningElapsedMs:0,pointerImg:uY,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){pr(e,t,n,i);let o=t.startFrame+t.durationInFrames;t.cameraTarget?(e.prevCamera=pe({},e.camera),e.camera=pe({},t.cameraTarget),e.pointerMoved=pn(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(pr(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=pe({},e.camera),e.camera=pe({},t.cameraTarget),e.rawProgress=Math.min((r-n)/(t.cameraPhaseFrames||1),1),e.pointerMoved=pn(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=pe({},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=pe({},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 pa(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 ps(e,t){if(!Number.isFinite(e)||e<=0)throw Error(`${t} must be a positive finite number`)}function pl(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 pA(e){return ps(e,"imageWidth"),pl(Math.max(1,Math.sqrt(e/1920)))}function pc(e){let t=e.height;return{size:t,centerOffset:t/2}}let pu=e=>{let{frameMap:t,autoZoom:r,frame:n,width:i,height:o,fps:a}=e,{scriptFrames:s,imageWidth:l,imageHeight:u}=t,d=(0,c.useMemo)(()=>po(s,n,l,u,a),[s,n,l,u,a]);if(!d.img)return null;let{img:p,imageWidth:h,imageHeight:f,prevImg:m,camera:g,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+(g.pointerLeft-y.pointerLeft)*P,T=y.pointerTop+(g.pointerTop-y.pointerTop)*P,N=r?y.left+(g.left-y.left)*R:0,D=r?y.top+(g.top-y.top)*R:0,B=r?y.width+(g.width-y.width)*R:h,{offsetX:z,offsetY:F,contentWidth:L,contentHeight:U}=pa(i,o,h,f),K=h/B,Q=-(L/h*N),J=-(U/f*D),Z=`scale(${K}) translate(${Q}px, ${J}px)`,X=f/h*B,q=(M-N)/B*L,H=(T-D)/X*U,W=pi(x,g,y,h,f),G=pA(h),V=pc(G),Y=G.scale,$=I?Math.min(C/10,1):1,_=b?(Math.sin(w/500-Math.PI/2)+1)/2*Math.PI*2:0;return(0,A.jsx)("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"#000"},children:(0,A.jsx)("div",{style:{position:"absolute",left:z,top:F,width:L,height:U,overflow:"hidden"},children:(0,A.jsxs)("div",{style:{width:L,height:U,position:"relative",overflow:"hidden"},children:[I&&m&&$<1&&(0,A.jsx)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:1-$},children:(0,A.jsx)("img",{alt:"",src:m,style:{width:L,height:U,transformOrigin:"0 0",transform:Z}})}),(0,A.jsxs)("div",{style:{position:"absolute",width:L,height:U,overflow:"hidden",opacity:I?$:1},children:[(0,A.jsx)("img",{alt:"",src:p,style:{width:L,height:U,transformOrigin:"0 0",transform:Z}}),(0,A.jsx)("div",{style:{position:"absolute",top:0,left:0,width:L,height:U,transformOrigin:"0 0",transform:Z,pointerEvents:"none"},children:0===v.length?null:v.map((e,t)=>{let r=[];if(e.highlightElement){let n=u0(e.highlightElement);r.push((0,A.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(253, 89, 7, 0.4)",border:`${2*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,A.jsx)("div",{style:{position:"absolute",left:n.left,top:n.top,width:n.width,height:n.height,background:"rgba(2, 131, 145, 0.4)",border:`${2*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,A.jsx)("img",{alt:"",src:u$,style:{position:"absolute",left:q-V.centerOffset,top:H-V.centerOffset,width:V.size,height:V.size,transform:`rotate(${_}rad)`,transformOrigin:"center center",filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}}),W&&!b&&(0,A.jsx)("img",{alt:"",src:E,style:{position:"absolute",left:q-G.hotspotX,top:H-G.hotspotY,width:G.width,height:G.height,filter:"drop-shadow(0 1px 2px rgba(0,0,0,0.3))"}})]})})})};function pd(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 pp(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){pd(o,n,i,a,s,"next",e)}function s(e){pd(o,n,i,a,s,"throw",e)}a(void 0)})}}let ph=!1;function pf(e){return new Promise((t,r)=>{let n=new Image;n.crossOrigin="anonymous",n.onload=()=>t(n),n.onerror=r,n.src=e})}function pm(e,t,r){let n=r.contentWidth/r.imageWidth,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 pg(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 py(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){pg(o,n,i,a,s,"next",e)}function s(e){pg(o,n,i,a,s,"throw",e)}a(void 0)})}}function pv(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 pb(e){var t,r,n,i,o;let a,{message:s}=ek.A.useApp(),{autoZoom:l,setAutoZoom:u,playbackSpeed:d,setPlaybackSpeed:p,subtitleEnabled:h,setSubtitleEnabled:f}=P();(0,c.useEffect)(()=>{(null==e?void 0:e.autoZoom)!==void 0&&u(e.autoZoom)},[null==e?void 0:e.autoZoom,u]);let m=null==e?void 0:e.replayScripts,y=(0,c.useMemo)(()=>m&&0!==m.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}}(m,{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,m]),v=(0,c.useRef)(null),b=(0,c.useRef)(null),w=(0,c.useRef)(null),[E,x]=(0,c.useState)({width:0,height:0});(0,c.useEffect)(()=>{let e=b.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;x(t=>t.width===e&&t.height===r?t:{width:e,height:r})}});return t.observe(e),()=>t.disconnect()},[]);let k=function(e){var t,r;let{durationInFrames:n,fps:i,autoPlay:o=!1,loop:a=!1}=e,[s,l]=(0,c.useState)(0),[A,u]=(0,c.useState)(o),d=(0,c.useRef)(A),p=(0,c.useRef)(s),h=(0,c.useRef)(null!=(t=e.playbackRate)?t:1),f=(0,c.useRef)(n),m=(0,c.useRef)(i),g=(0,c.useRef)(a);d.current=A,p.current=s,h.current=null!=(r=e.playbackRate)?r:1,f.current=n,m.current=i,g.current=a,(0,c.useEffect)(()=>{let e;if(!A)return;let t=null,r=0,n=i=>{if(null!==t){let e=(i-t)*h.current;r+=e;let n=1e3/m.current;for(;r>=n;){r-=n;let e=p.current+1;if(e>=f.current)if(g.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)},[A]);let y=()=>{p.current>=f.current-1&&(p.current=0,l(0))},v=(0,c.useCallback)(()=>{y(),u(!0)},[]),b=(0,c.useCallback)(()=>u(!1),[]);return{currentFrame:s,playing:A,play:v,pause:b,toggle:(0,c.useCallback)(()=>{d.current?u(!1):(y(),u(!0))},[]),seekTo:(0,c.useCallback)(e=>{let t=Math.max(0,Math.min(e,f.current-1));p.current=t,l(t)},[])}}({durationInFrames:Math.max(null!=(t=null==y?void 0:y.totalDurationInFrames)?t:1,1),fps:null!=(r=null==y?void 0:y.fps)?r:30,autoPlay:null==(n=null==e?void 0:e.autoPlay)||n,loop:!1,playbackRate:d}),S=(0,c.useMemo)(()=>{if(!y)return 0;for(let e=y.scriptFrames.length-1;e>=0;e--){let t=y.scriptFrames[e];if(t.taskId)return t.startFrame+t.durationInFrames-1}return Math.max(0,y.totalDurationInFrames-1)},[y]),C=(0,c.useCallback)(()=>{var e;k.playing?k.pause():(e=k.currentFrame,S>0&&e>=S&&k.seekTo(0),k.play())},[S,k.currentFrame,k.pause,k.play,k.playing,k.seekTo]);(0,c.useEffect)(()=>{!y||k.playing||!(k.currentFrame<y.totalDurationInFrames-1)&&S>0&&k.seekTo(S)},[S,y,k.currentFrame,k.playing,k.seekTo]),(0,c.useEffect)(()=>{if(!y||!(null==e?void 0:e.onTaskChange))return;if(!k.playing){null!==w.current&&(w.current=null,e.onTaskChange(null));return}let t=function(e,t){let r=null;for(let 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}(y.scriptFrames,k.currentFrame);t!==w.current&&(w.current=t,e.onTaskChange(t))},[y,null==e?void 0:e.onTaskChange,k.currentFrame,k.playing]);let I=(0,c.useMemo)(()=>{var e;let t;return y?(e=k.currentFrame,(t=po(y.scriptFrames,e,y.imageWidth,y.imageHeight,y.fps)).img?t:null):null},[y,k.currentFrame]),j=(0,c.useCallback)(()=>py(function*(){if((null==e?void 0:e.reportFormat)==="html-and-external-assets"&&e.reportUrl)return void globalThis.open(e.reportUrl,"_blank","noopener,noreferrer");try{var t,r;let n=null==e?void 0:e.reportFileContent;if(!n&&(null==e?void 0:e.reportUrl)){let t=yield fetch(e.reportUrl);if(!t.ok)throw Error(`Report request failed (${t.status})`);n=yield t.text()}if(!n)return;yield(t={content:n,onDownloadReport:null==e?void 0:e.onDownloadReport},(r=function*(){let{content:e,defaultFileName:r="midscene_report.html",onDownloadReport:n,documentRef: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){d9(o,n,i,a,s,"next",e)}function s(e){d9(o,n,i,a,s,"throw",e)}a(void 0)})})())}catch(e){ub(e,{title:"Failed to download report"})}})(),[null==e?void 0:e.onDownloadReport,null==e?void 0:e.reportFileContent,null==e?void 0:e.reportFormat,null==e?void 0:e.reportUrl]),O=(0,c.useMemo)(()=>I&&(I.title||I.subTitle)?{title:I.title,subTitle:I.subTitle}:null,[I]),[R,M]=(0,c.useState)(!1),[T,N]=(0,c.useState)(0),D=(0,c.useRef)(!1),[B,z]=(0,c.useState)(!0),F=(0,c.useRef)(null),L=(0,c.useCallback)(()=>{z(!0),F.current&&clearTimeout(F.current),R||(F.current=setTimeout(()=>z(!1),3e3))},[R]),U=(0,c.useCallback)(()=>{z(!0),F.current&&clearTimeout(F.current)},[]),K=(0,c.useCallback)(()=>{F.current&&clearTimeout(F.current),R||(F.current=setTimeout(()=>z(!1),1e3))},[R]);(0,c.useEffect)(()=>{R&&(z(!0),F.current&&(clearTimeout(F.current),F.current=null))},[R]),(0,c.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(),C())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[C]);let Q=(0,c.useRef)(null),J=(0,c.useCallback)(e=>{if(!y||!Q.current)return;let t=Q.current;t.setPointerCapture(e.pointerId);let r=e=>{let r=t.getBoundingClientRect(),n=Math.max(0,Math.min(1,(e-r.left)/r.width));k.seekTo(Math.round(n*S))};r(e.clientX);let n=e=>r(e.clientX),i=()=>{t.removeEventListener("pointermove",n),t.removeEventListener("pointerup",i)};t.addEventListener("pointermove",n),t.addEventListener("pointerup",i)},[y,k,S]),[Z,X]=(0,c.useState)(!1),q=(0,c.useCallback)(()=>{let e=v.current;e&&(document.fullscreenElement?document.exitFullscreen().then(()=>X(!1)):e.requestFullscreen().then(()=>X(!0)))},[]);(0,c.useEffect)(()=>{let e=()=>X(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let H=(0,c.useCallback)(()=>py(function*(){if(y&&!D.current){D.current=!0,M(!0),N(0);try{var e,t;yield(e={autoZoom:l},t=e=>N(Math.round(100*e)),pp(function*(){if(ph)throw Error("Video export is already in progress");ph=!0;try{var r,n,i;yield(r=y,n=e,i=t,pp(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=>pp(function*(){try{l.set(e,(yield pf(e)))}catch(e){}})()));let A=new Set([uY]);for(let e of r.scriptFrames)e.pointerImg&&A.add(e.pointerImg);let c=new Map;yield Promise.all([...A].map(e=>pp(function*(){try{c.set(e,(yield pf(e)))}catch(e){}})()));let u=null;try{u=yield pf(u$)}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"}),m=[];return f.ondataavailable=e=>{e.data.size>0&&m.push(e.data)},new Promise((e,n)=>{let s=null,A=!1,d=0,g=performance.now(),y=g,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===m.length)return void n(Error("No video data"));let t=new Blob(m,{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,m,g,y,v,b,w,E,x;let k,{scriptFrames:S,imageWidth:C,imageHeight:I,fps:j}=r,O=po(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:F,frameInScript:L,spinning:U,spinningElapsedMs:K,currentPointerImg:Q,pointerVisible:J,insights:Z}=O,X=a?B?Math.min(F/.375,1):F:1,{camLeft:q,camTop:H,camWidth:W}=(h=D,f=N,m=M,g=B?F<=.375?0:Math.min((F-.375)/.625,1):F,a?{camLeft:(y=h.left,v=f.left,y+(v-y)*g),camTop:(b=h.top,w=f.top,b+(w-b)*g),camWidth:(E=h.width,x=f.width,E+(x-E)*g)}:{camLeft:0,camTop:0,camWidth:m}),G=(l=D.pointerLeft,A=N.pointerLeft,l+(A-l)*X),V=(c=D.pointerTop,u=N.pointerTop,c+(u-c)*X),Y=M/W,{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et}=pa(960,540,M,T),er=-(ee/M*q),en=-(et/T*H),ei=z?Math.min(Math.max(L/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),Z.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=pm(u0(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=pm(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,Z,{zoom:Y,tx:er,ty:en},{offsetX:$,offsetY:_,contentWidth:ee,contentHeight:et,imageWidth:M,imageHeight:T});let ea=T/M*W,es=$+(G-q)/W*ee,el=_+(V-H)/ea*et,eA=(ps(ee,"contentWidth"),pl(pA(M).scale*(ee/M))),ec=pc(eA),eu=null!=(s=i.get(Q))?s:i.get(uY),ed=pi(J,N,D,M,T);U&&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(K/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()),!U&&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?(g+=w,b=setTimeout(()=>{requestAnimationFrame(S)},Math.max(0,g-performance.now()))):v=setTimeout(()=>{"inactive"!==f.state&&f.stop()},2*w)}};requestAnimationFrame(e=>{y=e,g=e,S(e)})})})())}finally{ph=!1}})()),s.success("Video exported")}catch(e){console.error("Export failed:",e),ub(e,{title:"Video export failed"})}finally{D.current=!1,M(!1),N(0)}}})(),[l,y]),G=(0,c.useMemo)(()=>{if(!y||S<=0)return[];let e=[];for(let t of y.scriptFrames){if("img"!==t.type&&"insight"!==t.type||0===t.durationInFrames)continue;let r=t.startFrame,n=r/S*100;if(n>1&&n<99){let 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},[y,S]),V=!!((null!=(i=null==e?void 0:e.reportFileContent)?i:null)||(null==e?void 0:e.reportUrl)),Y=(null==e?void 0:e.reportFormat)==="html-and-external-assets"?"Open report":"Download report",$=(null==e?void 0:e.canDownloadReport)!==!1,_=null!=(o=null==e?void 0:e.presentation)?o:"default";if(!m||0===m.length||!y)return V&&$?(0,A.jsx)("div",{className:"player-container player-container-empty","data-presentation":_,children:(0,A.jsxs)("div",{className:"player-empty-state",children:[(0,A.jsx)("span",{className:"player-empty-text",children:"No replay available"}),(0,A.jsx)(W.Ay,{icon:(0,A.jsx)(dV.A,{}),onClick:()=>{j()},children:Y})]})}):null;let ee=(null==I?void 0:I.imageWidth)||y.imageWidth,et=(null==I?void 0:I.imageHeight)||y.imageHeight,er=et>ee,en=S>0?Math.min(100,k.currentFrame/S*100):0;return(0,A.jsx)("div",{className:"player-container","data-fit-mode":null==e?void 0:e.fitMode,"data-presentation":_,children:(0,A.jsxs)("div",{className:"canvas-container",ref:v,onMouseMove:L,onMouseEnter:U,onMouseLeave:K,children:[(0,A.jsx)("div",{className:"player-wrapper","data-portrait":er?"":void 0,style:{aspectRatio:`${ee}/${et}`},children:(0,A.jsx)("div",{ref:b,style:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",overflow:"hidden"},onClick:C,children:(a=E.width>0&&E.height>0?Math.min(E.width/ee,E.height/et):1,(0,A.jsx)("div",{style:{width:ee*a,height:et*a,flexShrink:0,position:"relative",overflow:"hidden"},children:(0,A.jsx)("div",{style:{width:ee,height:et,transformOrigin:"0 0",transform:`scale(${a})`},children:(0,A.jsx)(pu,{frameMap:y,autoZoom:l&&k.playing,frame:k.currentFrame,width:ee,height:et,fps:y.fps})})}))})}),h&&O&&(0,A.jsxs)("div",{className:"player-subtitle",children:[O.title&&(0,A.jsx)("span",{className:"player-subtitle-badge",children:O.title}),O.subTitle&&(0,A.jsx)("span",{className:"player-subtitle-text",children:O.subTitle})]}),!(null==e?void 0:e.hideControls)&&(0,A.jsxs)("div",{className:`control-bar ${B?"":"hidden"}`,onClick:e=>e.stopPropagation(),children:[(0,A.jsx)("div",{className:"status-icon",onClick:C,children:k.playing?(0,A.jsx)(dY.A,{}):(0,A.jsx)(d$.A,{})}),(0,A.jsxs)("span",{className:"time-display",children:[pv(Math.min(k.currentFrame,S),y.fps)," ","/ ",pv(S+1,y.fps)]}),(0,A.jsxs)("div",{className:"seek-bar-track",ref:Q,onPointerDown:J,children:[(0,A.jsx)("div",{className:"seek-bar-fill",style:{width:`${en}%`}}),(0,A.jsx)("div",{className:"seek-bar-knob",style:{left:`${en}%`}}),G.map(e=>(0,A.jsx)(g.A,{title:e.title,overlayClassName:"chapter-tooltip",children:(0,A.jsx)("div",{className:"chapter-marker",style:{left:`${e.percent}%`},onClick:t=>{t.stopPropagation(),k.seekTo(e.frame)}})},e.percent))]}),(0,A.jsxs)("div",{className:"player-custom-controls",children:[V&&$?(0,A.jsx)(g.A,{title:Y,children:(0,A.jsx)("div",{className:"status-icon",onClick:()=>{j()},children:(0,A.jsx)(dV.A,{})})}):null,(0,A.jsx)(d5.A,{trigger:["hover","click"],placement:"topRight",overlayStyle:{minWidth:"148px"},dropdownRender:()=>(0,A.jsxs)("div",{className:"player-settings-dropdown",children:[(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px",borderRadius:"4px",cursor:R?"not-allowed":"pointer",opacity:R?.5:1},onClick:R?void 0:H,children:[(0,A.jsx)("span",{style:{width:16,height:16,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:R?(0,A.jsx)(d4.A,{type:"circle",percent:T,size:16,strokeWidth:14,showInfo:!1,strokeColor:"#1677ff",trailColor:"rgba(0, 0, 0, 0.12)"}):(0,A.jsx)(d_.A,{style:{width:"16px",height:"16px"}})}),(0,A.jsx)("span",{className:"player-export-label",children:R?`Exporting ${T}%`:"Export video"})]}),(0,A.jsx)("div",{className:"player-settings-divider"}),(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,A.jsx)(d6,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Focus on cursor"})]}),(0,A.jsx)(d7.A,{size:"small",checked:l,onChange:e=>u(e)})]}),(0,A.jsxs)("div",{className:"player-settings-item",style:{display:"flex",alignItems:"center",justifyContent:"space-between",height:"32px",padding:"0 8px",borderRadius:"4px"},children:[(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[(0,A.jsx)(d0.A,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px",marginRight:"16px"},children:"Subtitle"})]}),(0,A.jsx)(d7.A,{size:"small",checked:h,onChange:e=>f(e)})]}),(0,A.jsx)("div",{className:"player-settings-divider"}),(0,A.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px",height:"32px",padding:"0 8px"},children:[(0,A.jsx)(d1.A,{style:{width:"16px",height:"16px"}}),(0,A.jsx)("span",{style:{fontSize:"14px"},children:"Playback speed"})]}),[.5,1,1.5,2].map(e=>(0,A.jsxs)("div",{onClick:()=>p(e),style:{height:"32px",lineHeight:"32px",padding:"0 8px 0 28px",fontSize:"14px",cursor:"pointer",borderRadius:"4px"},className:`player-speed-option${d===e?" active":""}`,children:[e,"x"]},e))]}),menu:{items:[]},children:(0,A.jsx)("div",{className:"status-icon",children:(0,A.jsx)(d8,{style:{width:"16px",height:"16px"}})})}),!(null==e?void 0:e.hideFullscreenControl)&&(0,A.jsx)("div",{className:"status-icon",onClick:q,children:Z?(0,A.jsx)(d2.A,{}):(0,A.jsx)(d3.A,{})})]})]})]})})}let pw=e=>{let{result:t,loading:r,serverValid:n,serviceMode:i,replayScriptsInfo:o,replayCounter:a,loadingProgressText:s,verticalMode:l=!1,notReadyMessage:c,fitMode:u,autoZoom:d,showOutputAlongsideReport:p=!1,canDownloadReport:h,onDownloadReport:f,playerPresentation:m,hidePlayerFullscreenControl:g}=e,y="result-wrapper";l&&(y+=" vertical-mode-result"),o&&l&&(y+=" result-wrapper-compact");let v=dX;if(n||"Server"!==i){var b,w,E,x,k,S,C,I,j,O;if(r)v=(0,A.jsxs)("div",{className:"loading-container",children:[(0,A.jsx)(ev.A,{spinning:r,indicator:(0,A.jsx)(uQ.A,{spin:!0})}),(0,A.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,A.jsx)(dQ,{text:s,speed:3})})]});else if(null==t?void 0:t.error){let e=(0,A.jsx)("pre",{style:{color:"#ff4d4f",whiteSpace:"pre-wrap"},children:null==t?void 0:t.error});v=t.reportHTML||t.report||o?(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto",maxHeight:"40%",overflow:"auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Error:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pb,{replayScripts:null==o?void 0:o.scripts,imageWidth:null==o?void 0:o.width,imageHeight:null==o?void 0:o.height,reportFileContent:t.reportHTML||null,reportUrl:null==(b=t.report)?void 0:b.url,reportFormat:null==(w=t.report)?void 0:w.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]}):e}else if(p&&(null==t?void 0:t.result)!==void 0&&o){let e="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}),r=(null==t?void 0:t.reportHTML)||null;v=(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pb,{replayScripts:o.scripts,imageWidth:o.width,imageHeight:o.height,reportFileContent:r,reportUrl:null==(E=t.report)?void 0:E.url,reportFormat:null==(x=t.report)?void 0:x.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]})}else if(o){let e=(null==t?void 0:t.reportHTML)||null;v=(0,A.jsx)(pb,{replayScripts:o.scripts,imageWidth:o.width,imageHeight:o.height,reportFileContent:e,reportUrl:null==t||null==(k=t.report)?void 0:k.url,reportFormat:null==t||null==(S=t.report)?void 0:S.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)}else if(p&&(null==t?void 0:t.result)!==void 0&&((null==t?void 0:t.reportHTML)||(null==t?void 0:t.report))){let e="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)});v=(0,A.jsxs)("div",{className:"combined-result-layout",children:[(0,A.jsxs)("div",{style:{flex:"0 0 auto"},children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Output:"}),e]}),(0,A.jsxs)("div",{className:"combined-result-section",children:[(0,A.jsx)("div",{style:{fontWeight:"bold",marginBottom:"8px"},children:"Report:"}),(0,A.jsx)("div",{className:"combined-result-player",children:(0,A.jsx)(pb,{reportFileContent:t.reportHTML||null,reportUrl:null==(C=t.report)?void 0:C.url,reportFormat:null==(I=t.report)?void 0:I.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a)})]})]})}else p&&(null==t?void 0:t.result)!==void 0?v="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}):(null==t?void 0:t.reportHTML)||(null==t?void 0:t.report)?v=(0,A.jsx)(pb,{reportFileContent:t.reportHTML||null,reportUrl:null==(j=t.report)?void 0:j.url,reportFormat:null==(O=t.report)?void 0:O.format,fitMode:u,autoZoom:d,canDownloadReport:null!=h?h:"In-Browser"!==i,onDownloadReport:f,presentation:m,hideFullscreenControl:g},a):(null==t?void 0:t.result)!==void 0&&(v="string"==typeof(null==t?void 0:t.result)?(0,A.jsx)("pre",{children:null==t?void 0:t.result}):(0,A.jsx)("pre",{children:JSON.stringify(null==t?void 0:t.result,null,2)}))}else v=dZ(c);return(0,A.jsx)("div",{className:y,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto",justifyContent:"center"},children:v})},pE=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:20,height:20,fill:"none","aria-label":"Playground",viewBox:"0 0 20 20"},e),r=r={children:[(0,A.jsx)("rect",{width:20,height:20,fill:"#2B83FF",rx:10}),(0,A.jsx)("path",{fill:"#2B83FF",stroke:"#fff",strokeLinejoin:"round",strokeWidth:1.125,d:"M6.866 5.882a.56.56 0 0 1 .667-.078l3.248 1.875 3.247 1.875a.563.563 0 0 1 0 .974l-3.247 1.875-3.248 1.875a.563.563 0 0 1-.784-.74l1.749-3.497-1.75-3.498a.56.56 0 0 1 .118-.661Z"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function px(){return(0,c.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,c.createElement)("path",{d:"M3 7.99984L6.33333 11.3332L13 4.6665",stroke:"#188F4D",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"}))}function pk(){return(0,c.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,c.createElement)("path",{d:"M5 5L11 11M11 5L5 11",stroke:"#FF4D4F",strokeWidth:"1.2",strokeLinecap:"round"}))}let pS="ZodOptional",pC="ZodDefault",pI="ZodNullable",pj="ZodObject",pO=e=>"object"==typeof e&&null!==e&&("shape"in e||"ZodObject"===e.type),pP=e=>{var t,r,n;let i=e=>!!(null==e?void 0:e.prompt);if((null==(t=e._def)?void 0:t.typeName)===pj){let t;if(e._def.shape&&(t="function"==typeof e._def.shape?e._def.shape():e._def.shape),!t&&e.shape&&(t=e.shape),t&&"prompt"in t&&t.prompt||i(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!!i(e.shape)||"string"==typeof t&&t.toLowerCase().includes("input field")}return!1},pR=e=>{var t,r,n,i,o;let a=e,s=!1,l=!1;for(;(null==(t=a._def)?void 0:t.typeName)===pS||(null==(r=a._def)?void 0:r.typeName)===pC||(null==(n=a._def)?void 0:n.typeName)===pI;)(null==(i=a._def)?void 0:i.typeName)===pS&&(s=!0),(null==(o=a._def)?void 0:o.typeName)===pC&&(l=!0),a=a._def.innerType||a;return{actualField:a,isOptional:s,hasDefault:l}},pM=(e,t)=>null==e?void 0:e.find(e=>e.interfaceAlias===t||e.name===t),pT=(e,t)=>{var r,n;if(!(null==e?void 0:e.length)||!t)return null;let i=pM(e,t);if(!(null==i?void 0:i.paramSchema)||!pO(i.paramSchema))return null;let o=i.paramSchema.shape||{},a=Object.keys(o);if(1!==a.length)return null;let[s]=a,{actualField:l}=pR(o[s]),A=pP(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 pN=r(28460),pD=r(3246),pB=r(91631),pz=r(64665);let pF=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:6,height:10,fill:"none",viewBox:"0 0 6 10"},e),r=r={children:(0,A.jsx)("path",{fill:"#000",fillOpacity:.25,fillRule:"evenodd",d:"M.195 9.138a.667.667 0 0 1 0-.943l3.529-3.528L.195 1.138a.667.667 0 0 1 .943-.943l4 4c.26.26.26.683 0 .943l-4 4a.667.667 0 0 1-.943 0",clipRule:"evenodd"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},pL=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:[(0,A.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M1.505 4.164c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,A.jsx)("path",{stroke:"#878787",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.33,d:"M7.57 3.465v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};var pU={};pU.d=(e,t)=>{for(var r in t)pU.o(t,r)&&!pU.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},pU.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),pU.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var pK={};function pQ(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}pU.r(pK),pU.d(pK,{create:()=>y.vt});let{create:pJ}=pK,pZ="midscene-prompt-history-v2",pX="midscene-last-selected-type",pq=pJ((e,t)=>{let r;return{history:(r=localStorage.getItem(pZ))?JSON.parse(r):{},lastSelectedType:localStorage.getItem(pX)||"aiAct",clearHistory:r=>{let n=pQ({},t().history);delete n[r],e({history:n}),localStorage.setItem(pZ,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=pQ({},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(pZ,JSON.stringify(c))},getHistoryForType:e=>t().history[e]||[],setLastSelectedType:t=>{e({lastSelectedType:t}),localStorage.setItem(pX,t)}}}),pH=e=>{if(!e)return"";if("aiAct"===e)return"Action";let t=e.startsWith("ai")?e.slice(2):e;if(t.startsWith("IOS"))return t.substring(3).replace(/([A-Z])/g," $1").replace(/^/,"IOS").trim();let r=t.replace(/([A-Z])/g," $1").trim(),n=r.split(" ");return(n.length>3?n.slice(-3).join(" "):r).replace(/\b\w/g,e=>e.toUpperCase())};function pW(e){return{supportsImeStrategy:"android"===e,supportsScreenshotStrategy:"android"===e,supportsKeyboardDismissStrategy:"android"===e||"harmony"===e,supportsAutoDismissKeyboard:"android"===e||"ios"===e||"harmony"===e,supportsAlwaysRefreshScreenInfo:"android"===e}}function pG(e){return Object.values(pW(e)).some(Boolean)}var pV=r(16356);let pY=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:27,height:27,fill:"none",viewBox:"0 0 27 27"},e),r=r={children:(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.333,d:"M19.527 8.855h-2M14.86 7.522v2.667M14.86 8.855H7.527M10.194 13.522H7.527M12.86 12.189v2.666M20.193 13.522H12.86M19.527 18.189h-2M14.86 16.855v2.667M14.86 18.189H7.527"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p$=e=>{let t,{showDeepLocateOption:r=!1,showDeepThinkOption:n=!1,enableTracking:i=!1,showDataExtractionOptions:o=!1,hideDomAndScreenshotOptions:a=!1,deviceType:s,trigger:l,popupPlacement:c="bottomRight"}=e,u=X(e=>e.forceSameTabNavigation),d=X(e=>e.setForceSameTabNavigation),p=X(e=>e.deepLocate),h=X(e=>e.setDeepLocate),f=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.screenshotStrategy),S=X(e=>e.setScreenshotStrategy),C=X(e=>e.autoDismissKeyboard),I=X(e=>e.setAutoDismissKeyboard),j=X(e=>e.keyboardDismissStrategy),O=X(e=>e.setKeyboardDismissStrategy),P=X(e=>e.alwaysRefreshScreenInfo),R=X(e=>e.setAlwaysRefreshScreenInfo),M=pW(s),T=pG(s);if(!i&&!r&&!n&&!o&&!T)return null;let N=(t=[],i&&t.push({label:(0,A.jsx)(pV.A,{onChange:e=>d(e.target.checked),checked:u,children:"Limit popup to current tab"}),key:"track-config"}),r&&t.push({label:(0,A.jsx)(pV.A,{onChange:e=>{h(e.target.checked)},checked:p,children:"Deep Locate"}),key:"deep-locate-config"}),n&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Deep Think"}),(0,A.jsxs)(pz.A.Group,{size:"small",value:f,onChange:e=>m(e.target.value),children:[(0,A.jsx)(g.A,{title:"Controlled by MIDSCENE_MODEL_REASONING_ENABLED env variable",children:(0,A.jsx)(pz.A,{value:"unset",children:"Auto"})}),(0,A.jsx)(pz.A,{value:!0,children:"On"}),(0,A.jsx)(pz.A,{value:!1,children:"Off"})]})]}),key:"deep-think-config"}),o&&!a&&(t.push({label:(0,A.jsx)(pV.A,{onChange:e=>{v(e.target.checked)},checked:y,children:"Include screenshot in request"}),key:"screenshot-included-config"}),t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Include DOM info in request"}),(0,A.jsxs)(pz.A.Group,{size:"small",value:b,onChange:e=>w(e.target.value),children:[(0,A.jsx)(pz.A,{value:!1,children:"Off"}),(0,A.jsx)(pz.A,{value:!0,children:"All"}),(0,A.jsx)(pz.A,{value:"visible-only",children:"Visible only"})]})]}),key:"dom-included-config"})),M.supportsImeStrategy&&(t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"IME strategy"}),(0,A.jsxs)(pz.A.Group,{size:"small",value:E,onChange:e=>x(e.target.value),children:[(0,A.jsx)(pz.A,{value:"always-yadb",children:"Always YADB"}),(0,A.jsx)(pz.A,{value:"yadb-for-non-ascii",children:"YADB for non-ASCII"})]})]}),key:"ime-strategy-config"}),M.supportsScreenshotStrategy&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Screenshot strategy"}),(0,A.jsxs)(pz.A.Group,{size:"small",value:k,onChange:e=>S(e.target.value),children:[(0,A.jsx)(pz.A,{value:"auto",children:"Auto"}),(0,A.jsx)(pz.A,{value:"always-yadb",children:"Always YADB"})]})]}),key:"screenshot-strategy-config"}),M.supportsAutoDismissKeyboard&&t.push({label:(0,A.jsx)(pV.A,{onChange:e=>I(e.target.checked),checked:C,children:uq}),key:"auto-dismiss-keyboard-config"}),M.supportsKeyboardDismissStrategy&&t.push({label:(0,A.jsxs)("div",{style:{padding:"4px 0"},children:[(0,A.jsx)("div",{style:{marginBottom:"4px",fontSize:"14px"},children:"Keyboard dismiss strategy"}),(0,A.jsxs)(pz.A.Group,{size:"small",value:j,onChange:e=>O(e.target.value),children:[(0,A.jsx)(pz.A,{value:"esc-first",children:"ESC first"}),(0,A.jsx)(pz.A,{value:"back-first",children:"Back first"})]})]}),key:"keyboard-dismiss-strategy-config"}),M.supportsAlwaysRefreshScreenInfo&&t.push({label:(0,A.jsx)(pV.A,{onChange:e=>R(e.target.checked),checked:P,children:"Always refresh screen info"}),key:"always-refresh-screen-info-config"})),!M.supportsImeStrategy&&M.supportsAutoDismissKeyboard&&t.push({label:(0,A.jsx)(pV.A,{onChange:e=>I(e.target.checked),checked:C,children:uq}),key:"auto-dismiss-keyboard-config"}),t),D=null!=l?l:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"selector-trigger-button",type:"button",children:(0,A.jsx)(pY,{width:24,height:24})});return(0,A.jsx)("div",{className:"selector-trigger",children:(0,A.jsx)(d5.A,{getPopupContainer:e=>e.ownerDocument.body,menu:{items:N},overlayClassName:"config-selector-dropdown",overlayStyle:{zIndex:10010},placement:c,trigger:["click"],children:D})})};var p_=r(82752);let{TextArea:p0}=q.A,p1=(e,t)=>`${e}${t?" (Optional)":""}`,p2=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=o||`Enter ${t}`;return(0,A.jsx)(uw.A.Item,{name:["params",t],label:p1(r,!n),rules:n?[{required:!0,message:`Please input ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(q.A,{placeholder:a})},t)},p3=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=o||`Describe the ${t}, use natural language`;return(0,A.jsx)(uw.A.Item,{name:["params",t],label:p1(r,!n),rules:n?[{required:!0,message:`The ${t} is required`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(p0,{rows:2,placeholder:a})},t)},p5=e=>{var t;let{name:r,label:n,fieldSchema:i,isRequired:o,marginBottom:a,placeholder:s}=e,l=((null==(t=i._def)?void 0:t.values)||[]).map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)}));return(0,A.jsx)(uw.A.Item,{name:["params",r],label:n,rules:o?[{required:!0,message:`Please select ${r}`}]:[],style:{marginBottom:a},colon:!1,children:(0,A.jsx)(G.A,{placeholder:s||`Select ${r}`,options:l})},r)},p4=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e,a=500*("distance"===t),s=o&&Number(o)||a,l="distance"===t?1e4:void 0;return(0,A.jsx)(uw.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,A.jsx)(p_.A,{placeholder:s.toString(),min:0,max:l,step:"distance"===t?10:1,style:{width:"100%"}})},t)},p7=e=>{let{name:t,label:r,isRequired:n,marginBottom:i,placeholder:o}=e;return(0,A.jsx)(uw.A.Item,{name:["params",t],label:p1(r,!n),rules:n?[{required:!0,message:`Please select ${t}`}]:[],style:{marginBottom:i},colon:!1,children:(0,A.jsx)(G.A,{placeholder:o||`Select ${t}`,options:[{value:!0,label:"True"},{value:!1,label:"False"}]})},t)};var p6=r(70316);let p8=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:18,height:16,fill:"none",viewBox:"0 0 18 16"},e),r=r={children:(0,A.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m3.124 2.667 11.162 10.666M3.124 13.333 14.286 2.667"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},p9=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:25,height:25,fill:"none",viewBox:"0 0 25 25"},e),r=r={children:[(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M6.63 9.021c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5"}),(0,A.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M12.695 8.322v4.203l2.967 2.968"})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},he=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:19,height:19,fill:"none",viewBox:"0 0 19 19"},e),r=r={children:[(0,A.jsxs)("g",{stroke:"currentColor",strokeLinejoin:"round",strokeOpacity:.65,strokeWidth:1.5,clipPath:"url(#magnifying-glass_svg__a)",children:[(0,A.jsx)("path",{d:"M8.397 14.29a6.375 6.375 0 1 0 0-12.75 6.375 6.375 0 0 0 0 12.75Z"}),(0,A.jsx)("path",{strokeLinecap:"round",d:"M10.519 5.42a3 3 0 0 0-2.122-.88 3 3 0 0 0-2.121.88M12.98 12.499l3.182 3.182"})]}),(0,A.jsx)("defs",{children:(0,A.jsx)("clipPath",{id:"magnifying-glass_svg__a",children:(0,A.jsx)("path",{fill:"#fff",d:"M.522.04h18v18h-18z"})})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},{Text:ht}=f.A,hr=e=>{let{onSelect:t,history:r,currentType:n,trigger:i,popupPlacement:o="bottom",title:a="History",showClear:s=!0,onClear:l,searchPlaceholder:u="Search",emptyText:d="No history record",noMatchText:p="No matching history record",renderItemActions:h,renderItemLabel:f,overlayClassName:m,popupWidth:g=320,popupHeight:y=400,portalContainerSelector:v}=e,[b,w]=(0,c.useState)(!1),[E,x]=(0,c.useState)(""),[k,S]=(0,c.useState)(0),C=pq(e=>e.clearHistory),I=(0,c.useRef)(null),j=(0,c.useRef)(null),[O,P]=(0,c.useState)(null),[R,M]=(0,c.useState)(null),[T,N]=(0,c.useState)(!1),D=(0,c.useMemo)(()=>{let e=Date.now(),t=e-6048e5,n=e-31536e6,i=r.filter(e=>e.prompt.toLowerCase().includes(E.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,E]),B=()=>{w(!1)};(0,c.useEffect)(()=>{if(!b)return;let e=()=>{var e,t;if(!j.current)return;let r=j.current.getBoundingClientRect(),n=v?j.current.closest(v):null,i=null==n?void 0:n.getBoundingClientRect(),a=null!=(e=null==i?void 0:i.width)?e:window.innerWidth,s=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,a-g-16),d=Math.max(16,s-y-16);P({left:Math.min(Math.max(16,l-g),u),top:Math.min(Math.max(16,"top"===o?A-y-8:c+8),d)}),M(null!=n?n:document.body),N(!!n)},t=e=>{I.current&&!I.current.contains(e.target)&&j.current&&!j.current.contains(e.target)&&w(!1)};e();let r=setTimeout(()=>{document.addEventListener("click",t)},100);return window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{clearTimeout(r),document.removeEventListener("click",t),window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[b,y,o,g,v]);let z=(e,r)=>0===r.length?null:(0,A.jsxs)("div",{className:"history-group",children:[(0,A.jsx)("div",{className:"history-group-title",children:e}),r.map((e,r)=>(0,A.jsxs)("div",{className:"history-item",onClick:()=>{t(e),w(!1)},children:[(0,A.jsx)("span",{className:"history-item-label",children:f?f(e,{close:B}):e.prompt}),h?(0,A.jsx)("span",{className:"history-item-actions",onClick:e=>e.stopPropagation(),children:h(e,{close:B,scrollVersion:k})}):null]},`${e.timestamp}-${r}`))]},e);return(0,A.jsxs)("div",{className:"history-selector-wrapper",children:[(0,A.jsx)("div",{className:"selector-trigger",onClick:()=>w(e=>!e),ref:j,children:null!=i?i:(0,A.jsx)(p9,{width:24,height:24})}),b&&O&&R&&(0,p6.createPortal)((0,A.jsx)("div",{className:m?`history-modal-overlay ${m}${T?" history-modal-overlay-in-container":""}`:`history-modal-overlay${T?" history-modal-overlay-in-container":""}`,ref:I,style:O,children:(0,A.jsxs)("div",{className:"history-modal-container",children:[(0,A.jsxs)("div",{className:"history-modal-header",children:[(0,A.jsxs)(ht,{strong:!0,style:{fontSize:"16px"},children:[a," (",r.length,")"]}),(0,A.jsx)(W.Ay,{size:"small",type:"text",icon:(0,A.jsx)(p8,{width:16,height:16}),onClick:()=>w(!1),className:"close-button"})]}),(0,A.jsx)("div",{className:"history-search-section",children:(0,A.jsxs)("div",{className:"search-input-wrapper",children:[(0,A.jsx)(q.A,{placeholder:u,value:E,onChange:e=>x(e.target.value),prefix:(0,A.jsx)(he,{width:18,height:18}),className:"search-input",allowClear:!0}),s?(0,A.jsx)(W.Ay,{type:"link",onClick:()=>{l?l():C(n),x(""),w(!1)},className:"clear-button",disabled:0===r.length,children:"Clear"}):null]})}),(0,A.jsx)("div",{className:"history-content",onScroll:()=>{S(e=>e+1)},children:0===r.length?(0,A.jsx)("div",{className:"no-results",children:(0,A.jsx)(ht,{type:"secondary",children:d})}):(0,A.jsxs)(A.Fragment,{children:[z("Last 7 days",D.recent7Days),z("Last 1 year",D.recent1Year),z("Earlier",D.older),E&&0===D.recent7Days.length&&0===D.recent1Year.length&&0===D.older.length&&(0,A.jsx)("div",{className:"no-results",children:(0,A.jsx)(ht,{type:"secondary",children:p})})]})})]})}),R)]})};function hn(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:hi}=q.A;function ho(){return(0,A.jsx)("span",{"aria-hidden":"true",className:"prompt-stop-square-icon"})}let ha=e=>{var t,r,n,i,o,a,s,l;let{runButtonEnabled:u,form:d,serviceMode:p,selectedType:h,dryMode:f,stoppable:m,loading:y,onRun:v,onStop:b,clearPromptAfterRun:w=!0,actionSpace:E,hideDomAndScreenshotOptions:x=!1,deviceType:k,chrome:S}=e,[C,I]=(0,c.useState)(!1),[j,O]=(0,c.useState)(""),P="aiQuery"===h?"What do you want to query?":"aiAssert"===h?"What do you want to assert?":"aiTap"===h?"What element do you want to tap?":"aiDoubleClick"===h?"What element do you want to double-click?":"aiHover"===h?"What element do you want to hover over?":"aiInput"===h?"Format: <value> | <element>\nExample: hello world | search box":"aiRightClick"===h?"What element do you want to right-click?":"aiKeyboardPress"===h?"Format: <key> | <element (optional)>\nExample: Enter | text field":"aiScroll"===h?"Format: <direction> <amount> | <element (optional)>\nExample: down 500 | main content":"aiLocate"===h?"What element do you want to locate?":"aiBoolean"===h?"What do you want to check (returns true/false)?":"aiNumber"===h?"What number do you want to extract?":"aiString"===h?"What text do you want to extract?":"aiAsk"===h?"What do you want to ask?":"aiWaitFor"===h?"What condition do you want to wait for?":"What do you want to do?",R=(null==S?void 0:S.variant)==="minimal",M=(null==S?void 0:S.placeholder)||P,T=(l=null==S?void 0:S.primaryActionLabel)?l:pH(h)||"Action",N=null!=(o=null==S?void 0:S.settingsPlacement)?o:"toolbar",D=(0,c.useRef)(null),B=(0,c.useRef)(null),z=uw.A.useWatch("params",d),F=(0,c.useRef)(null),L=pq(e=>e.history),U=pq(e=>e.lastSelectedType),K=pq(e=>e.addHistory),Q=pq(e=>e.setLastSelectedType),J=(0,c.useMemo)(()=>L[h]||[],[L,h]),Z=(0,c.useMemo)(()=>pM(E,h),[E,h]),{markExplicitSelection:X,skipNextRestore:H,shouldSkipRestoreOnce:G}=function(e){let{enabled:t,form:r,selectedType:n,onAfterReset:i,defaultType:o="aiAct"}=e,[a,s]=(0,c.useState)(!1),l=(0,c.useRef)(!1);(0,c.useEffect)(()=>{t&&!a&&n&&n!==o&&(l.current=!1,r.setFieldsValue({type:o,prompt:"",params:{}}),null==i||i())},[t,a,n,o,r,i]);let A=(0,c.useCallback)(()=>{t&&s(!0)},[t]),u=(0,c.useCallback)(()=>{l.current=!0},[]),d=(0,c.useCallback)(()=>!!l.current&&(l.current=!1,!0),[]);return(0,c.useMemo)(()=>({markExplicitSelection:A,skipNextRestore:u,shouldSkipRestoreOnce:d}),[A,u,d])}({enabled:R,form:d,selectedType:h,onAfterReset:(0,c.useCallback)(()=>{F.current=null,O("")},[])}),V=(0,c.useMemo)(()=>!!E&&!!(null==Z?void 0:Z.paramSchema)&&(!pO(Z.paramSchema)||Object.keys(Z.paramSchema.shape||{}).length>0),[h,Z,E]),Y=(0,c.useMemo)(()=>{if(E&&E.length>0&&Z){if(Z.paramSchema&&pO(Z.paramSchema)){let e=Z.paramSchema.shape||{};return Object.keys(e).some(t=>{let{isOptional:r}=pR(e[t]);return!r})}return!!Z.paramSchema}return!0},[h,Z,E]),$=(0,c.useMemo)(()=>["aiQuery","aiBoolean","aiNumber","aiString","aiAsk","aiAssert"].includes(h),[h]),_=(0,c.useMemo)(()=>{if("aiAct"===h||"aiLocate"===h)return!0;if(E&&(null==Z?void 0:Z.paramSchema)&&pO(Z.paramSchema)){let e=Z.paramSchema.shape||{};return Object.keys(e).some(t=>{let{actualField:r}=pR(e[t]);return pP(r)})}return!1},[h,Z,E]),ee=(0,c.useMemo)(()=>"aiAct"===h,[h]),et=(0,c.useMemo)(()=>{let e="In-Browser-Extension"===p,t=$&&!x,r=pG(k);return e||_||ee||t||r},[p,_,ee,$,x,k]),er=(0,c.useMemo)(()=>(e=>{let t=Object.keys(uH);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=uH[e];"aiAct"===e||(null==t?void 0:t.group)==="extraction"||(null==t?void 0:t.group)==="validation"?n.add(e):r.includes(e)&&n.add(e)}),r.forEach(e=>{n.add(e)}),Array.from(n)})(E),[E]),en=(0,c.useMemo)(()=>er.filter(e=>!uW.includes(e)),[er]),ei=(0,c.useCallback)(e=>{X(),d.setFieldValue("type",e)},[d,X]),eo=(0,c.useMemo)(()=>[{key:"interaction-group",label:"Interaction APIs",match:e=>{var t;return(null==(t=uH[e])?void 0:t.group)==="interaction"}},{key:"extraction-group",label:"Data Extraction APIs",match:e=>{var t;return(null==(t=uH[e])?void 0:t.group)==="extraction"}},{key:"validation-group",label:"Validation APIs",match:e=>{var t;return(null==(t=uH[e])?void 0:t.group)==="validation"}},{key:"device-specific-group",label:"Device-Specific APIs",match:e=>!uH[e]}],[]),ea=(0,c.useCallback)(e=>{var t;return{key:e,label:pH(e),title:(null==(t=uH[e])?void 0:t.title)||"",onClick:()=>ei(e)}},[ei]),es=(0,c.useMemo)(()=>{let e=[];for(let t of eo){let r=en.filter(t.match);0!==r.length&&e.push({key:t.key,type:"group",label:t.label,children:r.map(ea)})}return e},[eo,en,ea]),el=(0,c.useMemo)(()=>{let e=uW.filter(e=>er.includes(e)),t=[];return e.length>0&&t.push({key:"primary-group",type:"group",label:"Primary APIs",children:e.map(ea)}),t.push(...es),{items:t}},[er,ea,es]),eA=(0,c.useMemo)(()=>({items:es}),[es]),ec=(0,c.useCallback)(()=>{if(!V||!E)return{};if((null==Z?void 0:Z.paramSchema)&&pO(Z.paramSchema)){let e={},t=Z.paramSchema.shape||{};return Object.keys(t).forEach(r=>{let n=(e=>{var t;let r=e;for(;null==(t=r._def)?void 0:t.innerType;){if(r._def.typeName===pC){if("function"==typeof r._def.defaultValue)return r._def.defaultValue();if(void 0!==r._def._serializedDefaultValue)return r._def._serializedDefaultValue}r=r._def.innerType}})(t[r]);void 0!==n&&(e[r]=n)}),e}return{}},[h,V,Z,E]);(0,c.useEffect)(()=>{R||d.getFieldValue("type")||!U||d.setFieldValue("type",U)},[d,R,U]),(0,c.useEffect)(()=>{!R&&h&&h!==U&&Q(h)},[h,R,U,Q]);let eu=(0,c.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,c.useEffect)(()=>{if(G())return;if(R){let e=ec();d.setFieldsValue({prompt:"",params:e}),O(""),F.current=null;return}let e=J[0];if(!e||!F.current||e.timestamp!==F.current.timestamp)if(e)d.setFieldsValue({type:e.type,prompt:e.prompt||"",params:e.params}),O(e.prompt||""),F.current=e;else{let e=ec();d.setFieldsValue({prompt:"",params:e}),O(""),F.current=null}},[h,J,d,ec,R,G]),(0,c.useEffect)(()=>{let e=setTimeout(()=>{eu()},100);return()=>clearTimeout(e)},[h,eu]);let ed=uw.A.useWatch("prompt",d);(0,c.useEffect)(()=>{ed!==j&&O(ed||"")},[ed,j]);let ep=(0,c.useCallback)(e=>{X(),e.type!==h&&H(),d.setFieldsValue({prompt:e.prompt,type:e.type,params:e.params}),O(e.prompt)},[d,X,h,H]),eh=(0,c.useCallback)(e=>{O(e.target.value)},[]),ef=(0,c.useMemo)(()=>!!V&&!!E&&!!((null==Z?void 0:Z.paramSchema)&&pO(Z.paramSchema))&&1===Object.keys(Z.paramSchema.shape||{}).length,[h,V,Z,E]),em=(0,c.useMemo)(()=>R?pT(E,h):null,[E,R,h]),eg=(0,c.useMemo)(()=>((e,t,r,n,i)=>{if(!e)return!1;if(!(()=>{if(n){if(!n.paramSchema)return!1;if("object"==typeof n.paramSchema&&"shape"in n.paramSchema)return Object.keys(n.paramSchema.shape||{}).length>0}return!0})())return!0;if(t){let e=r||{};if((null==n?void 0:n.paramSchema)&&pO(n.paramSchema)){let t=n.paramSchema.shape||{};return Object.keys(t).every(r=>{let{isOptional:n}=pR(t[r]),i=e[r];return n||void 0!==i&&""!==i&&null!==i})}return!0}return i.trim().length>0})(u,!!V,z,Z,j),[u,V,Z,j,z]),ey=Y&&!V&&!j.trim()&&!y&&!m,ev=(0,c.useCallback)(()=>{let e=d.getFieldsValue(),t="";if(V&&e.params&&E)if((null==Z?void 0:Z.paramSchema)&&pO(Z.paramSchema)){let r="",n=[],i=Z.paramSchema.shape||{};Object.keys(i).forEach(t=>{var o;let a=null==(o=e.params)?void 0:o[t];if(null!=a&&""!==a){let{actualField:e}=pR(i[t]);pP(e)?r=String(a):"distance"===t?n.push(`${a}`):n.push(String(a))}});let o=n.join(" ");t=r?`${r} - ${o}`:o}else t=e.prompt||"";else t=e.prompt||"";let r={type:e.type,prompt:t,params:e.params,timestamp:Date.now()};if(K(r),v(),w)if(F.current=r,O(""),V){let e=ec();d.setFieldValue("params",e)}else d.setFieldValue("prompt","")},[d,K,v,V,h,w,E,Z,ec]),eb=(0,c.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg?(ev(),e.preventDefault(),e.stopPropagation()):"Enter"===e.key&&setTimeout(()=>{if(D.current){var e;let t=null==(e=D.current.resizableTextArea)?void 0:e.textArea;if(t){let e=t.selectionStart,r=t.value.lastIndexOf("\n");(-1===r||e>r)&&(t.scrollTop=t.scrollHeight)}}},0)},[ev,eg]),ew=(0,c.useCallback)(e=>{"Enter"===e.key&&e.metaKey&&eg&&(ev(),e.preventDefault(),e.stopPropagation())},[ev,eg]),eE=(0,c.useCallback)(()=>{if(!V)return null;if(E&&(null==Z?void 0:Z.paramSchema)&&pO(Z.paramSchema)){let e=Z.paramSchema.shape||{},t=Object.keys(e);if(1===t.length){let r=t[0],{actualField:n}=pR(e[r]),i=pP(n),o=(()=>{var e,t;if(null==(e=n._def)?void 0:e.description)return n._def.description;if(n.description)return n.description;if(E&&(null==Z?void 0:Z.paramSchema)&&"object"==typeof Z.paramSchema&&"shape"in Z.paramSchema){let e=(Z.paramSchema.shape||{})[r];if(null==e||null==(t=e._def)?void 0:t.description)return e._def.description;if(null==e?void 0:e.description)return e.description}return i?"Describe the element you want to interact with":"keyName"===r?"Enter key name or text to type":"value"===r?"Enter text to input":`Enter ${r}`})();return(0,A.jsx)(uw.A.Item,{name:["params",r],style:{margin:0},children:(0,A.jsx)(q.A.TextArea,{className:"main-side-console-input-textarea",rows:3,placeholder:o,autoFocus:!0,onKeyDown:ew})})}let r=[],n=t.sort((t,r)=>{let n=e[t],i=e[r],{isOptional:o}=pR(n),{isOptional:a}=pR(i);return!o&&a?-1:o&&!a?1:0});if(n.forEach((t,i)=>{var o,a,s;let{actualField:l,isOptional:c}=pR(e[t]),u=pP(l),d=t.charAt(0).toUpperCase()+t.slice(1),p=12*(i!==n.length-1),h=(()=>{var e,r;if(null==(e=l._def)?void 0:e.description)return l._def.description;if(l.description)return l.description;if(E&&(null==Z?void 0:Z.paramSchema)&&"object"==typeof Z.paramSchema&&"shape"in Z.paramSchema){let e=(Z.paramSchema.shape||{})[t];if(null==e||null==(r=e._def)?void 0:r.description)return e._def.description;if(null==e?void 0:e.description)return e.description}if(u)return"Describe the element you want to interact with"})(),f={name:t,label:d,fieldSchema:l,isRequired:!c,marginBottom:p,placeholder:h};u?r.push((0,A.jsx)(p3,hn({},f),t)):(null==(o=l._def)?void 0:o.typeName)==="ZodEnum"?r.push((0,A.jsx)(p5,hn({},f),t)):(null==(a=l._def)?void 0:a.typeName)==="ZodNumber"?r.push((0,A.jsx)(p4,hn({},f),t)):(null==(s=l._def)?void 0:s.typeName)==="ZodBoolean"?r.push((0,A.jsx)(p7,hn({},f),t)):r.push((0,A.jsx)(p2,hn({},f),t))}),"aiScroll"===h){let e=r.find(e=>c.isValidElement(e)&&"direction"===e.props.name),t=r.find(e=>c.isValidElement(e)&&"distance"===e.props.name),n=r.filter(e=>c.isValidElement(e)&&"direction"!==e.props.name&&"distance"!==e.props.name);if(e&&t)return(0,A.jsxs)("div",{className:"structured-params",children:[(0,A.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:12},children:[e,t]}),n]})}return(0,A.jsx)("div",{className:"structured-params",children:r})}return null},[h,V,E,Z,ew]),ex=(0,c.useCallback)(()=>{I(!0)},[]),ek=(0,c.useCallback)(()=>{I(!1)},[]),eS=(0,c.useCallback)(()=>{let e=e=>(0,A.jsx)(W.Ay,{type:"primary",icon:(0,A.jsx)(pN.A,{}),style:{borderRadius:20,zIndex:999},onClick:ev,disabled:!eg,loading:y,children:e});return f?"aiAct"===h?(0,A.jsx)(g.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"):m?(0,A.jsx)(W.Ay,{className:"prompt-stop-button",icon:(0,A.jsx)(ho,{}),onClick:b,style:{borderRadius:20,zIndex:999},children:"Stop"}):e("Run")},[f,y,ev,b,eg,h,m]),eC=(0,c.useCallback)(()=>{let e=e=>(0,A.jsx)(W.Ay,{"aria-label":e,className:"minimal-run-trigger",type:"primary",icon:(0,A.jsx)(pD.A,{}),onClick:ev,disabled:!eg,loading:y});return f?"aiAct"===h?(0,A.jsx)(g.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"):m?(0,A.jsx)(W.Ay,{"aria-label":"Stop running",className:"minimal-run-trigger minimal-run-trigger-stop prompt-stop-button",icon:(0,A.jsx)(ho,{}),onClick:b}):e("Run")},[f,y,ev,eg,b,h,m]),eI=null!=(a=null==S||null==(t=S.icons)?void 0:t.action)?a:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAASdJREFUeAHtlt3NgjAUhg8/CVx+G8gGX5xAnUDdQMcgkIgJBLbQEXQD3MAR6gZewgXgOUn9iRp6vAC96JM07YG36Zv+nBZAwySO4ymWgUoXRdEfaYGJyRElSbKyLGuHJVdpHcc5khb7RMCAZcA0TU82PYZ8IPsoZ4ttoEu0ga8bMB6DNE1X8H6jTUBuLmQL7SxkLbDkzz/ruhZBEKxfDGRZNm2aZgc9UFXVLAzDPbVvS1AUxQGrE3SPwHK8BganBy7NBuTU+r5vKLSNbG5RuwQF+hRoA9rA76RifMl4+JjI4Z5yu0KUZTnE8c4U3GbAdd3/HgYnPNu2R9eg98uIvmOGfL2M2tCpWBv4BQPiqW7j9IGWZ4CODT7X5pRAVFrUjEn7eNQ0bVwAyWpjMDlJKpAAAAAASUVORK5CYII=",ej=null==S||null==(r=S.icons)?void 0:r.actionChevron,eO=null!=(s=null==S||null==(n=S.icons)?void 0:n.settings)?s:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAaFJREFUeAHtlt9tgzAQxi8EJa/pBMkIHYENygalG7RvSQQKlfjz2I5ANkg3oBukG6QbtI9IIPq5ihHQOBXmFImqPwnZBvtsf9ydTfQPA77vz4IguCENDGJgOp3ux+PxLgxDnzrCsgAw/zZmGPOO48iUFci4wE42xITKXlEUO9d1X34s4NjZISZU9qCSjeKqastKWZYpMaKyNxqNto02MRDHcXmsJqvV6q7LWBYnxK4+SBOTeHDw2HAwn4aGlg9EUfQE2e+xYwchtaUeaPmAmFyUyH4W9aThA9jZ7alOiN39crl8O/FpoRpzjrq96hcgj2/wwVcNQlxb6/X6VdRrYaeNtGfUVvXbgE9iRNprOCHktPF/Z+3OeZ4fPM9LZbumgHjX2Qnr9rSioE/ma6MVBZDvWWQ/cbLR0GE5jEQoQhFLpGIkpvcuY1nOAkyeiBKJSRSXPw37UCkgbrWmaSZwsBkxoLInHBgJ6EG2KwUgn801+Tl78hyRVApkWfaIexxp4rRfqOzBUdN6+29cyYAMvQN1hCUMIbc1mUyu4VzDz4wX5wvRfah9kIOcwwAAAABJRU5ErkJggg==",eP=null==S||null==(i=S.icons)?void 0:i.history,eR=(0,c.useCallback)(()=>et&&"input"===N?(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(p$,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topLeft",trigger:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"input-icon-trigger",type:"button",children:(0,A.jsx)("img",{alt:"",className:"input-toolbar-icon",src:eO})})})}):null,[k,ex,ek,et,x,C,eO,p,N,$,_,ee]),eM=Y?V?em?(0,A.jsx)(uw.A.Item,{name:["params",em.name],style:{margin:0},children:(0,A.jsx)(hi,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:"prompt"===em.name?M:em.placeholder,autoFocus:!0,onKeyDown:ew})}):ef?eE():(0,A.jsx)("div",{className:"structured-params-container",children:eE()}):(0,A.jsx)(uw.A.Item,{name:"prompt",style:{margin:0},children:(0,A.jsx)(hi,{className:"main-side-console-input-textarea",disabled:!u,rows:3,placeholder:M,autoFocus:!0,onKeyDown:eb,onChange:eh,ref:D})}):(0,A.jsxs)("div",{className:"no-input-method",children:['Click "Run" to execute ',pH(h)]});return R?(0,A.jsxs)("div",{className:"prompt-input-wrapper prompt-input-wrapper-minimal",children:[(0,A.jsx)(uw.A.Item,{hidden:!0,name:"type",style:{margin:0},children:(0,A.jsx)(q.A,{})}),(0,A.jsxs)("div",{className:`main-side-console-input minimal-main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,A.jsxs)("div",{className:"minimal-toolbar-row",children:[(0,A.jsxs)("div",{className:"minimal-toolbar-left",children:[(0,A.jsx)(d5.A,{menu:el,placement:"topLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,A.jsxs)("button",{"aria-label":`Select action type (current: ${T})`,className:"minimal-action-trigger",disabled:!u,type:"button",children:[(0,A.jsx)("img",{alt:"",className:"minimal-action-icon",src:eI}),(0,A.jsx)("span",{className:"minimal-action-label",children:T}),ej?(0,A.jsx)("img",{alt:"",className:"minimal-action-chevron",src:ej}):(0,A.jsx)(pF,{"aria-hidden":"true",className:"minimal-action-chevron",focusable:"false"})]})}),(0,A.jsx)(hr,{onSelect:ep,history:J,currentType:h,popupPlacement:"top",trigger:(0,A.jsx)("button",{"aria-label":"Open prompt history",className:"minimal-icon-trigger",type:"button",children:eP?(0,A.jsx)("img",{alt:"",className:"minimal-toolbar-icon minimal-toolbar-icon-history",src:eP}):(0,A.jsx)(pL,{"aria-hidden":"true",className:"minimal-toolbar-icon minimal-toolbar-icon-history",focusable:"false"})})}),et&&"hidden"!==N?(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(p$,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k,popupPlacement:"topRight",trigger:(0,A.jsx)("button",{"aria-label":"Open run configuration",className:"minimal-icon-trigger",type:"button",children:(0,A.jsx)("img",{alt:"",className:"minimal-toolbar-icon",src:eO})})})}):null]}),(0,A.jsxs)("div",{className:"form-controller-wrapper",children:[null==S?void 0:S.inputActions,eC()]})]})]})]}):(0,A.jsxs)("div",{className:"prompt-input-wrapper",children:[(0,A.jsxs)("div",{className:"mode-radio-group-wrapper",children:[(0,A.jsxs)("div",{className:"mode-radio-group",ref:B,children:[(0,A.jsx)(uw.A.Item,{name:"type",style:{margin:0},children:(0,A.jsx)(pz.A.Group,{buttonStyle:"solid",disabled:!u,children:uW.map(e=>{var t;return(0,A.jsx)(g.A,{title:(null==(t=uH[e])?void 0:t.title)||"",children:(0,A.jsx)(pz.A.Button,{value:e,children:pH(e)})},e)})})}),(0,A.jsx)(d5.A,{menu:eA,placement:"bottomLeft",trigger:["click"],disabled:!u,overlayClassName:"more-apis-dropdown",children:(0,A.jsxs)(W.Ay,{className:`more-apis-button ${!uW.includes(h)?"selected-from-dropdown":""}`,children:[h&&!uW.includes(h)?pH(h):"more",(0,A.jsx)(pB.A,{style:{fontSize:"10px",marginLeft:"2px"}})]})})]}),(0,A.jsxs)("div",{className:"action-icons",children:[(0,A.jsx)(hr,{onSelect:ep,history:J,currentType:h}),et&&"toolbar"===N&&(0,A.jsx)("div",{className:C?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:ex,onMouseLeave:ek,children:(0,A.jsx)(p$,{enableTracking:"In-Browser-Extension"===p,showDeepLocateOption:_,showDeepThinkOption:ee,showDataExtractionOptions:$,hideDomAndScreenshotOptions:x,deviceType:k})})]})]}),(0,A.jsxs)("div",{className:`main-side-console-input ${!u?"disabled":""} ${y?"loading":""} ${ey?"prompt-input-empty":""}`,children:[eM,(0,A.jsxs)("div",{className:"form-controller-wrapper",children:[(0,A.jsxs)("div",{className:"input-actions-wrapper",children:[eR(),null==S?void 0:S.inputActions]}),eS()]})]})]})};function hs(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)}let hl=[...lZ,...lX,"aiAct"];function hA(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 hc(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){hA(o,n,i,a,s,"next",e)}function s(e){hA(o,n,i,a,s,"throw",e)}a(void 0)})}}function hu(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 hd=new Set;function hp(e){let{error:t}=e;if(!t)return null;let r=t.replace(/^(Error:\s*)+/,"Error: ");return(0,A.jsx)(V.A,{message:(0,A.jsx)("span",{style:{color:"#ff4d4f"},children:r}),type:"error",showIcon:!0})}function hh(e){let{action:t,content:r,description:n,error:i,shouldShowLoading:o}=e,{ref:a,truncated:s}=function(e,t){let r=(0,c.useRef)(null),[n,i]=(0,c.useState)(!1),o=(0,c.useCallback)(()=>{var e;i((e=r.current,!!e&&("multi-line"===t?e.scrollHeight-e.clientHeight>1:e.scrollWidth>e.clientWidth)))},[t]);return(0,c.useLayoutEffect)(()=>{if(o(),window.addEventListener("resize",o),"undefined"==typeof ResizeObserver||!r.current)return()=>window.removeEventListener("resize",o);let e=new ResizeObserver(o);return e.observe(r.current),()=>{window.removeEventListener("resize",o),e.disconnect()}},[e,o]),{ref:r,truncated:n}}(r,"multi-line"),l=(0,A.jsxs)("div",{className:"progress-row-content",children:[(0,A.jsxs)("div",{className:"progress-row-copy",ref:a,children:[t?(0,A.jsx)("span",{className:"progress-action-item",children:t}):null,n?(0,A.jsx)("div",{className:"progress-description-wrap",children:o?(0,A.jsx)(dQ,{text:n,className:"progress-description"}):(0,A.jsx)("span",{className:"progress-description",children:n})}):null]}),i&&(0,A.jsx)(hp,{error:i})]});return s?(0,A.jsx)(g.A,{title:r,children:l}):l}function hf(e){var t,r,n,i,o,a,s;let{playgroundSDK:l,storage:u,contextProvider:d,config:p={},envConfigReminderProps:h,branding:f={},className:m="",dryMode:g=!1,showContextPreview:y=!0}=e,[v]=uw.A.useForm(),{config:b}=X(),[w,E]=(0,c.useState)(!1),x=(0,c.useRef)(null);(0,c.useEffect)(()=>{hc(function*(){if(l&&"function"==typeof l.checkStatus)try{yield l.checkStatus(),E(!0)}catch(e){console.warn("Failed to initialize SDK, using default namespace:",e),E(!0)}else E(!0)})()},[l]);let k=p.storageNamespace,S=k?void 0:l&&l.id&&"string"==typeof l.id?`agent-${l.id}`:"playground-default",C=(0,c.useMemo)(()=>{if(!1===p.persistMessages)return null;if(u)return u;if(!w)return null;let e=k||S,t=dO();return console.log(`Using ${t} storage for namespace: ${e}`),dj(t,e)},[u,w,k,p.persistMessages,S]),{loading:I,setLoading:j,infoList:O,setInfoList:P,actionSpace:R,actionSpaceLoading:M,uiContextPreview:T,setUiContextPreview:N,showScrollToBottomButton:D,verticalMode:B,replayCounter:z,setReplayCounter:F,messagesInitialized:L,infoListRef:U,currentRunningIdRef:K,interruptedFlagRef:Q,clearInfoList:J,handleScrollToBottom:Z}=function(e,t,r,n){let i=!(arguments.length>4)||void 0===arguments[4]||arguments[4],[o,a]=(0,c.useState)(!1),[s,l]=(0,c.useState)([]),[A,u]=(0,c.useState)([]),[d,p]=(0,c.useState)(!0),[h,f]=(0,c.useState)(),[m,g]=(0,c.useState)(!1),[y,v]=(0,c.useState)(!0),b=(0,c.useRef)(0),[w,E]=(0,c.useState)(!1),[x,k]=(0,c.useState)(0),S=(0,c.useRef)(null),C=(0,c.useRef)(null),I=(0,c.useRef)({}),j=(0,c.useRef)(),[,O]=(0,c.useState)(0);(0,c.useEffect)(()=>{let e=!1,r=null!=t?t:null,o=t=>{e||l(t)};return j.current!==r&&(t||0===s.length)&&dR(function*(){let a=dT(dM({},uG(n)),{id:"welcome",timestamp:new Date});if(null==t?void 0:t.loadMessages)try{let e=yield t.loadMessages();0===e.length&&(e=yield dR(function*(){if(!i)return[];let e=dj(dO(),"playground-default");try{if(null==e?void 0:e.loadMessages){let r=yield e.loadMessages();if(r.length>1)return console.log("Found data in old namespace, migrating..."),(null==t?void 0:t.saveMessages)&&(yield t.saveMessages(r)),e.clearMessages&&(yield e.clearMessages()),r}}catch(e){console.debug("No data found in old namespace:",e)}return[]})()),e.some(e=>"welcome"===e.id)?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,c.useEffect)(()=>{(null==t?void 0:t.saveMessages)&&s.length>1&&t.saveMessages(s).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)})},[s,t]),(0,c.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,c.useEffect)(()=>{dR(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,c.useEffect)(()=>{E(window.innerWidth<750);let e=()=>{E(window.innerWidth<750)};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let P=(0,c.useCallback)(()=>{setTimeout(()=>{S.current&&(S.current.scrollTop=S.current.scrollHeight)},100)},[]),R=(0,c.useCallback)(()=>{if(S.current){let{scrollTop:e,scrollHeight:t,clientHeight:r}=S.current,n=e+r>=t-10;g(!n);let i=e<b.current;b.current=e,n?v(!0):i&&v(!1)}},[]),M=(0,c.useCallback)(()=>{S.current&&(S.current.scrollTo({top:S.current.scrollHeight,behavior:"smooth"}),g(!1),v(!0))},[]);(0,c.useEffect)(()=>{s.length>0&&y&&P()},[s,P,y]),(0,c.useEffect)(()=>{let e=S.current;if(e)return e.addEventListener("scroll",R),R(),()=>{e.removeEventListener("scroll",R)}},[R]);let T=(0,c.useCallback)(()=>dR(function*(){if(l([dT(dM({},uG(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,c.useCallback)(()=>dR(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:a,infoList:s,setInfoList:l,messagesInitialized:j.current===(null!=t?t:null),actionSpace:A,actionSpaceLoading:d,uiContextPreview:h,setUiContextPreview:f,showScrollToBottomButton:m,verticalMode:w,replayCounter:x,setReplayCounter:k,infoListRef:S,currentRunningIdRef:C,interruptedFlagRef:I,clearInfoList:T,refreshContext:N,handleScrollToBottom:M,scrollToBottom:P}}(l,C,d,f.targetName,!1!==p.persistMessages&&!p.storageNamespace),{handleRun:q,handleStop:H,cancelCurrentExecution:G,canStop:V}=function(e){let{playgroundSDK:t,storage:r,actionSpace:n,loading:i,setLoading:o,setInfoList:a,replayCounter:s,setReplayCounter:l,verticalMode:A,currentRunningIdRef:u,interruptedFlagRef:d,deviceType:p}=e,{deepLocate:h,deepThink:f,screenshotIncluded:m,domIncluded:g,imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}=X(),x=(0,c.useCallback)(function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u9(function*(){if(!t)return void console.warn("PlaygroundSDK is not available");let i=Date.now(),c=e.type,x=n.displayContent||`${e.type}: ${e.prompt||JSON.stringify(e.params)}`,k={id:`user-${Date.now()}`,type:"user",content:x,timestamp:new Date};a(e=>[...e,k]),o(!0);let S=de({},uV),C={id:`system-${i}`,type:"system",content:"",timestamp:new Date,loading:!0,loadingProgressText:""};a(e=>[...e,C]);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=cs(e),(o=cu(e))?`${n} - ${o}`:n),actionKind:cs(e),timestamp:new Date((null==(r=e.timing)?void 0:r.start)||Date.now()),result:e.error?{error:dr(e.error),result:null}:void 0}});a(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)]})}),ds(c)||!0!==f||console.warn("[Playground] Non-aiAct action will be executed without deepThink. deepThink is only forwarded for aiAct and runMarkdown.",{actionType:c,requestId:i.toString()});let r="unset"===f?void 0:f,o=de(dt(de({requestId:i.toString(),deepLocate:h},ds(c)&&void 0!==r?{deepThink:r}:{}),{screenshotIncluded:m,domIncluded:g,deviceOptions:{imeStrategy:y,screenshotStrategy:v,autoDismissKeyboard:b,keyboardDismissStrategy:w,alwaysRefreshScreenInfo:E}}),n.reportDisplay?{reportDisplay:n.reportDisplay}:{});if(S.result=yield t.executeAction(c,e,o),"object"==typeof S.result&&null!==S.result){let e=S.result;e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report),e.error&&(S.error=dr(e.error)),"result"in e&&(S.result=e.result)}}catch(e){if(d.current[i])return;S.error=dr(e),console.error("Playground execution error:",e),"object"==typeof e&&null!==e&&(e.dump&&(S.dump=e.dump),e.reportHTML&&(S.reportHTML=e.reportHTML),e.report&&(S.report=e.report))}if(yield da(S),d.current[i])return;o(!1),u.current=null;let I=null,j=s,O=di(S,p);O&&(l(e=>e+1),I=O,j=s+1),a(e=>e.map(e=>e.id===`system-${i}`?dt(de({},e),{content:"",loading:!1,loadingProgressText:""}):e));let P={id:`result-${i}`,type:"result",content:"Execution result",timestamp:new Date,result:S,loading:!1,replayScriptsInfo:I,replayCounter:j,loadingProgressText:"",verticalMode:A,actionType:c};if(a(e=>[...e,P]),null==r?void 0:r.saveResult)try{yield r.saveResult(P.id,P)}catch(e){console.error("Failed to save result:",e)}})()},[t,r,n,o,a,s,l,A,u,d,h,f,m,g,p,y,v,b,w,E]),k=(0,c.useCallback)(function(){let{appendStopMessage:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return u9(function*(){let r=u.current;if(!(r&&t&&t.cancelExecution))return;d.current[r]=!0,u.current=null,o(!1);let n=t=>{a(n=>{let i=n.map(e=>e.id===`system-${r}`?dt(de({},e),{content:"",loading:!1,loadingProgressText:""}):e);if(!e||i.some(e=>e.id===`stop-${r}`||e.id===`stop-result-${r}`))return i;if(t&&(t.dump||t.reportHTML||t.report)){let e=null,n=s;return(e=di(t,p))&&(l(e=>e+1),n=s+1),[...i,{id:`stop-result-${r}`,type:"result",content:"Execution stopped by user",timestamp:new Date,result:{result:null,dump:t.dump,reportHTML:t.reportHTML,report:t.report||null,error:null},loading:!1,verticalMode:A,replayScriptsInfo:e,replayCounter:n}]}return[...i,{id:`stop-${r}`,type:"system",content:"Operation stopped",timestamp:new Date,loading:!1}]})};try{let e=yield t.cancelExecution(r.toString()),i=null;if(e)i=e;else if(t.getCurrentExecutionData)try{i=yield t.getCurrentExecutionData()}catch(e){console.error("Failed to get execution data before stop:",e)}i&&(yield da(i)),n(i)}catch(e){console.error("Failed to stop execution:",e),n()}})()},[t,u,d,o,a,A,s,l,p]),S=(0,c.useCallback)(()=>u9(function*(){u.current&&(yield k({appendStopMessage:!0}))})(),[k,u]);return{cancelCurrentExecution:k,handleRun:x,handleStop:S,canStop:i&&!!u.current&&!!t&&!!t.cancelExecution}}({playgroundSDK:l,storage:C,actionSpace:R,loading:I,setLoading:j,setInfoList:P,replayCounter:z,setReplayCounter:F,verticalMode:B,currentRunningIdRef:K,interruptedFlagRef:Q,deviceType:p.deviceType}),Y=(0,c.useRef)(G),$=(0,c.useRef)(p.onExecutionStatusChange),_=(0,c.useRef)(p.onBeforeExecutionStart),ee=null!=(t=p.executionScopeKey)?t:null,et=(0,c.useRef)(ee);(0,c.useEffect)(()=>{Y.current=G},[G]),(0,c.useEffect)(()=>{$.current=p.onExecutionStatusChange},[p.onExecutionStatusChange]),(0,c.useEffect)(()=>{_.current=p.onBeforeExecutionStart},[p.onBeforeExecutionStart]);let er=(0,c.useCallback)(()=>(function(e){var t;return(t=function*(e){let{clearTimeline:t,clearTimelineBeforeRun:r=!1,onBeforeExecutionStart:n}=e;yield null==n?void 0:n(),r&&(yield t())},function(){var e=this,r=arguments;return new Promise(function(n,i){var o=t.apply(e,r);function a(e){hs(o,n,i,a,s,"next",e)}function s(e){hs(o,n,i,a,s,"throw",e)}a(void 0)})}).apply(this,arguments)})({clearTimeline:J,clearTimelineBeforeRun:p.clearTimelineBeforeRun,onBeforeExecutionStart:_.current}),[J,p.clearTimelineBeforeRun]);(0,c.useEffect)(()=>{var e;null==(e=p.onExecutionStatusChange)||e.call(p,{running:I,stoppable:V,stop:H})},[V,p.onExecutionStatusChange,H,I]),(0,c.useEffect)(()=>()=>{var e;Y.current(),null==(e=$.current)||e.call($,{running:!1,stoppable:!1,stop:()=>void 0})},[]),(0,c.useEffect)(()=>{et.current!==ee&&(et.current=ee,G())},[G,ee]),(0,c.useEffect)(()=>{(null==l?void 0:l.overrideConfig)&&b&&l.overrideConfig(b).catch(e=>{console.error("Failed to override SDK config:",e),p.suppressConfigErrorToast||ub(e,{title:"Failed to apply AI configuration"})})},[l,b,p.suppressConfigErrorToast]);let en=(0,c.useCallback)(()=>hc(function*(){try{let e=v.getFieldsValue();yield er(),yield q(e)}catch(e){ub(e,{title:"Execution failed"})}})(),[v,q,er]);(0,c.useEffect)(()=>{let e=p.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:hd,lastRequestId:x.current,sdkReady:w,messagesInitialized:L})){if(x.current=e.id,hd.add(e.id),hd.size>100){let e=hd.values().next().value;e&&hd.delete(e)}hc(function*(){yield er(),yield q(e.value,hu({displayContent:e.displayContent},e.reportDisplay?{reportDisplay:e.reportDisplay}:{}))})().catch(e=>{ub(e,{title:"Execution failed"})})}},[p.externalRunRequest,q,L,er,w]);let ei=Object.keys(b||{}).length>=1,eo=p.serverMode||!g&&!M&&ei,ea=uw.A.useWatch("type",v)||uW["0"],es=(0,c.useMemo)(()=>l&&"function"==typeof l.getServiceMode?l.getServiceMode():"Server",[l]),el=y&&!1!==p.showContextPreview,eA=p.layout||"vertical",ec=!1!==p.showVersionInfo,eu=p.deviceType,ed=null!=(r=p.executionFlow)?r:{},ep=!0===ed.collapsible,eh=null!=(n=ed.label)?n:"Execution Flow",[ef,em]=(0,c.useState)(()=>new Set),eg=(0,c.useCallback)(e=>{em(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),{firstInProgressGroup:ey,visibleInfoList:ev}=(0,c.useMemo)(()=>{let e=new Set,t=[],r=null,n=O.length>1;for(let i of O)if(!n||"welcome"!==i.id)if("progress"===i.type){if(null===r){r=i.id,e.add(i.id),t.push(i);continue}ep&&ef.has(r)||t.push(i)}else r=null,t.push(i);return{firstInProgressGroup:e,visibleInfoList:t}},[ef,ep,O]),eb=(0,c.useMemo)(()=>{for(let e=O.length-1;e>=0;e--)if("progress"===O[e].type)return O[e].id;return null},[O]),ew=(0,c.useMemo)(()=>(function(e){let t=new Set;for(let n=0;n<e.length;n++){var r;let i=e[n];(null==i?void 0:i.type)==="progress"&&(null==(r=e[n+1])?void 0:r.type)!=="progress"&&t.add(i.id)}return t})(ev),[ev]),eE=void 0!==p.emptyState&&1===ev.length&&(null==(o=ev[0])?void 0:o.id)==="welcome",ex=(0,c.useMemo)(()=>eE&&((e,t)=>{if(!(null==e?void 0:e.length)||!t||pT(e,t))return!1;let r=pM(e,t);return!!(null==r?void 0:r.paramSchema)&&!!pO(r.paramSchema)&&Object.keys(r.paramSchema.shape||{}).length>1})(R,ea),[R,eE,ea]),ek=!eE;(0,c.useEffect)(()=>{if(!ex)return;let e=()=>{let e=U.current;if(!e)return;let t=e.querySelector(".playground-empty-state-wrapper"),r=null==t?void 0:t.querySelector("[data-playground-empty-state-content-start]"),n=null==t?void 0:t.querySelector("[data-playground-empty-state-content-end]");if(!(r instanceof HTMLElement)||!(n instanceof HTMLElement))return;let 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)}},[U,ea,ex]);let eS=["playground-empty-state-wrapper",ex?"playground-empty-state-wrapper-offset-for-prompt":""].filter(Boolean).join(" "),eC=!1!==p.showClearButton,eI=(0,c.useCallback)(()=>{G().finally(()=>{J()})},[G,J]),ej=eC&&ek?(0,A.jsx)("div",{className:"clear-button-container",children:(0,A.jsx)(W.Ay,{size:"small",icon:(0,A.jsx)(uU.A,{}),onClick:eI,type:"text",className:"clear-button"})}):null,eO=null!=(i=p.timelineWrapper)?i:(e,t)=>e,eP=p.hidePromptInput?null:(0,A.jsxs)("div",{className:"bottom-input-section",children:[p.showEnvConfigReminder?(0,A.jsx)(dG,(a=hu({},h),s=s={playgroundSDK:l},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(s)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(s)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(s,e))}),a)):null,(0,A.jsx)(ha,{runButtonEnabled:eo,form:v,serviceMode:es,selectedType:ea,dryMode:g,stoppable:V,loading:I,onRun:en,onStop:H,actionSpace:R,chrome:p.promptInputChrome,deviceType:eu})]}),eR="before-timeline"===p.promptInputPlacement;return(0,A.jsx)("div",{className:`playground-container ${eA}-mode ${m}`.trim(),children:(0,A.jsxs)(uw.A,{form:v,onFinish:en,className:"command-form",initialValues:{type:uW["0"]},children:[el&&(0,A.jsx)("div",{className:"context-preview-section",children:(0,A.jsx)(dH,{uiContextPreview:T,setUiContextPreview:N,showContextPreview:el})}),eR?eP:null,(0,A.jsx)("div",{className:"playground-timeline-region",children:eO((0,A.jsxs)("div",{className:["middle-dialog-area",eE?"middle-dialog-area-empty":""].filter(Boolean).join(" "),children:[p.timelineHeader,(0,A.jsx)("div",{ref:U,className:["info-list-container",eE?"info-list-container-empty":""].filter(Boolean).join(" "),children:eE?(0,A.jsx)("div",{className:eS,children:p.emptyState}):(0,A.jsx)(uX.A,{itemLayout:"vertical",dataSource:ev,renderItem:e=>{var t,r,n,i;let o,a,s,l,u,d,h,m,g=ep&&ey.has(e.id),y=g&&ef.has(e.id);return(0,A.jsxs)(uX.A.Item,{className:"list-item",children:[g?(0,A.jsxs)("button",{type:"button",className:`progress-group-toggle ${ef.has(e.id)?"is-collapsed":"is-expanded"}`,"aria-expanded":!ef.has(e.id),onClick:()=>eg(e.id),children:[(0,A.jsx)("span",{className:"progress-group-toggle-label",children:eh}),(0,A.jsx)(uK.A,{className:"progress-group-toggle-chevron"})]}):null,y?null:"user"===e.type?(0,A.jsx)("div",{className:"user-message-container",children:(0,A.jsx)("div",{className:"user-message-bubble",children:e.content})}):"progress"===e.type?(0,A.jsx)("div",{children:(a=null==(t=(o=e.content.split(" - "))[0])?void 0:t.trim(),s=o.slice(1).join(" - ").trim(),l=e.id===eb,u=ew.has(e.id),m="completed"==(h=(d=I&&l)?"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,c.createElement)(px)}(e.actionKind,ed.resolveActionIcon):null,(0,A.jsxs)("div",{className:`progress-row ${u?"progress-row-last":""}`,children:[a?(0,A.jsx)("span",{className:`progress-status-icon ${h}`,children:"loading"===h?(0,A.jsx)(uQ.A,{spin:!0}):"error"===h?(0,c.createElement)(pk):null!==m?m:"✓"}):null,(0,A.jsx)(hh,{action:a,content:e.content,description:s,error:null==(n=e.result)?void 0:n.error,shouldShowLoading:d})]}))}):(0,A.jsxs)("div",{className:"system-message-container",children:[!1!==p.showSystemMessageHeader&&(0,A.jsxs)("div",{className:"system-message-header",children:[(0,A.jsx)(uJ.A,{className:"system-message-icon",component:f.icon||pE,style:{fontSize:20}}),(0,A.jsx)("span",{className:"system-message-title",children:f.title||"Playground"})]}),(e.content||e.result)&&(0,A.jsx)("div",{className:"system-message-content",children:"result"===e.type?(0,A.jsx)(pw,{result:e.result||null,loading:e.loading||!1,serverValid:!0,serviceMode:es,replayScriptsInfo:e.replayScriptsInfo||null,replayCounter:e.replayCounter||0,loadingProgressText:e.loadingProgressText||"",verticalMode:e.verticalMode||!1,fitMode:"width",showOutputAlongsideReport:void 0!==(i=e.actionType)&&hl.includes(i),onDownloadReport:p.onDownloadReport,playerPresentation:"timeline",hidePlayerFullscreenControl:p.hidePlayerFullscreenControl}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)("div",{className:"system-message-text",children:e.content}),e.loading&&e.loadingProgressText&&(0,A.jsx)("div",{className:"loading-progress-text",children:(0,A.jsx)("span",{children:e.loadingProgressText})})]})})]})]},e.id)}})}),ek&&D&&!1!==p.enableScrollToBottom&&(0,A.jsx)(W.Ay,{"aria-label":"Scroll to latest message",className:"scroll-to-bottom-button",shape:"circle",icon:(0,A.jsx)(uZ.A,{}),onClick:Z})]}),{empty:eE,headerAction:ej})}),eR?null:eP,ec&&f.version&&(0,A.jsx)("div",{className:"version-info-section",children:(0,A.jsxs)("span",{className:"version-text",children:["Midscene.js version: ",f.version]})})]})})}let hm=e=>{var t,r;return(0,A.jsx)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r=r={children:(0,A.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m12 6-4 4-4-4"})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))},hg=e=>{var t,r;return(0,A.jsxs)("svg",(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:55,height:52,fill:"none",viewBox:"0 0 55 52"},e),r=r={children:[(0,A.jsxs)("mask",{id:"midscene-logo_svg__a",width:55.371,height:52.35,x:-.202,y:-.201,fill:"#000",maskUnits:"userSpaceOnUse",children:[(0,A.jsx)("path",{fill:"#fff",d:"M-.202-.201h55.371v52.35H-.202z"}),(0,A.jsx)("path",{fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"})]}),(0,A.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",d:"M35.38 1.812c1.168 0 1.762 1.405.948 2.244l-.83.853a23.38 23.38 0 0 1 13.968 14.069c2.56 2.523 3.834 6.176 3.714 13.116-.083 4.799-1.883 7.946-4.24 9.99-2.23 1.933-4.832 2.754-6.322 3.224l-.069.022-.088.029q-.675.212-1.328.378a23.22 23.22 0 0 1-13.634 4.399 23.22 23.22 0 0 1-13.632-4.399q-.653-.165-1.328-.379l-.09-.028-.067-.022c-1.49-.47-4.092-1.29-6.323-3.224-2.357-2.044-4.157-5.191-4.24-9.99C1.7 25.154 2.975 21.5 5.535 18.978a23.39 23.39 0 0 1 14.02-14.089l-.81-.833c-.814-.839-.22-2.244.948-2.244zM20.254 6.747A21.4 21.4 0 0 0 7.25 20.086C5.046 22.067 3.68 25.032 3.803 32.06c.146 8.506 6.254 10.434 9.244 11.378l.09.029q.811.256 1.586.437A21.24 21.24 0 0 0 27.5 48.152l.001-.001a21.24 21.24 0 0 1-12.776-4.247 22 22 0 0 1-1.586-.437l-.09-.029c-2.99-.944-9.097-2.872-9.243-11.379-.122-7.027 1.243-9.992 3.447-11.973a21.4 21.4 0 0 1 13.003-13.34m11.359 41.007q.128-.023.255-.05h.002zm.88-.191.215-.051.002-.001zM21.084 6.465h.001",clipRule:"evenodd"}),(0,A.jsx)("path",{fill:"#3A4953",d:"m36.328 4.056 1.3 1.263zm-.83.853L34.2 3.646l-1.95 2.006 2.628.96zm13.968 14.069-1.707.609.14.39.295.291zm3.714 13.116 1.812.031zm-4.24 9.99 1.187 1.369zm-6.322 3.224.543 1.73.002-.002zm-.069.022-.543-1.729-.012.004zm-.088.029.546 1.727.01-.003zm-1.328.378-.446-1.757-.335.086-.28.202zm-13.634 4.399v1.812zm-13.632-4.399 1.06-1.47-.28-.202-.334-.084zm-1.328-.379-.55 1.727.004.001zm-.09-.028-.55 1.727zm-.067-.022.55-1.726-.005-.002zm-6.323-3.224-1.187 1.369zm-4.24-9.99-1.811.031zm3.715-13.116 1.272 1.29.295-.29.14-.391zm14.02-14.089.618 1.704 2.636-.955-1.954-2.011zm-.81-.833-1.3 1.262zm.948-2.244V0zm.563 4.935.615 1.704-1.23-3.409zM7.25 20.086l1.211 1.347.357-.32.151-.456zM3.803 32.06l-1.812.03zm9.244 11.378.55-1.726-.004-.002zm.09.029-.55 1.727h.004zm1.586.437 1.087-1.45-.304-.227-.369-.087zM27.5 48.152v1.812h.75l.532-.531zm.001-.001 1.282 1.281 3.093-3.093H27.5zm-12.776-4.247 1.087-1.45-.304-.227-.369-.087zm-1.586-.437-.55 1.727h.004zm-.09-.029.55-1.726-.004-.002zM3.805 32.06l-1.812.032zm3.447-11.973 1.211 1.347.357-.32.151-.456zm24.043 27.727.32 1.784-.64-3.567zm-.573.096-.271-1.792.542 3.584zm.892-.155-.348-1.778.695 3.557zm.255-.05.37 1.774.23-.048.21-.105zm.002 0 .81 1.62-1.179-3.395zm.623-.141L32.07 45.8l.845 3.524zm.215-.051.441 1.757.192-.048.177-.089zm.002-.001.81 1.62-1.251-3.378zM21.084 6.465V4.653h-.278l-.266.084zm-.572.191-.593-1.712 1.186 3.424zm.573-.19.545 1.728-.545-3.54zM35.38 1.811v1.812a.49.49 0 0 1-.351-.83l1.3 1.262 1.3 1.262C39.558 3.33 38.15 0 35.379 0zm.949 2.244-1.3-1.264-.829.854 1.3 1.263 1.298 1.263.83-.853zm-.83.853-.621 1.702a21.57 21.57 0 0 1 12.882 12.976l1.707-.61 1.706-.608A25.2 25.2 0 0 0 36.12 3.207zm13.968 14.069-1.272 1.29c2.043 2.015 3.29 5.063 3.174 11.795l1.812.03 1.812.032c.123-7.147-1.178-11.405-4.254-14.438zm3.714 13.116-1.812-.031c-.074 4.3-1.658 6.955-3.615 8.651l1.187 1.37 1.187 1.369c2.758-2.391 4.773-6.03 4.865-11.328zm-4.24 9.99-1.187-1.37c-1.919 1.663-4.188 2.395-5.68 2.866l.545 1.728.545 1.728c1.488-.469 4.421-1.379 6.964-3.583zm-6.322 3.224-.543-1.728-.069.021.543 1.729.544 1.729.068-.022zm-.069.022-.555-1.725-.089.029.556 1.724.556 1.725.088-.028zm-.088.029-.546-1.728q-.626.197-1.228.35l.446 1.756.445 1.756q.704-.178 1.429-.407zm-1.328.378-1.06-1.47a21.4 21.4 0 0 1-12.574 4.057v3.624c5.48 0 10.562-1.759 14.694-4.742zm-13.634 4.399v-1.812a21.4 21.4 0 0 1-12.571-4.056l-1.06 1.469-1.061 1.47a25.03 25.03 0 0 0 14.692 4.74zm-13.632-4.399.446-1.757q-.602-.151-1.228-.35l-.546 1.728-.546 1.728q.723.229 1.429.407zm-1.328-.379.55-1.726-.09-.029-.55 1.727-.55 1.727.09.028zm-.09-.028.55-1.727-.067-.021-.55 1.726-.55 1.727.067.022zm-.067-.022.545-1.728c-1.492-.47-3.762-1.202-5.681-2.866l-1.187 1.37-1.187 1.369c2.543 2.204 5.477 3.114 6.964 3.583zm-6.323-3.224 1.187-1.37c-1.957-1.696-3.54-4.35-3.615-8.651l-1.811.03-1.812.032c.091 5.297 2.106 8.937 4.864 11.328zm-4.24-9.99 1.812-.031c-.116-6.733 1.13-9.78 3.175-11.795l-1.272-1.29-1.272-1.29C1.185 20.72-.115 24.977.008 32.124zm3.715-13.116 1.707.609A21.57 21.57 0 0 1 20.172 6.593l-.617-1.704-.618-1.703a25.2 25.2 0 0 0-15.11 15.183zm14.02-14.089 1.3-1.262-.81-.834-1.3 1.263-1.3 1.262.811.834zm-.81-.833 1.3-1.263a.49.49 0 0 1-.351.831V1.812L19.691 0c-2.771 0-4.177 3.332-2.247 5.318zm.948-2.244v1.812H35.38V0H19.692zm.563 4.935-.616-1.705A23.2 23.2 0 0 0 5.53 19.514l1.72.572 1.72.571a19.58 19.58 0 0 1 11.9-12.206zM7.25 20.086l-1.212-1.348C3.27 21.228 1.866 24.83 1.99 32.091l1.812-.032 1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596zM3.803 32.06l-1.812.03c.082 4.753 1.861 7.854 4.18 9.864 2.236 1.938 4.852 2.746 6.33 3.212l.546-1.728.546-1.728c-1.511-.477-3.445-1.105-5.047-2.494-1.519-1.316-2.867-3.433-2.932-7.188zm9.244 11.378-.55 1.727.09.029.55-1.727.55-1.727-.09-.028zm.09.029-.546 1.728q.875.276 1.718.474l.414-1.765.414-1.764q-.706-.164-1.454-.401zm1.586.437-1.086 1.45a23.05 23.05 0 0 0 13.862 4.61V46.34a19.43 19.43 0 0 1-11.69-3.886zM27.5 48.152l1.282 1.281v-.001l-1.28-1.281-1.282-1.282-.001.001zm.001-.001v-1.812a19.43 19.43 0 0 1-11.69-3.885l-1.086 1.45-1.086 1.45A23.05 23.05 0 0 0 27.5 49.964zm-12.776-4.247.414-1.764c-.472-.11-.954-.243-1.454-.401l-.546 1.728-.546 1.728q.875.276 1.718.474zm-1.586-.437.55-1.727-.09-.028-.55 1.726-.55 1.727.09.029zm-.09-.029.546-1.728c-1.511-.477-3.444-1.105-5.047-2.494-1.518-1.316-2.866-3.433-2.93-7.188l-1.812.032-1.812.03c.082 4.752 1.86 7.853 4.18 9.864 2.235 1.938 4.85 2.745 6.33 3.212zM3.805 32.06l1.811-.03c-.117-6.794 1.208-9.122 2.847-10.596l-1.211-1.347-1.212-1.348c-2.767 2.49-4.172 6.092-4.047 13.353zm3.447-11.973 1.72.571A19.58 19.58 0 0 1 20.87 8.451l-.615-1.704-.616-1.705A23.2 23.2 0 0 0 5.532 19.514zm24.043 27.727-.32-1.783q-.266.048-.524.087l.271 1.792.271 1.791q.319-.048.622-.103zm-.573.096.272 1.791q.316-.048.622-.103l-.32-1.784-.321-1.783a20 20 0 0 1-.524.087zm.892-.155.347 1.779c.061-.012.179-.034.278-.055l-.37-1.774-.369-1.774c-.071.015-.124.025-.234.046zm.255-.05.81 1.621h.003l-.81-1.622-.811-1.62h-.002zm.002 0-.369-1.775-.235.047.347 1.778.347 1.779.28-.056zm.623-.141.422 1.762c.023-.006.159-.037.234-.056l-.441-1.757-.441-1.758-.197.047zm.215-.051.81 1.62h.002l-.81-1.621-.81-1.621h-.002zm.002-.001-.441-1.758-.199.047.423 1.763.422 1.762.236-.057zM21.084 6.465l-.544-1.728q-.325.104-.621.207l.593 1.712.593 1.712q.273-.095.524-.174zm-.572.191.594 1.712q.27-.093.524-.174l-.545-1.729-.544-1.728q-.323.103-.622.207zm.573-.19V4.652zv1.812z",mask:"url(#midscene-logo_svg__a)"}),(0,A.jsx)("mask",{id:"midscene-logo_svg__b",width:53,height:50,x:1,y:1,maskUnits:"userSpaceOnUse",style:{maskType:"alpha"},children:(0,A.jsx)("path",{fill:"#F0F0F0",fillRule:"evenodd",d:"M24.214 12.537a4.63 4.63 0 0 0 6.64 0l6.608-6.805a23.4 23.4 0 0 1 12 13.247c2.56 2.524 3.833 6.176 3.714 13.114-.083 4.8-1.883 7.947-4.24 9.991-2.231 1.934-4.833 2.755-6.322 3.225l-.158.05q-.675.213-1.328.378a23.22 23.22 0 0 1-13.632 4.399 23.22 23.22 0 0 1-13.632-4.399q-.654-.165-1.33-.378l-.157-.05c-1.49-.47-4.092-1.291-6.322-3.225-2.358-2.044-4.157-5.192-4.24-9.99-.12-6.941 1.155-10.593 3.716-13.117a23.4 23.4 0 0 1 12.05-13.27zM35.38 1.812c1.168 0 1.763 1.406.949 2.244l-6.895 7.1c-.52.534-1.21.8-1.899.8h-.012a2.65 2.65 0 0 1-1.536-.503 2.7 2.7 0 0 1-.35-.299L19.552 4.89l.001-.001-.808-.833c-.814-.838-.22-2.244.949-2.244z",clipRule:"evenodd"})}),(0,A.jsxs)("g",{mask:"url(#midscene-logo_svg__b)",children:[(0,A.jsx)("path",{fill:"#fff",d:"M-4.044-9.086h63.087V65.49H-4.044z"}),(0,A.jsx)("g",{filter:"url(#midscene-logo_svg__c)",opacity:.8,children:(0,A.jsx)("path",{fill:"#005EEC",fillOpacity:.01,d:"M41.85 43.36c-.378-.748-3.453.67-7.362 2.242s-7.175 2.702-6.798 3.45c.378.746 3.853.078 7.763-1.494s6.773-3.452 6.396-4.199"})})]}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__d)",d:"M5.773 18.412h43.601v24.223H5.773z"}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__e)",d:"M5.773 18.473h43.086v24.454H5.773z"}),(0,A.jsx)("path",{fill:"url(#midscene-logo_svg__f)",d:"M5.926 18.075h43.092v24.457H5.926z"}),(0,A.jsx)("foreignObject",{width:27.157,height:19.138,x:21.193,y:36.687,children:(0,A.jsx)("div",{xmlns:"http://www.w3.org/1999/xhtml",style:{backdropFilter:"blur(2.96px)",clipPath:"url(#midscene-logo_svg__g)",height:"100%",width:"100%"}})}),(0,A.jsx)("path",{fill:"#3A4953",fillRule:"evenodd",stroke:"#3A4953",strokeWidth:.514,d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253Zm17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901Z",clipRule:"evenodd","data-figma-bg-blur-radius":5.911}),(0,A.jsxs)("defs",{children:[(0,A.jsx)("pattern",{id:"midscene-logo_svg__d",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__h",transform:"scale(.00483 .0087)"})}),(0,A.jsx)("pattern",{id:"midscene-logo_svg__e",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__i",transform:"scale(.009 .01587)"})}),(0,A.jsx)("pattern",{id:"midscene-logo_svg__f",width:1,height:1,patternContentUnits:"objectBoundingBox",children:(0,A.jsx)("use",{xlinkHref:"#midscene-logo_svg__j",transform:"scale(.009 .01587)"})}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__h",width:207,height:115,preserveAspectRatio:"none"}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__i",width:111,height:63,preserveAspectRatio:"none"}),(0,A.jsx)("image",{xlinkHref:"data:image/png;base64,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",id:"midscene-logo_svg__j",width:111,height:63,preserveAspectRatio:"none"}),(0,A.jsx)("clipPath",{id:"midscene-logo_svg__g",transform:"translate(-21.193 -36.687)",children:(0,A.jsx)("path",{fillRule:"evenodd",d:"m14.619 40.412.082.025c2.186.657 4.053.825 6.578.932.365.016.704-.127.932-.363l3.08-5.674c.94-1.735 3.484-1.735 4.426 0l3.08 5.674c.227.236.566.379.931.363 2.525-.107 4.392-.275 6.578-.932l.082-.025c1.384-.416 3.235-.984 4.774-2.253 1.475-1.216 2.74-3.144 2.8-6.483.066-3.66-.372-5.858-1.066-7.316-.672-1.411-1.641-2.254-2.965-3.093-1.305-.828-2.922-1.54-4.435-1.54H37.44c-1.566 0-3.128.159-4.66.473l-.265.055a24.45 24.45 0 0 1-10.02-.043 22 22 0 0 0-4.582-.484h-2.402c-1.895 0-3.3.818-4.435 1.539-1.359.862-2.325 1.704-2.988 3.106-.686 1.45-1.11 3.637-1.043 7.303.06 3.339 1.325 5.267 2.8 6.483 1.539 1.269 3.39 1.837 4.774 2.253m17.133 1.319-3.146-5.796c-.463-.854-1.742-.854-2.205 0l-3.146 5.796a2.48 2.48 0 0 1-2.03.901c-2.556-.11-4.549-.282-6.888-.985l-.082-.024c-2.74-.824-8.339-2.505-8.473-9.924-.136-7.494 1.7-9.65 4.617-11.5 1.164-.738 2.832-1.735 5.112-1.735h2.402c1.63 0 3.256.172 4.847.512 3.127.67 6.368.683 9.5.04l.266-.054a24.5 24.5 0 0 1 4.914-.498h2.056c1.865 0 3.727.857 5.112 1.736 2.852 1.808 4.753 4.005 4.618 11.499-.135 7.419-5.733 9.1-8.474 9.924l-.082.024c-2.339.703-4.332.876-6.888.985a2.48 2.48 0 0 1-2.03-.901",clipRule:"evenodd"})}),(0,A.jsxs)("filter",{id:"midscene-logo_svg__c",width:27.157,height:19.138,x:21.193,y:36.687,colorInterpolationFilters:"sRGB",filterUnits:"userSpaceOnUse",children:[(0,A.jsx)("feFlood",{floodOpacity:0,result:"BackgroundImageFix"}),(0,A.jsx)("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),(0,A.jsx)("feGaussianBlur",{result:"effect1_foregroundBlur_8049_134028",stdDeviation:3.212})]})]})]},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))};function hy(e){var t;return null==e||null==(t=e.platformSelector)?void 0:t.fieldKey}function hv(){return(0,A.jsx)(hm,{"aria-hidden":"true",className:"session-setup-select-icon"})}let hb="Create Agent";function hw(e){var t,r,n,i;let{form:o,sessionSetup:a,sessionSetupError:s,sessionViewState:l,sessionLoading:c,sessionMutating:u,onCreateSession:d}=e,p=u||c||"blocked"===l.setupState,h=null!=(t=null==a?void 0:a.primaryActionLabel)?t:hb,f=null!=(r=null==a?void 0:a.title)?r:hb,m=null!=(n=null==a?void 0:a.description)?n:"Create a platform session before running actions.";return(0,A.jsx)("div",{className:"session-setup-panel",children:(0,A.jsxs)("div",{className:"session-setup-card",children:[(0,A.jsx)(hg,{"aria-hidden":"true",className:"session-setup-logo"}),(0,A.jsx)("h1",{className:"session-setup-title",children:f}),(0,A.jsx)("p",{className:"session-setup-description",children:m}),"blocked"===l.setupState&&l.setupBlockingReason&&(0,A.jsx)(V.A,{type:"error",showIcon:!0,message:"Setup blocked",description:l.setupBlockingReason,className:"session-setup-alert"}),s?(0,A.jsx)(V.A,{type:"error",showIcon:!0,message:"Failed to load setup",description:s,className:"session-setup-alert"}):null,(null==a?void 0:a.notice)?(0,A.jsx)(V.A,{type:a.notice.type,showIcon:!0,message:a.notice.message,description:a.notice.description,className:"session-setup-alert"}):null,(0,A.jsxs)(uw.A,{form:o,layout:"vertical",className:"session-setup-form",onFinish:()=>{p||d()},children:[(null!=(i=null==a?void 0:a.fields)?i:[]).map(e=>(0,A.jsx)(uw.A.Item,{label:e.label,name:e.key,tooltip:e.description,rules:e.required?[{required:!0,message:`${e.label} is required`}]:void 0,children:function(e,t){if("number"===e.type)return(0,A.jsx)(p_.A,{style:{width:"100%"},placeholder:e.placeholder});if("select"===e.type){var r,n;let i=hy(t),o=function(e,t){var r;if(hy(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,A.jsx)(pz.A.Group,{className:"platform-selector-group",children:(o||[]).map(e=>(0,A.jsxs)(pz.A.Button,{value:e.value,className:"platform-selector-card",children:[(0,A.jsx)("div",{className:"platform-selector-title",children:e.label}),e.description?(0,A.jsx)("div",{className:"platform-selector-description",children:e.description}):null]},String(e.value)))}):(0,A.jsx)(G.A,{placeholder:e.placeholder,suffixIcon:(0,A.jsx)(hv,{}),options:(null!=(n=null!=o?o:e.options)?n:[]).map(e=>({label:e.label,value:e.value,description:e.description})),optionRender:e=>{let t=e.data.description;return t?(0,A.jsxs)("div",{className:"session-select-option",children:[(0,A.jsx)("div",{className:"session-select-option-label",children:e.data.label}),(0,A.jsx)("div",{className:"session-select-option-description",children:t})]}):e.data.label}})}return(0,A.jsx)(q.A,{placeholder:e.placeholder})}(e,a)},e.key)),(0,A.jsx)("button",{type:"submit",className:"session-setup-submit",disabled:p,children:u?"Creating...":h})]})]})})}function hE(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 hx(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 hk(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 hS(e){var t,r,n,i,o,a;let s,{controller:l,appVersion:c,title:u="Playground",branding:d,playgroundConfig:p,header:h,className:f,playgroundClassName:m,notConnectedFallback:g}=e,{state:y,actions:v}=l,b=hx(hE({},s={showContextPreview:!1,layout:"vertical",showVersionInfo:!1,enableScrollToBottom:!1,serverMode:!0,showEnvConfigReminder:!1,showClearButton:!1,showSystemMessageHeader:!1,promptInputChrome:{variant:"minimal"},executionFlow:{collapsible:!0},deviceType:y.deviceType,executionUx:{hints:y.executionUxHints,countdownSeconds:y.countdownSeconds}},p),{executionFlow:hE({},s.executionFlow,null==p?void 0:p.executionFlow),executionUx:hE({},s.executionUx,null==p?void 0:p.executionUx)}),w=(t=y.runtimeInfo,r=y.deviceType,hx(hE({},d),{title:null!=(n=null==t?void 0:t.title)?n:u,version:c,targetName:null!=(a=null!=(o=null!=(i=null==t?void 0:t.platformId)?i:null==d?void 0:d.targetName)?o:r)?a:"screen"}));return(0,A.jsxs)("div",{className:["playground-conversation-panel",f].filter(Boolean).join(" "),children:[(0,A.jsx)(H.A,{open:null!==y.countdown,footer:(0,A.jsx)(W.Ay,{onClick:v.finishCountdown,type:"default",children:"Skip countdown"}),closable:!0,maskClosable:!0,onCancel:v.finishCountdown,centered:!0,width:400,styles:{mask:{backgroundColor:"rgba(0, 0, 0, 0.75)"}},children:(0,A.jsxs)("div",{style:{textAlign:"center",padding:"40px 20px"},children:[(0,A.jsx)("div",{style:{fontSize:"120px",fontWeight:"bold",color:"GO!"===y.countdown?"#52c41a":"#1890ff",marginBottom:"24px",lineHeight:1},children:y.countdown}),(0,A.jsx)("div",{style:{fontSize:"18px",fontWeight:500,marginBottom:"12px"},children:"Automation Starting Soon"}),(0,A.jsxs)("div",{style:{fontSize:"14px",color:"var(--midscene-text-secondary)"},children:["The selected session requested a countdown before execution.",(0,A.jsx)("br",{}),"Please wait until the run starts."]})]})}),h,(0,A.jsx)("div",{className:"playground-conversation-body",children:y.serverOnline?y.sessionViewState.connected?(0,A.jsx)(hf,{playgroundSDK:y.playgroundSDK,config:b,branding:w,className:["playground-container","playground-conversation-skin",m].filter(Boolean).join(" ")}):void 0!==g?(0,A.jsx)(A.Fragment,{children:g}):(0,A.jsx)(hw,{form:y.form,sessionSetup:y.sessionSetup,sessionSetupError:y.sessionSetupError,sessionViewState:y.sessionViewState,sessionLoading:y.sessionLoading,sessionMutating:y.sessionMutating,onCreateSession:()=>{var e;return(e=function*(){yield v.createSession()},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){hk(o,n,i,a,s,"next",e)}function s(e){hk(o,n,i,a,s,"throw",e)}a(void 0)})})()}}):(0,A.jsx)("div",{className:"playground-conversation-offline",children:(0,A.jsx)(V.A,{type:"warning",showIcon:!0,message:"Playground server offline",description:"Reconnect the runtime to continue using the Android playground."})})})]})}let{Content:hC}=ep.A;function hI(e){var t;let{serverUrl:r,appVersion:n,title:i="Playground",defaultDeviceType:o="web",branding:a,playgroundConfig:s,offlineTitle:l="Midscene Playground",offlineStatusText:u="Server offline...",pollIntervalMs:p=5e3}=e,[h,f]=(0,c.useState)(!1),m=function(e){var t;let{serverUrl:r,defaultDeviceType:n="web",pollIntervalMs:i=5e3,countdownSeconds:o=3,initialFormValues:a,onCountdownFinish:s}=e,{message:l}=ek.A.useApp(),[u]=uw.A.useForm(),d=(0,c.useRef)(a);(0,c.useLayoutEffect)(()=>{let e=d.current;if(e)for(let[t,r]of Object.entries(e))void 0===u.getFieldValue(t)&&u.setFieldsValue({[t]:r})},[u]);let p=null!=(t=uw.A.useWatch([],u))?t:{},[h,f]=(0,c.useState)(null),[m,g]=(0,c.useState)(null),[y,v]=(0,c.useState)(null),[b,w]=(0,c.useState)(!1),[E,x]=(0,c.useState)(!1),k=X(e=>e.config),S=(0,c.useMemo)(()=>JSON.stringify(Object.entries(k).sort((e,t)=>{let[r]=e,[n]=t;return r.localeCompare(n)})),[k]),C=uz(m),I="string"==typeof C?p[C]:void 0,j=(0,c.useMemo)(()=>new uy({type:"remote-execution",serverUrl:r}),[r]),{serverOnline:O,isUserOperating:P,deviceType:R,runtimeInfo:M,executionUxHints:T,refreshServerState:N}=function(e,t,r){let[n,i]=(0,c.useState)(!1),[o,a]=(0,c.useState)(!1),[s,l]=(0,c.useState)(t),[A,u]=(0,c.useState)(null),[d,p]=(0,c.useState)([]),h=(0,c.useRef)(null),f=(0,c.useRef)(!0);(0,c.useEffect)(()=>(f.current=!0,()=>{f.current=!1}),[]),(0,c.useEffect)(()=>{h.current=A},[A]),(0,c.useEffect)(()=>{e.onProgressUpdate(e=>{a(!!e)})},[e]);let m=(0,c.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(eJ(r,t)),p(eZ(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(eJ(a,t)),p(eZ(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){uk(o,n,i,a,s,"next",e)}function s(e){uk(o,n,i,a,s,"throw",e)}a(void 0)})})()},[t,e]);return(0,c.useEffect)(()=>{m();let e=window.setInterval(()=>{m()},r);return()=>{window.clearInterval(e)}},[r,m]),{serverOnline:n,isUserOperating:o,deviceType:s,runtimeInfo:A,executionUxHints:d,refreshServerState:m}}(j,n,i),D=(0,c.useMemo)(()=>{let e,t;return t=(e=(null==M?void 0:M.metadata)||{}).setupState,{connected:!!e.sessionConnected,displayName:"string"==typeof e.sessionDisplayName?e.sessionDisplayName:void 0,setupState:"blocked"===t||"ready"===t||"required"===t?t:"ready",setupBlockingReason:"string"==typeof e.setupBlockingReason?e.setupBlockingReason:void 0}},[M]),B=(0,c.useRef)(null),z=(0,c.useRef)(null),F=(0,c.useRef)(!0),L=(0,c.useRef)(void 0),U=(0,c.useRef)(null),K=(0,c.useRef)(null),Q=(0,c.useRef)(!1),J=(0,c.useRef)(null),Z=(0,c.useRef)(null),q=(0,c.useRef)(null),H=(0,c.useCallback)(()=>uD(function*(){if(!uC(k))return J.current=null,q.current=null,!0;if(J.current===S)return!0;let e=q.current;if((null==e?void 0:e.signature)===S)return e.promise;let t={promise:Promise.resolve(!0),signature:S},r=uD(function*(){try{var e;return yield(e=function*(){return!!uC(k)&&(yield j.overrideConfig(k),!0)},function(){var t=this,r=arguments;return new Promise(function(n,i){var o=e.apply(t,r);function a(e){uS(o,n,i,a,s,"next",e)}function s(e){uS(o,n,i,a,s,"throw",e)}a(void 0)})})(),J.current=S,!0}catch(e){return ub(e,{title:"Failed to apply AI configuration"}),!1}finally{q.current===t&&(q.current=null)}})();return t.promise=r,q.current=t,r})(),[k,S,j]),W=(0,c.useCallback)(()=>{let e=null!==B.current;null!==B.current&&(window.clearInterval(B.current),B.current=null);let t=z.current;z.current=null,F.current&&f(null),null==t||t(),e&&F.current&&(null==s||s())},[s]),G=(0,c.useCallback)(()=>uD(function*(){if(!(o<=0))return W(),new Promise(e=>{z.current=e;let t=o;F.current&&f(t),B.current=window.setInterval(()=>{if((t-=1)>0){F.current&&f(t);return}if(0===t){F.current&&f("GO!");return}W()},1e3)})})(),[o,W]);(0,c.useEffect)(()=>(F.current=!0,()=>{F.current=!1,W()}),[W]),(0,c.useEffect)(()=>T.includes("countdown-before-run")?(j.setBeforeActionHook(()=>uD(function*(){yield G()})()),()=>{j.setBeforeActionHook(void 0)}):void j.setBeforeActionHook(void 0),[T,j,G]);let V=(0,c.useCallback)(e=>uD(function*(){let t=uB({},u.getFieldsValue(!0),e||{});w(!0);try{let r=yield j.getSessionSetup(e);g(r),v(null);let n=uz(r);L.current=n&&"string"==typeof t[n]?t[n]:void 0,u.setFieldsValue(uE(r,t))}catch(e){console.error("Failed to load session setup:",e),v(e instanceof Error?e.message:"Failed to load session setup")}finally{w(!1)}})(),[u,j]),Y=(0,c.useCallback)((e,t)=>uD(function*(){if(Z.current)return Z.current;let r=uD(function*(){var r;let n;try{if(Q.current=!0,x(!0),!(yield H()))return!1;let r=null!=e?e:yield u.validateFields();return n=r,yield j.createSession(r),(null==t?void 0:t.silent)||(K.current=null),(null==t?void 0:t.silent)||l.success("Agent created"),yield N(),!0}catch(e){if(e.errorFields)return!1;if(null==t?void 0:t.silent)return K.current=uI(n),!1;return ub(e,null!=(r=function(e){let t;if(t=uR(e).toLowerCase(),uP.test(t)&&(t.includes("puppeteer browsers install chrome")||t.includes("cache path")||t.includes("puppeteer")))return{description:(0,A.jsx)(uT,{error:e}),duration:0,title:"Failed to create Agent"}}(e))?r:{title:"Failed to create Agent"}),!1}finally{Q.current=!1,x(!1)}})(),n={promise:null};return n.promise=r.finally(()=>{Z.current===n.promise&&(Z.current=null)}),Z.current=n.promise,n.promise})(),[H,u,l,j,N]),$=(0,c.useCallback)(()=>uD(function*(){try{K.current=uI(ux(m,u.getFieldsValue(!0))),Q.current=!0,x(!0),yield j.destroySession(),l.success("Session disconnected"),yield N(),yield V()}catch(e){ub(e,{title:"Failed to disconnect session"})}finally{Q.current=!1,x(!1)}})(),[u,l,j,N,V,m]);return(0,c.useEffect)(()=>{O&&H()},[H,O]),(0,c.useEffect)(()=>{if(!O||D.connected)return;let e=!1,t=!1,r=()=>uD(function*(){if(!e&&!t){t=!0;try{yield V(u.getFieldsValue(!0))}finally{t=!1}}})();r();let n=window.setInterval(()=>{r()},i);return()=>{e=!0,window.clearInterval(n)}},[u,i,V,O,D.connected]),(0,c.useEffect)(()=>{if(!O||D.connected||!I)return;let e=uz(m);if(e&&L.current!==I){var t,r;V((t=uB({},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,V,I,O,m,D.connected]),(0,c.useEffect)(()=>{if(D.connected){U.current=null;return}if(!O||b||E||Q.current||y)return;let e=ux(m,u.getFieldsValue(!0)),{signature:t,shouldCreate:r}=function(e){let{autoCreateInput:t,lastAttemptedSignature:r,blockedSignature:n}=e,i=uI(t);return i?{signature:i,shouldCreate:i!==r&&i!==n}:{signature:null,shouldCreate:!1}}({autoCreateInput:e,lastAttemptedSignature:U.current,blockedSignature:K.current});if(!r||!t){t||(U.current=null);return}U.current=t,uD(function*(){(yield Y(null!=e?e:void 0,{silent:!0}))||(U.current=null)})()},[Y,u,O,b,E,m,y,D.connected]),{state:{playgroundSDK:j,form:u,formValues:p,serverOnline:O,isUserOperating:P,deviceType:R,runtimeInfo:M,executionUxHints:T,sessionViewState:D,sessionSetup:m,sessionSetupError:y,sessionLoading:b,sessionMutating:E,countdown:h,countdownSeconds:o},actions:{refreshServerState:N,refreshSessionSetup:V,createSession:Y,destroySession:$,finishCountdown:W}}}({serverUrl:r,defaultDeviceType:o,countdownSeconds:null==s||null==(t=s.executionUx)?void 0:t.countdownSeconds,pollIntervalMs:p});return((0,c.useEffect)(()=>{let e=()=>{f(window.innerWidth<=1024)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),m.state.serverOnline)?(0,A.jsx)(eV,{children:(0,A.jsx)(ep.A,{className:"app-container playground-container",children:(0,A.jsx)(hC,{className:"app-content",children:(0,A.jsxs)(eh.YZ,{autoSaveId:"playground-layout",direction:h?"vertical":"horizontal",children:[(0,A.jsx)(eh.Zk,{defaultSize:h?67:32,maxSize:h?85:60,minSize:h?67:25,className:"app-panel left-panel",children:(0,A.jsxs)("div",{className:"panel-content left-panel-content",children:[(0,A.jsx)("div",{className:"playground-panel-header",children:(0,A.jsxs)("div",{className:"header-row",children:[(0,A.jsx)(d,{}),(0,A.jsx)(ed,{showTooltipWhenEmpty:!1,showModelName:!1,playgroundSDK:m.state.playgroundSDK})]})}),(0,A.jsx)("div",{className:"playground-panel-playground",children:(0,A.jsx)(hS,{controller:m,appVersion:n,branding:a,playgroundConfig:s,title:i})})]})}),(0,A.jsx)(eh.TW,{className:"panel-resize-handle"}),(0,A.jsx)(eh.Zk,{defaultSize:h?33:68,minSize:h?15:40,className:"app-panel right-panel",children:(0,A.jsx)("div",{className:"panel-content right-panel-content",children:m.state.sessionViewState.connected?(0,A.jsx)(eW,{playgroundSDK:m.state.playgroundSDK,runtimeInfo:m.state.runtimeInfo,serverUrl:r,serverOnline:m.state.serverOnline,isUserOperating:m.state.isUserOperating}):(0,A.jsx)(em,{})})})]})})})}):(0,A.jsx)(eV,{children:(0,A.jsx)("div",{className:"server-offline-container",children:(0,A.jsxs)("div",{className:"server-offline-message",children:[(0,A.jsx)(d,{}),(0,A.jsxs)("div",{className:"server-offline-content",children:[(0,A.jsxs)("div",{className:"server-offline-icon",children:[(0,A.jsx)(uF,{className:"icon-background"}),(0,A.jsx)(uL,{className:"icon-foreground"})]}),(0,A.jsx)("h1",{children:l}),(0,A.jsx)("p",{className:"connection-status",children:u})]})]})})})}let hj=document.getElementById("root");if(!hj)throw Error("Root element not found");(0,u.createRoot)(hj).render((0,A.jsx)(c.StrictMode,{children:(0,A.jsx)(function(){return(0,A.jsx)(hI,{serverUrl:"",appVersion:"1.12.7",title:"Playground",offlineTitle:"Midscene Playground"})},{})}))},82297(e){"use strict";if("undefined"==typeof sharp){var t=Error("Cannot find module 'sharp'");throw t.code="MODULE_NOT_FOUND",t}e.exports=sharp},8908(){},10329(){},79476(){},26122(){},17407(){},20200(){},21460(){},50902(){},3710(){},9140(){},58973(){},94504(){},13009(){},52801(){},16390(){},76970(){},83147(){},63612(){},57012(){},53244(){},25592(){}},l={};function A(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={id:e,loaded:!1,exports:{}};return s[e].call(r.exports,r,r.exports,A),r.loaded=!0,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:"beaced02",236:"a5d2c1b1",466:"42c0aeb1"})[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})},A.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),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","415"],()=>A(2170));c=A.O(c)})();
|
|
855
|
+
//# sourceMappingURL=index.1b760d4c.js.map
|