momentic 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
@@ -193,7 +193,7 @@ Categories:
193
193
  `);if(n<1||n>o.length)return;let r=Math.max(1,n-Eq),i=Math.min(o.length,n+Eq),s=String(i).length,a=[];for(let l=r;l<=i;l++){let c=l===n?Fye:Dye;a.push(`${c}${String(l).padStart(s)} | ${o[l-1]??""}`);}return a.join(`
194
194
  `)}var vq="\r",wq="\x1B[1A",Iq="\x1B[J",Gye="\u280B\u2819\u2839\u2838\u283C\u2834\u2826\u2827\u2807\u280F",jye="|/-\\",$ye="#0891b2",Vye={pass:{glyph:"\u2713",ascii:"v",paint:la.green},fail:{glyph:"\u2718",ascii:"x",paint:la.red},skip:{glyph:"\u2212",ascii:"-",paint:la.dim},cancel:{glyph:"\u2298",ascii:"o",paint:la.yellow},retry:{glyph:"\u21BB",ascii:"~",paint:la.yellow}};function Jo(e){let t=e.colorLevel>0&&e.isTTY,n=(o,r)=>t?r(o):o;return {unicode:e.unicode,color:t,bold:o=>n(o,la.bold),dim:o=>n(o,la.gray),code:o=>n(o,la.hex($ye)),spinner:o=>{let r=e.unicode?Gye:jye,i=(o%r.length+r.length)%r.length;return n(r.charAt(i),la.cyan)},statusGlyph:o=>{let r=Vye[o],i=e.unicode?r.glyph:r.ascii;return t?r.paint(i):i},separator:e.unicode?" \xB7 ":" | "}}function xq(e,t=""){let n=process.stdout?.columns||process.stderr?.columns||80,o=Math.max(n-t.length,20),r=[];for(let i of e.split(`
195
195
  `)){let s="";for(let a of i.split(" ")){if(!s.length){s=a;continue}let l=`${s} ${a}`;if(l.length<=o){s=l;continue}r.push(t+s),s=a;}r.push(t+s);}return r.join(`
196
- `)}var Wye={PASS:{glyph:"pass",isTerminal:true},FAIL:{glyph:"fail",isTerminal:true},SKIP:{glyph:"skip",isTerminal:true},CANCEL:{glyph:"cancel",isTerminal:true},RETRY:{glyph:"retry",isTerminal:false}},qye={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function _q(e,t,n=0){let o=qye[e];if(!o)return;let r=Jo(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=Wye[o];return {badge:r.statusGlyph(i),isTerminal:s}}function Rc(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function pC({parallel:e,remoteBrowser:t}){let n=cpus$1().length;if(t){if(e<=n*4)return;let o=Math.max(1,n*4-2);C.warn(`Running ${e} workers on a ${n}-core machine with a remote browser. We recommend at most ~${o} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}n>=e*2||C.warn(`Running ${e} workers on a ${n}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function Pq(){let e=m2(),t=[];e.lowMemorySamples>0&&t.push(`memory low ${e.lowMemorySamples}x`),e.highCpuSamples>0&&t.push(`CPU saturated ${e.highCpuSamples}x`),e.highHeapSamples>0&&t.push(`heap near limit ${e.highHeapSamples}x`),t.length!==0&&(C.log(""),C.warn(`Machine was under pressure during this run (${t.join(", ")}). Slowdowns and timeouts may be related.`));}var xe=Dh({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.0.1"});var Yye=5,vp=" ";async function mC({getResults:e,checkDone:t,name:n,timeoutMs:o=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<o;){let s;i>Yye&&(C.error(`Failed to fetch ${n} status too many times.`),process.exit(1));try{s=await e(),i=0;}catch(c){i++,xe.warn({err:c},"Failed to fetch run status; retrying."),C.warn({err:c},"Failed to fetch run status; retrying."),await new Promise(d=>setTimeout(d,1500*i));continue}if(t(s))return s;let l=Math.max(1e4,Math.floor(o/100));await new Promise(c=>setTimeout(c,l));}C.error(`Timeout elapsed waiting for ${n} to complete (${Math.floor(o/1e3)}s).`),process.exit(1);}function Oq(e){let t={passed:[],failed:[],cancelled:[],quarantinedPassed:[],quarantinedFailed:[]};for(let n of e)switch(n.status){case "PASSED":(n.quarantined?t.quarantinedPassed:t.passed).push(n);break;case "FAILED":(n.quarantined?t.quarantinedFailed:t.failed).push(n);break;case "CANCELLED":t.cancelled.push(n);break}return t}function UM(e){let t=Oq(e),n=t.failed.filter(r=>r.failureDetails?.classification?.action==="heal"),o=t.failed.filter(r=>r.failureDetails?.classification?.action==="warn");return {passed:t.passed.length,failed:t.failed.length,cancelled:t.cancelled.length,quarantinedPassed:t.quarantinedPassed.length,quarantinedFailed:t.quarantinedFailed.length,healElectedFailures:n.length,warnElectedFailures:o.length}}function Vh(e,{onlyQuarantined:t=false,overrideExitCode:n=false}={}){let o=n?e.healElectedFailures+e.warnElectedFailures:0,r=e.failed-o,i=t?e.quarantinedFailed:0;return r+i>0||e.cancelled>0}function HM({results:e,startTime:t,getPath:n,getUrl:o,printFailureBody:r,getCancellationReason:i,recoveredCount:s,skippedCount:a,videoRecordingActive:l}){let{passed:c,failed:d,cancelled:u,quarantinedPassed:p,quarantinedFailed:m}=Oq(e),h=Vt(),g=h.unicode?"\u2500":"-",f=process.stdout?.columns||80,S=(T,A,E,v)=>{let I=` ${A+1}) ${n(T)} `,O=Math.max(3,f-I.length-2);C.log(""),C.log(E(`${I}${g.repeat(O)}`)),C.log(""),v();let _=o(T);_&&(C.log(""),C.log(`${vp}${Rc(_,h)}`));};Tq(()=>{d.forEach((_,R)=>{S(_,R,la.red.bold,()=>r?.(_));}),u.forEach((_,R)=>{S(_,d.length+R,la.yellow.bold,()=>{let x=i?.(_)??"Cancelled";C.log(`${vp}${la.yellow.bold(x)}`);});});let T=(_,R,x)=>{_.length!==0&&(C.log(""),C.log(` ${x(`${_.length} ${R}`)}`),_.forEach(P=>{C.dimmed(`${vp}${n(P)}`);}));};T(d,"failed",la.red.bold),T(m,"failed",_=>la.red.bold(`${_} (quarantined)`)),T(u,"cancelled",la.yellow.bold),a&&(C.log(""),C.log(` ${la.yellow.bold(`${a} skipped`)}`));let A=c.length+p.length,E=Math.max(1,Math.round((Date.now()-t)/1e3)),v=[];p.length>0&&v.push(`${p.length} quarantined`),s&&s>0&&v.push(`${s} recovered`);let I=v.length>0?` (${v.join(", ")})`:"",O=Jye(e,h,l);C.log(""),C.log(` ${la.green.bold(`${A} passed${I} (${E}s)`)}${O}`),Pq();});}function hC(e){return HM(e),UM(e.results)}function Jye(e,t,n=false){let o=e.length;if(o===0)return "";let r=e.filter(a=>a.usedRemoteBrowser).length;return r===0?"":`${t.unicode?" \xB7 ":" | "}${r}/${o} ran on remote browser${n?" (video saved async)":""}`}function gC(e){if(!e.failureDetails||!e.failureReason)return;let t=Ka({failureReason:e.failureReason,classification:e.failureDetails.classification,manualClassification:e.failureDetails.manualClassification}),n=t.title??e.failureReason,o=e.failureDetails.classification?.rootCause??t.description??t.title??e.failureReason;C.log(`${vp}${la.red.bold(n)}`),o&&o!==n&&(C.log(""),C.log(xq(o,vp)));let r=Cq({failureDetails:e.failureDetails,filePath:e.filePath,results:e.results,beforeResults:e.beforeResults,afterResults:e.afterResults});r&&(C.log(""),C.log(r));let i=e.failureDetails.classification?.citations;if(i&&i.length>0){C.log(""),C.log(`${vp}${la.bold("Sources:")}`);for(let s of i)C.log(`${vp} [${s.refId}] ${s.title}`);}}var zh=" ".repeat(6);var Xye=(e,t,n,o)=>{if(n==="length"||n==="prototype"||n==="arguments"||n==="caller")return;let r=Object.getOwnPropertyDescriptor(e,n),i=Object.getOwnPropertyDescriptor(t,n);!Qye(r,i)&&o||Object.defineProperty(e,n,i);},Qye=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},Zye=(e,t)=>{let n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n);},eSe=(e,t)=>`/* Wrapped ${e}*/
196
+ `)}var Wye={PASS:{glyph:"pass",isTerminal:true},FAIL:{glyph:"fail",isTerminal:true},SKIP:{glyph:"skip",isTerminal:true},CANCEL:{glyph:"cancel",isTerminal:true},RETRY:{glyph:"retry",isTerminal:false}},qye={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function _q(e,t,n=0){let o=qye[e];if(!o)return;let r=Jo(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=Wye[o];return {badge:r.statusGlyph(i),isTerminal:s}}function Rc(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function pC({parallel:e,remoteBrowser:t}){let n=cpus$1().length;if(t){if(e<=n*4)return;let o=Math.max(1,n*4-2);C.warn(`Running ${e} workers on a ${n}-core machine with a remote browser. We recommend at most ~${o} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}n>=e*2||C.warn(`Running ${e} workers on a ${n}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function Pq(){let e=m2(),t=[];e.lowMemorySamples>0&&t.push(`memory low ${e.lowMemorySamples}x`),e.highCpuSamples>0&&t.push(`CPU saturated ${e.highCpuSamples}x`),e.highHeapSamples>0&&t.push(`heap near limit ${e.highHeapSamples}x`),t.length!==0&&(C.log(""),C.warn(`Machine was under pressure during this run (${t.join(", ")}). Slowdowns and timeouts may be related.`));}var xe=Dh({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.0.2"});var Yye=5,vp=" ";async function mC({getResults:e,checkDone:t,name:n,timeoutMs:o=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<o;){let s;i>Yye&&(C.error(`Failed to fetch ${n} status too many times.`),process.exit(1));try{s=await e(),i=0;}catch(c){i++,xe.warn({err:c},"Failed to fetch run status; retrying."),C.warn({err:c},"Failed to fetch run status; retrying."),await new Promise(d=>setTimeout(d,1500*i));continue}if(t(s))return s;let l=Math.max(1e4,Math.floor(o/100));await new Promise(c=>setTimeout(c,l));}C.error(`Timeout elapsed waiting for ${n} to complete (${Math.floor(o/1e3)}s).`),process.exit(1);}function Oq(e){let t={passed:[],failed:[],cancelled:[],quarantinedPassed:[],quarantinedFailed:[]};for(let n of e)switch(n.status){case "PASSED":(n.quarantined?t.quarantinedPassed:t.passed).push(n);break;case "FAILED":(n.quarantined?t.quarantinedFailed:t.failed).push(n);break;case "CANCELLED":t.cancelled.push(n);break}return t}function UM(e){let t=Oq(e),n=t.failed.filter(r=>r.failureDetails?.classification?.action==="heal"),o=t.failed.filter(r=>r.failureDetails?.classification?.action==="warn");return {passed:t.passed.length,failed:t.failed.length,cancelled:t.cancelled.length,quarantinedPassed:t.quarantinedPassed.length,quarantinedFailed:t.quarantinedFailed.length,healElectedFailures:n.length,warnElectedFailures:o.length}}function Vh(e,{onlyQuarantined:t=false,overrideExitCode:n=false}={}){let o=n?e.healElectedFailures+e.warnElectedFailures:0,r=e.failed-o,i=t?e.quarantinedFailed:0;return r+i>0||e.cancelled>0}function HM({results:e,startTime:t,getPath:n,getUrl:o,printFailureBody:r,getCancellationReason:i,recoveredCount:s,skippedCount:a,videoRecordingActive:l}){let{passed:c,failed:d,cancelled:u,quarantinedPassed:p,quarantinedFailed:m}=Oq(e),h=Vt(),g=h.unicode?"\u2500":"-",f=process.stdout?.columns||80,S=(T,A,E,v)=>{let I=` ${A+1}) ${n(T)} `,O=Math.max(3,f-I.length-2);C.log(""),C.log(E(`${I}${g.repeat(O)}`)),C.log(""),v();let _=o(T);_&&(C.log(""),C.log(`${vp}${Rc(_,h)}`));};Tq(()=>{d.forEach((_,R)=>{S(_,R,la.red.bold,()=>r?.(_));}),u.forEach((_,R)=>{S(_,d.length+R,la.yellow.bold,()=>{let x=i?.(_)??"Cancelled";C.log(`${vp}${la.yellow.bold(x)}`);});});let T=(_,R,x)=>{_.length!==0&&(C.log(""),C.log(` ${x(`${_.length} ${R}`)}`),_.forEach(P=>{C.dimmed(`${vp}${n(P)}`);}));};T(d,"failed",la.red.bold),T(m,"failed",_=>la.red.bold(`${_} (quarantined)`)),T(u,"cancelled",la.yellow.bold),a&&(C.log(""),C.log(` ${la.yellow.bold(`${a} skipped`)}`));let A=c.length+p.length,E=Math.max(1,Math.round((Date.now()-t)/1e3)),v=[];p.length>0&&v.push(`${p.length} quarantined`),s&&s>0&&v.push(`${s} recovered`);let I=v.length>0?` (${v.join(", ")})`:"",O=Jye(e,h,l);C.log(""),C.log(` ${la.green.bold(`${A} passed${I} (${E}s)`)}${O}`),Pq();});}function hC(e){return HM(e),UM(e.results)}function Jye(e,t,n=false){let o=e.length;if(o===0)return "";let r=e.filter(a=>a.usedRemoteBrowser).length;return r===0?"":`${t.unicode?" \xB7 ":" | "}${r}/${o} ran on remote browser${n?" (video saved async)":""}`}function gC(e){if(!e.failureDetails||!e.failureReason)return;let t=Ka({failureReason:e.failureReason,classification:e.failureDetails.classification,manualClassification:e.failureDetails.manualClassification}),n=t.title??e.failureReason,o=e.failureDetails.classification?.rootCause??t.description??t.title??e.failureReason;C.log(`${vp}${la.red.bold(n)}`),o&&o!==n&&(C.log(""),C.log(xq(o,vp)));let r=Cq({failureDetails:e.failureDetails,filePath:e.filePath,results:e.results,beforeResults:e.beforeResults,afterResults:e.afterResults});r&&(C.log(""),C.log(r));let i=e.failureDetails.classification?.citations;if(i&&i.length>0){C.log(""),C.log(`${vp}${la.bold("Sources:")}`);for(let s of i)C.log(`${vp} [${s.refId}] ${s.title}`);}}var zh=" ".repeat(6);var Xye=(e,t,n,o)=>{if(n==="length"||n==="prototype"||n==="arguments"||n==="caller")return;let r=Object.getOwnPropertyDescriptor(e,n),i=Object.getOwnPropertyDescriptor(t,n);!Qye(r,i)&&o||Object.defineProperty(e,n,i);},Qye=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},Zye=(e,t)=>{let n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n);},eSe=(e,t)=>`/* Wrapped ${e}*/
197
197
  ${t}`,tSe=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),nSe=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),oSe=(e,t,n)=>{let o=n===""?"":`with ${n.trim()}() `,r=eSe.bind(null,o,t.toString());Object.defineProperty(r,"name",nSe);let{writable:i,enumerable:s,configurable:a}=tSe;Object.defineProperty(e,"toString",{value:r,writable:i,enumerable:s,configurable:a});};function GM(e,t,{ignoreNonConfigurable:n=false}={}){let{name:o}=e;for(let r of Reflect.ownKeys(t))Xye(e,t,r,n);return Zye(e,t),oSe(e,t,o),e}var fC=new WeakMap,Mq=(e,t={})=>{if(typeof e!="function")throw new TypeError("Expected a function");let n,o=0,r=e.displayName||e.name||"<anonymous>",i=function(...s){if(fC.set(i,++o),o===1)n=e.apply(this,s),e=void 0;else if(t.throw===true)throw new Error(`Function \`${r}\` can only be called once`);return n};return GM(i,e),fC.set(i,o),i};Mq.callCount=e=>{if(!fC.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return fC.get(e)};var Nq=Mq;var wp=[];wp.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&wp.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&wp.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var yC=e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function",jM=Symbol.for("signal-exit emitter"),$M=globalThis,rSe=Object.defineProperty.bind(Object),VM=class{emitted={afterExit:false,exit:false};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if($M[jM])return $M[jM];rSe($M,jM,{value:this,writable:false,enumerable:false,configurable:false});}on(t,n){this.listeners[t].push(n);}removeListener(t,n){let o=this.listeners[t],r=o.indexOf(n);r!==-1&&(r===0&&o.length===1?o.length=0:o.splice(r,1));}emit(t,n,o){if(this.emitted[t])return false;this.emitted[t]=true;let r=false;for(let i of this.listeners[t])r=i(n,o)===true||r;return t==="exit"&&(r=this.emit("afterExit",n,o)||r),r}},SC=class{},iSe=e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}}),zM=class extends SC{onExit(){return ()=>{}}load(){}unload(){}},WM=class extends SC{#s=qM.platform==="win32"?"SIGINT":"SIGHUP";#n=new VM;#e;#r;#p;#t={};#i=false;constructor(t){super(),this.#e=t,this.#t={};for(let n of wp)this.#t[n]=()=>{let o=this.#e.listeners(n),{count:r}=this.#n,i=t;if(typeof i.__signal_exit_emitter__=="object"&&typeof i.__signal_exit_emitter__.count=="number"&&(r+=i.__signal_exit_emitter__.count),o.length===r){this.unload();let s=this.#n.emit("exit",null,n),a=n==="SIGHUP"?this.#s:n;s||t.kill(t.pid,a);}};this.#p=t.reallyExit,this.#r=t.emit;}onExit(t,n){if(!yC(this.#e))return ()=>{};this.#i===false&&this.load();let o=n?.alwaysLast?"afterExit":"exit";return this.#n.on(o,t),()=>{this.#n.removeListener(o,t),this.#n.listeners.exit.length===0&&this.#n.listeners.afterExit.length===0&&this.unload();}}load(){if(!this.#i){this.#i=true,this.#n.count+=1;for(let t of wp)try{let n=this.#t[t];n&&this.#e.on(t,n);}catch{}this.#e.emit=(t,...n)=>this.#m(t,...n),this.#e.reallyExit=t=>this.#o(t);}}unload(){this.#i&&(this.#i=false,wp.forEach(t=>{let n=this.#t[t];if(!n)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,n);}catch{}}),this.#e.emit=this.#r,this.#e.reallyExit=this.#p,this.#n.count-=1);}#o(t){return yC(this.#e)?(this.#e.exitCode=t||0,this.#n.emit("exit",this.#e.exitCode,null),this.#p.call(this.#e,this.#e.exitCode)):0}#m(t,...n){let o=this.#r;if(t==="exit"&&yC(this.#e)){typeof n[0]=="number"&&(this.#e.exitCode=n[0]);let r=o.call(this.#e,t,...n);return this.#n.emit("exit",this.#e.exitCode,null),r}else return o.call(this.#e,t,...n)}},qM=globalThis.process,{onExit:Lq}=iSe(yC(qM)?new WM(qM):new zM);var kq=ma.stderr.isTTY?ma.stderr:ma.stdout.isTTY?ma.stdout:void 0,sSe=kq?Nq(()=>{Lq(()=>{kq.write("\x1B[?25h");},{alwaysLast:true});}):()=>{},Dq=sSe;var TC=false,Wh={};Wh.show=(e=ma.stderr)=>{e.isTTY&&(TC=false,e.write("\x1B[?25h"));};Wh.hide=(e=ma.stderr)=>{e.isTTY&&(Dq(),TC=true,e.write("\x1B[?25l"));};Wh.toggle=(e,t)=>{e!==void 0&&(TC=e),TC?Wh.show(t):Wh.hide(t);};var KM=Wh;var ES=S_(YM());function JM(){return ma.platform!=="win32"?ma.env.TERM!=="linux":!!ma.env.CI||!!ma.env.WT_SESSION||!!ma.env.TERMINUS_SUBLIME||ma.env.ConEmuTask==="{cmd::Cmder}"||ma.env.TERM_PROGRAM==="Terminus-Sublime"||ma.env.TERM_PROGRAM==="vscode"||ma.env.TERM==="xterm-256color"||ma.env.TERM==="alacritty"||ma.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var lSe={info:la.blue("\u2139"),success:la.green("\u2714"),warning:la.yellow("\u26A0"),error:la.red("\u2716")},cSe={info:la.blue("i"),success:la.green("\u221A"),warning:la.yellow("\u203C"),error:la.red("\xD7")},dSe=JM()?lSe:cSe,AS=dSe;function XM({onlyFirst:e=false}={}){let r="(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";return new RegExp(r,e?void 0:"g")}var uSe=XM();function QM(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return !e.includes("\x1B")&&!e.includes("\x9B")?e:e.replace(uSe,"")}function ZM({stream:e=process.stdout}={}){return !!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}function eN(){let{env:e}=ma,{TERM:t,TERM_PROGRAM:n}=e;return ma.platform!=="win32"?t!=="linux":!!e.WT_SESSION||!!e.TERMINUS_SUBLIME||e.ConEmuTask==="{cmd::Cmder}"||n==="Terminus-Sublime"||n==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var pSe=3,tN=class{#s=0;start(){this.#s++,this.#s===1&&this.#n();}stop(){if(this.#s<=0)throw new Error("`stop` called more times than `start`");this.#s--,this.#s===0&&this.#e();}#n(){ma.platform==="win32"||!ma.stdin.isTTY||(ma.stdin.setRawMode(true),ma.stdin.on("data",this.#r),ma.stdin.resume());}#e(){ma.stdin.isTTY&&(ma.stdin.off("data",this.#r),ma.stdin.pause(),ma.stdin.setRawMode(false));}#r(t){t[0]===pSe&&ma.emit("SIGINT");}},mSe=new tN,nN=mSe;S_(YM());var oN=class{#s=0;#n=false;#e=0;#r=-1;#p=0;#t;#i;#o;#m;#g;#c;#d;#u;#f;#a;#l;color;constructor(t){typeof t=="string"&&(t={text:t}),this.#t={color:"cyan",stream:ma.stderr,discardStdin:true,hideCursor:true,...t},this.color=this.#t.color,this.spinner=this.#t.spinner,this.#g=this.#t.interval,this.#o=this.#t.stream,this.#c=typeof this.#t.isEnabled=="boolean"?this.#t.isEnabled:ZM({stream:this.#o}),this.#d=typeof this.#t.isSilent=="boolean"?this.#t.isSilent:false,this.text=this.#t.text,this.prefixText=this.#t.prefixText,this.suffixText=this.#t.suffixText,this.indent=this.#t.indent,ma.env.NODE_ENV==="test"&&(this._stream=this.#o,this._isEnabled=this.#c,Object.defineProperty(this,"_linesToClear",{get(){return this.#s},set(n){this.#s=n;}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#r}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}));}get indent(){return this.#u}set indent(t=0){if(!(t>=0&&Number.isInteger(t)))throw new Error("The `indent` option must be an integer from 0 and up");this.#u=t,this.#h();}get interval(){return this.#g??this.#i.interval??100}get spinner(){return this.#i}set spinner(t){if(this.#r=-1,this.#g=void 0,typeof t=="object"){if(t.frames===void 0)throw new Error("The given spinner must have a `frames` property");this.#i=t;}else if(!eN())this.#i=ES.default.line;else if(t===void 0)this.#i=ES.default.dots;else if(t!=="default"&&ES.default[t])this.#i=ES.default[t];else throw new Error(`There is no built-in spinner named '${t}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#f}set text(t=""){this.#f=t,this.#h();}get prefixText(){return this.#a}set prefixText(t=""){this.#a=t,this.#h();}get suffixText(){return this.#l}set suffixText(t=""){this.#l=t,this.#h();}get isSpinning(){return this.#m!==void 0}#y(t=this.#a,n=" "){return typeof t=="string"&&t!==""?t+n:typeof t=="function"?t()+n:""}#S(t=this.#l,n=" "){return typeof t=="string"&&t!==""?n+t:typeof t=="function"?n+t():""}#h(){let t=this.#o.columns??80,n=this.#y(this.#a,"-"),o=this.#S(this.#l,"-"),r=" ".repeat(this.#u)+n+"--"+this.#f+"--"+o;this.#e=0;for(let i of QM(r).split(`
198
198
  `))this.#e+=Math.max(1,Math.ceil(RQ(i,{countAnsiEscapeCodes:true})/t));}get isEnabled(){return this.#c&&!this.#d}set isEnabled(t){if(typeof t!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#c=t;}get isSilent(){return this.#d}set isSilent(t){if(typeof t!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#d=t;}frame(){let t=Date.now();(this.#r===-1||t-this.#p>=this.interval)&&(this.#r=++this.#r%this.#i.frames.length,this.#p=t);let{frames:n}=this.#i,o=n[this.#r];this.color&&(o=la[this.color](o));let r=typeof this.#a=="string"&&this.#a!==""?this.#a+" ":"",i=typeof this.text=="string"?" "+this.text:"",s=typeof this.#l=="string"&&this.#l!==""?" "+this.#l:"";return r+o+i+s}clear(){if(!this.#c||!this.#o.isTTY)return this;this.#o.cursorTo(0);for(let t=0;t<this.#s;t++)t>0&&this.#o.moveCursor(0,-1),this.#o.clearLine(1);return (this.#u||this.lastIndent!==this.#u)&&this.#o.cursorTo(this.#u),this.lastIndent=this.#u,this.#s=0,this}render(){return this.#d?this:(this.clear(),this.#o.write(this.frame()),this.#s=this.#e,this)}start(t){return t&&(this.text=t),this.#d?this:this.#c?this.isSpinning?this:(this.#t.hideCursor&&KM.hide(this.#o),this.#t.discardStdin&&ma.stdin.isTTY&&(this.#n=true,nN.start()),this.render(),this.#m=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#o.write(`- ${this.text}
199
199
  `),this)}stop(){return this.#c?(clearInterval(this.#m),this.#m=void 0,this.#r=0,this.clear(),this.#t.hideCursor&&KM.show(this.#o),this.#t.discardStdin&&ma.stdin.isTTY&&this.#n&&(nN.stop(),this.#n=false),this):this}succeed(t){return this.stopAndPersist({symbol:AS.success,text:t})}fail(t){return this.stopAndPersist({symbol:AS.error,text:t})}warn(t){return this.stopAndPersist({symbol:AS.warning,text:t})}info(t){return this.stopAndPersist({symbol:AS.info,text:t})}stopAndPersist(t={}){if(this.#d)return this;let n=t.prefixText??this.#a,o=this.#y(n," "),r=t.symbol??" ",i=t.text??this.text,a=typeof i=="string"?(r?" ":"")+i:"",l=t.suffixText??this.#l,c=this.#S(l," "),d=o+r+a+c+`
@@ -248,7 +248,7 @@ ${u}`,{cause:d})}i=JS({testV2:l,testName:Mn__default.basename(e,".test.yaml")});
248
248
  ${z.prettifyError(s)}`:`: ${J(s)}`;C.warn(`Project config at ${e} does not match the required schema${a}`);return}let o=deletedDiff(t,n),r=I3(o,"");r.length>0&&C.warn(`Momentic config file at ${e} contains unrecognized keys: ${r.join(", ")}. These keys will be ignored.`);let i=EEe(n);return REe(t)&&i.push("ai.classification.categories"),i.length>0&&C.warn(`Momentic config file at ${e} sets cloud-managed AI settings (${i.join(", ")}) that are configured in the Momentic dashboard and ignored locally. Remove them from this file.`),n}function vEe(e){let t=w3(e,"workspace configuration");if(t!==void 0)try{return gEe.parse(t)}catch(n){C.warn(`Possible Momentic workspace configuration file at ${e} does not adhere to the required schema: ${J(n)}`);return}}function wEe(){let e=[],t=cwd(),n=Mn__default.parse(t).root,o=15,r=0;for(;r<o;){r++;let i=Mn__default.basename(t);if(ZN.includes(i))return C.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),e;for(let s of readdirSync(t))if(s.endsWith(Rl)){let a=Mn__default.join(t,s),l=cL(a);l&&e.push({configFilePath:a,config:l,rootDir:dirname(a)});}if(e.length)return e;if(t=Mn__default.dirname(t),t===n)break}return e}async function tn(e={}){let{configFilePath:t,nameFilter:n,skipExitOnError:o}=e,r=await dL(t,o);if(n&&(r=r.filter(i=>i.config.name===n)),r.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
249
249
  ${r.map(i=>i.configFilePath)}`);if(r.length===0)throw new Error("No valid Momentic project file available.");return C.debug(`Found valid project configuration at ${r[0].configFilePath}`),r[0]}async function IEe(e){let t=vEe(e);if(!t||!t.projects||!t.projects.length)return;let n=t.projects.map(s=>(s.endsWith("/")||(s+="/"),`${s}*${Rl}`)),o=AbortSignal.timeout(2e3),r;try{r=await Oc(n,{cwd:cwd(),maxDepth:ZS,ignore:[],nodir:!0,signal:o});}catch(s){throw C.error({err:s},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${tb} is misconfigured.`),s}let i=[];for(let s of r){let a=Mn__default.join(cwd(),s),l=cL(a);l&&i.push({configFilePath:a,config:l,rootDir:dirname(a)});}return i}async function dL(e,t){if(e){e=Mn__default.resolve(e);let o=cL(e);return o?[{config:o,configFilePath:e,rootDir:Mn__default.dirname(e)}]:(console.error(`No valid Momentic project file found at ${e}.`),t||process.exit(1),[])}if(existsSync(tb)){let o=await IEe(tb);if(o)return o}return wEe()}function Lc(e,t){let n=TS.stringify(e);writeFileSync(t,n);}async function js({project:e,apiClient:t,classificationOverrides:n}){let{classification:o,healing:r,explore:i}=(await t.getOrgSettings()).ai??{},s=_Ee({flags:n,config:e.config.ai?.classification,cloudConfig:o}),a=xEe({config:e.config.ai?.triage,cloudConfig:r}),l={...e.config.ai};return delete l.healing,delete l.triage,{...e,config:{...e.config,ai:{...l,classification:s,triage:a,explore:i}}}}function xEe({config:e,cloudConfig:t}){if(!(!e&&!t))return {onHealFail:e?.onHealFail??t?.onFail??T_,onHealSuccess:e?.onHealSuccess??t?.onSuccess??A_,remoteBrowser:e?.remoteBrowser}}function _Ee({flags:e,config:t,cloudConfig:n}){if(!(!t&&!n))return {enabled:t?.enabled??n?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??n?.overrideExitCode??cU,categories:n?.categories??Ri}}var x3="golden/visual-diff",_3="reports",fa="test-results";var PEe=z.object({width:z.number(),height:z.number()}),Sg=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,n,o){let r=Mn__default.join(t.rootDir,t.config.goldenFileDir??x3);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=o,this.apiClient=n;}async prepareGoldenScreenshotForComparison(t,n,o){if(YU(n.screenshot?.data))return {buffer:(await this.apiClient.fetchOnDemandScreenshot(n.screenshot.data.id)).data,width:n.screenshot.width,height:n.screenshot.height};if(n.screenshot?.data?.startsWith("https://")){let s=await fetch(n.screenshot.data);return {buffer:Buffer.from(await s.arrayBuffer()),width:n.screenshot.width,height:n.screenshot.height}}let r=n.screenshot?.data;r||(r=Mn__default.join(this.defaultGoldenScreenshotDir,`${n.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return Bo__default.mkdirSync(Mn__default.dirname(r),{recursive:true}),Bo__default.writeFileSync(r,o.buffer),Bo__default.writeFileSync(i,JSON.stringify({width:o.width,height:o.height})),{buffer:Buffer.from(o.buffer),width:o.width,height:o.height};if(Bo__default.existsSync(r)){let s=Bo__default.readFileSync(r),a=PEe.parse(JSON.parse(Bo__default.readFileSync(i,"utf-8")));return {buffer:s,width:a.width,height:a.height}}else throw new K("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var P3=3e3,Qt=nb(),NEe=promisify(execFile);async function hL(e,t){try{return await nb(e).revparse(t)}catch(n){if(N3(n))return;throw n}}async function kc(e){return hL(e,["--show-toplevel"])}async function O3(e){return hL(e,["HEAD"])}async function M3(e){return hL(e,["--abbrev-ref","HEAD"])}async function OR({cwd:e,base:t,head:n,logger:o}){try{let r=(await nb(e).raw(["merge-base",t,n])).trim();if(r.length>0)return r;o.warn({base:t,head:n},"git merge-base returned empty");}catch(r){o.warn({err:r,base:t,head:n},"git merge-base failed");}}function gL(){return process.env.GITHUB_BASE_REF||process.env.BUILDKITE_PULL_REQUEST_BASE_BRANCH||process.env.CI_MERGE_REQUEST_TARGET_BRANCH_NAME||void 0}async function ob({client:e,repository:t,base:n,head:o,logger:r}){let i=Lo(t);if(i)try{let s=await e.compareCommitsFromGithub({owner:i.owner,repo:i.repo,base:n,head:o});return s.commits.length===0?void 0:s}catch(s){r.warn({err:s,repository:t,base:n,head:o},"remote commit compare failed");return}}async function $s(e){let{logger:t,operation:n,fn:o,context:r}=e,i=Date.now();try{return await o()}finally{let s=Date.now()-i;s>P3&&!process.env.CI&&t.warn({operation:n,durationMs:s,thresholdMs:P3,...r??{}},"[timing] slow git metadata operation");}}function vl(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function LEe(e){let t=await nn(e,Qt.raw(["config","--list"])),n={};if(!t)return n;for(let o of t.split(`
250
250
  `)){let r=o.indexOf("=");if(r===-1)continue;let i=o.slice(0,r),s=o.slice(r+1).trim();n[i]=s;}return n}async function kEe(e,t,n){try{let r=n["github.user"]||void 0;if(r)return r}catch{}let o;try{if(t?.startsWith("http://")||t?.startsWith("https://"))o=new URL(t).host;else if(t?.startsWith("git@")){let r=t.indexOf("@"),i=t.indexOf(":",r+1);r!==-1&&i!==-1&&(o=t.slice(r+1,i));}}catch{}if(o=o?.toLowerCase(),!!o&&t?.startsWith("git@")&&o.includes("github"))try{let{stdout:r,stderr:i}=await NEe("ssh",["-T","-o","BatchMode=yes",`git@${o}`],{timeout:5e3}),a=`${r??""}${i??""}`.trim().match(/Hi\s+([A-Za-z0-9_-]+)!/);if(a?.[1])return a[1]}catch{return}}async function DEe(e,t,n){let o=t?.includes("github.com"),r=t?.includes("gitlab.com");try{if(o)return kEe(e,t,n);if(r)return}catch{}}function rb(e){if(e.startsWith("git@")){let t=e.split(":");if(t.length===2){let n=t[1].replace(".git","").split("/");if(n.length===2){let o=n[0],r=n[1];return `${o}/${r}`}}}else if(e.startsWith("http")||e.startsWith("https")){let n=new URL(e).pathname.split("/").filter(Boolean);if(n.length>=2){let o=n[0],r=n[1].replace(".git","");return `${o}/${r}`}}}function N3(e){if(!(e instanceof Error))return false;let t=e.message;return t.includes("not a git repository")||t.includes("ENOENT")||t.includes("detected dubious ownership")}async function nn(e,t){try{return (await t).trim()}catch(n){if(N3(n))return;e.error({err:n},"Failed to run git command");return}}async function Vs(e,t){if(e)try{return (await nb(t).revparse([e]))?.trim()||void 0}catch{return}}async function ib(e){let t=await Vs(e);return t||await Vs(`origin/${e}`)}function FEe(){if(process.env.GITHUB_ACTION)return "GithubActions";if(process.env.GITLAB_CI)return "GitlabCI";if(process.env.CIRCLECI)return "CircleCI";if(process.env.BUILDKITE)return "Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return "AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return "GCPCloudBuild";if(process.env.BITRISE_BUILD_SLUG)return "Bitrise";if(process.env.MOMENTIC_GIT_OVERRIDE)return "Custom"}async function BEe(e){let[t,n,o]=await Promise.all([nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"]))]),r=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return {ciProvider:"GithubActions",gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:t?vl(t):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function UEe(e){let[t,n,o]=await Promise.all([nn(e,Qt.listRemote(["--get-url","origin"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"]))]);return {ciProvider:"GitlabCI",gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?vl(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:t,gitCommitMessage:n,gitCommitAuthorName:o,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function HEe(e){let[t,n,o,r]=await Promise.all([nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.listRemote(["--get-url","origin"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"]))]),s=process.env.CIRCLE_REPOSITORY_URL?.trim()||void 0||n||void 0,a=s?.includes("github.com")??false,l=s?.includes("gitlab.com")??false,c=s?rb(s):void 0;return {ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:t?vl(t):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:s,gitCommitMessage:o,gitCommitAuthorName:r,githubRepository:a?c:void 0,gitlabProjectPath:l?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function GEe(e){let[t,n,o]=await Promise.all([nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"]))]),r=process.env.BUILDKITE_REPO,i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?rb(r):void 0;return {ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:t?vl(t):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?a:void 0,gitlabProjectPath:s?a:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`}}async function jEe(e){let[t,n,o]=await Promise.all([nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"]))]),r=process.env["Build.Repository.Uri"],i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?rb(r):void 0;return {ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:t?vl(t):void 0,gitBranchName:process.env["System.PullRequest.SourceBranch"]??process.env["Build.SourceBranchName"],gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?a:void 0,gitlabProjectPath:s?a:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function $Ee(e,t,n){let[o,r,i,s,a,l,c,d,u]=await Promise.all([nn(e,Qt.revparse(["HEAD"])),nn(e,Qt.revparse(["--short","HEAD"])),nn(e,Qt.revparse(["--abbrev-ref","HEAD"])),nn(e,Qt.listRemote(["--get-url","origin"])),nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.show(["-s","--pretty=%B"])),nn(e,Qt.show(["-s","--pretty=%an"])),t?nn(e,Qt.raw(["merge-base","--fork-point",t])):Promise.resolve(void 0),LEe(e)]),p=d||(t?await nn(e,Qt.raw(["merge-base",t,"HEAD"])):void 0),m=p?await nn(e,Qt.show(["--no-patch","--format=%ci",p])):void 0,h=s?.includes("github.com"),g=s?.includes("gitlab.com"),f=s?rb(s):void 0,S=u["user.email"]||void 0,T=u["user.name"]||void 0,A=u["user.username"]||void 0,E=u["github.user"]||void 0,O=(n?.includeHostingUsername??true?await DEe(e,s,u):void 0)??A??E??void 0;return {ciProvider:"none",gitCommitSha:o,gitCommitShaShort:r,gitBranchName:i,gitOriginUrl:s,gitCommitTimestamp:a?vl(a):void 0,gitCommitMessage:l,gitCommitAuthorName:c,gitLocalUsername:O,gitLocalEmail:S,gitLocalName:T,lastCommitOnMainSha:p,lastCommitOnMainTimestamp:m?vl(m):void 0,githubRepository:h?f:void 0,gitlabProjectPath:g?f:void 0,pipelineId:void 0}}async function VEe(e){let[t,n]=await Promise.all([nn(e,Qt.show(["--no-patch","--format=%ci"])),nn(e,Qt.show(["-s","--pretty=%an"]))]),o=process.env.GIT_REPOSITORY_URL,r=o?.includes("github.com"),i=o?.includes("gitlab.com"),s=o?rb(o):void 0;return {ciProvider:"Bitrise",gitCommitSha:process.env.BITRISE_GIT_COMMIT,gitCommitShaShort:process.env.BITRISE_GIT_COMMIT?.slice(0,6),gitCommitTimestamp:t?vl(t):void 0,gitBranchName:process.env.BITRISE_GIT_BRANCH,gitOriginUrl:o,gitCommitMessage:process.env.BITRISE_GIT_MESSAGE,gitCommitAuthorName:n,githubRepository:r?s:void 0,gitlabProjectPath:i?s:void 0,pipelineId:`${process.env.BITRISE_APP_SLUG}:${process.env.BITRISE_BUILD_SLUG}`}}async function zEe(){let e=process.env._HEAD_REPO_URL;return {ciProvider:"GCPCloudBuild",gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:e?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:e?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}function WEe(){return {ciProvider:"Custom",gitCommitSha:process.env.GIT_COMMIT_SHA,gitCommitShaShort:process.env.GIT_COMMIT_SHA_SHORT??process.env.GIT_COMMIT_SHA?.slice(0,6),gitCommitTimestamp:vl(process.env.GIT_COMMIT_TIMESTAMP),gitBranchName:process.env.GIT_BRANCH_NAME,gitOriginUrl:process.env.GIT_ORIGIN_URL,gitCommitAuthorName:process.env.GIT_COMMIT_AUTHOR_NAME,gitCommitMessage:process.env.GIT_COMMIT_MESSAGE,lastCommitOnMainSha:process.env.LAST_COMMIT_ON_MAIN_SHA,lastCommitOnMainTimestamp:vl(process.env.LAST_COMMIT_ON_MAIN_TIMESTAMP),mergedGitBranchName:process.env.MERGED_GIT_BRANCH_NAME,githubRepository:process.env.GITHUB_REPOSITORY,gitlabProjectPath:process.env.GITLAB_PROJECT_PATH,gitLocalUsername:process.env.GIT_USERNAME,gitLocalEmail:process.env.GIT_EMAIL,gitLocalName:process.env.GIT_NAME}}async function qEe(e){let t=[...e.config.gitProtectedBranches??[]];return e.config.gitMainBranch&&t.push(e.config.gitMainBranch),{gitMainBranch:e.config.gitMainBranch,gitProtectedBranches:t}}async function zs(e,t,n){let o=FEe();if(!o)return $Ee(e,t,n);switch(o){case "GithubActions":return BEe(e);case "GitlabCI":return UEe(e);case "CircleCI":return HEe(e);case "Buildkite":return GEe(e);case "AzureDevOps":return jEe(e);case "GCPCloudBuild":return zEe();case "Bitrise":return VEe(e);case "Custom":return WEe()}}async function KEe(e,t,n,o){let r=o,i=o.gitCommitSha;if(!i)return r;let s=o.gitMainBranch;if(s&&(!r.lastCommitOnMainSha||!r.lastCommitOnMainTimestamp))try{let a=await $s({logger:e,operation:"getRemoteMetadataFromGitlab.getMergeBaseCommitFromGitlab",fn:()=>t.getMergeBaseCommitFromGitlab(n,s,i),context:{projectPath:n,mainBranch:s}});r={...r,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date};}catch(a){e.warn({err:a},"Failed to get merge base commit from Gitlab");}if(!r.gitCommitTimestamp||!r.gitCommitAuthorName||!r.gitCommitMessage||!r.gitCommitAuthorName)try{let a=await $s({logger:e,operation:"getRemoteMetadataFromGitlab.getCommitFromGitlab",fn:()=>t.getCommitFromGitlab(n,i),context:{projectPath:n,gitCommitSha:i}});a&&(r={...r,gitCommitTimestamp:r.gitCommitTimestamp??a.committer.date,gitCommitAuthorName:r.gitCommitAuthorName??a.author.name,gitCommitMessage:r.gitCommitMessage??a.message});}catch(a){e.warn({err:a},"Failed to get commit from Gitlab");}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!r.mergedGitBranchName){let a=o.gitBranchName;try{let l=await $s({logger:e,operation:"getRemoteMetadataFromGitlab.getMergedBranchFromGitlab",fn:()=>t.getMergedBranchFromGitlab(n,a,i),context:{projectPath:n,branchName:a,gitCommitSha:i}});l.mergedBranch&&(r={...r,mergedGitBranchName:l.mergedBranch});}catch(l){e.warn({err:l},"Failed to get merged branch from Gitlab");}}return r}async function YEe(e,t,n,o,r){let i=r,s=r.gitCommitSha;if(!s)return i;let a=r.gitMainBranch;if(a&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let l=await $s({logger:e,operation:"getRemoteMetadataFromGitHub.getMergeBaseCommitFromGithub",fn:()=>t.getMergeBaseCommitFromGithub(n,o,a,s),context:{owner:n,repo:o,mainBranch:a}});i={...i,lastCommitOnMainSha:l.sha,lastCommitOnMainTimestamp:l.committer.date};}catch(l){e.warn({err:l},"Failed to get merge base commit from GitHub");}if(!i.gitCommitTimestamp||!i.gitCommitAuthorName||!i.gitCommitMessage||!i.gitCommitAuthorName)try{let l=await $s({logger:e,operation:"getRemoteMetadataFromGitHub.getCommitFromGithub",fn:()=>t.getCommitFromGithub(n,o,s),context:{owner:n,repo:o,gitCommitSha:s}});l&&(i={...i,gitCommitTimestamp:i.gitCommitTimestamp??l.committer.date,gitCommitAuthorName:i.gitCommitAuthorName??l.author.name,gitCommitMessage:i.gitCommitMessage??l.message});}catch(l){e.warn({err:l},"Failed to get commit from GitHub");}if(r.gitBranchName&&r.gitBranchName===r.gitMainBranch&&!i.mergedGitBranchName){let l=r.gitBranchName;try{let c=await $s({logger:e,operation:"getRemoteMetadataFromGitHub.getMergedBranchFromGithub",fn:()=>t.getMergedBranchFromGithub(n,o,l,s),context:{owner:n,repo:o,branchName:l,gitCommitSha:s}});c.mergedBranch&&(i={...i,mergedGitBranchName:c.mergedBranch});}catch(c){e.warn({err:c},"Failed to get merged branch from GitHub");}}return i}async function JEe(e,t,n){try{if(n.githubRepository){let{owner:o,repo:r}=eV(n.githubRepository);return await $s({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitHub",fn:()=>YEe(e,t,o,r,n),context:{githubRepository:n.githubRepository}})}else if(n.gitlabProjectPath){let o=n.gitlabProjectPath;return await $s({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitlab",fn:()=>KEe(e,t,o,n),context:{gitlabProjectPath:o}})}}catch(o){e.warn({err:o},"Failed to get remote git metadata");}return n}async function XEe(e,t,n,o){let r={},i={gitMainBranch:n.config.gitMainBranch};return $s({logger:e,operation:"getGitMetadata.total",fn:async()=>{let[s,a]=await Promise.all([$s({logger:e,operation:"getGitMetadata.getConfiguredGitMetadata",fn:()=>qEe(n),context:{projectConfigPath:n.configFilePath}}),$s({logger:e,operation:"getGitMetadata.getEnvironmentGitMetadata",fn:async()=>{let d=await zs(e,n.config.gitMainBranch,o);return i.ciProvider=d.ciProvider,d},context:i})]),l={...s,...a};r.gitBranchName=l.gitBranchName,r.githubRepository=l.githubRepository,r.gitlabProjectPath=l.gitlabProjectPath,(!l.lastCommitOnMainSha||!l.lastCommitOnMainTimestamp)&&l.gitBranchName===s.gitMainBranch&&(l.lastCommitOnMainSha=l.gitCommitSha,l.lastCommitOnMainTimestamp=l.gitCommitTimestamp);let c=await $s({logger:e,operation:"getGitMetadata.getRemoteMetadataIfNeeded",fn:()=>JEe(e,t,l),context:{githubRepository:l.githubRepository,gitlabProjectPath:l.gitlabProjectPath,gitBranchName:l.gitBranchName}});return {...s,...a,...c}},context:r})}async function L3(e){try{let t=await nb(e).remote(["show","origin"]);return t?t.match(/HEAD branch: (.*)$/m)?.[1]?.trim():void 0}catch{return}}async function k3(){try{return (await Qt.revparse(["--is-inside-work-tree"])).trim()==="true"}catch{return false}}var mL=new Map;async function QEe(e,t,n){let o,r;try{[o,r]=await Promise.all([nn(e,Qt.raw(["symbolic-ref","--short","-q","HEAD"]).then(a=>a.trim())),nn(e,Qt.revparse(["--verify","HEAD"]).then(a=>a.trim()))]);}catch{return}if(!o||!r)return;let i=`${t.configFilePath}:${t.config.gitMainBranch}:${t.config.gitProtectedBranches?.join(",")}`,s=`${n?.includeHostingUsername}`;return `${o}:${r}:${i}:${s}`}async function di(e,t,n,o){let r=await QEe(e,n,o);if(r&&mL.has(r))return e.debug("Using cached git metadata"),mL.get(r);let i=await XEe(e,t,n,o);return r&&mL.set(r,i),i}var ZEe=1024*1024;async function NR({cwd:e,baseRef:t="HEAD"}){let n=nb(await Tg(e)),[o,r]=await Promise.all([n.diff(["--name-only","--diff-filter=ACDMRTUXB",t,"--"]),n.raw(["ls-files","--others","--exclude-standard"])]);return eCe(kR([...D3(o),...D3(r)]))}function eCe(e){return e.filter(yL)}function yL(e){let t=ya.basename(e);return e.endsWith(".test.yaml")||e.endsWith(".module.yaml")||t===Rl||t===tb}async function LR({cwd:e,paths:t,maxFileSizeBytes:n=ZEe}){let o=await Tg(e),r=[];for(let i of kR(t)){let s=H3({repoRoot:o,relativePath:i});if(!yL(i))throw new Error(`Pull request path is not a Momentic file: ${i}`);let a=await promises.stat(s).catch(()=>{});if(!a){r.push({operation:"delete",path:i});continue}if(!a.isFile())throw new Error(`Cannot create pull request change for non-file path: ${i}`);if(a.size>n)throw new Error(`Cannot create pull request change for oversized file: ${i}`);let l=await promises.readFile(s,"utf8");if(l.includes("\0"))throw new Error(`Cannot create pull request change for binary file: ${i}`);r.push({operation:"upsert",path:i,content:l});}return r}async function F3({cwd:e}){let t=await Tg(e),n=await promises.mkdtemp(ya.join(fL.tmpdir(),"momentic-git-snapshot-"));try{let o=nb(t).env("GIT_INDEX_FILE",ya.join(n,"index"));return await o.raw(["read-tree","HEAD"]),await o.raw(["add","-A","--"]),(await o.raw(["write-tree"])).trim()}finally{await promises.rm(n,{recursive:true,force:true});}}async function bg({cwd:e,paths:t,baseRef:n="HEAD",maxFileSizeBytes:o}){let r=await Tg(e),i=kR(t??await NR({cwd:r,baseRef:n}));if(i.length===0)return "";let a=(await LR({cwd:r,paths:i,maxFileSizeBytes:o})).filter(c=>c.operation==="upsert").map(c=>c.path),l=await promises.mkdtemp(ya.join(fL.tmpdir(),"momentic-git-patch-"));try{let c=nb(r).env("GIT_INDEX_FILE",ya.join(l,"index"));return await c.raw(["read-tree",n]),a.length>0&&await c.raw(["add","--intent-to-add","--",...a]),await c.raw(["diff","--binary","--",...i])}finally{await promises.rm(l,{recursive:true,force:true});}}async function B3({cwd:e,patch:t}){let n=await Tg(e),o=await promises.mkdtemp(ya.join(fL.tmpdir(),"momentic-git-apply-")),r=ya.join(o,"heal.patch");try{await promises.writeFile(r,t,"utf8");let i=nb(n),s=tCe(await i.raw(["apply","--numstat","-z","--",r]));if(s.length===0)throw new Error("Cannot apply an empty heal patch.");for(let a of s)if(H3({repoRoot:n,relativePath:a}),!yL(a))throw new Error(`Heal patch path is not a Momentic file: ${a}`);return await i.raw(["apply","--check","--",r]),await i.raw(["apply","--",r]),s}finally{await promises.rm(o,{recursive:true,force:true});}}async function U3({cwd:e,paths:t,baseBranch:n,baseCommitSha:o,headBranch:r,branchPrefix:i,idempotencyKey:s,commitMessage:a,title:l,body:c,reviewers:d,draft:u,coAuthorRange:p,maxFileSizeBytes:m}){let h=await Tg(e),g=await LR({cwd:h,paths:t??await NR({cwd:h,baseRef:o}),maxFileSizeBytes:m}),f=n??await M3(h);if(!f)throw new Pe(`Cannot determine base branch because git is not usable in '${h}'.`);let S=o??await O3(h);if(!S)throw new Pe(`Cannot determine base commit SHA because git is not usable in '${h}'.`);return {baseBranch:f,baseCommitSha:S,headBranch:r,branchPrefix:i,idempotencyKey:s,commitMessage:a,title:l,body:c,changes:g,reviewers:d,draft:u,coAuthorRange:p}}function D3(e){return e?e.split(`
251
- `).filter(t=>t.length>0):[]}function kR(e){return [...new Set(e)]}function tCe(e){let t=e.split("\0"),n=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r)continue;let i=r.split(" ");if(i.length<3)throw new Error("Cannot determine files touched by heal patch.");let s=i.slice(2).join(" ");if(s){n.push(s);continue}let a=t[++o],l=t[++o];if(!a||!l)throw new Error("Cannot determine renamed files touched by heal patch.");n.push(a,l);}return kR(n)}async function Tg(e){let t=await kc(e);if(!t)throw new Pe(`Cannot find a git repository at '${e}'. Install git and run this from inside a git worktree.`);return t}function H3({repoRoot:e,relativePath:t}){if(!t||ya.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let n=ya.resolve(e),o=ya.resolve(n,t);if(o!==n&&!o.startsWith(`${n}${ya.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var G3=new Set([".DS_Store","__MACOSX"]),j3={status:(e,t)=>{if(e.status===t.status)return e.status;if(e.status==="FAILED"||t.status==="FAILED")return "FAILED";if(e.status==="CANCELLED"||t.status==="CANCELLED")return "CANCELLED";if(e.status==="RETRYING"||t.status==="RETRYING")return "RETRYING";if(e.status==="RUNNING"||t.status==="RUNNING")return "RUNNING";if(e.status==="PENDING"||t.status==="PENDING")return "PENDING";throw new Error(`Invalid run status merge: ${e.status} and ${t.status}`)},startedAt:(e,t)=>e.startedAt<t.startedAt?e.startedAt:t.startedAt,updatedAt:(e,t)=>e.updatedAt>t.updatedAt?e.updatedAt:t.updatedAt,finishedAt:(e,t)=>!e.finishedAt||!t.finishedAt?new Date:e.finishedAt>t.finishedAt?e.finishedAt:t.finishedAt,gitCommitTimestamp:(e,t)=>{if(!(!e&&!t)){if(!e.gitCommitTimestamp||!t.gitCommitTimestamp||e.gitCommitTimestamp.getTime()!==t.gitCommitTimestamp.getTime())throw new Error(`Git commit timestamps must match to be merged: ${e.gitCommitTimestamp} and ${t.gitCommitTimestamp}`);return e.gitCommitTimestamp}},pipelineId:(e,t)=>e.pipelineId===t.pipelineId?e.pipelineId:!e.pipelineId&&t.pipelineId?t.pipelineId:!t.pipelineId&&e.pipelineId?e.pipelineId:e.startedAt<t.startedAt?t.pipelineId:e.pipelineId,labels:(e,t)=>{let n=new Set([...e.labels??[],...t.labels??[]]);return Array.from(n)},ai:(e,t)=>e.ai??t.ai,browser:(e,t)=>e.browser??t.browser,aiSelect:(e,t)=>{let n=[...e.aiSelect??[],...t.aiSelect??[]];return n.length>0?n:void 0},healRiskSummary:()=>{}};function oCe(e,t,n){if(j3[n]){let i=j3[n];return i(e,t)}let o=e[n],r=t[n];if(o===void 0)return r;if(r===void 0)return o;if(o!==r)throw new Error(`Metadata values for key "${n}" do not match: "${o}" vs "${r}"`);return o}var SL=class extends Error{constructor(t,n){let o=`${t} contains invalid Momentic results: ${n}. Please ensure that the path points to a folder containing only valid results. If you passed \`--output-dir test-results/results-1\` to the \`run\` command, your results path for merging should be \`test-results\`.`;super(o),this.name="InvalidMomenticResultsPathError";}};function $3(e,t){try{let n=Mn__default.join(t,nt);return Fs.parse(JSON.parse(Bo__default.readFileSync(n,"utf-8")))}catch{throw new SL(e,t)}}function V3(e,t,n){let o=randomUUID(),r=e.child({runGroupId:o});Bo__default.rmSync(t,{recursive:true,force:true});let i=Bo__default.readdirSync(n).filter(l=>!G3.has(l)).map(l=>Mn__default.join(n,l));if(i.length===0)throw new Error(`No run groups found in results path: ${n}`);Bo__default.mkdirSync(t,{recursive:true});let s={...$3(n,i[0]),id:o,healRiskSummary:void 0,aiSelect:void 0};for(let l of i){let c=Mn__default.join(l,Dn);if(!Bo__default.existsSync(c))continue;let d=$3(n,l);r.info({oldRunGroupId:d.id},"Merging run groups");for(let p in d){if(p==="id")continue;let m=p;s[m]=oCe(s,d,m);}let u=Bo__default.readdirSync(c);for(let p of u){if(G3.has(p))continue;let m=Mn__default.join(c,p),h=Mn__default.join(t,Dn,p);Bo__default.cpSync(m,h,{recursive:true});}}let a=Mn__default.join(t,nt);Bo__default.writeFileSync(a,JSON.stringify(s,null,2));}var ge="v1",bL="cli",Hp="3.0.1";var rCe=9e4,iCe=3,sCe=1500,aCe=15e3,Bn=class extends Error{status;rawError;constructor(t,n,o,r={}){super(o,r),this.status=t,this.rawError=n;}},TL=class extends Pe{constructor(t,n={}){super(t,n),this.name="PlanLimitExceededError";}};async function lCe(e){return e.text().then(t=>{try{return JSON.parse(t).error}catch{return t}})}var AL=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(){let t={"Content-Type":"application/json"};return (t[PE]=Hp),(t[K1]=bL),t}async sendRequest(t,n){let{retries:o=iCe,requestTimeoutMs:r=rCe,initialRetryDelayMs:i=sCe,maxRetryDelayMs:s=aCe,onFailedRequest:a}=n,l=o,c=o,d,u={path:t,baseUrl:this.baseUrl,method:n.method};for(;l>0;)try{return l--,await this.sendSingleRequestWithOTEL(t,n,r)}catch(p){d=p;try{a?.(d);}catch{}if(p instanceof Bn&&p.status>=400&&p.status<500)throw p.status===402?new TL(p.rawError,{cause:p}):p;if(p instanceof Error&&p.name==="AbortError"&&(d=new Od),l===0)throw d;let m=c-l,h=Math.min(i*Math.pow(2,m-1),s);await new Promise(g=>setTimeout(g,h));}throw this.logger.warn({...u,err:d},"Got fatal error response from Momentic server"),d}async sendSingleRequestWithOTEL(t,n,o){let r=cCe(t);return $e({name:`cli.api.${n.method.toLowerCase()}.${r}`,serviceName:"api-server",attributes:{"http.request.method":n.method,"url.path":r},fn:i=>this.sendSingleRequestHelper(t,n,o,s=>{i?.setAttribute("http.response.status_code",s);})})}async sendSingleRequestHelper(t,n,o,r){let i={path:t,baseUrl:this.baseUrl,method:n.method},s=new AbortController,a=setTimeout(()=>s.abort(),o),l=()=>s.abort();n.signal&&n.signal.addEventListener("abort",l,{once:true});let c=Date.now(),d={...this.getHeaders(),...n.extraHeaders};try{let u=await fetch(`${this.baseUrl}${t}`,{method:n.method,body:n.body?JSON.stringify(n.body):void 0,headers:d,signal:s.signal});if(r?.(u.status),!u.ok){let h=await lCe(u);throw new Bn(u.status,h,`Request to ${n.method} ${t} failed with status ${u.status}: ${h}`)}let p;if(u.status===204)p={};else if(n.responseType==="buffer"){let h=await u.arrayBuffer();p=Buffer.from(h);}else {let h=await u.text();try{p=JSON.parse(h);}catch{p=h;}}this.logger&&n.logResponse===!0&&p&&this.logger.debug({result:p,status:u.status,durationMs:Date.now()-c,...i},"Got response from Momentic server");let m=n.responseHeadersObject;return m&&u.headers.forEach((h,g)=>{m[g.toLowerCase()]=h;}),p}finally{clearTimeout(a),n.signal&&n.signal.removeEventListener("abort",l);}}};function cCe(e){return (e.split("?")[0]??e).replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,":id")}var ui=class extends AL{apiKey;mode;runner;constructor(t){super(t),this.apiKey=t.apiKey,this.mode=t.mode,this.runner=t.runner;}getHeaders(){return {...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[W1]:this.mode??""}}};var DR=class extends Error{constructor(t,n){super(t),this.name="ParseError",this.type=n.type,this.field=n.field,this.value=n.value,this.line=n.line;}};function EL(e){}function z3(e){if(typeof e=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=EL,onError:n=EL,onRetry:o=EL,onComment:r}=e,i="",s=true,a,l="",c="";function d(g){let f=s?g.replace(/^\xEF\xBB\xBF/,""):g,[S,T]=dCe(`${i}${f}`);for(let A of S)u(A);i=T,s=false;}function u(g){if(g===""){m();return}if(g.startsWith(":")){r&&r(g.slice(g.startsWith(": ")?2:1));return}let f=g.indexOf(":");if(f!==-1){let S=g.slice(0,f),T=g[f+1]===" "?2:1,A=g.slice(f+T);p(S,A,g);return}p(g,"",g);}function p(g,f,S){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
251
+ `).filter(t=>t.length>0):[]}function kR(e){return [...new Set(e)]}function tCe(e){let t=e.split("\0"),n=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r)continue;let i=r.split(" ");if(i.length<3)throw new Error("Cannot determine files touched by heal patch.");let s=i.slice(2).join(" ");if(s){n.push(s);continue}let a=t[++o],l=t[++o];if(!a||!l)throw new Error("Cannot determine renamed files touched by heal patch.");n.push(a,l);}return kR(n)}async function Tg(e){let t=await kc(e);if(!t)throw new Pe(`Cannot find a git repository at '${e}'. Install git and run this from inside a git worktree.`);return t}function H3({repoRoot:e,relativePath:t}){if(!t||ya.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let n=ya.resolve(e),o=ya.resolve(n,t);if(o!==n&&!o.startsWith(`${n}${ya.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var G3=new Set([".DS_Store","__MACOSX"]),j3={status:(e,t)=>{if(e.status===t.status)return e.status;if(e.status==="FAILED"||t.status==="FAILED")return "FAILED";if(e.status==="CANCELLED"||t.status==="CANCELLED")return "CANCELLED";if(e.status==="RETRYING"||t.status==="RETRYING")return "RETRYING";if(e.status==="RUNNING"||t.status==="RUNNING")return "RUNNING";if(e.status==="PENDING"||t.status==="PENDING")return "PENDING";throw new Error(`Invalid run status merge: ${e.status} and ${t.status}`)},startedAt:(e,t)=>e.startedAt<t.startedAt?e.startedAt:t.startedAt,updatedAt:(e,t)=>e.updatedAt>t.updatedAt?e.updatedAt:t.updatedAt,finishedAt:(e,t)=>!e.finishedAt||!t.finishedAt?new Date:e.finishedAt>t.finishedAt?e.finishedAt:t.finishedAt,gitCommitTimestamp:(e,t)=>{if(!(!e&&!t)){if(!e.gitCommitTimestamp||!t.gitCommitTimestamp||e.gitCommitTimestamp.getTime()!==t.gitCommitTimestamp.getTime())throw new Error(`Git commit timestamps must match to be merged: ${e.gitCommitTimestamp} and ${t.gitCommitTimestamp}`);return e.gitCommitTimestamp}},pipelineId:(e,t)=>e.pipelineId===t.pipelineId?e.pipelineId:!e.pipelineId&&t.pipelineId?t.pipelineId:!t.pipelineId&&e.pipelineId?e.pipelineId:e.startedAt<t.startedAt?t.pipelineId:e.pipelineId,labels:(e,t)=>{let n=new Set([...e.labels??[],...t.labels??[]]);return Array.from(n)},ai:(e,t)=>e.ai??t.ai,browser:(e,t)=>e.browser??t.browser,aiSelect:(e,t)=>{let n=[...e.aiSelect??[],...t.aiSelect??[]];return n.length>0?n:void 0},healRiskSummary:()=>{}};function oCe(e,t,n){if(j3[n]){let i=j3[n];return i(e,t)}let o=e[n],r=t[n];if(o===void 0)return r;if(r===void 0)return o;if(o!==r)throw new Error(`Metadata values for key "${n}" do not match: "${o}" vs "${r}"`);return o}var SL=class extends Error{constructor(t,n){let o=`${t} contains invalid Momentic results: ${n}. Please ensure that the path points to a folder containing only valid results. If you passed \`--output-dir test-results/results-1\` to the \`run\` command, your results path for merging should be \`test-results\`.`;super(o),this.name="InvalidMomenticResultsPathError";}};function $3(e,t){try{let n=Mn__default.join(t,nt);return Fs.parse(JSON.parse(Bo__default.readFileSync(n,"utf-8")))}catch{throw new SL(e,t)}}function V3(e,t,n){let o=randomUUID(),r=e.child({runGroupId:o});Bo__default.rmSync(t,{recursive:true,force:true});let i=Bo__default.readdirSync(n).filter(l=>!G3.has(l)).map(l=>Mn__default.join(n,l));if(i.length===0)throw new Error(`No run groups found in results path: ${n}`);Bo__default.mkdirSync(t,{recursive:true});let s={...$3(n,i[0]),id:o,healRiskSummary:void 0,aiSelect:void 0};for(let l of i){let c=Mn__default.join(l,Dn);if(!Bo__default.existsSync(c))continue;let d=$3(n,l);r.info({oldRunGroupId:d.id},"Merging run groups");for(let p in d){if(p==="id")continue;let m=p;s[m]=oCe(s,d,m);}let u=Bo__default.readdirSync(c);for(let p of u){if(G3.has(p))continue;let m=Mn__default.join(c,p),h=Mn__default.join(t,Dn,p);Bo__default.cpSync(m,h,{recursive:true});}}let a=Mn__default.join(t,nt);Bo__default.writeFileSync(a,JSON.stringify(s,null,2));}var ge="v1",bL="cli",Hp="3.0.2";var rCe=9e4,iCe=3,sCe=1500,aCe=15e3,Bn=class extends Error{status;rawError;constructor(t,n,o,r={}){super(o,r),this.status=t,this.rawError=n;}},TL=class extends Pe{constructor(t,n={}){super(t,n),this.name="PlanLimitExceededError";}};async function lCe(e){return e.text().then(t=>{try{return JSON.parse(t).error}catch{return t}})}var AL=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(){let t={"Content-Type":"application/json"};return (t[PE]=Hp),(t[K1]=bL),t}async sendRequest(t,n){let{retries:o=iCe,requestTimeoutMs:r=rCe,initialRetryDelayMs:i=sCe,maxRetryDelayMs:s=aCe,onFailedRequest:a}=n,l=o,c=o,d,u={path:t,baseUrl:this.baseUrl,method:n.method};for(;l>0;)try{return l--,await this.sendSingleRequestWithOTEL(t,n,r)}catch(p){d=p;try{a?.(d);}catch{}if(p instanceof Bn&&p.status>=400&&p.status<500)throw p.status===402?new TL(p.rawError,{cause:p}):p;if(p instanceof Error&&p.name==="AbortError"&&(d=new Od),l===0)throw d;let m=c-l,h=Math.min(i*Math.pow(2,m-1),s);await new Promise(g=>setTimeout(g,h));}throw this.logger.warn({...u,err:d},"Got fatal error response from Momentic server"),d}async sendSingleRequestWithOTEL(t,n,o){let r=cCe(t);return $e({name:`cli.api.${n.method.toLowerCase()}.${r}`,serviceName:"api-server",attributes:{"http.request.method":n.method,"url.path":r},fn:i=>this.sendSingleRequestHelper(t,n,o,s=>{i?.setAttribute("http.response.status_code",s);})})}async sendSingleRequestHelper(t,n,o,r){let i={path:t,baseUrl:this.baseUrl,method:n.method},s=new AbortController,a=setTimeout(()=>s.abort(),o),l=()=>s.abort();n.signal&&n.signal.addEventListener("abort",l,{once:true});let c=Date.now(),d={...this.getHeaders(),...n.extraHeaders};try{let u=await fetch(`${this.baseUrl}${t}`,{method:n.method,body:n.body?JSON.stringify(n.body):void 0,headers:d,signal:s.signal});if(r?.(u.status),!u.ok){let h=await lCe(u);throw new Bn(u.status,h,`Request to ${n.method} ${t} failed with status ${u.status}: ${h}`)}let p;if(u.status===204)p={};else if(n.responseType==="buffer"){let h=await u.arrayBuffer();p=Buffer.from(h);}else {let h=await u.text();try{p=JSON.parse(h);}catch{p=h;}}this.logger&&n.logResponse===!0&&p&&this.logger.debug({result:p,status:u.status,durationMs:Date.now()-c,...i},"Got response from Momentic server");let m=n.responseHeadersObject;return m&&u.headers.forEach((h,g)=>{m[g.toLowerCase()]=h;}),p}finally{clearTimeout(a),n.signal&&n.signal.removeEventListener("abort",l);}}};function cCe(e){return (e.split("?")[0]??e).replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,":id")}var ui=class extends AL{apiKey;mode;runner;constructor(t){super(t),this.apiKey=t.apiKey,this.mode=t.mode,this.runner=t.runner;}getHeaders(){return {...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[W1]:this.mode??""}}};var DR=class extends Error{constructor(t,n){super(t),this.name="ParseError",this.type=n.type,this.field=n.field,this.value=n.value,this.line=n.line;}};function EL(e){}function z3(e){if(typeof e=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:t=EL,onError:n=EL,onRetry:o=EL,onComment:r}=e,i="",s=true,a,l="",c="";function d(g){let f=s?g.replace(/^\xEF\xBB\xBF/,""):g,[S,T]=dCe(`${i}${f}`);for(let A of S)u(A);i=T,s=false;}function u(g){if(g===""){m();return}if(g.startsWith(":")){r&&r(g.slice(g.startsWith(": ")?2:1));return}let f=g.indexOf(":");if(f!==-1){let S=g.slice(0,f),T=g[f+1]===" "?2:1,A=g.slice(f+T);p(S,A,g);return}p(g,"",g);}function p(g,f,S){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
252
252
  `;break;case "id":a=f.includes("\0")?void 0:f;break;case "retry":/^\d+$/.test(f)?o(parseInt(f,10)):n(new DR(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:S}));break;default:n(new DR(`Unknown field "${g.length>20?`${g.slice(0,20)}\u2026`:g}"`,{type:"unknown-field",field:g,value:f,line:S}));break}}function m(){l.length>0&&t({id:a,event:c||void 0,data:l.endsWith(`
253
253
  `)?l.slice(0,-1):l}),a=void 0,l="",c="";}function h(g={}){i&&g.consume&&u(i),s=true,a=void 0,l="",c="",i="";}return {feed:d,reset:h}}function dCe(e){let t=[],n="",o=0;for(;o<e.length;){let r=e.indexOf("\r",o),i=e.indexOf(`
254
254
  `,o),s=-1;if(r!==-1&&i!==-1?s=Math.min(r,i):r!==-1?s=r:i!==-1&&(s=i),s===-1){n=e.slice(o);break}else {let a=e.slice(o,s);t.push(a),o=s+1,e[o-1]==="\r"&&e[o]===`
@@ -270,7 +270,7 @@ ${t}:`]}}function CX({id:e,model:t,created:n}){return {id:e??void 0,modelId:t??v
270
270
 
271
271
  `,bwe=1e4,VX=w__default.object({stream:w__default.boolean().optional(),type:w__default.literal("response.create").optional()}).passthrough(),Twe=VX.extend({stream:w__default.literal(true)});function zX(e={}){let t=new XL(e);return async(n,o)=>{if(!Cwe(n,o))return fetch(n,o);let r=await Awe(o?.body);if(!r)return fetch(n,o);let i=Twe.safeParse(r);return i.success?t.fetch({httpUrl:WX(n),init:o,request:i.data}):fetch(n,o)}}var XL=class{constructor(t){this.options=t;}websocket;openPromise;latestResponseId;previousFullInput;pendingRequest;async fetch({httpUrl:t,init:n,request:o}){if(this.pendingRequest)return fetch(t,n);let r=await this.open({httpUrl:t,init:n}),i=new ReadableStream({start:s=>{let a={controller:s,fullRequest:o,sentContinuation:false,startedStreaming:false,retryingFullContext:false};this.pendingRequest=a,this.sendRequest({websocket:r,pendingRequest:a});},cancel:()=>{this.websocket?.close(),this.websocket=void 0,this.openPromise=void 0,this.latestResponseId=void 0,this.previousFullInput=void 0,this.pendingRequest=void 0;}});return new Response(i,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform"}})}async open({httpUrl:t,init:n}){return this.websocket?.readyState===JL.OPEN?this.websocket:this.openPromise?this.openPromise:(this.openPromise=new Promise((o,r)=>{let i=new JL(Rwe(t),{headers:vwe(n?.headers)}),s=setTimeout(()=>{i.terminate(),r(new Error("Timed out opening OpenAI responses websocket"));},bwe);i.once("open",()=>{clearTimeout(s),this.websocket=i,this.openPromise=void 0,o(i);}),i.once("error",a=>{clearTimeout(s),this.resetConnection(),r(a);}),i.on("close",()=>{this.resetConnection();}),i.on("message",a=>{this.handleMessage(a);});}),this.openPromise)}sendRequest({websocket:t,pendingRequest:n}){let o=this.buildPayload(n.fullRequest);n.sentContinuation=!!o.previous_response_id,t.send(JSON.stringify(o));}buildPayload(t){let{background:n,stream:o,...r}=t,i={...r,type:"response.create"};xwe({payload:i,compactThreshold:this.options.compactThreshold});let s=Array.isArray(t.input)?t.input:void 0,a=this.latestResponseId&&s&&this.previousFullInput?wwe({currentInput:s,previousInput:this.previousFullInput}):void 0;return a&&a.length>0?(i.input=a,i.previous_response_id=this.latestResponseId,i):(delete i.previous_response_id,i)}handleMessage(t){let n=this.pendingRequest;if(!n)return;let o=Pwe(t),r;try{r=JSON.parse(o);}catch(a){n.controller.error(a),this.pendingRequest=void 0,this.websocket?.close();return}let i=c$.safeParse(r),s=i.success?i.data:void 0;if(_we(s)&&n.sentContinuation&&!n.startedStreaming&&!n.retryingFullContext&&this.websocket?.readyState===JL.OPEN){this.latestResponseId=void 0,this.previousFullInput=void 0,n.retryingFullContext=true,n.sentContinuation=false;let a=this.buildPayload(n.fullRequest);delete a.previous_response_id,this.websocket.send(JSON.stringify(a));return}if(n.startedStreaming=true,n.controller.enqueue(Owe(o)),s?.type==="response.completed"){this.latestResponseId=s.response.id,this.previousFullInput=Array.isArray(n.fullRequest.input)?n.fullRequest.input:void 0,this.closePendingRequest();return}s?.type==="error"&&(this.latestResponseId=void 0,this.previousFullInput=void 0,this.closePendingRequest());}closePendingRequest(){let t=this.pendingRequest;t&&(t.controller.enqueue(new TextEncoder().encode(Swe)),t.controller.close(),this.pendingRequest=void 0);}resetConnection(){this.websocket=void 0,this.openPromise=void 0,this.latestResponseId=void 0,this.previousFullInput=void 0;let t=this.pendingRequest;t&&(t.controller.error(new Error("OpenAI responses websocket connection closed")),this.pendingRequest=void 0);}};async function Awe(e){let t=await Ewe(e);if(!t)return;let n=VX.safeParse(JSON.parse(t));return n.success?n.data:void 0}async function Ewe(e){if(typeof e=="string")return e;if(e instanceof URLSearchParams)return e.toString();if(e instanceof Blob)return e.text();if(e instanceof ArrayBuffer)return new TextDecoder().decode(e);if(ArrayBuffer.isView(e))return new TextDecoder().decode(e)}function Cwe(e,t){return (t?.method??(e instanceof Request?e.method:"GET")).toUpperCase()==="POST"&&WX(e).endsWith("/responses")}function WX(e){return e instanceof Request?e.url:e.toString()}function Rwe(e){let t=new URL(e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}function vwe(e){if(!e)return {};if(e instanceof Headers){let t={};return e.forEach((n,o)=>{t[o]=n;}),t}return Array.isArray(e)?Object.fromEntries(e):e}function wwe({currentInput:e,previousInput:t}){let n=0;for(;n<e.length&&n<t.length&&JSON.stringify(e[n])===JSON.stringify(t[n]);)n+=1;if(!(n<t.length))return e.slice(n).filter(Iwe)}function Iwe(e){return "role"in e&&e.role==="assistant"?false:"type"in e?e.type==="item_reference"||e.type==="reasoning"?false:e.type!=="function_call"&&e.type!=="custom_tool_call"&&e.type!=="local_shell_call":true}function xwe({payload:e,compactThreshold:t}){t&&(e.context_management=[{type:"compaction",compact_threshold:t}]);}function _we(e){return e?.type==="error"&&e.code==="previous_response_not_found"}function Pwe(e){return typeof e=="string"?e:e instanceof ArrayBuffer?new TextDecoder().decode(e):Array.isArray(e)?Buffer.concat(e).toString("utf8"):e.toString("utf8")}function Owe(e){return new TextEncoder().encode(`data: ${e}
272
272
 
273
- `)}var Nwe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD",Lwe=2e5;function qR(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[PE]:Hp,...n&&{[J1]:n},...r&&{[q1]:r},...i&&{[X1]:i}};return o&&(s[Y1]=JSON.stringify(o)),s}var qX="bedrock/",KX="azure/",YX=e=>t=>{let n=qR(e),o=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(qX)?o=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(qX.length))}`:t.startsWith(KX)&&(o=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(KX.length))}`),createAnthropic({baseURL:o,headers:n,apiKey:e.apiKey})(t)},JX=e=>t=>{let n=qR(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??kwe(process.env[Nwe])??Lwe:void 0;return cb({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?zX({compactThreshold:r}):void 0})(t)},XX=e=>t=>{let n=qR(e);return cb({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey})(t)},QX=e=>t=>{let n=qR(e);return cb({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey})(t)};function kwe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}var hr=class extends ui{agentConfig;constructor(t,n){let o={...ch,...t};VA(o),super(n),this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return jG.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`/${ge}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Hp,...t},signal:n.abortSignal});return GG.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`/${ge}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z.string().parse(n)}async getElementLocation(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,useMemory:n.useMemory,cacheBustReason:n.cacheBustReason,agentConfigVersion:this.agentConfig?.locator},r=await this.sendRequest(`/${ge}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal});return eW.parse(r)}async getAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.assertion},r=await this.sendRequest(`/${ge}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal});return OO.parse(r)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return Z1.parse(r)}async getVisualAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`/${ge}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return OO.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`/${ge}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return Q1.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`/${ge}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal})}async getMultiturnAiActionEvaluation(t,n){let o=await this.sendRequest(`/${ge}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return W_.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`/${ge}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return tW.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`/${ge}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return z_.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return $H.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return VH.parse(r)}async getKnowledgeSuggestion(t,n){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,n){let o=await this.sendRequest(`/${ge}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return pA.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`/${ge}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return ej.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`/${ge}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return BH.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`/${ge}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return GH.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`/${ge}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return HH.parse(o)}async getIframeRegex(t,n){let o=await this.sendRequest(`/${ge}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return pU.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,logger:i}=t,s=async a=>{try{await this.sendRequest(`/${ge}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},...a}});}catch(l){i.warn({err:l},"Failed to upsert result classification trace");}};return s({}),{id:n,update:s}}getAnthropicModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return YX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAnthropicBedrockModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`bedrock/${o}`)}getAnthropicFoundryModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`azure/${o}`)}getOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:s}=t;return JX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:s})}getXAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return XX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAzureOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return QX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}};var Ot=class extends ui{constructor(t){super({...t,mode:void 0});}getAppUrl(){return Mh(this.baseUrl)}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${ge}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof Bn?n.status>=400&&n.status<500?new Error(n.rawError,{cause:n}):new Error(`Momentic server error (HTTP ${n.status}). Please try again in a moment.`,{cause:n}):new Error(`Could not reach Momentic server at ${this.baseUrl}. Check your network connection. If you're on a restricted network (VPN, firewall, or proxy), you may need to whitelist Momentic's servers: https://momentic.ai/docs/environment/authentication#ip-whitelist`,{cause:n})}return fW.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${ge}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return L$.parse(t).announcements}async getQuotaStatus(){let t=await this.sendRequest(`/${ge}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return yW.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${ge}/browsers/connection`,{method:"POST",body:{...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:1e4});return LW.parse(n)}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${ge}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return uW.parse(n)}async getRunExport(t){let n=await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return mW.parse(n)}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${ge}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return jW.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${ge}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async saveRunClassification(t,n){await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${ge}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return oW.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${ge}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${ge}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${ge}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return iW.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${ge}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return sW.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${ge}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${ge}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MO.parse(n)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:n,headers:o}){await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MO.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:n,headers:o}){let r=await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return aW[t](r)}async queueTests(t){let n=await this.sendRequest(`/${ge}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nW.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${ge}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return gW.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${ge}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${ge}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${ge}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:n}),contentType:n["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${ge}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return SW.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${ge}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return BW.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${ge}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${ge}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${ge}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${ge}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(n){if(n instanceof Error&&n.message.includes("404"))return null;throw n}}async queueSuiteRuns(t){let n=await this.sendRequest(`/${ge}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return AW.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${ge}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return NG.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${ge}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return LG.parse(n)}catch(n){if(n instanceof Bn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ii.parse(n)}catch(n){if(n instanceof Bn&&n.status===404)return null;throw n}}async getRunsByCommit(t){let o=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(o.push(...i.runs.map(s=>({...s,test:null}))),i.runs.length<100||r>=i.pageCount)break}return o}async updateGithubPRHealRiskSummary(t,n){await this.sendRequest(`/${ge}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,n){try{await this.sendRequest(`/${ge}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(o){n.error({err:o},"Failed to upload proposed steps");}}async reportBillableEvents(t,n){try{await this.sendRequest(`/${ge}/billing/events`,{method:"POST",body:n,retries:10,requestTimeoutMs:1e4});}catch(o){t.error({err:o},"Failed to report billable event");}}async fetchTestFragment(t){let n=await this.sendRequest(`/${ge}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return EW.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${ge}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${ge}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return CW.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${ge}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return RW.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${ge}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return vW.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${ge}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return wW.parse(o)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${ge}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return zW.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${ge}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(o){n.error({err:o},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:n,testId:o,types:r,agentSubtype:i,limit:s,mode:a,scoreMultiplier:l,retries:c,signal:d},u){try{let p=await this.sendRequest(`/${ge}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:n,testId:o,types:r,agentSubtype:i,limit:s,mode:a,scoreMultiplier:l},retries:c??3,requestTimeoutMs:5e3,signal:d});return sV.parse(p)}catch(p){return u.warn({err:p},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${ge}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return lO.parse(n)}async getMergeBaseCommitFromGithub(t,n,o,r){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(s)}async compareCommitsFromGithub({owner:t,repo:n,base:o,head:r}){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/compare?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Y$.parse(s)}async getGithubFileContent({owner:t,repo:n,path:o,ref:r}){let i=new URLSearchParams;i.set("path",o),i.set("ref",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return J$.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${ge}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return X$.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return W$.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return q$.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Z$.parse(o).template}catch(o){if(o instanceof Bn&&o.status===404)return;throw o}}async getGithubPullRequestForBranch(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i;try{i=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Bn&&s.status===404)return;throw s}return K$.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(r)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kO.parse(s)}async getMergeBaseCommitFromGitlab(t,n,o){let r=new URLSearchParams;r.set("base",n),r.set("head",o);let i=encodeURIComponent(t),s=await this.sendRequest(`/${ge}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return aS.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${ge}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Bn&&s.status===404)return;throw s}return Q$.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${ge}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${ge}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kO.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${ge}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z.record(z.string(),z.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${ge}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return EG(t)}catch(t){if(t instanceof Bn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),ah.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${ge}/quarantine`,{method:"GET"});return IW.parse(t)}async sendExploreSlackNotification(t){await this.sendRequest(`/${ge}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${ge}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${ge}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,n,o){await this.sendRequest(`/${ge}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let n=await this.sendRequest(`/${ge}/limbar/android`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return _W.parse(n)}async extendEmulatorTtl(t,n){try{await this.sendRequest(`/${ge}/limbar/${this.platformRoute(t)}/${n}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3});}catch{}}async generateAssetUploadUrl({channel:t,tag:n,md5:o,platform:r}){let i={channel:t,tag:n,md5:o},s=await this.sendRequest(`/${ge}/limbar/${this.platformRoute(r)}/upload-url`,{method:"POST",retries:3,body:i,requestTimeoutMs:15e3,logResponse:true});return OW.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(`/${ge}/limbar/android/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(`/${ge}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MW.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(`/${ge}/limbar/assets/${t}/${n}/${this.platformRoute(o)}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return NW.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(`/${ge}/limbar/assets/${t}/${n}/${this.platformRoute(o)}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(`/${ge}/limbar/ios`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return PW.parse(n)}async deleteIosEmulator(t){await this.sendRequest(`/${ge}/limbar/ios/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${ge}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return _$.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${ge}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return NO.parse(n)}};async function Rg(e){let t=process.versions.node,n=parseInt(t.split(".")[0]);(isNaN(n)||n<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${t}`);let o=await e.client.getAuthInfo();return C.debug("Got auth info from API"),o}var Bc=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};var Uc=class extends ui{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${ge}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return mU.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var vg=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Mh(t)}async acquireCacheLock(t,n){return this.client.acquireCacheLock(t,n)}async createOnDemandScreenshot(t,n,o){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:n.toString("base64"),contentType:o});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:o}}}async fetchOnDemandScreenshot(t){return this.client.fetchOnDemandScreenshot(t.id)}async releaseCacheLock(t){return this.client.releaseCacheLock(t)}async deleteCacheResult(t){return this.client.deleteCacheResult(t)}async setCacheResult(t){return this.client.setCacheResult(t)}async getCacheResult(t){return this.client.getCacheResult(t)}fetchIconKnowledgeBase(t){return this.client.fetchIconKnowledgeBase(t)}saveNewIcons(t,n){return this.client.saveNewIcons(t,n)}};var Hc="v1",Hwe=2e3,ZX="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Gc=class{httpClient;fakerInstance;supportsLease;type="API_CLIENT";sms={send:this.sendSms.bind(this),fetchLatest:this.fetchLatestSms.bind(this),lease:this.leasePhoneNumber.bind(this),release:this.releasePhoneNumber.bind(this)};email={send:this.sendEmail.bind(this),fetchLatest:this.fetchLatestEmail.bind(this),fetchAll:this.fetchAllEmails.bind(this),create:this.createEmail.bind(this)};activeLeases=new Map;constructor(t){this.httpClient=t.httpClient,this.supportsLease=t.supportsLease??true,t.fakerSeed&&(this.fakerInstance=new Faker({locale:en$1}),this.fakerInstance.seed(t.fakerSeed));}async sendSms(t){return this.httpClient.sendRequest(`/${Hc}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${Hc}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(ZX);let n=await this.httpClient.sendRequest(`/${Hc}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Bn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=k$.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(ZX);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${Hc}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to release phone number: ${n.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([n,{leaseToken:o}])=>Re(this.httpClient.sendRequest(`/${Hc}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:Hwe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${Hc}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return D$.parse(t)}};function eQ(e,t,n){return fetch(e,{method:"PUT",body:n,headers:{"Content-Type":t}})}var KR=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:n,archive:o,persist:r}=t,{uploadUrl:i,id:s}=await this.client.generateTestResultsUploadUrl(),a=await eQ(i,"application/zip",o);if(!a.ok)throw new Error(`Failed to upload test results: ${await a.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(s,{runGroupId:n,persist:r});return l}};function Vp({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new ME:new ZL(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var ZL=class{constructor(t,n,o,r,i){this.orgId=n;this.client=o;let{regenerateCache:s,alwaysSaveCache:a,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:d,gitProtectedBranches:u}=r;t.info({options:i,gitBranchName:d,gitProtectedBranches:u},"Cache storage initialization options"),this.cacheHeaders=OE(r),this.isolateCachesByEnvironment=c,this.readCaches=!s;let p=d&&u.includes(d);a||!p?this.writeCaches=true:this.writeCaches=false,p||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:DO(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:n}){if(t.length!==0){if(!this.writeCaches){n.debug("Skipping snapshot cache storage because branch is protected");return}try{await this.client.updateSnapshotCaches({entries:DO(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save snapshot cache entries");}}}async deleteStepCacheEntry({logger:t,testId:n,key:o,environment:r}){try{await this.client.deleteStepCacheEntry({testId:n,key:o,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders);}catch(i){t.error({err:i},"Failed to delete step cache entry");}}async resolveStepCacheEntries(t){if(!this.readCaches){t.logger.debug("Skipping cache resolution because of regenerate flag");return}let n=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0,{steps:o,beforeSteps:r,afterSteps:i}=t.stepLists,s=await this.client.getStepCacheForTest({testId:t.testId,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);if(this.bustOldestCachePercentage!==void 0){let u=Object.entries(s).map(([h,g])=>({key:h,time:g.value.cache?.updatedAt?.getTime()??0}));u.sort((h,g)=>h.time-g.time);let p=u.length,m=Math.max(1,Math.floor(p*this.bustOldestCachePercentage/100));u.slice(0,m).forEach(({key:h})=>{delete s[h];}),t.logger.info({nCachesToBust:m,bustOldestCachePercentage:this.bustOldestCachePercentage,totalCaches:p},"Busted oldest caches");}let a={totalSteps:0,cacheKeysHit:[],cacheKeysMissed:[],uniqueKeysHit:[],cacheMissSamples:[]};for(let u of [o,r,i]){if(!u)continue;let p=_p({steps:u,stepCacheEntries:s,logger:t.logger});a.totalSteps+=p.totalSteps,a.cacheKeysHit.push(...p.cacheKeysHit),a.cacheKeysMissed.push(...p.cacheKeysMissed),a.uniqueKeysHit.push(...p.uniqueKeysHit),a.cacheMissSamples.push(...p.cacheMissSamples);}n&&jwe({cacheResolutionStats:a,logger:t.logger,restoredIdentity:n,schemaVersion:t.schemaVersion,testId:t.testId});let l=["platform:web","source:local",`fileFormat:${t.useSnapshotIdentityCache?"v2":"v1"}`,`snapshotIdentityCache:${t.useSnapshotIdentityCache}`,`orgId:${this.orgId}`,"cliVersion:3.0.1"];if(wt.increment("step_cache_resolution",a.cacheKeysHit.length,[...l,"outcome:hit"]),wt.increment("step_cache_resolution",a.cacheKeysMissed.length,[...l,"outcome:miss"]),wt.increment("step_cache_resolution",a.totalSteps,[...l,"outcome:total"]),!this.writeCaches){t.logger.debug("Skipping cache last used at update because branch is protected");return}let{cachesToSave:c,snapshotCachesToSave:d}=await On({stepLists:t.stepLists,useSnapshotIdentityCache:t.useSnapshotIdentityCache,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});t.useSnapshotIdentityCache&&this.saveSnapshotCacheEntries({entries:d,logger:t.logger}),this.saveStepCacheEntries({entries:c,logger:t.logger});}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(n){t.logger.warn({err:n,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),wt.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.0.1","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:n,testId:o}=t,r=await this.client.getSnapshotCacheForTest({testId:o,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders),i=sR({entries:r,orgId:this.orgId,testId:o,logger:n}),s=iR({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...s.stepLists.steps),t.stepLists.beforeSteps=s.stepLists.beforeSteps,t.stepLists.afterSteps=s.stepLists.afterSteps,n.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:s.stats.mintedSteps,stats:s.stats,moduleRestoreResults:s.moduleRestoreResults.map(({moduleId:a,snapshotHit:l,stats:c})=>({moduleId:a,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),s}};function jwe({cacheResolutionStats:e,logger:t,restoredIdentity:n,schemaVersion:o,testId:r}){let i=e.cacheKeysHit.length,s=e.cacheKeysMissed.length,a=i+s,l=a>0?Math.round(s/a*1e3)/10:0,c=n.stats.matchedSteps+n.stats.mintedSteps,d=c>0?Math.round(n.stats.mintedSteps/c*1e3)/10:0,u=n.moduleRestoreResults.filter(({snapshotHit:g,stats:f})=>!g||f.mintedSteps>0||f.bustedConditionals>0).slice(0,10).map(({moduleId:g,snapshotHit:f,stats:S})=>({moduleId:g,snapshotHit:f,stats:S})),p=n.stats.mintedSteps>=5&&d>=25,m=p||n.stats.bustedConditionals>0||u.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:s,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:p,identityMintRate:d,moduleIdentityIssueCount:u.length,moduleIdentityIssues:u,schemaVersion:o,snapshotIdentityCache:true,stepIdentityStats:n.stats,testId:r,totalCacheableSteps:e.totalSteps};if(!m){t.debug(h,"V2 cache resolution completed");return}t.warn(h,"V2 cache resolution degraded");}function $we(e){let t=new tQ,n=Mn__default.join(e,nt),o=Fs.parse(JSON.parse(Bo__default.readFileSync(n,"utf-8")));t.addLocalFile(n);for(let r of Bo__default.readdirSync(Mn__default.join(e,Dn))){if(!r.endsWith(".zip"))continue;let i=r.replace(/\.zip$/,""),s=new tQ(Mn__default.join(e,Dn,r));for(let a of s.getEntries())a.isDirectory||t.addFile(Mn__default.join(Dn,i,a.entryName),a.getData());}return {runGroupId:o.id,buffer:t.toBuffer()}}async function db(e){let{client:t,resultsPath:n,persist:o}=e;if(!Bo__default.existsSync(n))return {success:false,error:"results path does not exist"};let r=new KR(t);try{let{runGroupId:i,buffer:s}=$we(n),a=await r.uploadResultsArchive({runGroupId:i,archive:s,persist:o});return {success:!0,runGroupUrl:`${t.getAppUrl()}/run-groups/${a}`}}catch(i){return {success:false,error:J(i)}}}var ub=class e{constructor(t){this.filePath=t;Bo__default.rmSync(this.filePath,{recursive:true,force:true}),Bo__default.mkdirSync(this.filePath,{recursive:true});}children=[];streams=[];close(){for(let t of this.children)t.close();for(let t of this.streams)t.end();}cd(t){let n=new e(Mn__default.join(this.filePath,t));return this.children.push(n),n}cwd(){return this.filePath}mkdir(t){Bo__default.mkdirSync(Mn__default.join(this.filePath,t),{recursive:true});}readFile(t){let n=Mn__default.join(this.filePath,t);if(Bo__default.existsSync(n))return Bo__default.readFileSync(n)}storeFile(t){let{name:n,contents:o}=t,r=Mn__default.join(this.filePath,n);try{Bo__default.mkdirSync(Mn__default.dirname(r),{recursive:!0}),Bo__default.writeFileSync(r,o);}catch{}}createFileStream(t){let n=Mn__default.join(this.filePath,t),o=Bo__default.createWriteStream(n);return this.streams.push(o),o}createRunArchive(t,n){let o=new tk(Mn__default.join(this.filePath,Dn),t,n);return this.children.push(o),o}},tk=class{children=[];tempPath;finalPath;logger;closed=false;constructor(t,n,o){this.tempPath=Mn__default.join(t,`temp-storage-${n}`),this.finalPath=Mn__default.join(t,`${n}.zip`),this.logger=o,Bo__default.rmSync(this.tempPath,{recursive:true,force:true}),Bo__default.rmSync(this.finalPath,{recursive:true,force:true}),Bo__default.mkdirSync(this.tempPath,{recursive:true});}readFile(t){let n=Mn__default.join(this.tempPath,t);if(Bo__default.existsSync(n))return Bo__default.readFileSync(n)}mkdir(t){Bo__default.mkdirSync(Mn__default.join(this.tempPath,t),{recursive:true});}cd(t){let n=new ub(Mn__default.join(this.tempPath,t));return this.children.push(n),n}cwd(){return this.tempPath}storeFile(t){if(this.closed)return;let{name:n,contents:o}=t,r=Mn__default.join(this.tempPath,n);Bo__default.mkdirSync(Mn__default.dirname(r),{recursive:true}),Bo__default.writeFileSync(r,o);}close(){if(!this.closed){this.closed=true;for(let t of this.children)t.close();try{let t=new tQ;t.addLocalFolder(this.tempPath,void 0,o=>o!==".DS_Store");let n=t.toBuffer();Bo__default.writeFileSync(this.finalPath,n),Bo__default.rmSync(this.tempPath,{recursive:!0,force:!0});}catch(t){this.logger.warn({err:t,finalPath:this.finalPath,tempPath:this.tempPath},"Failed to archive run artifacts; leaving raw files on disk");}}}};function iQ(e){try{return Bo__default.existsSync(e)?JSON.parse(Bo__default.readFileSync(e,"utf-8")):void 0}catch{return}}function nQ(e){return Bo__default.existsSync(e)?Bo__default.readFileSync(e,"utf-8").split(`
273
+ `)}var Nwe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD",Lwe=2e5;function qR(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[PE]:Hp,...n&&{[J1]:n},...r&&{[q1]:r},...i&&{[X1]:i}};return o&&(s[Y1]=JSON.stringify(o)),s}var qX="bedrock/",KX="azure/",YX=e=>t=>{let n=qR(e),o=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(qX)?o=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(qX.length))}`:t.startsWith(KX)&&(o=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(KX.length))}`),createAnthropic({baseURL:o,headers:n,apiKey:e.apiKey})(t)},JX=e=>t=>{let n=qR(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??kwe(process.env[Nwe])??Lwe:void 0;return cb({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?zX({compactThreshold:r}):void 0})(t)},XX=e=>t=>{let n=qR(e);return cb({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey})(t)},QX=e=>t=>{let n=qR(e);return cb({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey})(t)};function kwe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}var hr=class extends ui{agentConfig;constructor(t,n){let o={...ch,...t};VA(o),super(n),this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return jG.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`/${ge}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Hp,...t},signal:n.abortSignal});return GG.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`/${ge}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z.string().parse(n)}async getElementLocation(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,useMemory:n.useMemory,cacheBustReason:n.cacheBustReason,agentConfigVersion:this.agentConfig?.locator},r=await this.sendRequest(`/${ge}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal});return eW.parse(r)}async getAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.assertion},r=await this.sendRequest(`/${ge}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal});return OO.parse(r)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return Z1.parse(r)}async getVisualAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`/${ge}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return OO.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`/${ge}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return Q1.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`/${ge}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal})}async getMultiturnAiActionEvaluation(t,n){let o=await this.sendRequest(`/${ge}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return W_.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`/${ge}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return tW.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`/${ge}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return z_.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return $H.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${ge}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return VH.parse(r)}async getKnowledgeSuggestion(t,n){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,n){let o=await this.sendRequest(`/${ge}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return pA.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`/${ge}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return ej.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`/${ge}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return BH.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`/${ge}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return GH.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`/${ge}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return HH.parse(o)}async getIframeRegex(t,n){let o=await this.sendRequest(`/${ge}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return pU.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,logger:i}=t,s=async a=>{try{await this.sendRequest(`/${ge}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},...a}});}catch(l){i.warn({err:l},"Failed to upsert result classification trace");}};return s({}),{id:n,update:s}}getAnthropicModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return YX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAnthropicBedrockModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`bedrock/${o}`)}getAnthropicFoundryModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`azure/${o}`)}getOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:s}=t;return JX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:s})}getXAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return XX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAzureOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return QX({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...Rt(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}};var Ot=class extends ui{constructor(t){super({...t,mode:void 0});}getAppUrl(){return Mh(this.baseUrl)}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${ge}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof Bn?n.status>=400&&n.status<500?new Error(n.rawError,{cause:n}):new Error(`Momentic server error (HTTP ${n.status}). Please try again in a moment.`,{cause:n}):new Error(`Could not reach Momentic server at ${this.baseUrl}. Check your network connection. If you're on a restricted network (VPN, firewall, or proxy), you may need to whitelist Momentic's servers: https://momentic.ai/docs/environment/authentication#ip-whitelist`,{cause:n})}return fW.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${ge}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return L$.parse(t).announcements}async getQuotaStatus(){let t=await this.sendRequest(`/${ge}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return yW.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${ge}/browsers/connection`,{method:"POST",body:{...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:1e4});return LW.parse(n)}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${ge}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return uW.parse(n)}async getRunExport(t){let n=await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return mW.parse(n)}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${ge}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return jW.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${ge}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async saveRunClassification(t,n){await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${ge}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return oW.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${ge}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${ge}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${ge}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return iW.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${ge}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return sW.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${ge}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${ge}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MO.parse(n)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:n,headers:o}){await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MO.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:n,headers:o}){let r=await this.sendRequest(`/${ge}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return aW[t](r)}async queueTests(t){let n=await this.sendRequest(`/${ge}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nW.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${ge}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return gW.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${ge}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${ge}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${ge}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:n}),contentType:n["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${ge}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return SW.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${ge}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return BW.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${ge}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${ge}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${ge}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${ge}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(n){if(n instanceof Error&&n.message.includes("404"))return null;throw n}}async queueSuiteRuns(t){let n=await this.sendRequest(`/${ge}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return AW.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${ge}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return NG.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${ge}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return LG.parse(n)}catch(n){if(n instanceof Bn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${ge}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ii.parse(n)}catch(n){if(n instanceof Bn&&n.status===404)return null;throw n}}async getRunsByCommit(t){let o=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(o.push(...i.runs.map(s=>({...s,test:null}))),i.runs.length<100||r>=i.pageCount)break}return o}async updateGithubPRHealRiskSummary(t,n){await this.sendRequest(`/${ge}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,n){try{await this.sendRequest(`/${ge}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(o){n.error({err:o},"Failed to upload proposed steps");}}async reportBillableEvents(t,n){try{await this.sendRequest(`/${ge}/billing/events`,{method:"POST",body:n,retries:10,requestTimeoutMs:1e4});}catch(o){t.error({err:o},"Failed to report billable event");}}async fetchTestFragment(t){let n=await this.sendRequest(`/${ge}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return EW.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${ge}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${ge}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return CW.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${ge}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return RW.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${ge}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return vW.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${ge}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return wW.parse(o)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${ge}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return zW.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${ge}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(o){n.error({err:o},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:n,testId:o,types:r,agentSubtype:i,limit:s,mode:a,scoreMultiplier:l,retries:c,signal:d},u){try{let p=await this.sendRequest(`/${ge}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:n,testId:o,types:r,agentSubtype:i,limit:s,mode:a,scoreMultiplier:l},retries:c??3,requestTimeoutMs:5e3,signal:d});return sV.parse(p)}catch(p){return u.warn({err:p},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${ge}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return lO.parse(n)}async getMergeBaseCommitFromGithub(t,n,o,r){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(s)}async compareCommitsFromGithub({owner:t,repo:n,base:o,head:r}){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/compare?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Y$.parse(s)}async getGithubFileContent({owner:t,repo:n,path:o,ref:r}){let i=new URLSearchParams;i.set("path",o),i.set("ref",r);let s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return J$.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${ge}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return X$.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return W$.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return q$.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Z$.parse(o).template}catch(o){if(o instanceof Bn&&o.status===404)return;throw o}}async getGithubPullRequestForBranch(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i;try{i=await this.sendRequest(`/${ge}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Bn&&s.status===404)return;throw s}return K$.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${ge}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(r)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${ge}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kO.parse(s)}async getMergeBaseCommitFromGitlab(t,n,o){let r=new URLSearchParams;r.set("base",n),r.set("head",o);let i=encodeURIComponent(t),s=await this.sendRequest(`/${ge}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return aS.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${ge}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Bn&&s.status===404)return;throw s}return Q$.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${ge}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return aS.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${ge}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kO.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${ge}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z.record(z.string(),z.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${ge}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return EG(t)}catch(t){if(t instanceof Bn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),ah.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${ge}/quarantine`,{method:"GET"});return IW.parse(t)}async sendExploreSlackNotification(t){await this.sendRequest(`/${ge}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${ge}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${ge}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,n,o){await this.sendRequest(`/${ge}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let n=await this.sendRequest(`/${ge}/limbar/android`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return _W.parse(n)}async extendEmulatorTtl(t,n){try{await this.sendRequest(`/${ge}/limbar/${this.platformRoute(t)}/${n}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3});}catch{}}async generateAssetUploadUrl({channel:t,tag:n,md5:o,platform:r}){let i={channel:t,tag:n,md5:o},s=await this.sendRequest(`/${ge}/limbar/${this.platformRoute(r)}/upload-url`,{method:"POST",retries:3,body:i,requestTimeoutMs:15e3,logResponse:true});return OW.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(`/${ge}/limbar/android/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(`/${ge}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MW.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(`/${ge}/limbar/assets/${t}/${n}/${this.platformRoute(o)}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return NW.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(`/${ge}/limbar/assets/${t}/${n}/${this.platformRoute(o)}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(`/${ge}/limbar/ios`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return PW.parse(n)}async deleteIosEmulator(t){await this.sendRequest(`/${ge}/limbar/ios/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${ge}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return _$.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${ge}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return NO.parse(n)}};async function Rg(e){let t=process.versions.node,n=parseInt(t.split(".")[0]);(isNaN(n)||n<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${t}`);let o=await e.client.getAuthInfo();return C.debug("Got auth info from API"),o}var Bc=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};var Uc=class extends ui{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${ge}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return mU.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var vg=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Mh(t)}async acquireCacheLock(t,n){return this.client.acquireCacheLock(t,n)}async createOnDemandScreenshot(t,n,o){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:n.toString("base64"),contentType:o});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:o}}}async fetchOnDemandScreenshot(t){return this.client.fetchOnDemandScreenshot(t.id)}async releaseCacheLock(t){return this.client.releaseCacheLock(t)}async deleteCacheResult(t){return this.client.deleteCacheResult(t)}async setCacheResult(t){return this.client.setCacheResult(t)}async getCacheResult(t){return this.client.getCacheResult(t)}fetchIconKnowledgeBase(t){return this.client.fetchIconKnowledgeBase(t)}saveNewIcons(t,n){return this.client.saveNewIcons(t,n)}};var Hc="v1",Hwe=2e3,ZX="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Gc=class{httpClient;fakerInstance;supportsLease;type="API_CLIENT";sms={send:this.sendSms.bind(this),fetchLatest:this.fetchLatestSms.bind(this),lease:this.leasePhoneNumber.bind(this),release:this.releasePhoneNumber.bind(this)};email={send:this.sendEmail.bind(this),fetchLatest:this.fetchLatestEmail.bind(this),fetchAll:this.fetchAllEmails.bind(this),create:this.createEmail.bind(this)};activeLeases=new Map;constructor(t){this.httpClient=t.httpClient,this.supportsLease=t.supportsLease??true,t.fakerSeed&&(this.fakerInstance=new Faker({locale:en$1}),this.fakerInstance.seed(t.fakerSeed));}async sendSms(t){return this.httpClient.sendRequest(`/${Hc}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${Hc}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(ZX);let n=await this.httpClient.sendRequest(`/${Hc}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Bn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=k$.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(ZX);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${Hc}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to release phone number: ${n.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([n,{leaseToken:o}])=>Re(this.httpClient.sendRequest(`/${Hc}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:Hwe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${Hc}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${Hc}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof Bn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return D$.parse(t)}};function eQ(e,t,n){return fetch(e,{method:"PUT",body:n,headers:{"Content-Type":t}})}var KR=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:n,archive:o,persist:r}=t,{uploadUrl:i,id:s}=await this.client.generateTestResultsUploadUrl(),a=await eQ(i,"application/zip",o);if(!a.ok)throw new Error(`Failed to upload test results: ${await a.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(s,{runGroupId:n,persist:r});return l}};function Vp({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new ME:new ZL(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var ZL=class{constructor(t,n,o,r,i){this.orgId=n;this.client=o;let{regenerateCache:s,alwaysSaveCache:a,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:d,gitProtectedBranches:u}=r;t.info({options:i,gitBranchName:d,gitProtectedBranches:u},"Cache storage initialization options"),this.cacheHeaders=OE(r),this.isolateCachesByEnvironment=c,this.readCaches=!s;let p=d&&u.includes(d);a||!p?this.writeCaches=true:this.writeCaches=false,p||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:DO(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:n}){if(t.length!==0){if(!this.writeCaches){n.debug("Skipping snapshot cache storage because branch is protected");return}try{await this.client.updateSnapshotCaches({entries:DO(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save snapshot cache entries");}}}async deleteStepCacheEntry({logger:t,testId:n,key:o,environment:r}){try{await this.client.deleteStepCacheEntry({testId:n,key:o,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders);}catch(i){t.error({err:i},"Failed to delete step cache entry");}}async resolveStepCacheEntries(t){if(!this.readCaches){t.logger.debug("Skipping cache resolution because of regenerate flag");return}let n=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0,{steps:o,beforeSteps:r,afterSteps:i}=t.stepLists,s=await this.client.getStepCacheForTest({testId:t.testId,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);if(this.bustOldestCachePercentage!==void 0){let u=Object.entries(s).map(([h,g])=>({key:h,time:g.value.cache?.updatedAt?.getTime()??0}));u.sort((h,g)=>h.time-g.time);let p=u.length,m=Math.max(1,Math.floor(p*this.bustOldestCachePercentage/100));u.slice(0,m).forEach(({key:h})=>{delete s[h];}),t.logger.info({nCachesToBust:m,bustOldestCachePercentage:this.bustOldestCachePercentage,totalCaches:p},"Busted oldest caches");}let a={totalSteps:0,cacheKeysHit:[],cacheKeysMissed:[],uniqueKeysHit:[],cacheMissSamples:[]};for(let u of [o,r,i]){if(!u)continue;let p=_p({steps:u,stepCacheEntries:s,logger:t.logger});a.totalSteps+=p.totalSteps,a.cacheKeysHit.push(...p.cacheKeysHit),a.cacheKeysMissed.push(...p.cacheKeysMissed),a.uniqueKeysHit.push(...p.uniqueKeysHit),a.cacheMissSamples.push(...p.cacheMissSamples);}n&&jwe({cacheResolutionStats:a,logger:t.logger,restoredIdentity:n,schemaVersion:t.schemaVersion,testId:t.testId});let l=["platform:web","source:local",`fileFormat:${t.useSnapshotIdentityCache?"v2":"v1"}`,`snapshotIdentityCache:${t.useSnapshotIdentityCache}`,`orgId:${this.orgId}`,"cliVersion:3.0.2"];if(wt.increment("step_cache_resolution",a.cacheKeysHit.length,[...l,"outcome:hit"]),wt.increment("step_cache_resolution",a.cacheKeysMissed.length,[...l,"outcome:miss"]),wt.increment("step_cache_resolution",a.totalSteps,[...l,"outcome:total"]),!this.writeCaches){t.logger.debug("Skipping cache last used at update because branch is protected");return}let{cachesToSave:c,snapshotCachesToSave:d}=await On({stepLists:t.stepLists,useSnapshotIdentityCache:t.useSnapshotIdentityCache,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});t.useSnapshotIdentityCache&&this.saveSnapshotCacheEntries({entries:d,logger:t.logger}),this.saveStepCacheEntries({entries:c,logger:t.logger});}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(n){t.logger.warn({err:n,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),wt.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.0.2","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:n,testId:o}=t,r=await this.client.getSnapshotCacheForTest({testId:o,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders),i=sR({entries:r,orgId:this.orgId,testId:o,logger:n}),s=iR({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...s.stepLists.steps),t.stepLists.beforeSteps=s.stepLists.beforeSteps,t.stepLists.afterSteps=s.stepLists.afterSteps,n.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:s.stats.mintedSteps,stats:s.stats,moduleRestoreResults:s.moduleRestoreResults.map(({moduleId:a,snapshotHit:l,stats:c})=>({moduleId:a,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),s}};function jwe({cacheResolutionStats:e,logger:t,restoredIdentity:n,schemaVersion:o,testId:r}){let i=e.cacheKeysHit.length,s=e.cacheKeysMissed.length,a=i+s,l=a>0?Math.round(s/a*1e3)/10:0,c=n.stats.matchedSteps+n.stats.mintedSteps,d=c>0?Math.round(n.stats.mintedSteps/c*1e3)/10:0,u=n.moduleRestoreResults.filter(({snapshotHit:g,stats:f})=>!g||f.mintedSteps>0||f.bustedConditionals>0).slice(0,10).map(({moduleId:g,snapshotHit:f,stats:S})=>({moduleId:g,snapshotHit:f,stats:S})),p=n.stats.mintedSteps>=5&&d>=25,m=p||n.stats.bustedConditionals>0||u.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:s,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:p,identityMintRate:d,moduleIdentityIssueCount:u.length,moduleIdentityIssues:u,schemaVersion:o,snapshotIdentityCache:true,stepIdentityStats:n.stats,testId:r,totalCacheableSteps:e.totalSteps};if(!m){t.debug(h,"V2 cache resolution completed");return}t.warn(h,"V2 cache resolution degraded");}function $we(e){let t=new tQ,n=Mn__default.join(e,nt),o=Fs.parse(JSON.parse(Bo__default.readFileSync(n,"utf-8")));t.addLocalFile(n);for(let r of Bo__default.readdirSync(Mn__default.join(e,Dn))){if(!r.endsWith(".zip"))continue;let i=r.replace(/\.zip$/,""),s=new tQ(Mn__default.join(e,Dn,r));for(let a of s.getEntries())a.isDirectory||t.addFile(Mn__default.join(Dn,i,a.entryName),a.getData());}return {runGroupId:o.id,buffer:t.toBuffer()}}async function db(e){let{client:t,resultsPath:n,persist:o}=e;if(!Bo__default.existsSync(n))return {success:false,error:"results path does not exist"};let r=new KR(t);try{let{runGroupId:i,buffer:s}=$we(n),a=await r.uploadResultsArchive({runGroupId:i,archive:s,persist:o});return {success:!0,runGroupUrl:`${t.getAppUrl()}/run-groups/${a}`}}catch(i){return {success:false,error:J(i)}}}var ub=class e{constructor(t){this.filePath=t;Bo__default.rmSync(this.filePath,{recursive:true,force:true}),Bo__default.mkdirSync(this.filePath,{recursive:true});}children=[];streams=[];close(){for(let t of this.children)t.close();for(let t of this.streams)t.end();}cd(t){let n=new e(Mn__default.join(this.filePath,t));return this.children.push(n),n}cwd(){return this.filePath}mkdir(t){Bo__default.mkdirSync(Mn__default.join(this.filePath,t),{recursive:true});}readFile(t){let n=Mn__default.join(this.filePath,t);if(Bo__default.existsSync(n))return Bo__default.readFileSync(n)}storeFile(t){let{name:n,contents:o}=t,r=Mn__default.join(this.filePath,n);try{Bo__default.mkdirSync(Mn__default.dirname(r),{recursive:!0}),Bo__default.writeFileSync(r,o);}catch{}}createFileStream(t){let n=Mn__default.join(this.filePath,t),o=Bo__default.createWriteStream(n);return this.streams.push(o),o}createRunArchive(t,n){let o=new tk(Mn__default.join(this.filePath,Dn),t,n);return this.children.push(o),o}},tk=class{children=[];tempPath;finalPath;logger;closed=false;constructor(t,n,o){this.tempPath=Mn__default.join(t,`temp-storage-${n}`),this.finalPath=Mn__default.join(t,`${n}.zip`),this.logger=o,Bo__default.rmSync(this.tempPath,{recursive:true,force:true}),Bo__default.rmSync(this.finalPath,{recursive:true,force:true}),Bo__default.mkdirSync(this.tempPath,{recursive:true});}readFile(t){let n=Mn__default.join(this.tempPath,t);if(Bo__default.existsSync(n))return Bo__default.readFileSync(n)}mkdir(t){Bo__default.mkdirSync(Mn__default.join(this.tempPath,t),{recursive:true});}cd(t){let n=new ub(Mn__default.join(this.tempPath,t));return this.children.push(n),n}cwd(){return this.tempPath}storeFile(t){if(this.closed)return;let{name:n,contents:o}=t,r=Mn__default.join(this.tempPath,n);Bo__default.mkdirSync(Mn__default.dirname(r),{recursive:true}),Bo__default.writeFileSync(r,o);}close(){if(!this.closed){this.closed=true;for(let t of this.children)t.close();try{let t=new tQ;t.addLocalFolder(this.tempPath,void 0,o=>o!==".DS_Store");let n=t.toBuffer();Bo__default.writeFileSync(this.finalPath,n),Bo__default.rmSync(this.tempPath,{recursive:!0,force:!0});}catch(t){this.logger.warn({err:t,finalPath:this.finalPath,tempPath:this.tempPath},"Failed to archive run artifacts; leaving raw files on disk");}}}};function iQ(e){try{return Bo__default.existsSync(e)?JSON.parse(Bo__default.readFileSync(e,"utf-8")):void 0}catch{return}}function nQ(e){return Bo__default.existsSync(e)?Bo__default.readFileSync(e,"utf-8").split(`
274
274
  `).map(n=>n.trim()).filter(n=>n.length>0):[]}function qwe(e,t){let n=e.attemptIdToAttemptNumber.get(t);if(n)return Mn__default.join(e.inflatedPath,"attempts",n);let o=Mn__default.join(e.inflatedPath,"attempts");if(!Bo__default.existsSync(o))return;let r=Bo__default.readdirSync(o,{withFileTypes:true}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of r){let s=Mn__default.join(o,i,nt),a=iQ(s);if(typeof a!="object"||a===null)continue;let l=a.id;if(typeof l=="string"&&l===t)return e.attemptIdToAttemptNumber.set(t,i),Mn__default.join(o,i)}}function oQ(e,t,n){let o=Mn__default.join(e,"attempts");if(!Bo__default.existsSync(o))return;let r=Bo__default.readdirSync(o,{withFileTypes:true}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of r){let s=Mn__default.join(o,i,"assets",`${t}.${n}`);if(Bo__default.existsSync(s))return s}}var JR=class{constructor(t,n,o){this.outputDir=t;this.runId=n;this.runAttemptId=o;this.runsDir=Mn__default.join(t,Dn),this.zipPath=Mn__default.join(this.runsDir,`${n}.zip`);}inflatedByRunId=new Map;zipPath;runsDir;ensureInflatedRun(t){let n=this.inflatedByRunId.get(t);if(n)return n;if(t!==this.runId||!Bo__default.existsSync(this.zipPath))return;let o=Mn__default.join(this.runsDir,`temp-unzipped-${t}-${randomUUID()}`);Bo__default.mkdirSync(o,{recursive:true}),new tQ(this.zipPath).extractAllTo(o,true);let i={runId:t,zipPath:this.zipPath,inflatedPath:o,attemptIdToAttemptNumber:new Map};return this.inflatedByRunId.set(t,i),i}close(){for(let t of this.inflatedByRunId.values())Bo__default.rmSync(t.inflatedPath,{recursive:true,force:true});this.inflatedByRunId.clear();}getAttemptDir(){let t=this.ensureInflatedRun(this.runId);if(t)return qwe(t,this.runAttemptId)}listVideoAssetPaths(){let t=this.getAttemptDir();if(!t)return [];let n=Mn__default.join(t,"assets");return Bo__default.existsSync(n)?Bo__default.readdirSync(n,{withFileTypes:true}).filter(r=>r.isFile()).map(r=>Mn__default.join(n,r.name)).filter(r=>{let i=Mn__default.extname(r).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(t,n){let o=this.getAttemptDir();if(!o)return;let r=Mn__default.join(o,"assets",`${t}.${n}`);if(Bo__default.existsSync(r))try{return Bo__default.readFileSync(r,"utf-8")}catch{return}}async getConsoleLogsForRunAttempt(t,n,o){if(n!==this.runId||o!==this.runAttemptId)return;let r=this.getAttemptDir();if(!r)return;let i=iQ(Mn__default.join(r,"console.json")),s=rO.safeParse(i);return s.success?s.data:void 0}async getNetworkLogsForRunAttempt(t,n,o){if(n!==this.runId||o!==this.runAttemptId)return;let r=this.getAttemptDir();if(!r)return;let i=Mn__default.join(r,"assets","har-pages.log"),s=Mn__default.join(r,"assets","har-entries.log"),a={};for(let d of nQ(i)){let u=zy.safeParse(rQ(d));u.success&&(a[u.data.id]=u.data);}let l={},c=nQ(s);for(let d=0;d<c.length;d++){let u=c[d],p=Wy.safeParse(rQ(u));if(!p.success)continue;let m=`${p.data.startedDateTime}-${d}`;l[m]=p.data;}if(Object.keys(l).length!==0)return iO(a,l)}async getHtmlSnapshot(t,n){let o=this.readAttemptAssetText(n,"html");if(o)return o;let r=this.ensureInflatedRun(this.runId);if(!r)return;let i=oQ(r.inflatedPath,n,"html");if(i)try{return Bo__default.readFileSync(i,"utf-8")}catch{return}}async getA11yTreeSnapshot(t,n){let o=this.readAttemptAssetText(n,"xml");if(o)return o;let r=this.ensureInflatedRun(this.runId);if(!r)return;let i=oQ(r.inflatedPath,n,"xml");if(i)try{return Bo__default.readFileSync(i,"utf-8")}catch{return}}async getScreenshot(t,n){if(!this.ensureInflatedRun(this.runId))return;let r=this.getAttemptDir();if(r)for(let i of ["png","jpeg"])try{return Bo__default.readFileSync(Mn__default.join(r,"assets",`${n}.${i}`))}catch{continue}}};function rQ(e){try{return JSON.parse(e)}catch{return}}function sQ(e,t){let n=Kwe(e);return n==="EACCES"||n==="EPERM"?{status:403,body:{error:`Permission denied: ${t}`}}:n==="ENOENT"?{status:404,body:{error:`Not found: ${t}`}}:n==="ENOTDIR"?{status:400,body:{error:`Not a directory: ${t}`}}:n==="EISDIR"?{status:400,body:{error:`Is a directory: ${t}`}}:n==="EEXIST"?{status:409,body:{error:`Already exists: ${t}`}}:n==="ENOTEMPTY"?{status:409,body:{error:`Directory is not empty: ${t}`}}:{status:500,body:{error:`${t}: ${J(e)}`}}}function Kwe(e){if(e&&typeof e=="object"&&"code"in e&&typeof e.code=="string")return e.code}function XR({test:e,envNameOverride:t,urlOverride:n,resolveEnv:o}){let r=t??Ywe(e),i,s={};if(r){try{i=o(r);}catch(l){let c=`Failed to resolve environment ${r} for test ${e.name}: ${J(l)}`;throw l instanceof Pe?new Pe(c,{cause:l}):new Error(c,{cause:l})}s=i.variables;}let a=e.baseUrl;if(n)a=n;else if(!a){let l=s[Wo];typeof l=="string"&&(a=l);}if(!a)throw new Error(`Cannot run test with no base URL and no ${Wo} variable defined in its environment`);return {envName:r,resolvedEnv:i,environmentVariables:s,baseUrl:a}}function Ywe(e){for(let t of e.envs??[])if(t.default)return t.name}async function pb(e,t,n,o,r=ct){let i=o??await je(e,false,r),s=i[n],a=Jwe(s,t);if(t.id){if(a.length===0)throw new dt(`No ${n} found with id '${t.id}' in project '${e.rootDir}'.`);return QR(a,i)}if(t.name){if(a.length===0)throw new dt(`No ${n} found with exact name '${t.name}' in project '${e.rootDir}'.`);if(a.length>1){let l=a.map(c=>({id:c.id,path:c.relativePath}));throw new dt([`Multiple ${n} found with exact name '${t.name}'. Please disambiguate by id or path.`,JSON.stringify(l,null,2)].join(`
275
275
  `))}return QR(a,i)}if(t.path){let l=t.path;if(a.length===0)throw new dt(`No ${n} found at path '${l}'. Provide an absolute path or a path relative to '${e.rootDir}'.`);if(a.length>1){let c=a.filter(u=>u.fullFilePath===l||u.relativePath===l||u.fullFilePath.endsWith(`/${l}`)||u.relativePath.endsWith(`/${l}`));if(c.length===1)return QR(c,i);let d=a.map(u=>({id:u.id,path:u.fullFilePath}));throw new dt([`Multiple ${n} matched the provided path '${l}'. Please pass the absolute path.`,JSON.stringify(d,null,2)].join(`
276
276
  `))}return QR(a,i)}throw new Error("No valid selector field provided. Exactly one of id, name, or path must be specified.")}function QR(e,t){let n=e[0];if(!n)throw e.length>0?new Error("No entity found: matches array is not empty. Unknown error."):new Error("No entity found.");return {entity:n,momenticFiles:t}}function Jwe(e,t){if(t.id){let n=Object.values(e).find(o=>o.id===t.id);return n?[n]:[]}if(t.name)return Object.values(e).filter(n=>n.name===t.name);if(t.path){let n=t.path;return Object.values(e).filter(o=>o.fullFilePath.includes(n)||o.relativePath.includes(n))}throw new Error("No valid selector field provided: expected exactly one of 'id', 'name', or 'path'.")}async function aQ({cwd:e,projectName:t}){let n=Mn__default.join(e,Rl);if(Bo__default.existsSync(n))throw new Error(`A ${Rl} file already exists at ${n}. Please rename or remove it to initialize a new project.`);let o=await L3(e)??"main",r={name:t,include:hg,gitMainBranch:o,fileFormat:"v2",browser:{disableSecondaryCacheResolution:true},ai:{useMemory:true,failureRecovery:true,agentConfig:{...ch}}};return Lc(r,n),{configPath:n}}var Zwe="npx skills@latest add momentic-ai/skills",eIe="https://momentic.ai/docs/integrations/mcp-server",tIe={web:["https://momentic.ai/docs/quickstart/web"],mobile:["https://momentic.ai/docs/quickstart/ios","https://momentic.ai/docs/quickstart/android"]};function lQ({platform:e}){let t="npx momentic app",n=tIe[e].map(r=>la.underline.cyan(r)).join(la.dim(" \xB7 ")),o=(r,i)=>` ${la.dim(r.padEnd(14))}${i}`;C.log(""),C.log(la.bold("Next steps")),C.log(o("Editor skills",la.cyan(Zwe))),C.log(o("Coding agent",`${la.dim("Momentic MCP \u2192")} ${la.underline.cyan(eIe)}`)),C.log(o("Local editor",la.cyan(t))),C.log(o("Docs",n));}var cQ=["cursor","claude-code","codex","opencode","copilot"],oIe={cursor:Mn__default.join(".cursor","skills"),"claude-code":Mn__default.join(".claude","skills"),codex:Mn__default.join(".agents","skills"),opencode:Mn__default.join(".opencode","skills"),copilot:Mn__default.join(".github","skills")};function dQ({editor:e,skillsDir:t,cwd:n=process.cwd()}){Bo__default.existsSync(t)||(C.error(`Could not find skills directory at ${t}. Is the CLI package installed correctly?`),process.exit(1));let o=Bo__default.readdirSync(t).filter(s=>s.endsWith(".md"));o.length===0&&(C.error(`No skill markdown files found in ${t}. Is the CLI package installed correctly?`),process.exit(1));let r=rIe({cwd:n}),i=Mn__default.join(r,oIe[e]);for(let s of o){let a=Mn__default.basename(s,".md"),l=Mn__default.join(i,a),c=Bo__default.readFileSync(Mn__default.join(t,s),"utf8");Bo__default.mkdirSync(l,{recursive:true}),Bo__default.writeFileSync(Mn__default.join(l,"SKILL.md"),c),C.success(`Installed SKILL.md at ${Mn__default.join(l,"SKILL.md")}.`);}}function rIe({cwd:e}){try{return execSync("git rev-parse --show-toplevel",{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||e}catch{return e}}var pQ=Mn__default.join(Ac.homedir(),".momentic"),jc=Mn__default.join(pQ,"auth.json"),sIe=new Set(["EPERM","EACCES","EROFS"]),aIe=z.object({workos:z.object({accessToken:z.string(),refreshToken:z.string(),expiresAt:z.number()}),user:z.object({id:z.string(),email:z.string().optional()}),organizationId:z.string(),apiKey:z.string(),apiKeyName:z.string(),serverUrl:z.string(),createdAt:z.string(),selfServe:z.boolean().optional()});function mQ(){if(!Bo__default.existsSync(jc))return null;try{let e=Bo__default.readFileSync(jc,"utf-8"),t=aIe.safeParse(JSON.parse(e));return t.success?t.data:null}catch{return null}}function hQ(e){try{Bo__default.mkdirSync(pQ,{recursive:!0,mode:448}),Bo__default.writeFileSync(jc,JSON.stringify(e,null,2),{mode:384});}catch(t){throw sK(t)&&sIe.has(t.code)?new Pe(`Couldn't save your Momentic credentials to ${jc} (${t.code}). Make sure that file and its parent directory are writable and owned by you \u2014 for example, they may have been created by a previous \`sudo\` run. Fix the permissions and try again.`,{cause:t}):t}}function gQ(){return Bo__default.existsSync(jc)?(Bo__default.unlinkSync(jc),true):false}function ZR(){return mQ()?.apiKey||void 0}function ev(){return mQ()?.serverUrl||void 0}var nk="client_01HM3P9MPY20QDSXAECT6PY1JF",fQ="https://api.workos.com";async function yQ({clientId:e}){let t=await fetch(`${fQ}/user_management/authorize/device`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:e}).toString()});if(!t.ok)throw new Error(`WorkOS device authorization failed (${t.status}): ${await t.text()}`);return await t.json()}async function SQ({clientId:e,deviceCode:t,interval:n,expiresIn:o,onProgress:r}){let i=Date.now()+o*1e3,s=Math.max(n,1);for(;Date.now()<i;){await lIe(s*1e3);let a=await fetch(`${fQ}/user_management/authenticate`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:t,client_id:e}).toString()});if(a.ok)return await a.json();let l=await a.json().catch(()=>({})),c=l.error??"";if(c==="authorization_pending"){r?.("polling");continue}if(c==="slow_down"){s+=5,r?.("slow_down");continue}throw c==="expired_token"?new Pe("The login request expired. Please run `login` again."):c==="access_denied"?new Pe("Login was denied."):new Error(`WorkOS device token exchange failed: ${l.error_description??c??a.statusText}`)}throw new Pe("Timed out waiting for sign-in. Please run `login` again.")}function lIe(e){return new Promise(t=>setTimeout(t,e))}async function ok({serverUrl:e,body:t}){let n=await fetch(`${e}/v1/auth/exchange-workos-token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)}),o=await n.text(),r;try{r=o?JSON.parse(o):void 0;}catch{}if(n.status===200){let s=bW.safeParse(r);if(s.success)return {kind:"ok",data:s.data}}if(n.status===409){let s=TW.safeParse(r);if(s.success)return {kind:"multi_org",data:s.data}}let i=cIe(r)??o??n.statusText;return {kind:"error",status:n.status,message:i}}function cIe(e){if(e&&typeof e=="object"&&"error"in e){let{error:t}=e;if(typeof t=="string")return t}}async function TQ({serverUrl:e,ui:t,openBrowser:n=true,clientName:o=Ac.hostname(),coldRun:r=false}){let i=await yQ({clientId:nk}),s=i.verification_uri_complete??i.verification_uri,a=r?"Create account or sign in":"Sign in",l=r?"Waiting for you to create your account or sign in...":"Waiting for you to sign in...",c=r?"Waiting for you to create your account or sign in (slowing polling)...":"Waiting for you to sign in (slowing polling)...";if(t.note(`${la.bold(i.user_code)}
@@ -297,7 +297,7 @@ ${l}`:a}function ik(e,t,n={}){if(e.length===0)return "";let o=Jo(t),r=Math.max(n
297
297
  ${o}
298
298
  `);}catch(n){e.logger.warn({err:n},"Failed to check CLI version against npm");}}async function BIe(e,t,n){if(!LQ){LQ=true;try{let o=await e.getCliAnnouncements();for(let{announcement:r,level:i}of o)C.log(`
299
299
  ${PQ({announcement:r,level:i},n)}
300
- `);}catch(o){t.warn({err:o},"Failed to fetch CLI announcements");}}}var gb=25;function FQ(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function BQ(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function sk({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,Lc(e.config,e.configFilePath),o.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${n} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${o.length} migrated files`),CR([...new Set(o)],t));}async function fb(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function ak(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function UIe(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(ch)){let l=n[s];l!==a&&(l?.startsWith(`${a}.`)||(n[s]=a,o.push({type:s,newValue:a})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:o,enabledUseMemory:r,enabledFailureRecovery:i}}async function UQ({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=UIe(e.config);return o?{fileFormatChanged:o,aiSettings:r,migration:await n()}:(!t&&ak(r)&&Lc(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:r,migration:lk()})}function lk(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function ck({summary:e,fileFormatChanged:t,aiSettings:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=o?"Would migrate":"Migrated",a=xS(r,e.migratedTestPaths.length),l=xS(i,e.migratedModulePaths.length);C.info(`${s} ${e.migratedTestPaths.length} ${a} and ${e.migratedModulePaths.length} ${l} to v2.`),(e.alreadyV2TestCount>0||e.alreadyV2ModuleCount>0)&&C.dimmed(` Skipped ${e.alreadyV2TestCount} already-v2 ${xS(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-v2 ${xS(i,e.alreadyV2ModuleCount)}.`),t&&C.dimmed(" + fileFormat: v2");for(let c of n.upgradedAgents)C.dimmed(` + ai.agentConfig.${c.type}: ${c.newValue}`);n.enabledUseMemory&&C.dimmed(" + ai.useMemory: true"),n.enabledFailureRecovery&&C.dimmed(" + ai.failureRecovery: true");}var dk=false,HQ;try{let e=await import('@sentry/node');e.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:"production",dist:"production",release:"cli-3.0.1",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(t,n){return Zq(n?.originalException)||eK(n?.originalException)||tK(n?.originalException)||uN(n?.originalException)||yA(n?.originalException,Pe)||nK(n?.originalException)?null:t}}),v2(e.captureException),HQ=t=>{if(!t){e.setUser(null);return}e.setUser({id:t.userId,organizationId:t.orgId,...t.email&&{email:t.email}});},dk=!0;}catch{}var GQ=e=>HQ?.(e);var GIe=new PC(30,60*1e3),hv="https://api.momentic.ai",cv,jQ,zc=e=>{hv=e;},Uo=()=>hv,$Q=()=>Mh(hv),ou=e=>{jQ=e;},Wc=()=>jQ,vo=()=>cv;var yb,dv,VQ,zQ,WQ,uv,qQ,KQ=({authInfo:e,apiKey:t,apiClient:n})=>{cv=n,yb=e.orgId,dv=e.userId,VQ=e.email,zQ=e.name,WQ=e.pylonEmailHash,uv=t,qQ=e.selfServe;},Og=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await Rg({client:e});return KQ({authInfo:o,apiKey:t,apiClient:e}),o},gv=async e=>{if(cv&&yb&&uv)return yb;let t=new Ot({baseUrl:hv,apiKey:e,logger:C});cv=t;try{let n=await t.getAuthInfo();return KQ({authInfo:n,apiKey:e,apiClient:t}),n.orgId}catch(n){throw new Error(`Error checking API key against server: ${n}`,{cause:n})}},Un=()=>{if(!yb)throw new Error("Your organization ID is invalid.");return yb},Il=()=>{if(!dv)throw new Error("Your user ID is invalid.");return dv},YQ=()=>dv,Mg=()=>VQ,JQ=()=>zQ,XQ=()=>WQ,fv=()=>qQ,hi=()=>{if(!uv)throw new Error("Your API key is invalid.");return uv},pv,mv,qc=()=>{mv?.abort(),mv=void 0;},Ng=(e,t)=>{pv=e,qc(),mv=new AbortController;let n=mv.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=Mn__default.resolve(e.rootDir,r.envFile);try{if(Bo__default.lstatSync(i).isSymbolicLink())return;Bo__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{jIe({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Lg({project:e,apiClient:t}){let n=o=>js({project:o,apiClient:t});Ng(await n(e),async o=>n(await tn({configFilePath:o})));}var et=()=>{if(!pv)throw new Pe("No Momentic project is currently loaded. Open or select a project before invoking this action.");return pv};function jIe({filesToWatch:e,revalidator:t,signal:n,project:o}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(a,l)=>{if(a.mtime.getTime()!==l.mtime.getTime()){GIe.increment("setLocalProject")&&C.warn(`A file change under the ${o.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`);try{pv=await Promise.resolve(t(o.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};Bo__default.watchFile(r,{persistent:false},i);let s=()=>{Bo__default.unwatchFile(r,i),n.removeEventListener("abort",s);};n.addEventListener("abort",s);});}function mt(e){return function(...t){let n=t[t.length-1],o=e(...t);Promise.resolve(o).catch(n);}}var VIe="3.0.1",Wp=Dh({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:VIe});(async()=>{try{let e=await zs(Wp);e.gitBranchName&&Wp.addBinding("branch",e.gitBranchName);}catch{}})();var QQ=Router();QQ.get("/",async(e,t)=>{let n=et(),o=vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await di(Wp,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=Wc(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var uk=QQ;var qIe=5e3,KIe=[".js",".mjs",".cjs",".ts"];function pk(e={}){let t=Router();function n(){let u=et();return Mn__default.dirname(u.configFilePath)}function o(u){return Mn__default.join(n(),...u)}function r(u){let p=Mn__default.relative(n(),u);return p?p.split(Mn__default.sep):[]}function i(u,p){let m=Bo__default.statSync(u),h=r(u);return uO.parse({name:p,absolutePath:u,relativePath:h.join(Mn__default.sep),pathSegments:h,isDirectory:m.isDirectory(),size:m.size,createdAt:m.birthtime,modifiedAt:m.mtime,accessedAt:m.atime})}function s(u){let p=Mn__default.relative(n(),u);return p===""||!p.startsWith("..")&&!Mn__default.isAbsolute(p)}async function a(u){let p=et();return Oc(["*"],{cwd:u,ignore:p.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(qIe)})}function l(u){let p=u.trimStart().replace(/^file:\/\//,"").replaceAll("\\","/"),m=p.lastIndexOf("/");return m===-1?{directoryText:"",filePrefix:p}:{directoryText:p.slice(0,m+1),filePrefix:p.slice(m+1)}}function c(u){return u.replaceAll("\\","/").split("/").filter(p=>p&&p!==".")}function d({sourceDirectoryPath:u,targetPath:p,isDirectory:m}){let h=Mn__default.relative(u,p).split(Mn__default.sep).join("/");return m?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",mt(async(u,p,m)=>{let h=AV.safeParse(u.body);if(!h.success){p.status(400).json({error:`Failed to parse file-reference-suggestions body: ${h.error.message}`});return}let{sourceDirectoryPath:g="",value:f}=h.data,S=new Set((h.data.allowedExtensions??KIe).map(R=>R.toLowerCase())),T=l(f);if(T.directoryText.startsWith("/")){p.status(200).json({suggestions:[]});return}let A=Mn__default.resolve(n(),...c(g)),E=Mn__default.resolve(A,...c(T.directoryText));if(!s(A)||!s(E)){p.status(200).json({suggestions:[]});return}if(!Bo__default.existsSync(E)||!Bo__default.statSync(E).isDirectory()){p.status(200).json({suggestions:[]});return}let v;try{v=await a(E);}catch(R){if(R instanceof Error&&R.name==="TimeoutError"){p.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw R}let I=v.map(R=>{let x=Mn__default.join(E,R);return {entryName:R,targetPath:x,isDirectory:Bo__default.statSync(x).isDirectory()}}),O=T.filePrefix.toLowerCase(),_=I.filter(R=>R.entryName.startsWith(".")||!R.entryName.toLowerCase().startsWith(O)?false:R.isDirectory?true:S.has(Mn__default.extname(R.entryName).toLowerCase())).sort((R,x)=>R.isDirectory!==x.isDirectory?R.isDirectory?-1:1:R.entryName.localeCompare(x.entryName)).map(R=>({name:R.entryName,isDirectory:R.isDirectory,value:d({sourceDirectoryPath:A,targetPath:R.targetPath,isDirectory:R.isDirectory})}));p.status(200).json({suggestions:_});})),t.post("/",mt(async(u,p,m)=>{let h;try{h=TV.parse(u.body).pathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let g=o(h);if(!Bo__default.existsSync(g)){p.status(404).json({error:`Path not found: ${h.join(Mn__default.sep)}`});return}if(!Bo__default.statSync(g).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Mn__default.sep)}`});return}let S;try{S=await a(g);}catch(E){if(E instanceof Error&&E.name==="TimeoutError"){p.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw E}let T=S.map(E=>{let v=Mn__default.join(g,E);return i(v,E)});if(e.allowedFileTypes){let E=new Set(e.allowedFileTypes);T=(await Promise.all(T.map(async v=>{if(v.isDirectory||!(v.name.endsWith(".test.yaml")||v.name.endsWith(".module.yaml")))return v;let O=await YIe(v.absolutePath);return O!==void 0&&E.has(O)?v:null}))).filter(v=>v!==null);}let A={absolutePath:g,pathSegments:h,contents:T};p.status(200).json(A);})),t.put("/",mt(async(u,p,m)=>{let h;try{h=EV.parse(u.body).pathSegments;}catch(S){p.status(400).json({error:`Failed to parse folder create body: ${S}`});return}let g=o(h);if(Bo__default.existsSync(g)){p.status(200).json({success:true,message:`Folder already exists: ${h.join(Mn__default.sep)}`,pathSegments:h});return}Bo__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(Mn__default.sep)}`,pathSegments:h};p.status(201).json(f);})),t.patch("/",mt(async(u,p,m)=>{let h,g;try{let E=CV.parse(u.body);h=E.pathSegments,g=E.newPathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder update body: ${E}`});return}let f=o(h),S=o(g);if(!Bo__default.existsSync(f)){p.status(400).json({error:`Folder not found: ${h.join(Mn__default.sep)}`});return}if(Bo__default.existsSync(S)){p.status(400).json({error:`Destination already exists: ${g.join(Mn__default.sep)}`});return}let T=Mn__default.dirname(S);Bo__default.existsSync(T)||Bo__default.mkdirSync(T,{recursive:true}),Bo__default.renameSync(f,S);let A={success:true,message:`Folder moved from ${h.join(Mn__default.sep)} to ${g.join(Mn__default.sep)}`,pathSegments:g};p.status(200).json(A);})),t.delete("/",mt(async(u,p,m)=>{let h,g=true;try{let A=RV.parse(u.body);h=A.pathSegments,g=A.recursive??!0;}catch(A){p.status(400).json({error:`Failed to parse folder delete body: ${A}`});return}let f=o(h);if(!Bo__default.existsSync(f)){p.status(200).json({success:true,message:`Folder not found: ${h.join(Mn__default.sep)}`,pathSegments:h});return}if(!Bo__default.statSync(f).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Mn__default.sep)}`});return}try{if(g)Bo__default.rmSync(f,{recursive:!0,force:!0});else {if(Bo__default.readdirSync(f).length>0){p.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}Bo__default.rmdirSync(f);}}catch(A){let{status:E,body:v}=sQ(A,`delete folder ${h.join("/")}`);p.status(E).json(v);return}let T={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};p.status(200).json(T);})),t}async function YIe(e){try{let t=await Bo__default.promises.open(e,"r");try{let n=Buffer.alloc(4096),{bytesRead:o}=await t.read(n,0,n.length,0);return n.toString("utf-8",0,o).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var ZQ=Router();ZQ.get("/",async(e,t)=>{let n=et(),o=vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await di(Wp,o,n);t.status(200).json(r);});var mk=ZQ;var XIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async()=>{t.info({sessionId:o},"Cancel event received");let r=n.getSession(o);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},e4={event:"cancel",createHandler:XIe};var QIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{testId:o,sessionId:r}=e;return async(i,s)=>{let{stepId:a,environment:l}=i;t.info({testId:o,stepId:a},"Clearing AI action cache");try{let c=n.getSession(r);if(!c)throw new Error("No active session found");await c.cacheStorage.deleteStepCacheEntry({logger:t,testId:o,key:a,environment:l}),s({ok:!0});}catch(c){t.error({testId:o,stepId:a,err:c},"Failed to clear AI action cache"),s({ok:false,error:J(c)});}}},t4={event:"clearAIActionCache",createHandler:QIe};var ZIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let c=(await a.getBrowserState({skipWait:!0})).serialize();t.debug({a11yTree:c},"Fetched a11y tree from the browser"),i({a11yTree:c});}catch(l){t.error({err:l},"Error fetching a11y tree from the browser"),i({err:l.message});}}},n4={event:"fetchA11yTree",createHandler:ZIe};var exe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let l=await a.html();i({html:l});}catch(l){t.error({err:l},"Error fetching DOM from the browser"),l.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:l.message});}}},o4={event:"fetchDom",createHandler:exe};var txe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return r=>{t.info({sessionId:o,reason:r},`Disconnect event received (${r})`),n.removeSession(o,t);}},r4={event:"disconnect",createHandler:txe};function Ws(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=nxe(n);oxe(t,o,r);let i=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await rxe(i,t,o,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function nxe(e){let t=e[0],n;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":n=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":if(!t.results.length){n=t;break}t=t.results[0];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(n)break}let o=e[e.length-1],r;for(;;){switch(o.type){case "PRESET_ACTION":{r=o;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":if(!o.results.length){r=o;break}o=o.results[o.results.length-1];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:n,lastMetadata:r}}function oxe(e,t,n){t&&(e.beforeUrl=t.beforeUrl),n&&(e.afterUrl=n.afterUrl,e.data=n.data,n.status!=="SUCCESS"&&(e.message=n.message,e.failureClassification=n.failureClassification));}async function rxe(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}async function i4(e){let t;try{t=new URL(e.url).hostname;}catch{}let n=[];return e.headers.getSetCookie()?.forEach(o=>{let r=iE(o,t);n.push(...r);}),n}function pxe(e,t){if(!e&&!t)return;let n;if(e){let{url:r,options:i}=e;n=new Request(r,i);}let o;if(t){let{body:r,options:i}=t;o=new Response(r??null,i);}return {request:n,response:o}}async function mxe(e,t){switch(e){case "RAW":return t;case "RESPONSE":if(t instanceof Response){let n=[];return t.headers.forEach((r,i)=>{n.push([i,r]);}),{status:t.status,headers:n,body:await t.text()}}else throw new Error("Result is not a Response object")}}var hxe=Object.getPrototypeOf(async function(){}).constructor;async function s4(e,t,n){let o=t.code;t.options.fragment&&(o=`return ${t.code}`),o=`${o}
300
+ `);}catch(o){t.warn({err:o},"Failed to fetch CLI announcements");}}}var gb=25;function FQ(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function BQ(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function sk({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,Lc(e.config,e.configFilePath),o.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${n} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${o.length} migrated files`),CR([...new Set(o)],t));}async function fb(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function ak(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function UIe(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(ch)){let l=n[s];l!==a&&(l?.startsWith(`${a}.`)||(n[s]=a,o.push({type:s,newValue:a})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:o,enabledUseMemory:r,enabledFailureRecovery:i}}async function UQ({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=UIe(e.config);return o?{fileFormatChanged:o,aiSettings:r,migration:await n()}:(!t&&ak(r)&&Lc(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:r,migration:lk()})}function lk(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function ck({summary:e,fileFormatChanged:t,aiSettings:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=o?"Would migrate":"Migrated",a=xS(r,e.migratedTestPaths.length),l=xS(i,e.migratedModulePaths.length);C.info(`${s} ${e.migratedTestPaths.length} ${a} and ${e.migratedModulePaths.length} ${l} to v2.`),(e.alreadyV2TestCount>0||e.alreadyV2ModuleCount>0)&&C.dimmed(` Skipped ${e.alreadyV2TestCount} already-v2 ${xS(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-v2 ${xS(i,e.alreadyV2ModuleCount)}.`),t&&C.dimmed(" + fileFormat: v2");for(let c of n.upgradedAgents)C.dimmed(` + ai.agentConfig.${c.type}: ${c.newValue}`);n.enabledUseMemory&&C.dimmed(" + ai.useMemory: true"),n.enabledFailureRecovery&&C.dimmed(" + ai.failureRecovery: true");}var dk=false,HQ;try{let e=await import('@sentry/node');e.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:"production",dist:"production",release:"cli-3.0.2",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(t,n){return Zq(n?.originalException)||eK(n?.originalException)||tK(n?.originalException)||uN(n?.originalException)||yA(n?.originalException,Pe)||nK(n?.originalException)?null:t}}),v2(e.captureException),HQ=t=>{if(!t){e.setUser(null);return}e.setUser({id:t.userId,organizationId:t.orgId,...t.email&&{email:t.email}});},dk=!0;}catch{}var GQ=e=>HQ?.(e);var GIe=new PC(30,60*1e3),hv="https://api.momentic.ai",cv,jQ,zc=e=>{hv=e;},Uo=()=>hv,$Q=()=>Mh(hv),ou=e=>{jQ=e;},Wc=()=>jQ,vo=()=>cv;var yb,dv,VQ,zQ,WQ,uv,qQ,KQ=({authInfo:e,apiKey:t,apiClient:n})=>{cv=n,yb=e.orgId,dv=e.userId,VQ=e.email,zQ=e.name,WQ=e.pylonEmailHash,uv=t,qQ=e.selfServe;},Og=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await Rg({client:e});return KQ({authInfo:o,apiKey:t,apiClient:e}),o},gv=async e=>{if(cv&&yb&&uv)return yb;let t=new Ot({baseUrl:hv,apiKey:e,logger:C});cv=t;try{let n=await t.getAuthInfo();return KQ({authInfo:n,apiKey:e,apiClient:t}),n.orgId}catch(n){throw new Error(`Error checking API key against server: ${n}`,{cause:n})}},Un=()=>{if(!yb)throw new Error("Your organization ID is invalid.");return yb},Il=()=>{if(!dv)throw new Error("Your user ID is invalid.");return dv},YQ=()=>dv,Mg=()=>VQ,JQ=()=>zQ,XQ=()=>WQ,fv=()=>qQ,hi=()=>{if(!uv)throw new Error("Your API key is invalid.");return uv},pv,mv,qc=()=>{mv?.abort(),mv=void 0;},Ng=(e,t)=>{pv=e,qc(),mv=new AbortController;let n=mv.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=Mn__default.resolve(e.rootDir,r.envFile);try{if(Bo__default.lstatSync(i).isSymbolicLink())return;Bo__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{jIe({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Lg({project:e,apiClient:t}){let n=o=>js({project:o,apiClient:t});Ng(await n(e),async o=>n(await tn({configFilePath:o})));}var et=()=>{if(!pv)throw new Pe("No Momentic project is currently loaded. Open or select a project before invoking this action.");return pv};function jIe({filesToWatch:e,revalidator:t,signal:n,project:o}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(a,l)=>{if(a.mtime.getTime()!==l.mtime.getTime()){GIe.increment("setLocalProject")&&C.warn(`A file change under the ${o.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`);try{pv=await Promise.resolve(t(o.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};Bo__default.watchFile(r,{persistent:false},i);let s=()=>{Bo__default.unwatchFile(r,i),n.removeEventListener("abort",s);};n.addEventListener("abort",s);});}function mt(e){return function(...t){let n=t[t.length-1],o=e(...t);Promise.resolve(o).catch(n);}}var VIe="3.0.2",Wp=Dh({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:VIe});(async()=>{try{let e=await zs(Wp);e.gitBranchName&&Wp.addBinding("branch",e.gitBranchName);}catch{}})();var QQ=Router();QQ.get("/",async(e,t)=>{let n=et(),o=vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await di(Wp,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=Wc(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var uk=QQ;var qIe=5e3,KIe=[".js",".mjs",".cjs",".ts"];function pk(e={}){let t=Router();function n(){let u=et();return Mn__default.dirname(u.configFilePath)}function o(u){return Mn__default.join(n(),...u)}function r(u){let p=Mn__default.relative(n(),u);return p?p.split(Mn__default.sep):[]}function i(u,p){let m=Bo__default.statSync(u),h=r(u);return uO.parse({name:p,absolutePath:u,relativePath:h.join(Mn__default.sep),pathSegments:h,isDirectory:m.isDirectory(),size:m.size,createdAt:m.birthtime,modifiedAt:m.mtime,accessedAt:m.atime})}function s(u){let p=Mn__default.relative(n(),u);return p===""||!p.startsWith("..")&&!Mn__default.isAbsolute(p)}async function a(u){let p=et();return Oc(["*"],{cwd:u,ignore:p.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(qIe)})}function l(u){let p=u.trimStart().replace(/^file:\/\//,"").replaceAll("\\","/"),m=p.lastIndexOf("/");return m===-1?{directoryText:"",filePrefix:p}:{directoryText:p.slice(0,m+1),filePrefix:p.slice(m+1)}}function c(u){return u.replaceAll("\\","/").split("/").filter(p=>p&&p!==".")}function d({sourceDirectoryPath:u,targetPath:p,isDirectory:m}){let h=Mn__default.relative(u,p).split(Mn__default.sep).join("/");return m?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",mt(async(u,p,m)=>{let h=AV.safeParse(u.body);if(!h.success){p.status(400).json({error:`Failed to parse file-reference-suggestions body: ${h.error.message}`});return}let{sourceDirectoryPath:g="",value:f}=h.data,S=new Set((h.data.allowedExtensions??KIe).map(R=>R.toLowerCase())),T=l(f);if(T.directoryText.startsWith("/")){p.status(200).json({suggestions:[]});return}let A=Mn__default.resolve(n(),...c(g)),E=Mn__default.resolve(A,...c(T.directoryText));if(!s(A)||!s(E)){p.status(200).json({suggestions:[]});return}if(!Bo__default.existsSync(E)||!Bo__default.statSync(E).isDirectory()){p.status(200).json({suggestions:[]});return}let v;try{v=await a(E);}catch(R){if(R instanceof Error&&R.name==="TimeoutError"){p.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw R}let I=v.map(R=>{let x=Mn__default.join(E,R);return {entryName:R,targetPath:x,isDirectory:Bo__default.statSync(x).isDirectory()}}),O=T.filePrefix.toLowerCase(),_=I.filter(R=>R.entryName.startsWith(".")||!R.entryName.toLowerCase().startsWith(O)?false:R.isDirectory?true:S.has(Mn__default.extname(R.entryName).toLowerCase())).sort((R,x)=>R.isDirectory!==x.isDirectory?R.isDirectory?-1:1:R.entryName.localeCompare(x.entryName)).map(R=>({name:R.entryName,isDirectory:R.isDirectory,value:d({sourceDirectoryPath:A,targetPath:R.targetPath,isDirectory:R.isDirectory})}));p.status(200).json({suggestions:_});})),t.post("/",mt(async(u,p,m)=>{let h;try{h=TV.parse(u.body).pathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let g=o(h);if(!Bo__default.existsSync(g)){p.status(404).json({error:`Path not found: ${h.join(Mn__default.sep)}`});return}if(!Bo__default.statSync(g).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Mn__default.sep)}`});return}let S;try{S=await a(g);}catch(E){if(E instanceof Error&&E.name==="TimeoutError"){p.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw E}let T=S.map(E=>{let v=Mn__default.join(g,E);return i(v,E)});if(e.allowedFileTypes){let E=new Set(e.allowedFileTypes);T=(await Promise.all(T.map(async v=>{if(v.isDirectory||!(v.name.endsWith(".test.yaml")||v.name.endsWith(".module.yaml")))return v;let O=await YIe(v.absolutePath);return O!==void 0&&E.has(O)?v:null}))).filter(v=>v!==null);}let A={absolutePath:g,pathSegments:h,contents:T};p.status(200).json(A);})),t.put("/",mt(async(u,p,m)=>{let h;try{h=EV.parse(u.body).pathSegments;}catch(S){p.status(400).json({error:`Failed to parse folder create body: ${S}`});return}let g=o(h);if(Bo__default.existsSync(g)){p.status(200).json({success:true,message:`Folder already exists: ${h.join(Mn__default.sep)}`,pathSegments:h});return}Bo__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(Mn__default.sep)}`,pathSegments:h};p.status(201).json(f);})),t.patch("/",mt(async(u,p,m)=>{let h,g;try{let E=CV.parse(u.body);h=E.pathSegments,g=E.newPathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder update body: ${E}`});return}let f=o(h),S=o(g);if(!Bo__default.existsSync(f)){p.status(400).json({error:`Folder not found: ${h.join(Mn__default.sep)}`});return}if(Bo__default.existsSync(S)){p.status(400).json({error:`Destination already exists: ${g.join(Mn__default.sep)}`});return}let T=Mn__default.dirname(S);Bo__default.existsSync(T)||Bo__default.mkdirSync(T,{recursive:true}),Bo__default.renameSync(f,S);let A={success:true,message:`Folder moved from ${h.join(Mn__default.sep)} to ${g.join(Mn__default.sep)}`,pathSegments:g};p.status(200).json(A);})),t.delete("/",mt(async(u,p,m)=>{let h,g=true;try{let A=RV.parse(u.body);h=A.pathSegments,g=A.recursive??!0;}catch(A){p.status(400).json({error:`Failed to parse folder delete body: ${A}`});return}let f=o(h);if(!Bo__default.existsSync(f)){p.status(200).json({success:true,message:`Folder not found: ${h.join(Mn__default.sep)}`,pathSegments:h});return}if(!Bo__default.statSync(f).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Mn__default.sep)}`});return}try{if(g)Bo__default.rmSync(f,{recursive:!0,force:!0});else {if(Bo__default.readdirSync(f).length>0){p.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}Bo__default.rmdirSync(f);}}catch(A){let{status:E,body:v}=sQ(A,`delete folder ${h.join("/")}`);p.status(E).json(v);return}let T={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};p.status(200).json(T);})),t}async function YIe(e){try{let t=await Bo__default.promises.open(e,"r");try{let n=Buffer.alloc(4096),{bytesRead:o}=await t.read(n,0,n.length,0);return n.toString("utf-8",0,o).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var ZQ=Router();ZQ.get("/",async(e,t)=>{let n=et(),o=vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await di(Wp,o,n);t.status(200).json(r);});var mk=ZQ;var XIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async()=>{t.info({sessionId:o},"Cancel event received");let r=n.getSession(o);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},e4={event:"cancel",createHandler:XIe};var QIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{testId:o,sessionId:r}=e;return async(i,s)=>{let{stepId:a,environment:l}=i;t.info({testId:o,stepId:a},"Clearing AI action cache");try{let c=n.getSession(r);if(!c)throw new Error("No active session found");await c.cacheStorage.deleteStepCacheEntry({logger:t,testId:o,key:a,environment:l}),s({ok:!0});}catch(c){t.error({testId:o,stepId:a,err:c},"Failed to clear AI action cache"),s({ok:false,error:J(c)});}}},t4={event:"clearAIActionCache",createHandler:QIe};var ZIe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let c=(await a.getBrowserState({skipWait:!0})).serialize();t.debug({a11yTree:c},"Fetched a11y tree from the browser"),i({a11yTree:c});}catch(l){t.error({err:l},"Error fetching a11y tree from the browser"),i({err:l.message});}}},n4={event:"fetchA11yTree",createHandler:ZIe};var exe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let l=await a.html();i({html:l});}catch(l){t.error({err:l},"Error fetching DOM from the browser"),l.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:l.message});}}},o4={event:"fetchDom",createHandler:exe};var txe=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return r=>{t.info({sessionId:o,reason:r},`Disconnect event received (${r})`),n.removeSession(o,t);}},r4={event:"disconnect",createHandler:txe};function Ws(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=nxe(n);oxe(t,o,r);let i=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await rxe(i,t,o,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function nxe(e){let t=e[0],n;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":n=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":if(!t.results.length){n=t;break}t=t.results[0];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(n)break}let o=e[e.length-1],r;for(;;){switch(o.type){case "PRESET_ACTION":{r=o;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":if(!o.results.length){r=o;break}o=o.results[o.results.length-1];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:n,lastMetadata:r}}function oxe(e,t,n){t&&(e.beforeUrl=t.beforeUrl),n&&(e.afterUrl=n.afterUrl,e.data=n.data,n.status!=="SUCCESS"&&(e.message=n.message,e.failureClassification=n.failureClassification));}async function rxe(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}async function i4(e){let t;try{t=new URL(e.url).hostname;}catch{}let n=[];return e.headers.getSetCookie()?.forEach(o=>{let r=iE(o,t);n.push(...r);}),n}function pxe(e,t){if(!e&&!t)return;let n;if(e){let{url:r,options:i}=e;n=new Request(r,i);}let o;if(t){let{body:r,options:i}=t;o=new Response(r??null,i);}return {request:n,response:o}}async function mxe(e,t){switch(e){case "RAW":return t;case "RESPONSE":if(t instanceof Response){let n=[];return t.headers.forEach((r,i)=>{n.push([i,r]);}),{status:t.status,headers:n,body:await t.text()}}else throw new Error("Result is not a Response object")}}var hxe=Object.getPrototypeOf(async function(){}).constructor;async function s4(e,t,n){let o=t.code;t.options.fragment&&(o=`return ${t.code}`),o=`${o}
301
301
  //# sourceURL=${dE}`;let{env:r,additionalBindings:i,request:s,response:a}=t.bindings,l=t.tools,c={},d=(A,E)=>{r[A]=E,c[A]=E;},u={},p=(A,E)=>{r[A]=E,u[A]=E;},m;o.includes("Octokit")&&(m=(await import('@octokit/rest')).Octokit);let h;o.includes("createAppAuth")&&(h=(await import('@octokit/auth-app')).createAppAuth);let g=async()=>{try{return await Promise.resolve(new hxe("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","mock",...Object.keys(i??{}),o)(axe,cxe,l.fakerInstance??faker,sxe,uxe,m,h,dxe,lxe,i4,r,t.options.disallowVariableUpdates?void 0:d,t.options.disallowVariableUpdates?void 0:p,E=>l.sms.send(E),E=>l.sms.fetchLatest(E),l.email,l.sms,pxe(s,a),...Object.values(i??{})))}catch(A){throw new mA(J(A),{cause:A})}},f=true,S,T;try{let A=await Re(g(),{milliseconds:t.options.timeoutMs,message:`Timeout of ${t.options.timeoutMs}ms exceeded for code execution`,signal:t.signal});S=await mxe(t.options.responseSerialization??"RAW",A);}catch(A){n.error({err:A,env:r,evalCode:o},`[${e}] Error executing code: ${A}`),f=false,A instanceof Od?T=`Timeout of ${t.options.timeoutMs}ms exceeded for code execution`:T=A instanceof Error?A.message:`${A}`;}return {result:S,variableUpdates:c,persistentVariableUpdates:u,success:f,error:T}}async function a4({code:e,fragment:t,context:n,localTools:o,logger:r,signal:i,timeoutMs:s=Id,disallowVariableUpdates:a,additionalBindings:l,responseSerialization:c,mock:d}){let u=randomUUID(),p=await s4(u,{code:e,options:{fragment:t,timeoutMs:s,disallowVariableUpdates:a,responseSerialization:c},bindings:{...n.toObjectCopy(),...d,additionalBindings:l},tools:o,signal:i},r);return C.debug(`[${u}] Got execution result: ${JSON.stringify(p)}`),p}var bxe=ige(global.fetch,{retries:3,retryOn:function(e,t,n){return !!(t!==null||n&&n.status>=500)},retryDelay:function(e){return Math.pow(2,e)*500}}),l4=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,c4=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function d4({orgId:e,code:t,fragment:n,context:o,timeoutMs:r=Id,retries:i=2,signal:s,logger:a,additionalBindings:l,disallowVariableUpdates:c,responseSerialization:d,mock:u}){if(!l4)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,m,h=0;if(!c4)throw new Error("Missing lambda auth secret.");let g=createHmac("sha256",c4).update(e).digest("hex");for(;h<=i;){h++,s?.throwIfAborted();let S={id:randomUUID(),orgId:e,momenticLambdaAuthHash:g,code:t,fragment:n,state:{...o.toObjectCopy(),...u,additionalBindings:l},timeoutMs:r,disallowVariableUpdates:c,responseSerialization:d};try{if(p=await Re(bxe(l4,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)}),{milliseconds:r,message:`Timeout of ${r}ms exceeded for code execution`,signal:s}),!p)throw new Error("Got empty response from code evaluation server");if(!p.ok)throw new Error(`Code evaluation server returned error code ${p.status}`);m=void 0;break}catch(T){m=T;}}if(m)throw a.error({err:m},"Failed to evaluate code remotely"),m;if(!p)throw new Error(`An unexpected code evaluation error occurred${m?`: ${m}`:""}`);let f;try{f=B$.parse(await p.json());}catch(S){throw new Error(`Code evaluation server returned invalid response: ${S}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function ru(e){let t;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)t=await d4(e);else if(e.localTools)t=await a4({...e,localTools:e.localTools});else throw new Error("No code evaluation environment available");if(t.error){let n=`Failed to evaluate code:
302
302
  ${t.error}
303
303
  Code received:
@@ -5739,7 +5739,7 @@ ${e}`;case "ELEMENT_CHECK":return `${uZ}
5739
5739
  ${e}`;default:return e}}async function Ys({frameConfig:e,action:t,browser:n}){let o=n.getActiveFrameConfig();e?n.setActiveFrameConfig(e):o?.type==="auto"&&n.setActiveFrameConfig(void 0);try{return await t()}finally{n.setActiveFrameConfig(o);}}var JPe=["NAVIGATE","NEW_TAB","CLOSE_TAB","TAB","REFRESH","WAIT_FOR_URL"];async function hZ({beforeUrl:e,beforePages:t,browser:n,command:o,logger:r}){if(JPe.includes(o.type))return;await Kn().startAsyncSpan("AUTO_FOLLOW_NEW_TABS",async s=>{let c=("cache"in o&&o.cache&&"target"in o.cache?o.cache.target:void 0)?.nodeOnlySerializedHtml?.includes("<a")??false?300:3e3,d=Date.now(),u=0;for(r.info({command:o.type,beforePages:t,beforeUrl:e,timeout:c},"Checking for new tabs to auto-follow");u===0||Date.now()-d<c;){await Xe(250),u++;let p=(await n.getOpenPages()).map(h=>h.url),m=n.url();if(p.length!==t.length)for(let h=p.length-1;h>=t.length;h--){let g=p[h];if($d(g,r)&&g!==e&&g!==m){r.info({beforePages:t,afterPages:p,beforeUrl:e},"Auto-following new tab after preset action"),await n.switchToPage({type:"INDEX",index:String(h)}),s.result={followed:true};return}}}s.result={followed:false};});}async function Ol(e,t={}){let n=await e.getBrowserState(t);return {serializedTree:n.serialize(t.serializationOpts),tree:n}}var gZ=e=>!!e&&_m(e),fZ=e=>{let{cache:t,description:n,disableSecondaryCacheResolution:o,logger:r}=e,i=t,s=false,a;return i&&o&&i.targetSource==="HEURISTIC_HEALED"&&(s=true,a="Heuristic healed cache incompatible",i=void 0),i?.inputDescription&&!pZ(n,i.inputDescription)&&(r.warn({old:i.inputDescription,new:n},"Target cache was generated with a different description, clearing it automatically"),s=true,a="Description changed",i=void 0),{cache:i,cacheBustedBeforeAction:s,cacheBustReason:a}};var SZ={minChunkTokenCount:1e4,acceptableChunkTokenCount:25e3,maxChunkTokenCount:5e4,maxLineLength:4e3},yZ=/<(\S+) id="(\d+)".*?>/g,XPe=/(<\/(\S+)>)|(<(\S+).*?\/>)/g,bZ=["h1","h2","section","footer","nav","aside","form","label","dialog"],QPe=[...bZ,"span","div","h3"],ZPe=["table","select","form","ul","ol","menu","pre","code","dialog"],eOe=["table","form","dialog","nav","section","ul","select"];function TZ(e){return tOe(e)}function tOe({logger:e,serializedTree:t,options:n}){let{minChunkTokenCount:o,acceptableChunkTokenCount:r,maxChunkTokenCount:i,maxLineLength:s}=n,a=[],l=t.split(`
5740
5740
  `),c=0,d=[],u=0,p=[],m=[],h=false;for(;c<l.length;){h&&(a.push({ids:p,content:d.join(`
5741
5741
  `),tokenLength:u}),d=[],u=0,p=m.length?[m[m.length-1].id]:[],h=false);let g=l[c],f=it(g);u+=f,g.length>s&&(g=g.slice(0,s));let A=Array.from(g.matchAll(yZ)).map(G=>G&&G.length>=3?{tagName:G[1],id:G[2]}:void 0).filter(G=>!!G),v=Array.from(g.matchAll(XPe)).map(G=>G&&(G[2]||G[4])).filter(G=>!!G);v.reverse();let I=g.replace(/ id="[0-9]+"/g,"");d.push(I);for(let G of A)p.push(G.id),m.push(G);for(let G of v){let ie=m[m.length-1];ie&&ie.tagName===G&&m.pop();}let O=m.some(G=>ZPe.includes(G.tagName)),_=l[c+1]??"",R=it(_),P=Array.from(_.matchAll(yZ)).map(G=>G&&G.length>2?G[1]:void 0).filter(G=>!!G),H=P.some(G=>bZ.includes(G)),B=P.some(G=>QPe.includes(G));u+R>=i&&(h=true),u>=o&&(H&&!O||v.some(G=>eOe.includes(G)))&&(h=true),u>=r&&B&&!O&&(h=true),c++;}return d.length&&a.push({ids:p,content:d.join(`
5742
- `),tokenLength:u}),a.forEach((g,f)=>{let S=g.ids[0],T=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:S,maxId:T},`Chunk for page filtering (index ${f+1}/${a.length})`);}),{chunks:a}}var AZ=5e6,oOe=1e5,rOe=3e4,iOe=6e4,sOe=1e5;async function hs(e){let{fixtures:t}=e,{logger:n}=t,o=e.tree,r=e.serializedTree,i=it(r);if(i>AZ)throw new K("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${AZ} tokens.`);if(i>oOe){let s=TZ({serializedTree:r,options:SZ,logger:n}),a=randomUUID();o=await aOe({...e,chunks:s.chunks,callId:a}),r=o.serialize();let l=it(r);n.info({oldTokens:i,newTokens:l,langfuseCallId:a},"Filtered page using AI chunk ranking");}return r}async function aOe({type:e,callId:t,chunks:n,description:o,fixtures:r,tree:i}){let{generator:s,signal:a,logger:l}=r,c=await s.rankChunksWithAi({chunks:n,description:o,type:e,softTokenLimit:rOe,mediumTokenLimit:iOe,hardTokenLimit:sOe,callId:t},{abortSignal:a,logger:l,loggerTags:Rt(l)}),d=[];return n.forEach((p,m)=>{c.indices.includes(m)&&(d=d.concat(p.ids));}),i.pruneUsingRelevantIds(new Set(d))}async function rD(e,t){if(!e.description)throw new K("UserConfigurationError","Cannot locate element with empty description");return Ys({action:async()=>cOe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function cOe(e,t){let{disableCache:n,testContext:o,filterByViewport:r,skipWait:i,source:s,memory:a,logger:l,allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,skipSavingVisualAttributes:p,isAutoHeal:m,cacheBustReason:h,acceptElementMovedError:g}=e,{orgId:f,browser:S,localCodeEvalTools:T,generator:A,abortSignal:E}=t,v=e.description,I=Kn(),O=e.useMemory&&!n;o&&(v=await Dr({orgId:f,s:v,context:o,localTools:T,signal:E,logger:l})),s&&(v=mZ(v,s));let{serializedTree:_,tree:R}=await I.startAsyncSpan("GET_PAGE_STATE",async()=>Ol(S,{allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,filterByViewport:r,abortSignal:E,skipWait:i,logger:l}),{}),x=await I.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let te,U=Date.now(),se;for(;!te&&Date.now()-U<3e3;){E.throwIfAborted();try{te=await S.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(ce){se=ce;}}if(!te)throw new K("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${se?.message}`);return te}),P=_,H=false,G=`data:image/jpeg;base64,${x.toString("base64")}`,ie=Rt(l);P=await hs({type:"locator",description:v,screenshot:G,serializedTree:_,tree:R,fixtures:{generator:A,signal:E,logger:l,orgId:f}}),P!==_&&(H=true);let Z=await I.startAsyncSpan("AI_LOCATOR_CALL",async te=>{m&&(te.attributes.isAutoHeal=true),h&&(te.attributes.cacheBustReason=h);let U=await A.getElementLocation({browserState:P,goal:v,screenshot:G,source:s,memory:O?a:void 0},{disableCache:n,abortSignal:E,logger:l,loggerTags:ie,useMemory:O,cacheBustReason:h});if(te.result=U,O&&(te.attributes.useMemory=true,te.attributes.memoryTraces=U.rememberedTraces??[],U.updatedMemory&&(te.attributes.memorySavedNewResult=true)),I.storeTraceAsset){let se=randomUUID();I.storeTraceAsset({snapshotId:se,data:x}),te.screenshotSnapshotId=se;}return U});if(l.debug({usedRag:H,result:Z},"Got locator result"),!(Z.id>0))throw new zm(`Could not find any relevant element: ${Z.thoughts}`,Z.updatedMemory?{type:"GCS_TRACES",traces:Z.updatedMemory}:void 0);let{resolution:z,target:q,frameConfig:X}=await I.startAsyncSpan("TARGET_RESOLUTION",async te=>{let U=await S.createTargetFromA11yId({id:Z.id,requirements:Z.requirements,additionalElements:Z.additionalElements,description:v,targetSource:"AI",logger:l,skipSavingVisualAttributes:p,acceptElementMovedError:g});return te.result={serializedElement:U.target.nodeOnlySerializedHtml??"Unknown HTML element"},U});if(z.a11yNode?.properties?.hidden&&z.a11yNode?.properties?.hidden!=="false")throw new K("ActionFailureError",`Momentic's AI found a relevant element to interact with, but it is explicitly marked with an 'aria-hidden' attribute. Please remove this attribute or adjust the element description to locate a different element. Element chosen: ${z.displayString}`);return O&&(Z.updatedMemory?q.memory={type:"GCS_TRACES",traces:Z.updatedMemory}:a&&(q.memory=a)),{thoughts:Z.thoughts,target:q,resolution:z,frameConfig:X,screenshot:G}}var dOe=15;async function kv({command:e,logger:t,fixtures:n,useMemory:o,maxRetries:r=dOe,recoveryHint:i}){if(!e.assertion.trim())throw new K("ActionFailureError","Assertion command is missing the assertion content");let s=gP.optional().catch(void 0).parse(e.source);e.source&&!s&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let a=Kn();return a.startAsyncSpan("AI_ASSERTION_CALL",async l=>{let{browser:c}=n,d=e.timeout?e.timeout*1e3:c.smartWaitingTimeout,u=VY(d,r-1),p=0,m=Date.now(),h=m+d,g=m,f,S,T;try{await Ys({action:()=>c.clearHighlights(),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:c,logger:t});}catch(v){t.warn({err:v},"Failed to clear highlights before AI check, continuing...");}for(;p<r;){n.abortSignal.throwIfAborted();let v=Date.now();if(p>0){if(v>=h)break;let _=h-v,R=g-v,x=Math.min(R,_);x>0&&await Xe(x,n.abortSignal);}let I=Date.now();if(p>0&&I>=h)break;let O=false;try{if(f=await Ys({action:async()=>{let R=await CZ(c,t,n.abortSignal);return S&&S.serializedTree===R.serializedTree&&S.screenshotBuff.equals(R.screenshotBuff)?(O=!0,f):(S=R,RZ({command:e,state:R,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:p,logger:t,source:s,recoveryHint:i}))},frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:c}),f?.aiResult.result){f?.updatedMemory&&NS(e,f.updatedMemory,t);break}else throw f?.aiResult.thoughts?new K("AssertionFailureError",f.aiResult.thoughts):new K("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(_){n.abortSignal.throwIfAborted(),T=_ instanceof Error?_:new Error(`${_}`),O?t.info(`AI check attempt ${p} failed (re-used previous result)`):t.info({err:_},`AI check assert attempt ${p} failed, retrying...`);}finally{p++,g=I+u;}}if(!f?.aiResult.result){let v=h-Date.now();v>0&&await Xe(v,n.abortSignal);}if(!f?.aiResult.result)try{f=await Ys({action:async()=>RZ({command:e,state:await CZ(c,t,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:p,logger:t,recoveryHint:i}),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:c});}catch(v){n.abortSignal.throwIfAborted(),T=v instanceof Error?v:new Error(`${v}`);}finally{p++;}f?.updatedMemory&&NS(e,f.updatedMemory,t);let A=f?.afterScreenshotOverride;if(A&&a.storeTraceAsset){let v=randomUUID();a.storeTraceAsset({snapshotId:v,data:A}),l.screenshotSnapshotId=v;}let E=f?.elementScreenshotOverride;if(E&&a.storeTraceAsset){let v=randomUUID();a.storeTraceAsset({snapshotId:v,data:E}),l.elementScreenshotSnapshotId=v;}if(o&&(l.attributes.useMemory=true,l.attributes.memoryTraces=f?.aiResult.rememberedTraces??[],f?.updatedMemory&&(l.attributes.memorySavedNewResult=true)),!f?.aiResult.result){l.result=f?.aiResult??{thoughts:T?.message??"AI check failed after all attempts",result:false};let v=`AI check still failing after ${p} attempts.`;throw T&&(v+=` Latest result: ${T.message}`),new K("AssertionFailureError",v)}return l.result=f.aiResult,{...f,thoughts:f.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:c.url()}})}async function CZ(e,t,n){await e.waitForPageLoad({signal:n});let[o,r]=await Promise.all([Ol(e,{abortSignal:n,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...o,screenshotBuff:r}}async function RZ({command:e,state:t,fixtures:n,useConsensus:o,useMemory:r,highlightElementsOnFailure:i,attemptNumber:s,source:a,logger:l,recoveryHint:c}){let {browser:d,generator:u,abortSignal:p}=n,{serializedTree:h,tree:g}=t,f=t.screenshotBuff,S=f.toString("base64"),T=d.url(),A=e.contextChoice??"MULTIMODAL",E=h;A!=="VISION_ONLY"&&(E=await hs({type:"assertion",serializedTree:h,tree:g,description:e.assertion,screenshot:S,fixtures:{generator:u,signal:p,logger:l,orgId:n.orgId}}),E);let v={goal:e.assertion,url:T,memory:r?e.cache?.memory:void 0,browserState:E,screenshot:S,contextChoice:A,source:a,recoveryHint:c},O=await(A==="VISION_ONLY"?(R,x)=>u.getVisualAssertionResult(R,x):(R,x)=>u.getAssertionResult(R,x))(v,{useConsensus:o,attemptNumber:s,useMemory:r,disableCache:!!e.disableCache,abortSignal:p,logger:l,loggerTags:Rt(l)}),_;if((O.result||i)&&O.relevantElements?.length){O.relevantElements.map(R=>d.getSerializedFormFromA11yId(R)).filter(R=>!!R);try{let R=O.relevantElements[0],{resolution:x}=await d.createTargetFromA11yId({id:R,description:null,targetSource:"AI",skipSaveToCache:!0});_=await d.screenshot({locator:x.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(R){l.debug({err:R},"Failed to capture element screenshot for trace, continuing...");}await uOe(O.relevantElements,d,l);}return {aiResult:O,afterScreenshotOverride:f,elementScreenshotOverride:_,updatedMemory:r?O.updatedMemory:void 0}}async function uOe(e,t,n){let o=Date.now();for(let r of e){if(Date.now()-o>2e3){n.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await Re(t.highlightA11yId(r),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}});}catch(i){n.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}async function wZ(e){let{command:t,logger:n,fixtures:o,disableCache:r}=e,{browser:i,generator:s,abortSignal:a}=o;if(!t.goal.trim())throw new K("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let u=WW(t.schema);if(u)throw new K("UserConfigurationError",u)}let l=await i.getCondensedHtml(),c=await i.screenshot({retries:2}),d=Kn();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async u=>{let p=await s.getTextExtraction({goal:t.goal,browserState:l,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${c.toString("base64")}`},{disableCache:r,abortSignal:a,loggerTags:Rt(n)});if(u.result=p,pOe({tracer:d,span:u,screenshot:c,htmlState:l,logger:n}),p.result==="NOT_FOUND")throw new K("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new K("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:i.url()}})}catch(u){let p=J(u);throw p.includes("MaxGenerationLengthExceededError")?new K("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):p.includes("AIProviderError")&&p.includes("time")?new K("AIProviderError","The AI provider responded with an error. This may be because you tried to extract too much data. Please limit extraction results to 2000 characters.",{errOptions:{cause:u}}):u}}function pOe(e){let{tracer:t,span:n,screenshot:o,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:o}),n.screenshotSnapshotId=s;let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:Buffer.from(r),extension:"html"}),n.browserStateSnapshotId=a;}catch(s){i.debug({err:s},"Failed to store extraction trace assets");}}async function IZ(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await mOe(i,e,t);}catch(s){if(s instanceof Error&&(s.name==="AbortError"||s.name==="TimeoutError")||o.aborted)return;n.warn({err:s},"Unexpected error occurred during AI smart waiting");let a=r.smartWaitingTimeout-(Date.now()-i);a>0&&await Xe(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function mOe(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await Xe(r.smartWaitingTimeout,o);return}if(!t.description)throw new K("UserConfigurationError","Cannot locate element with empty description");await Re(hOe(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function hOe(e,t,n){let{logger:o,iframeUrl:r}=t,{browser:i}=n;for(;Date.now()-e<i.smartWaitingTimeout;)if(await Ys({action:async()=>gOe(t,n),frameConfig:r?{type:"url",url:r}:void 0,browser:i,logger:o}))return}async function gOe(e,t){let{testContext:n,logger:o}=e,{browser:r,abortSignal:i,localCodeEvalTools:s,orgId:a,generator:l}=t,c=e.description;n&&(c=await Dr({orgId:a,s:c,context:n,localTools:s,signal:i,logger:o})),i.throwIfAborted();let d;try{d=await r.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(h){throw new K("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${h instanceof Error?h.message:h}`)}let p=`data:image/jpeg;base64,${d.toString("base64")}`;i.throwIfAborted();let m=await l.getSmartWaitingDecision({description:c,screenshot:p},{abortSignal:i,loggerTags:Rt(o)});return o.debug({result:m},"Got smart waiting result"),m.isPageReady}var fOe=3e4;async function PZ(e){return Kn().startAsyncSpan("ELEMENT_ASSERTION",async n=>yOe(e,n),{name:"Element check"})}async function yOe(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>nA(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&_m(l.target),d=cloneDeep(l),u=(E=false)=>{if(l=a(),!!l)if(E){let v=TN(d,l);l.target=v.target,l.updatedAt=v.updatedAt;}else {if(!d){l=void 0;return}l.target=d.target,l.updatedAt=d.updatedAt;}},p=Date.now(),m=c?Math.max(o/10,fOe):0,h=p,g=0,f,S=500,T=false;for(;g<2||Date.now()-p<o;){g++,g>1&&await Xe(S,s),s?.throwIfAborted(),l=a();let E=g===1,v=c&&Date.now()-h>=m;v&&(h=Date.now());let{result:I,elementWasFound:O}=await xZ({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||v,params:e});if(f=I,T=T||O,I.success)break;u(),S=Math.min(S*1.25,1e4);}if(!f)throw new K("InternalPlatformError",`Failed to evaluate manual element assertion in ${o}ms.`);if(s?.throwIfAborted(),!f.success){let E=a(),v=E?.target?.memory?{target:{id:-1,memory:E.target.memory}}:void 0,{result:I,elementWasFound:O}=await xZ({cacheToUse:v,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});f=I,T=T||O,f.success||u(true);}let A=a();return f.success&&A?.target&&!T&&(A.target=MS(A.target),A.updatedAt=new Date),t.result={success:f.success,message:f.err?.message},f}async function xZ({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:n,params:o}){let{command:r,disableCache:i,fixtures:s,tracer:a,targetingWrapper:l}=o,{logger:c}=s;if(r.target&&!Ql(r.target))throw new Error("Element assertion with x/y is not supported yet");let d=PK(r.assertion),u=SOe(r.assertion),p,m=false,h=cloneDeep(e);try{let{elementInteractedDisplayString:g,result:f,thoughts:S}=await l({tracer:a,command:r,target:r.target,cache:h?.target,action:async T=>bOe(T.locator,o),options:{...r,allowNotActionableNodesOverride:u,allowIneligibleTagRedirect:u,showZeroOpacityElementsOverride:!0,disableCache:i,memory:h?.target?.memory,disableGlobalLocatorRedirect:!0,source:sp(r),skipAISmartWaiting:t,targetName:"target"},retriesWithAI:n?1:0});return p={success:f.success,data:f.data,err:f.err,elementInteractedDisplayString:g,thoughts:S},m=!0,f.success||(c.warn({aiThoughts:S,elementString:g,err:f.err},"Element check found an element but failed"),p={...f,thoughts:S}),{result:p,elementWasFound:m}}catch(g){if(d)return p={success:true,thoughts:`The element described does not exist on the page: ${g.message}`,err:void 0,data:void 0},{result:p,elementWasFound:m};if(!(g instanceof K)||g.reason!="ActionFailureError")throw g;return p={success:false,err:g,data:void 0,thoughts:void 0},c.warn({err:g},"Element check did not find an element and failed"),{result:p,elementWasFound:m}}}function SOe(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function bOe(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await TOe(e,t.assertion)}async function TOe(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:dn(s,500,true)},!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,o=new K("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:dn(await e.evaluate(a=>a.cloneNode(false).outerHTML),500,true)};let s=null;try{s=await e.getAttribute(t.attr,{timeout:3e3});}catch(a){o=new K("AssertionFailureError",J(a)),n=false;break}if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,t.operation==="EXISTS"?o=new K("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new K("AssertionFailureError",`The attribute ${t.attr} ${a} '${t.value}': ${s}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{n=await e.evaluate(async(a,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(u=>setTimeout(u,250));let d=a.getBoundingClientRect();if(!(d.width===0||d.height===0)&&window.getComputedStyle(a).visibility!=="hidden"&&window.getComputedStyle(a).display!=="none")return true}return false},ws*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:ws*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:ws*1e3});break}case "FOCUSED":{n=await e.evaluate(a=>a===document.activeElement);break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(n=t.negated?!n:n,!n){let s=Jh(t);o=new K("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=Jh(t);n=false,o=new K("AssertionFailureError",`The element tag name ${a} '${t.value}': ${s}`);}break}case "ELEMENT_STYLE":{let s=await e.evaluate((a,l)=>window.getComputedStyle(a).getPropertyValue(l),t.property);if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,t.operation==="EXISTS"?o=new K("AssertionFailureError",`The style property ${t.property} ${a}`):o=new K("AssertionFailureError",`The style property ${t.property} ${a} '${t.value}': ${s}`);}break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:n,data:r,err:o}}function OZ(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function Cb(e,t){let n=await e.screenshot(t),{width:o,height:r}=imageSize(n);return {buffer:n,width:Math.ceil(o),height:Math.ceil(r)}}async function NZ(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Ql(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),Kn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await COe(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof K&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function COe({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Ql(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async P=>Cb(o,{locator:P.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await Cb(o,a);let d=await s.prepareGoldenScreenshotForComparison(i,t,c);if((c.height!==d.height||c.width!==d.width)&&i.warn({currHeight:c.height,currWidth:c.width,savedHeight:d.height,savedWidth:d.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(c.height-d.height)>10||Math.abs(c.width-d.width)>10){let x=`${c.width}x${c.height}`,P=`${d.width}x${d.height}`;return {fail:true,thoughts:`Current screenshot (${x}) does not match saved screenshot dimensions (${P}) - did you change the size of the target or the viewport?`,beforeScreenshotOverride:d.buffer,afterScreenshotOverride:c.buffer,succeedImmediately:false,urlAfterCommand:o.url()}}let u=await Jimp.fromBuffer(c.buffer),p={width:c.width,height:c.height},m=await Jimp.fromBuffer(d.buffer),h={width:d.width,height:d.height},g,f=p.width*p.height,S=h.width*h.height,T=Math.abs(p.height-h.height),A=Math.abs(p.width-h.width);if(f>S){let x=u.cover({w:h.width,h:h.height});c.buffer=await x.getBuffer("image/jpeg"),g="current",c.width=h.width,c.height=h.height;}else if(S>f){let x=m.cover({w:p.width,h:p.height});d.buffer=await x.getBuffer("image/jpeg"),g="saved";}let E={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},v=t.threshold??.1,O=oPe(iD.decode(d.buffer).data,iD.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,_=O>v*100,R=`Visual diff of ${O.toFixed(2)}% detected, which is ${_?"over":"under"} the threshold of ${v*100}%.`;if(g&&(R+=` The ${g} screenshot was cropped since it was taller by ${T} pixels and wider by ${A} pixels.`),_)throw new K("ActionFailureError",R);return {fail:_,thoughts:R,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:iD.encode(E,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var ROe=3e4;function vOe(e){if(!e.body)return {};switch(e.body.type){case "json":return {content:e.body.content,contentType:"application/json"};case "form-urlencoded":{let t=new URLSearchParams;return Object.entries(e.body.content).forEach(([n,o])=>{t.append(n,o);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function LZ({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??ROe/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),s=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{s.append(h,g);});let a=s.toString(),l;if(tg(e.url)&&(l=e.url),n&&ng(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new K("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:a,headers:i,body:e.body,method:e.method},"Making HTTP request");let u=await Re((async()=>{let h=a?`${c}?${a}`:c;try{let g=vOe(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await o(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new Error(`Failed to make HTTP request: ${g}`,{cause:g})}})(),{milliseconds:r*1e3,fallback:()=>{throw new K("ActionFailureError",`Fetch request timed out after ${r} seconds`)}});if(!u.ok){let h;try{h=await u.text();}catch(g){h=`Failed to read response body: ${g}`;}throw new K("ActionFailureError",`Fetch request failed with status ${u.status}: ${h}`)}let p={};u.headers.forEach((h,g)=>{p[g]=h;});let m={status:u.status,headers:p,request:{url:u.url,method:e.method,headers:i}};if(e.body?.type==="json"&&e.body.content)try{m.request.json=JSON.parse(e.body.content);}catch{}if(u.headers.get("content-type")?.includes("json"))try{m.json=await u.json();}catch{}else u.headers.get("content-type")?.includes("text")&&(m.text=await u.text());return m}var wOe=5e3;async function Dv({timeout:e=ws,...t}){let n=Date.now(),o=e*1e3,r=o+1e4,i,s=0,a=500;for(;s-n<o;){if(Date.now()-n>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await kZ(t),s=Date.now();let c=s-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await Xe(a,t.signal),a=Math.min(Math.floor(a*1.5),wOe);else return i}return i=await kZ(t),i}async function kZ(e){return Kn().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await IOe(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function IOe({assertion:e,browser:t,autoExpandIframes:n}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,s;try{let a;if(n){let l=await t.evaluateFunctionInAllFrames(DZ,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),a=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:a}=await t.evaluateFunctionInPage(DZ,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?wc.CONTAINS:Ic.CONTAINS;s=new K("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new K("AssertionFailureError",`Failed to evaluate page content assertion: ${a instanceof Error?a.message:`${a}`}`);}return {success:i,err:s,data:i||!r?void 0:{pageContent:r}}}default:return (r=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}}function DZ({value:e,negated:t,returnHtml:n}){let o=document.body.innerHTML,r=o.includes(e)===!t;return o.length>1e4&&(o=o.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&n?o:void 0}}var xOe=3e4;async function FZ({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??xOe/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([u,p])=>u&&p));s["Content-Type"]="application/json";let a;if(tg(e.url)&&(a=e.url),n&&ng(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new K("ActionFailureError",`Invalid URL: ${e.url}`);let c=await Re((async()=>{try{return await o(a,{headers:s,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(u){throw new Error(`Failed to make HTTP request: ${u}`,{cause:u})}})(),{milliseconds:r*1e3});if(!c)throw new K("ActionFailureError",`GraphQL request timed out after ${r} seconds`);if(!c.ok){let u,p=await c.text();try{u=JSON.parse(p);}catch{throw new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}throw u?.errors?.length&&u?.errors[0]?.message?new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${u.errors[0].message}`):new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}let d={};return c.headers.forEach((u,p)=>{d[p]=u;}),{status:c.status,headers:d,json:await c.json()}}var Bg=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:n,logger:o,storage:r,orgId:i,localCodeEvalTools:s,uploadedFileStorage:a,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=a,this.visualDiffScreenshotStorage=l,this.localCodeEvalTools=s,this.generator=n,this.logger=o;}setOpen(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal);}setClosed(){this.executeAbortController.abort();}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,n){this.executionOptionsStack.push(t);try{return await n()}finally{this.executionOptionsStack.pop();}}getCurrentExecutionOptions(){return this.executionOptionsStack[this.executionOptionsStack.length-1]??{}}async evaluateAiAction({goal:t,startingScreenshot:n,history:o,disableCache:r,langfuseSessionId:i,lastError:s,logger:a=this.logger}){let[l,c]=await Promise.all([Ol(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${c.toString("base64")}`,u=await hs({type:"ai-action",description:t,screenshot:d,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:this.browser.url(),browserState:u,startingScreenshot:n,history:o,goal:t,screenshot:d,lastError:s};return await this.generator.getMultiturnAiActionEvaluation(p,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...Rt(a)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:n,history:o,actionHint:r,disableCache:i,logger:s=this.logger,langfuseSessionId:a}){let l=this.browser.url(),[c,d]=await Promise.all([Ol(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${d.toString("base64")}`,p=await hs({type:"ai-action",description:t,screenshot:u,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:l,browserState:p,startingScreenshot:n,history:o,goal:t,actionHint:r,screenshot:u};try{return await this.generator.getMultiturnAiActionCommand(m,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Rt(s)},langfuseSessionId:a})}catch(h){throw new K("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Ol(this.browser,t)}async locateElement(t){return await rD(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Ys({action:async()=>{let o=await this.browser.resolveHardcodedCssSelector({selector:t,timeoutMs:2e3,logger:this.logger});return {thoughts:"Located element with selector",target:{id:-1,selector:t,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:o}},frameConfig:n?{type:"url",url:n}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(){return {browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,localCodeEvalTools:this.localCodeEvalTools,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:i,action:s,options:a,retriesWithAI:l=1}){let c=[];for(let d=0;d<r.length;d++){let u=r[d],p=await this.wrapElementTargetingCommand({tracer:t,command:n,target:u,cache:i[d],action:async m=>m,options:{...a,targetName:o[d]}});c.push(p);}try{let d=await s(...c.map(m=>m.result)),u=m=>m==="fromTarget"?"From Target":m==="toTarget"?"To Target":"Target",p=c.map((m,h)=>m.thoughts?`${u(o[h])}: ${m.thoughts}`:void 0).filter(m=>!!m).join(" -------------- ")||void 0;return {result:d,elementInteractedDisplayStrings:c.map(m=>m.elementInteractedDisplayString),thoughts:p}}catch(d){if(this.throwIfClosed(),l>0)return this.logger.warn({err:d},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:r.map(()=>{}),action:s,options:a,retriesWithAI:l-1});throw new K("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:n,options:o,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:s}=o;if(t.type!=="description")throw new K("ActionFailureError","Cannot use selector with non-description target");let a,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let d=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:s,logger:i});return {result:await n({locator:d.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:d.displayString}}catch(d){if(d.name==="AbortError")throw d;a=d,i.warn({err:d},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await Xe(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=Kn(),s=!o&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||s)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(n.locator);});let a;return s&&(a=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:d}=await this.browser.performTargetRedirection(n,r);if(l.result=d,d.outcome==="redirected to new element"&&c&&i.storeTraceAsset&&!this.browser.userBrowserSettings.disableBrowserMonitoring){let u=randomUUID();(async()=>{try{let p=await this.browser.screenshot({locator:c.locator,clearHighlights:!0,boundingBoxOverride:c.serverSideBoundingBox??void 0});i.storeTraceAsset?.({snapshotId:u,data:p});}catch(p){r.debug({err:p},"Failed to capture element screenshot for redirect trace");}})(),l.elementScreenshotSnapshotId=u;}return c})),a||(a={locator:n.locator,serverSideBoundingBox:await n.locator.boundingBox({timeout:qe}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await Kn().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=n.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;try{let c=await this.browser.resolveTarget(n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...o.resolveTargetOptions,acceptElementMovedError:o.force});l.attributes.targetDisplayString=c.displayString,l.attributes.decisions=c.decisions;let d=c.decisions.find(u=>u.matched);return d&&(l.resolutionMethod=d.type),c}catch(c){throw c instanceof Kr&&(l.cacheMissReason=c.cacheMissReason,l.attributes.decisions=c.decisions),c}}),a=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:s,disableGlobalLocatorRedirect:o.disableGlobalLocatorRedirect,logger:r});return o.force||await s.revalidator?.(),{resolutionResult:s,finalTarget:a}}async wrapElementTargetingCommand(t){return await Ys({action:()=>this.wrapElementTargetingCommandHelper(t),frameConfig:t.options.iframeUrl?{type:"url",url:t.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(t){let{tracer:n,target:o,action:r,options:i,command:s,finalAttempt:a=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:d,useSelector:u,targetName:p}=i,m=Kn(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||d)&&!fU(o))throw new K("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(t);let S=false,T;d&&(h.info("Cache explicitly disabled for this step"),S=true,T="Cache explicitly disabled",f=void 0);let A=fZ({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=A.cache,S=S||A.cacheBustedBeforeAction,!T&&A.cacheBustReason&&(T=A.cacheBustReason);let E=true;if(!gZ(f))return c--,E=false,this.executeTargetingCommandWithAI({tracer:m,stepTracer:n,target:o,options:i,command:s,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:S,cacheBustReason:T});try{let{resolutionResult:v,finalTarget:I}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),O=await r(I);if(wt.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.0.1"]),GC({cmd:s,key:p,newTarget:f,logger:h,updatedWithAI:!1}),E){let _=v.decisions.filter(R=>R.matched);if(_.length!==1)h.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let R=_[0].type;n.recordTargetAutoHeal({healType:R});}}return {result:O,elementInteractedDisplayString:v.displayString}}catch(v){this.throwIfClosed();let I=L_(v);if(I&&!a)return h.warn({err:v},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(v instanceof K&&!I)throw h.warn({err:v},"Failed to execute command with target (fatal)"),v;if(c>0&&o){h.info({err:v},"Failed to execute action with cached target, retrying with AI"),wt.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.0.1",`missReason:${v instanceof Kr?v.cacheMissReason:"unknown"}`]);let O;f.memory&&eA(f.memory)&&(O=f.memory);let _=v instanceof Kr&&v.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:O,targetHealingInProgress:true},skipInitialLocateWait:_})}throw new K("ActionFailureError",`Failed to execute interactive command: ${v instanceof Error?v.message:`${v}`}`,{errOptions:{cause:v}})}}async executeTargetingCommandWithAI(t){let{tracer:n,stepTracer:o,target:r,options:i,command:s,action:a,originalCache:l,logger:c,useMemory:d,cacheBustedBeforeAction:u,cacheBustReason:p,skipInitialLocateWait:m}=t;c.info({description:r.elementDescriptor,targetHealingInProgress:i.targetHealingInProgress,cacheBustedBeforeAction:u,memory:i.memory,useMemory:d},"Prompting AI for an updated element location");let h=false;(u||!l)&&!this.getCurrentExecutionOptions().skipAISmartWaiting&&!i.skipAISmartWaiting?(await n.startAsyncSpan("SMART_WAITING",async()=>await IZ({description:r.elementDescriptor,iframeUrl:i.iframeUrl,source:i.source,logger:c,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride},this.getControllerFixtures())),h=true):(u||!l)&&(i.skipAISmartWaiting?c.debug("Skipping AI smart waiting for this targeting attempt"):c.debug("Skipping AI smart waiting due to controller execution options"));let g=2;for(let f=1;f<=g;f++){let S=false,T=this.browser.getActiveFrameConfig(),A=i.force||f>1;try{let E;try{E=await rD({description:r.elementDescriptor,disableCache:!!i.disableCache,iframeUrl:i.iframeUrl,source:i.source,useMemory:d,memory:d?i.memory:void 0,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride,allowIneligibleTagRedirect:i.allowIneligibleTagRedirect,showZeroOpacityElementsOverride:i.showZeroOpacityElementsOverride,logger:c,skipWait:h||m,isAutoHeal:!!i.targetHealingInProgress,cacheBustReason:p,acceptElementMovedError:A},this.getControllerFixtures());}catch(O){if(O instanceof zm&&O.updatedLocatorMemory){let _={id:-1,...l,memory:O.updatedLocatorMemory};GC({cmd:s,key:i.targetName,newTarget:_,logger:c,updatedWithAI:!0});}throw O}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),S=!0);let v=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),I=await a(v);return GC({cmd:s,key:i.targetName,newTarget:E.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(o.recordTargetAutoHeal({healType:"AI"}),E.target.targetSource="AI_HEALED",E.target.targetUpdateTime=new Date().toUTCString(),E.target.targetUpdateLoggerTags=Rt(c)),{result:I,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(S&&this.browser.setActiveFrameConfig(T),this.throwIfClosed(),f<g&&L_(E)){c.warn({err:E,aiAttempt:f},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof K?E:new K("ActionFailureError",E.message)}}throw new K("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return Cb(this.browser,t)}async executePresetCommand(t,n,o,r,i){this.options?.slowMoMs&&await Xe(this.options.slowMoMs);let s=await this.browser.getOpenPages(),a=this.browser.url(),l;try{l=await this.resolveCommandTemplateStrings(n,o);}catch(c){throw this.throwIfClosed(),new K("ActionFailureError",`Failed to substitute template strings in command: ${c.message}`,{errOptions:{cause:c}})}try{let c=await $e({name:`cli.command.${n.type}`,attributes:{"momentic.command_type":n.type,"momentic.command_id":n.id},fn:()=>this.executePresetCommandHelper(t,n,o,r,i)});return this.options?.autoFollowNewTabs&&await hZ({beforeUrl:a,command:n,beforePages:s.map(d=>d.url),browser:this.browser,logger:this.logger}),c}catch(c){throw c.name!=="AbortError"&&this.logger.error({err:c},"Error thrown in action controller"),c}finally{p4(n,l);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>Nk(t)}}async traceBrowserInteraction(t,n,o){return Kn().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return yv({obj:t,context:n,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(t,n,o,r,i){r=r||"disableCache"in n&&!!n.disableCache;let s=this.logger.child({commandId:n.id});switch(n.type){case "SUCCESS":{let a=n.condition;return a?.assertion.trim()?kv({command:a,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!n.assertion.trim())throw new K("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new K("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return kv({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i})}case "AI_EXTRACT":return wZ({command:n,logger:s,fixtures:this.getControllerFixtures(),disableCache:r});case "NAVIGATE":if(!tg(n.url)&&!ng(n.url,this.browser.baseUrl))throw new K("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(n.action);break;case "CAPTCHA":throw new K("UserConfigurationError","Captcha solving is no longer available on Momentic");case "GO_BACK":await this.traceBrowserInteraction("Go back",()=>this.browser.goBack());break;case "GO_FORWARD":await this.traceBrowserInteraction("Go forward",()=>this.browser.goForward());break;case "SCROLL_LEFT":case "SCROLL_RIGHT":case "SCROLL_DOWN":case "SCROLL_UP":{let a,l;if(n.target&&ja(n.target)){let u=Er(n.target.pixels);await this.browser.hoverUsingVisualCoordinates(u);}else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:u,thoughts:p}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.browser.hover(m),options:{...n,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});a=u,l=p;}let c=this.browser.getViewport()?.height??wi.height,d=this.browser.getViewport()?.width??wi.width;switch(n.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(n.deltaY??c)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(n.deltaY??c));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(n.deltaX??d)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(n.deltaX??d));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new K("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let a=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:a},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case "WAIT":{if(n.delay>1800)throw new K("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let a=n.delay*1e3;await Xe(a,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "CLICK":{if(ja(n.target)){let p=Er(n.target.pixels),m={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0};await this.traceBrowserInteraction("Click",()=>this.browser.clickUsingVisualCoordinates(p,m),{coordinates:p});break}let a=this.browser.url(),{elementInteractedDisplayString:l,result:c,thoughts:d}=await this.wrapElementTargetingCommand({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:p=>this.traceBrowserInteraction("Click",async m=>{let h={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0},g=await this.browser.click(p,this.createCallbacksForBrowser(this.orgId),h);return g.coordinates&&(m.coordinates=g.coordinates),g},{selector:p.locator.toString()}),options:{...n,targetName:"target",disableCache:r}}),u={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:l,thoughts:d,data:c.downloadedFile?{downloadedFile:c.downloadedFile}:void 0};return ZC(a,u.urlAfterCommand)&&(u.succeedImmediately=true,u.succeedImmediatelyReason="URL changed"),u}case "COPY":return await this.browser.copy(n.value),{succeedImmediately:false,data:n.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(ja(n.fromTarget)&&ja(n.toTarget)){let c=Er(n.fromTarget.pixels),d=Er(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:c});break}if(ja(n.fromTarget)||ja(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:a,thoughts:l}=await this.wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(c,d)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps})),options:{...n,disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a[0],thoughts:l}}case "MOUSE_DRAG":{let a=parseInt(n.deltaX),l=parseInt(n.deltaY),c=n.steps??5;if(isNaN(a)||isNaN(l))throw new K("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&ja(n.target)){let p=Er(n.target.pixels);await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDragUsingVisualCoordinates({deltaX:a,deltaY:l,steps:c,fromTarget:p}),{coordinates:p});break}let d,u;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:p,thoughts:m}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async h=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(a,l,c,h.locator,{force:n.force})),options:{...n,targetName:"target",disableCache:r}});d=p,u=m;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(a,l,c,void 0,{force:n.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:d,thoughts:u}}case "SELECT_OPTION":{if(!Ql(n.target))throw new Error("Select with x/y is not supported yet");let a=n.target.elementDescriptor,l=n.choice,{elementInteractedDisplayString:c,thoughts:d}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:{type:"description",elementDescriptor:a},cache:n.cache?.target,action:u=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(u,l,n.force),{value:l.type==="LABEL"?l.label:l.type==="VALUE"?l.value:l.index}),options:{...n,targetName:"target",disableCache:r,source:sp(n)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:c,thoughts:d}}case "TAB":{let a={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:true};await this.browser.switchToPage(n.action,a);break}case "NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(n.action,{retry:true});break;case "COOKIE":{if(!n.value)break;let a=await this.browser.setCookie(n.value);s.debug({results:a},"Set cookies");break}case "LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case "JAVASCRIPT":{let a;try{n.environment==="BROWSER"?(a=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),s.info({result:a},"Executed JavaScript in browser")):a=await ru({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.timeout*1e3:void 0,logger:s,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async l=>{if(!this.options?.scratchPadId){s.warn({updates:l},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:l,logger:s});}}});}catch(l){throw this.throwIfClosed(),new K("ActionFailureError",l instanceof Error?l.message:`${l}`,{errOptions:{cause:l}})}try{JSON.stringify(a);}catch(l){throw new K("ActionFailureError",`Return value is not serializable: ${l instanceof Error?l.message:`${l}`}`,{errOptions:{cause:l}})}return {urlAfterCommand:this.browser.url(),succeedImmediately:false,data:a}}case "TYPE":{if(n.target&&ja(n.target)){let m=Er(n.target.pixels),h={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(m,h),await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},true),{value:n.value});break}let a=this.browser.url(),l,c,d=cloneDeep(n.target),u=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(d){let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:d,cache:n.cache?.target,action:g=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(n.value,g,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter,relativePosition:n.relativePosition}),{value:n.value,selector:g.locator.toString()}),options:{...n,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!u,source:sp(n)}});l=m,c=h;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},true),{value:n.value});let p={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:l,thoughts:c};return ZC(a,p.urlAfterCommand)&&(p.succeedImmediately=true,p.succeedImmediatelyReason="URL changed"),p}case "HOVER":{if(ja(n.target)){let c=Er(n.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(c),{coordinates:c});break}let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:c=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(c,{relativePosition:n.relativePosition?Er(n.relativePosition):void 0}),{selector:c.locator.toString()}),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "FOCUS":{if(!Ql(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:c=>this.browser.focus(c),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "BLUR":{if(n.target&&!Ql(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:c=>this.browser.blur(c),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "PRESS":{let a=this.browser.url();await this.traceBrowserInteraction("Press key",()=>this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??true,delayMs:n.delayMs}),{value:n.value});let l={urlAfterCommand:this.browser.url(),succeedImmediately:false};return ZC(a,l.urlAfterCommand)&&(l.succeedImmediately=true,l.succeedImmediatelyReason="URL changed"),l}case "KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let a=new CookieJar,l=POe(fetch,a),c;try{c=new URL(n.url).hostname;}catch{}let d=await LZ({command:n,baseUrl:this.browser.baseUrl,logger:s,fetchImplementation:l});return {data:qf.parse({...d,cookies:m$(a,c)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await FZ({command:n,baseUrl:this.browser.baseUrl,logger:s}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return NZ({tracer:t,command:n,disableCache:r,browser:this.browser,logger:s,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:a=>this.wrapElementTargetingCommand(a)});case "FILE_UPLOAD":{let a,l;if(n.fileSource.type==="URL"?(l=n.fileSource.url,a=await Q4({uri:n.fileSource.url,logger:s,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(l=n.fileSource.name,a=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!a)throw new K("UserConfigurationError",`Attempted to use non-existent file for upload step: ${l}`);await this.browser.setFileChooserHandler({...a,filename:n.filename});break}case "AUTH_SAVE":{let a=await this.browser.saveAuthState();if(n.storageState&&qd(n.storageState)){let l=Mn__default.resolve(n.storageState);Bo__default.mkdirSync(Mn__default.dirname(l),{recursive:true}),Bo__default.writeFileSync(l,`${JSON.stringify(a,null,2)}
5742
+ `),tokenLength:u}),a.forEach((g,f)=>{let S=g.ids[0],T=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:S,maxId:T},`Chunk for page filtering (index ${f+1}/${a.length})`);}),{chunks:a}}var AZ=5e6,oOe=1e5,rOe=3e4,iOe=6e4,sOe=1e5;async function hs(e){let{fixtures:t}=e,{logger:n}=t,o=e.tree,r=e.serializedTree,i=it(r);if(i>AZ)throw new K("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${AZ} tokens.`);if(i>oOe){let s=TZ({serializedTree:r,options:SZ,logger:n}),a=randomUUID();o=await aOe({...e,chunks:s.chunks,callId:a}),r=o.serialize();let l=it(r);n.info({oldTokens:i,newTokens:l,langfuseCallId:a},"Filtered page using AI chunk ranking");}return r}async function aOe({type:e,callId:t,chunks:n,description:o,fixtures:r,tree:i}){let{generator:s,signal:a,logger:l}=r,c=await s.rankChunksWithAi({chunks:n,description:o,type:e,softTokenLimit:rOe,mediumTokenLimit:iOe,hardTokenLimit:sOe,callId:t},{abortSignal:a,logger:l,loggerTags:Rt(l)}),d=[];return n.forEach((p,m)=>{c.indices.includes(m)&&(d=d.concat(p.ids));}),i.pruneUsingRelevantIds(new Set(d))}async function rD(e,t){if(!e.description)throw new K("UserConfigurationError","Cannot locate element with empty description");return Ys({action:async()=>cOe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function cOe(e,t){let{disableCache:n,testContext:o,filterByViewport:r,skipWait:i,source:s,memory:a,logger:l,allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,skipSavingVisualAttributes:p,isAutoHeal:m,cacheBustReason:h,acceptElementMovedError:g}=e,{orgId:f,browser:S,localCodeEvalTools:T,generator:A,abortSignal:E}=t,v=e.description,I=Kn(),O=e.useMemory&&!n;o&&(v=await Dr({orgId:f,s:v,context:o,localTools:T,signal:E,logger:l})),s&&(v=mZ(v,s));let{serializedTree:_,tree:R}=await I.startAsyncSpan("GET_PAGE_STATE",async()=>Ol(S,{allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,filterByViewport:r,abortSignal:E,skipWait:i,logger:l}),{}),x=await I.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let te,U=Date.now(),se;for(;!te&&Date.now()-U<3e3;){E.throwIfAborted();try{te=await S.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(ce){se=ce;}}if(!te)throw new K("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${se?.message}`);return te}),P=_,H=false,G=`data:image/jpeg;base64,${x.toString("base64")}`,ie=Rt(l);P=await hs({type:"locator",description:v,screenshot:G,serializedTree:_,tree:R,fixtures:{generator:A,signal:E,logger:l,orgId:f}}),P!==_&&(H=true);let Z=await I.startAsyncSpan("AI_LOCATOR_CALL",async te=>{m&&(te.attributes.isAutoHeal=true),h&&(te.attributes.cacheBustReason=h);let U=await A.getElementLocation({browserState:P,goal:v,screenshot:G,source:s,memory:O?a:void 0},{disableCache:n,abortSignal:E,logger:l,loggerTags:ie,useMemory:O,cacheBustReason:h});if(te.result=U,O&&(te.attributes.useMemory=true,te.attributes.memoryTraces=U.rememberedTraces??[],U.updatedMemory&&(te.attributes.memorySavedNewResult=true)),I.storeTraceAsset){let se=randomUUID();I.storeTraceAsset({snapshotId:se,data:x}),te.screenshotSnapshotId=se;}return U});if(l.debug({usedRag:H,result:Z},"Got locator result"),!(Z.id>0))throw new zm(`Could not find any relevant element: ${Z.thoughts}`,Z.updatedMemory?{type:"GCS_TRACES",traces:Z.updatedMemory}:void 0);let{resolution:z,target:q,frameConfig:X}=await I.startAsyncSpan("TARGET_RESOLUTION",async te=>{let U=await S.createTargetFromA11yId({id:Z.id,requirements:Z.requirements,additionalElements:Z.additionalElements,description:v,targetSource:"AI",logger:l,skipSavingVisualAttributes:p,acceptElementMovedError:g});return te.result={serializedElement:U.target.nodeOnlySerializedHtml??"Unknown HTML element"},U});if(z.a11yNode?.properties?.hidden&&z.a11yNode?.properties?.hidden!=="false")throw new K("ActionFailureError",`Momentic's AI found a relevant element to interact with, but it is explicitly marked with an 'aria-hidden' attribute. Please remove this attribute or adjust the element description to locate a different element. Element chosen: ${z.displayString}`);return O&&(Z.updatedMemory?q.memory={type:"GCS_TRACES",traces:Z.updatedMemory}:a&&(q.memory=a)),{thoughts:Z.thoughts,target:q,resolution:z,frameConfig:X,screenshot:G}}var dOe=15;async function kv({command:e,logger:t,fixtures:n,useMemory:o,maxRetries:r=dOe,recoveryHint:i}){if(!e.assertion.trim())throw new K("ActionFailureError","Assertion command is missing the assertion content");let s=gP.optional().catch(void 0).parse(e.source);e.source&&!s&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let a=Kn();return a.startAsyncSpan("AI_ASSERTION_CALL",async l=>{let{browser:c}=n,d=e.timeout?e.timeout*1e3:c.smartWaitingTimeout,u=VY(d,r-1),p=0,m=Date.now(),h=m+d,g=m,f,S,T;try{await Ys({action:()=>c.clearHighlights(),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:c,logger:t});}catch(v){t.warn({err:v},"Failed to clear highlights before AI check, continuing...");}for(;p<r;){n.abortSignal.throwIfAborted();let v=Date.now();if(p>0){if(v>=h)break;let _=h-v,R=g-v,x=Math.min(R,_);x>0&&await Xe(x,n.abortSignal);}let I=Date.now();if(p>0&&I>=h)break;let O=false;try{if(f=await Ys({action:async()=>{let R=await CZ(c,t,n.abortSignal);return S&&S.serializedTree===R.serializedTree&&S.screenshotBuff.equals(R.screenshotBuff)?(O=!0,f):(S=R,RZ({command:e,state:R,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:p,logger:t,source:s,recoveryHint:i}))},frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:c}),f?.aiResult.result){f?.updatedMemory&&NS(e,f.updatedMemory,t);break}else throw f?.aiResult.thoughts?new K("AssertionFailureError",f.aiResult.thoughts):new K("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(_){n.abortSignal.throwIfAborted(),T=_ instanceof Error?_:new Error(`${_}`),O?t.info(`AI check attempt ${p} failed (re-used previous result)`):t.info({err:_},`AI check assert attempt ${p} failed, retrying...`);}finally{p++,g=I+u;}}if(!f?.aiResult.result){let v=h-Date.now();v>0&&await Xe(v,n.abortSignal);}if(!f?.aiResult.result)try{f=await Ys({action:async()=>RZ({command:e,state:await CZ(c,t,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:p,logger:t,recoveryHint:i}),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:c});}catch(v){n.abortSignal.throwIfAborted(),T=v instanceof Error?v:new Error(`${v}`);}finally{p++;}f?.updatedMemory&&NS(e,f.updatedMemory,t);let A=f?.afterScreenshotOverride;if(A&&a.storeTraceAsset){let v=randomUUID();a.storeTraceAsset({snapshotId:v,data:A}),l.screenshotSnapshotId=v;}let E=f?.elementScreenshotOverride;if(E&&a.storeTraceAsset){let v=randomUUID();a.storeTraceAsset({snapshotId:v,data:E}),l.elementScreenshotSnapshotId=v;}if(o&&(l.attributes.useMemory=true,l.attributes.memoryTraces=f?.aiResult.rememberedTraces??[],f?.updatedMemory&&(l.attributes.memorySavedNewResult=true)),!f?.aiResult.result){l.result=f?.aiResult??{thoughts:T?.message??"AI check failed after all attempts",result:false};let v=`AI check still failing after ${p} attempts.`;throw T&&(v+=` Latest result: ${T.message}`),new K("AssertionFailureError",v)}return l.result=f.aiResult,{...f,thoughts:f.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:c.url()}})}async function CZ(e,t,n){await e.waitForPageLoad({signal:n});let[o,r]=await Promise.all([Ol(e,{abortSignal:n,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...o,screenshotBuff:r}}async function RZ({command:e,state:t,fixtures:n,useConsensus:o,useMemory:r,highlightElementsOnFailure:i,attemptNumber:s,source:a,logger:l,recoveryHint:c}){let {browser:d,generator:u,abortSignal:p}=n,{serializedTree:h,tree:g}=t,f=t.screenshotBuff,S=f.toString("base64"),T=d.url(),A=e.contextChoice??"MULTIMODAL",E=h;A!=="VISION_ONLY"&&(E=await hs({type:"assertion",serializedTree:h,tree:g,description:e.assertion,screenshot:S,fixtures:{generator:u,signal:p,logger:l,orgId:n.orgId}}),E);let v={goal:e.assertion,url:T,memory:r?e.cache?.memory:void 0,browserState:E,screenshot:S,contextChoice:A,source:a,recoveryHint:c},O=await(A==="VISION_ONLY"?(R,x)=>u.getVisualAssertionResult(R,x):(R,x)=>u.getAssertionResult(R,x))(v,{useConsensus:o,attemptNumber:s,useMemory:r,disableCache:!!e.disableCache,abortSignal:p,logger:l,loggerTags:Rt(l)}),_;if((O.result||i)&&O.relevantElements?.length){O.relevantElements.map(R=>d.getSerializedFormFromA11yId(R)).filter(R=>!!R);try{let R=O.relevantElements[0],{resolution:x}=await d.createTargetFromA11yId({id:R,description:null,targetSource:"AI",skipSaveToCache:!0});_=await d.screenshot({locator:x.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(R){l.debug({err:R},"Failed to capture element screenshot for trace, continuing...");}await uOe(O.relevantElements,d,l);}return {aiResult:O,afterScreenshotOverride:f,elementScreenshotOverride:_,updatedMemory:r?O.updatedMemory:void 0}}async function uOe(e,t,n){let o=Date.now();for(let r of e){if(Date.now()-o>2e3){n.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await Re(t.highlightA11yId(r),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}});}catch(i){n.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}async function wZ(e){let{command:t,logger:n,fixtures:o,disableCache:r}=e,{browser:i,generator:s,abortSignal:a}=o;if(!t.goal.trim())throw new K("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let u=WW(t.schema);if(u)throw new K("UserConfigurationError",u)}let l=await i.getCondensedHtml(),c=await i.screenshot({retries:2}),d=Kn();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async u=>{let p=await s.getTextExtraction({goal:t.goal,browserState:l,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${c.toString("base64")}`},{disableCache:r,abortSignal:a,loggerTags:Rt(n)});if(u.result=p,pOe({tracer:d,span:u,screenshot:c,htmlState:l,logger:n}),p.result==="NOT_FOUND")throw new K("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new K("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:i.url()}})}catch(u){let p=J(u);throw p.includes("MaxGenerationLengthExceededError")?new K("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):p.includes("AIProviderError")&&p.includes("time")?new K("AIProviderError","The AI provider responded with an error. This may be because you tried to extract too much data. Please limit extraction results to 2000 characters.",{errOptions:{cause:u}}):u}}function pOe(e){let{tracer:t,span:n,screenshot:o,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:o}),n.screenshotSnapshotId=s;let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:Buffer.from(r),extension:"html"}),n.browserStateSnapshotId=a;}catch(s){i.debug({err:s},"Failed to store extraction trace assets");}}async function IZ(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await mOe(i,e,t);}catch(s){if(s instanceof Error&&(s.name==="AbortError"||s.name==="TimeoutError")||o.aborted)return;n.warn({err:s},"Unexpected error occurred during AI smart waiting");let a=r.smartWaitingTimeout-(Date.now()-i);a>0&&await Xe(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function mOe(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await Xe(r.smartWaitingTimeout,o);return}if(!t.description)throw new K("UserConfigurationError","Cannot locate element with empty description");await Re(hOe(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function hOe(e,t,n){let{logger:o,iframeUrl:r}=t,{browser:i}=n;for(;Date.now()-e<i.smartWaitingTimeout;)if(await Ys({action:async()=>gOe(t,n),frameConfig:r?{type:"url",url:r}:void 0,browser:i,logger:o}))return}async function gOe(e,t){let{testContext:n,logger:o}=e,{browser:r,abortSignal:i,localCodeEvalTools:s,orgId:a,generator:l}=t,c=e.description;n&&(c=await Dr({orgId:a,s:c,context:n,localTools:s,signal:i,logger:o})),i.throwIfAborted();let d;try{d=await r.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(h){throw new K("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${h instanceof Error?h.message:h}`)}let p=`data:image/jpeg;base64,${d.toString("base64")}`;i.throwIfAborted();let m=await l.getSmartWaitingDecision({description:c,screenshot:p},{abortSignal:i,loggerTags:Rt(o)});return o.debug({result:m},"Got smart waiting result"),m.isPageReady}var fOe=3e4;async function PZ(e){return Kn().startAsyncSpan("ELEMENT_ASSERTION",async n=>yOe(e,n),{name:"Element check"})}async function yOe(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>nA(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&_m(l.target),d=cloneDeep(l),u=(E=false)=>{if(l=a(),!!l)if(E){let v=TN(d,l);l.target=v.target,l.updatedAt=v.updatedAt;}else {if(!d){l=void 0;return}l.target=d.target,l.updatedAt=d.updatedAt;}},p=Date.now(),m=c?Math.max(o/10,fOe):0,h=p,g=0,f,S=500,T=false;for(;g<2||Date.now()-p<o;){g++,g>1&&await Xe(S,s),s?.throwIfAborted(),l=a();let E=g===1,v=c&&Date.now()-h>=m;v&&(h=Date.now());let{result:I,elementWasFound:O}=await xZ({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||v,params:e});if(f=I,T=T||O,I.success)break;u(),S=Math.min(S*1.25,1e4);}if(!f)throw new K("InternalPlatformError",`Failed to evaluate manual element assertion in ${o}ms.`);if(s?.throwIfAborted(),!f.success){let E=a(),v=E?.target?.memory?{target:{id:-1,memory:E.target.memory}}:void 0,{result:I,elementWasFound:O}=await xZ({cacheToUse:v,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});f=I,T=T||O,f.success||u(true);}let A=a();return f.success&&A?.target&&!T&&(A.target=MS(A.target),A.updatedAt=new Date),t.result={success:f.success,message:f.err?.message},f}async function xZ({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:n,params:o}){let{command:r,disableCache:i,fixtures:s,tracer:a,targetingWrapper:l}=o,{logger:c}=s;if(r.target&&!Ql(r.target))throw new Error("Element assertion with x/y is not supported yet");let d=PK(r.assertion),u=SOe(r.assertion),p,m=false,h=cloneDeep(e);try{let{elementInteractedDisplayString:g,result:f,thoughts:S}=await l({tracer:a,command:r,target:r.target,cache:h?.target,action:async T=>bOe(T.locator,o),options:{...r,allowNotActionableNodesOverride:u,allowIneligibleTagRedirect:u,showZeroOpacityElementsOverride:!0,disableCache:i,memory:h?.target?.memory,disableGlobalLocatorRedirect:!0,source:sp(r),skipAISmartWaiting:t,targetName:"target"},retriesWithAI:n?1:0});return p={success:f.success,data:f.data,err:f.err,elementInteractedDisplayString:g,thoughts:S},m=!0,f.success||(c.warn({aiThoughts:S,elementString:g,err:f.err},"Element check found an element but failed"),p={...f,thoughts:S}),{result:p,elementWasFound:m}}catch(g){if(d)return p={success:true,thoughts:`The element described does not exist on the page: ${g.message}`,err:void 0,data:void 0},{result:p,elementWasFound:m};if(!(g instanceof K)||g.reason!="ActionFailureError")throw g;return p={success:false,err:g,data:void 0,thoughts:void 0},c.warn({err:g},"Element check did not find an element and failed"),{result:p,elementWasFound:m}}}function SOe(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function bOe(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await TOe(e,t.assertion)}async function TOe(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:dn(s,500,true)},!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,o=new K("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:dn(await e.evaluate(a=>a.cloneNode(false).outerHTML),500,true)};let s=null;try{s=await e.getAttribute(t.attr,{timeout:3e3});}catch(a){o=new K("AssertionFailureError",J(a)),n=false;break}if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,t.operation==="EXISTS"?o=new K("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new K("AssertionFailureError",`The attribute ${t.attr} ${a} '${t.value}': ${s}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{n=await e.evaluate(async(a,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(u=>setTimeout(u,250));let d=a.getBoundingClientRect();if(!(d.width===0||d.height===0)&&window.getComputedStyle(a).visibility!=="hidden"&&window.getComputedStyle(a).display!=="none")return true}return false},ws*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:ws*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:ws*1e3});break}case "FOCUSED":{n=await e.evaluate(a=>a===document.activeElement);break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(n=t.negated?!n:n,!n){let s=Jh(t);o=new K("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=Jh(t);n=false,o=new K("AssertionFailureError",`The element tag name ${a} '${t.value}': ${s}`);}break}case "ELEMENT_STYLE":{let s=await e.evaluate((a,l)=>window.getComputedStyle(a).getPropertyValue(l),t.property);if(!_S(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Jh(t);n=false,t.operation==="EXISTS"?o=new K("AssertionFailureError",`The style property ${t.property} ${a}`):o=new K("AssertionFailureError",`The style property ${t.property} ${a} '${t.value}': ${s}`);}break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:n,data:r,err:o}}function OZ(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function Cb(e,t){let n=await e.screenshot(t),{width:o,height:r}=imageSize(n);return {buffer:n,width:Math.ceil(o),height:Math.ceil(r)}}async function NZ(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Ql(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),Kn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await COe(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof K&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function COe({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Ql(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async P=>Cb(o,{locator:P.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await Cb(o,a);let d=await s.prepareGoldenScreenshotForComparison(i,t,c);if((c.height!==d.height||c.width!==d.width)&&i.warn({currHeight:c.height,currWidth:c.width,savedHeight:d.height,savedWidth:d.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(c.height-d.height)>10||Math.abs(c.width-d.width)>10){let x=`${c.width}x${c.height}`,P=`${d.width}x${d.height}`;return {fail:true,thoughts:`Current screenshot (${x}) does not match saved screenshot dimensions (${P}) - did you change the size of the target or the viewport?`,beforeScreenshotOverride:d.buffer,afterScreenshotOverride:c.buffer,succeedImmediately:false,urlAfterCommand:o.url()}}let u=await Jimp.fromBuffer(c.buffer),p={width:c.width,height:c.height},m=await Jimp.fromBuffer(d.buffer),h={width:d.width,height:d.height},g,f=p.width*p.height,S=h.width*h.height,T=Math.abs(p.height-h.height),A=Math.abs(p.width-h.width);if(f>S){let x=u.cover({w:h.width,h:h.height});c.buffer=await x.getBuffer("image/jpeg"),g="current",c.width=h.width,c.height=h.height;}else if(S>f){let x=m.cover({w:p.width,h:p.height});d.buffer=await x.getBuffer("image/jpeg"),g="saved";}let E={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},v=t.threshold??.1,O=oPe(iD.decode(d.buffer).data,iD.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,_=O>v*100,R=`Visual diff of ${O.toFixed(2)}% detected, which is ${_?"over":"under"} the threshold of ${v*100}%.`;if(g&&(R+=` The ${g} screenshot was cropped since it was taller by ${T} pixels and wider by ${A} pixels.`),_)throw new K("ActionFailureError",R);return {fail:_,thoughts:R,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:iD.encode(E,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var ROe=3e4;function vOe(e){if(!e.body)return {};switch(e.body.type){case "json":return {content:e.body.content,contentType:"application/json"};case "form-urlencoded":{let t=new URLSearchParams;return Object.entries(e.body.content).forEach(([n,o])=>{t.append(n,o);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function LZ({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??ROe/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),s=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{s.append(h,g);});let a=s.toString(),l;if(tg(e.url)&&(l=e.url),n&&ng(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new K("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:a,headers:i,body:e.body,method:e.method},"Making HTTP request");let u=await Re((async()=>{let h=a?`${c}?${a}`:c;try{let g=vOe(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await o(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new Error(`Failed to make HTTP request: ${g}`,{cause:g})}})(),{milliseconds:r*1e3,fallback:()=>{throw new K("ActionFailureError",`Fetch request timed out after ${r} seconds`)}});if(!u.ok){let h;try{h=await u.text();}catch(g){h=`Failed to read response body: ${g}`;}throw new K("ActionFailureError",`Fetch request failed with status ${u.status}: ${h}`)}let p={};u.headers.forEach((h,g)=>{p[g]=h;});let m={status:u.status,headers:p,request:{url:u.url,method:e.method,headers:i}};if(e.body?.type==="json"&&e.body.content)try{m.request.json=JSON.parse(e.body.content);}catch{}if(u.headers.get("content-type")?.includes("json"))try{m.json=await u.json();}catch{}else u.headers.get("content-type")?.includes("text")&&(m.text=await u.text());return m}var wOe=5e3;async function Dv({timeout:e=ws,...t}){let n=Date.now(),o=e*1e3,r=o+1e4,i,s=0,a=500;for(;s-n<o;){if(Date.now()-n>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await kZ(t),s=Date.now();let c=s-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await Xe(a,t.signal),a=Math.min(Math.floor(a*1.5),wOe);else return i}return i=await kZ(t),i}async function kZ(e){return Kn().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await IOe(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function IOe({assertion:e,browser:t,autoExpandIframes:n}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,s;try{let a;if(n){let l=await t.evaluateFunctionInAllFrames(DZ,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),a=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:a}=await t.evaluateFunctionInPage(DZ,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?wc.CONTAINS:Ic.CONTAINS;s=new K("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new K("AssertionFailureError",`Failed to evaluate page content assertion: ${a instanceof Error?a.message:`${a}`}`);}return {success:i,err:s,data:i||!r?void 0:{pageContent:r}}}default:return (r=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}}function DZ({value:e,negated:t,returnHtml:n}){let o=document.body.innerHTML,r=o.includes(e)===!t;return o.length>1e4&&(o=o.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&n?o:void 0}}var xOe=3e4;async function FZ({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??xOe/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([u,p])=>u&&p));s["Content-Type"]="application/json";let a;if(tg(e.url)&&(a=e.url),n&&ng(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new K("ActionFailureError",`Invalid URL: ${e.url}`);let c=await Re((async()=>{try{return await o(a,{headers:s,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(u){throw new Error(`Failed to make HTTP request: ${u}`,{cause:u})}})(),{milliseconds:r*1e3});if(!c)throw new K("ActionFailureError",`GraphQL request timed out after ${r} seconds`);if(!c.ok){let u,p=await c.text();try{u=JSON.parse(p);}catch{throw new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}throw u?.errors?.length&&u?.errors[0]?.message?new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${u.errors[0].message}`):new K("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}let d={};return c.headers.forEach((u,p)=>{d[p]=u;}),{status:c.status,headers:d,json:await c.json()}}var Bg=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:n,logger:o,storage:r,orgId:i,localCodeEvalTools:s,uploadedFileStorage:a,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=a,this.visualDiffScreenshotStorage=l,this.localCodeEvalTools=s,this.generator=n,this.logger=o;}setOpen(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal);}setClosed(){this.executeAbortController.abort();}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,n){this.executionOptionsStack.push(t);try{return await n()}finally{this.executionOptionsStack.pop();}}getCurrentExecutionOptions(){return this.executionOptionsStack[this.executionOptionsStack.length-1]??{}}async evaluateAiAction({goal:t,startingScreenshot:n,history:o,disableCache:r,langfuseSessionId:i,lastError:s,logger:a=this.logger}){let[l,c]=await Promise.all([Ol(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${c.toString("base64")}`,u=await hs({type:"ai-action",description:t,screenshot:d,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:this.browser.url(),browserState:u,startingScreenshot:n,history:o,goal:t,screenshot:d,lastError:s};return await this.generator.getMultiturnAiActionEvaluation(p,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...Rt(a)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:n,history:o,actionHint:r,disableCache:i,logger:s=this.logger,langfuseSessionId:a}){let l=this.browser.url(),[c,d]=await Promise.all([Ol(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${d.toString("base64")}`,p=await hs({type:"ai-action",description:t,screenshot:u,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:l,browserState:p,startingScreenshot:n,history:o,goal:t,actionHint:r,screenshot:u};try{return await this.generator.getMultiturnAiActionCommand(m,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Rt(s)},langfuseSessionId:a})}catch(h){throw new K("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Ol(this.browser,t)}async locateElement(t){return await rD(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Ys({action:async()=>{let o=await this.browser.resolveHardcodedCssSelector({selector:t,timeoutMs:2e3,logger:this.logger});return {thoughts:"Located element with selector",target:{id:-1,selector:t,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:o}},frameConfig:n?{type:"url",url:n}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(){return {browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,localCodeEvalTools:this.localCodeEvalTools,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:i,action:s,options:a,retriesWithAI:l=1}){let c=[];for(let d=0;d<r.length;d++){let u=r[d],p=await this.wrapElementTargetingCommand({tracer:t,command:n,target:u,cache:i[d],action:async m=>m,options:{...a,targetName:o[d]}});c.push(p);}try{let d=await s(...c.map(m=>m.result)),u=m=>m==="fromTarget"?"From Target":m==="toTarget"?"To Target":"Target",p=c.map((m,h)=>m.thoughts?`${u(o[h])}: ${m.thoughts}`:void 0).filter(m=>!!m).join(" -------------- ")||void 0;return {result:d,elementInteractedDisplayStrings:c.map(m=>m.elementInteractedDisplayString),thoughts:p}}catch(d){if(this.throwIfClosed(),l>0)return this.logger.warn({err:d},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:r.map(()=>{}),action:s,options:a,retriesWithAI:l-1});throw new K("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:n,options:o,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:s}=o;if(t.type!=="description")throw new K("ActionFailureError","Cannot use selector with non-description target");let a,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let d=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:s,logger:i});return {result:await n({locator:d.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:d.displayString}}catch(d){if(d.name==="AbortError")throw d;a=d,i.warn({err:d},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await Xe(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=Kn(),s=!o&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||s)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(n.locator);});let a;return s&&(a=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:d}=await this.browser.performTargetRedirection(n,r);if(l.result=d,d.outcome==="redirected to new element"&&c&&i.storeTraceAsset&&!this.browser.userBrowserSettings.disableBrowserMonitoring){let u=randomUUID();(async()=>{try{let p=await this.browser.screenshot({locator:c.locator,clearHighlights:!0,boundingBoxOverride:c.serverSideBoundingBox??void 0});i.storeTraceAsset?.({snapshotId:u,data:p});}catch(p){r.debug({err:p},"Failed to capture element screenshot for redirect trace");}})(),l.elementScreenshotSnapshotId=u;}return c})),a||(a={locator:n.locator,serverSideBoundingBox:await n.locator.boundingBox({timeout:qe}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await Kn().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=n.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;try{let c=await this.browser.resolveTarget(n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...o.resolveTargetOptions,acceptElementMovedError:o.force});l.attributes.targetDisplayString=c.displayString,l.attributes.decisions=c.decisions;let d=c.decisions.find(u=>u.matched);return d&&(l.resolutionMethod=d.type),c}catch(c){throw c instanceof Kr&&(l.cacheMissReason=c.cacheMissReason,l.attributes.decisions=c.decisions),c}}),a=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:s,disableGlobalLocatorRedirect:o.disableGlobalLocatorRedirect,logger:r});return o.force||await s.revalidator?.(),{resolutionResult:s,finalTarget:a}}async wrapElementTargetingCommand(t){return await Ys({action:()=>this.wrapElementTargetingCommandHelper(t),frameConfig:t.options.iframeUrl?{type:"url",url:t.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(t){let{tracer:n,target:o,action:r,options:i,command:s,finalAttempt:a=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:d,useSelector:u,targetName:p}=i,m=Kn(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||d)&&!fU(o))throw new K("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(t);let S=false,T;d&&(h.info("Cache explicitly disabled for this step"),S=true,T="Cache explicitly disabled",f=void 0);let A=fZ({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=A.cache,S=S||A.cacheBustedBeforeAction,!T&&A.cacheBustReason&&(T=A.cacheBustReason);let E=true;if(!gZ(f))return c--,E=false,this.executeTargetingCommandWithAI({tracer:m,stepTracer:n,target:o,options:i,command:s,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:S,cacheBustReason:T});try{let{resolutionResult:v,finalTarget:I}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),O=await r(I);if(wt.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.0.2"]),GC({cmd:s,key:p,newTarget:f,logger:h,updatedWithAI:!1}),E){let _=v.decisions.filter(R=>R.matched);if(_.length!==1)h.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let R=_[0].type;n.recordTargetAutoHeal({healType:R});}}return {result:O,elementInteractedDisplayString:v.displayString}}catch(v){this.throwIfClosed();let I=L_(v);if(I&&!a)return h.warn({err:v},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(v instanceof K&&!I)throw h.warn({err:v},"Failed to execute command with target (fatal)"),v;if(c>0&&o){h.info({err:v},"Failed to execute action with cached target, retrying with AI"),wt.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.0.2",`missReason:${v instanceof Kr?v.cacheMissReason:"unknown"}`]);let O;f.memory&&eA(f.memory)&&(O=f.memory);let _=v instanceof Kr&&v.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:O,targetHealingInProgress:true},skipInitialLocateWait:_})}throw new K("ActionFailureError",`Failed to execute interactive command: ${v instanceof Error?v.message:`${v}`}`,{errOptions:{cause:v}})}}async executeTargetingCommandWithAI(t){let{tracer:n,stepTracer:o,target:r,options:i,command:s,action:a,originalCache:l,logger:c,useMemory:d,cacheBustedBeforeAction:u,cacheBustReason:p,skipInitialLocateWait:m}=t;c.info({description:r.elementDescriptor,targetHealingInProgress:i.targetHealingInProgress,cacheBustedBeforeAction:u,memory:i.memory,useMemory:d},"Prompting AI for an updated element location");let h=false;(u||!l)&&!this.getCurrentExecutionOptions().skipAISmartWaiting&&!i.skipAISmartWaiting?(await n.startAsyncSpan("SMART_WAITING",async()=>await IZ({description:r.elementDescriptor,iframeUrl:i.iframeUrl,source:i.source,logger:c,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride},this.getControllerFixtures())),h=true):(u||!l)&&(i.skipAISmartWaiting?c.debug("Skipping AI smart waiting for this targeting attempt"):c.debug("Skipping AI smart waiting due to controller execution options"));let g=2;for(let f=1;f<=g;f++){let S=false,T=this.browser.getActiveFrameConfig(),A=i.force||f>1;try{let E;try{E=await rD({description:r.elementDescriptor,disableCache:!!i.disableCache,iframeUrl:i.iframeUrl,source:i.source,useMemory:d,memory:d?i.memory:void 0,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride,allowIneligibleTagRedirect:i.allowIneligibleTagRedirect,showZeroOpacityElementsOverride:i.showZeroOpacityElementsOverride,logger:c,skipWait:h||m,isAutoHeal:!!i.targetHealingInProgress,cacheBustReason:p,acceptElementMovedError:A},this.getControllerFixtures());}catch(O){if(O instanceof zm&&O.updatedLocatorMemory){let _={id:-1,...l,memory:O.updatedLocatorMemory};GC({cmd:s,key:i.targetName,newTarget:_,logger:c,updatedWithAI:!0});}throw O}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),S=!0);let v=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),I=await a(v);return GC({cmd:s,key:i.targetName,newTarget:E.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(o.recordTargetAutoHeal({healType:"AI"}),E.target.targetSource="AI_HEALED",E.target.targetUpdateTime=new Date().toUTCString(),E.target.targetUpdateLoggerTags=Rt(c)),{result:I,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(S&&this.browser.setActiveFrameConfig(T),this.throwIfClosed(),f<g&&L_(E)){c.warn({err:E,aiAttempt:f},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof K?E:new K("ActionFailureError",E.message)}}throw new K("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return Cb(this.browser,t)}async executePresetCommand(t,n,o,r,i){this.options?.slowMoMs&&await Xe(this.options.slowMoMs);let s=await this.browser.getOpenPages(),a=this.browser.url(),l;try{l=await this.resolveCommandTemplateStrings(n,o);}catch(c){throw this.throwIfClosed(),new K("ActionFailureError",`Failed to substitute template strings in command: ${c.message}`,{errOptions:{cause:c}})}try{let c=await $e({name:`cli.command.${n.type}`,attributes:{"momentic.command_type":n.type,"momentic.command_id":n.id},fn:()=>this.executePresetCommandHelper(t,n,o,r,i)});return this.options?.autoFollowNewTabs&&await hZ({beforeUrl:a,command:n,beforePages:s.map(d=>d.url),browser:this.browser,logger:this.logger}),c}catch(c){throw c.name!=="AbortError"&&this.logger.error({err:c},"Error thrown in action controller"),c}finally{p4(n,l);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>Nk(t)}}async traceBrowserInteraction(t,n,o){return Kn().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return yv({obj:t,context:n,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(t,n,o,r,i){r=r||"disableCache"in n&&!!n.disableCache;let s=this.logger.child({commandId:n.id});switch(n.type){case "SUCCESS":{let a=n.condition;return a?.assertion.trim()?kv({command:a,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!n.assertion.trim())throw new K("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new K("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return kv({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i})}case "AI_EXTRACT":return wZ({command:n,logger:s,fixtures:this.getControllerFixtures(),disableCache:r});case "NAVIGATE":if(!tg(n.url)&&!ng(n.url,this.browser.baseUrl))throw new K("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(n.action);break;case "CAPTCHA":throw new K("UserConfigurationError","Captcha solving is no longer available on Momentic");case "GO_BACK":await this.traceBrowserInteraction("Go back",()=>this.browser.goBack());break;case "GO_FORWARD":await this.traceBrowserInteraction("Go forward",()=>this.browser.goForward());break;case "SCROLL_LEFT":case "SCROLL_RIGHT":case "SCROLL_DOWN":case "SCROLL_UP":{let a,l;if(n.target&&ja(n.target)){let u=Er(n.target.pixels);await this.browser.hoverUsingVisualCoordinates(u);}else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:u,thoughts:p}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.browser.hover(m),options:{...n,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});a=u,l=p;}let c=this.browser.getViewport()?.height??wi.height,d=this.browser.getViewport()?.width??wi.width;switch(n.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(n.deltaY??c)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(n.deltaY??c));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(n.deltaX??d)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(n.deltaX??d));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new K("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let a=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:a},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case "WAIT":{if(n.delay>1800)throw new K("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let a=n.delay*1e3;await Xe(a,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "CLICK":{if(ja(n.target)){let p=Er(n.target.pixels),m={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0};await this.traceBrowserInteraction("Click",()=>this.browser.clickUsingVisualCoordinates(p,m),{coordinates:p});break}let a=this.browser.url(),{elementInteractedDisplayString:l,result:c,thoughts:d}=await this.wrapElementTargetingCommand({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:p=>this.traceBrowserInteraction("Click",async m=>{let h={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0},g=await this.browser.click(p,this.createCallbacksForBrowser(this.orgId),h);return g.coordinates&&(m.coordinates=g.coordinates),g},{selector:p.locator.toString()}),options:{...n,targetName:"target",disableCache:r}}),u={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:l,thoughts:d,data:c.downloadedFile?{downloadedFile:c.downloadedFile}:void 0};return ZC(a,u.urlAfterCommand)&&(u.succeedImmediately=true,u.succeedImmediatelyReason="URL changed"),u}case "COPY":return await this.browser.copy(n.value),{succeedImmediately:false,data:n.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(ja(n.fromTarget)&&ja(n.toTarget)){let c=Er(n.fromTarget.pixels),d=Er(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:c});break}if(ja(n.fromTarget)||ja(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:a,thoughts:l}=await this.wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(c,d)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps})),options:{...n,disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a[0],thoughts:l}}case "MOUSE_DRAG":{let a=parseInt(n.deltaX),l=parseInt(n.deltaY),c=n.steps??5;if(isNaN(a)||isNaN(l))throw new K("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&ja(n.target)){let p=Er(n.target.pixels);await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDragUsingVisualCoordinates({deltaX:a,deltaY:l,steps:c,fromTarget:p}),{coordinates:p});break}let d,u;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:p,thoughts:m}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async h=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(a,l,c,h.locator,{force:n.force})),options:{...n,targetName:"target",disableCache:r}});d=p,u=m;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(a,l,c,void 0,{force:n.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:d,thoughts:u}}case "SELECT_OPTION":{if(!Ql(n.target))throw new Error("Select with x/y is not supported yet");let a=n.target.elementDescriptor,l=n.choice,{elementInteractedDisplayString:c,thoughts:d}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:{type:"description",elementDescriptor:a},cache:n.cache?.target,action:u=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(u,l,n.force),{value:l.type==="LABEL"?l.label:l.type==="VALUE"?l.value:l.index}),options:{...n,targetName:"target",disableCache:r,source:sp(n)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:c,thoughts:d}}case "TAB":{let a={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:true};await this.browser.switchToPage(n.action,a);break}case "NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(n.action,{retry:true});break;case "COOKIE":{if(!n.value)break;let a=await this.browser.setCookie(n.value);s.debug({results:a},"Set cookies");break}case "LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case "JAVASCRIPT":{let a;try{n.environment==="BROWSER"?(a=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),s.info({result:a},"Executed JavaScript in browser")):a=await ru({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.timeout*1e3:void 0,logger:s,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async l=>{if(!this.options?.scratchPadId){s.warn({updates:l},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:l,logger:s});}}});}catch(l){throw this.throwIfClosed(),new K("ActionFailureError",l instanceof Error?l.message:`${l}`,{errOptions:{cause:l}})}try{JSON.stringify(a);}catch(l){throw new K("ActionFailureError",`Return value is not serializable: ${l instanceof Error?l.message:`${l}`}`,{errOptions:{cause:l}})}return {urlAfterCommand:this.browser.url(),succeedImmediately:false,data:a}}case "TYPE":{if(n.target&&ja(n.target)){let m=Er(n.target.pixels),h={...n,relativePosition:n.relativePosition?Er(n.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(m,h),await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},true),{value:n.value});break}let a=this.browser.url(),l,c,d=cloneDeep(n.target),u=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(d){let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:d,cache:n.cache?.target,action:g=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(n.value,g,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter,relativePosition:n.relativePosition}),{value:n.value,selector:g.locator.toString()}),options:{...n,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!u,source:sp(n)}});l=m,c=h;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},true),{value:n.value});let p={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:l,thoughts:c};return ZC(a,p.urlAfterCommand)&&(p.succeedImmediately=true,p.succeedImmediatelyReason="URL changed"),p}case "HOVER":{if(ja(n.target)){let c=Er(n.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(c),{coordinates:c});break}let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:c=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(c,{relativePosition:n.relativePosition?Er(n.relativePosition):void 0}),{selector:c.locator.toString()}),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "FOCUS":{if(!Ql(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:c=>this.browser.focus(c),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "BLUR":{if(n.target&&!Ql(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:a,thoughts:l}=await this.wrapElementTargetingCommand({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:c=>this.browser.blur(c),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:a,thoughts:l}}case "PRESS":{let a=this.browser.url();await this.traceBrowserInteraction("Press key",()=>this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??true,delayMs:n.delayMs}),{value:n.value});let l={urlAfterCommand:this.browser.url(),succeedImmediately:false};return ZC(a,l.urlAfterCommand)&&(l.succeedImmediately=true,l.succeedImmediatelyReason="URL changed"),l}case "KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let a=new CookieJar,l=POe(fetch,a),c;try{c=new URL(n.url).hostname;}catch{}let d=await LZ({command:n,baseUrl:this.browser.baseUrl,logger:s,fetchImplementation:l});return {data:qf.parse({...d,cookies:m$(a,c)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await FZ({command:n,baseUrl:this.browser.baseUrl,logger:s}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return NZ({tracer:t,command:n,disableCache:r,browser:this.browser,logger:s,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:a=>this.wrapElementTargetingCommand(a)});case "FILE_UPLOAD":{let a,l;if(n.fileSource.type==="URL"?(l=n.fileSource.url,a=await Q4({uri:n.fileSource.url,logger:s,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(l=n.fileSource.name,a=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!a)throw new K("UserConfigurationError",`Attempted to use non-existent file for upload step: ${l}`);await this.browser.setFileChooserHandler({...a,filename:n.filename});break}case "AUTH_SAVE":{let a=await this.browser.saveAuthState();if(n.storageState&&qd(n.storageState)){let l=Mn__default.resolve(n.storageState);Bo__default.mkdirSync(Mn__default.dirname(l),{recursive:true}),Bo__default.writeFileSync(l,`${JSON.stringify(a,null,2)}
5743
5743
  `,"utf8");}return {data:a,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AUTH_LOAD":{let a;if(qd(n.storageState))try{a=JSON.parse(Bo__default.readFileSync(Mn__default.resolve(n.storageState),"utf8"));}catch(c){throw new K("UserConfigurationError",`Failed to read auth state from '${n.storageState}': ${J(c)}`,{errOptions:{cause:c}})}else if(!n.storageState.trim())a=void 0;else if(a=await ru({orgId:this.orgId,code:n.storageState,fragment:false,context:o,logger:s,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof a!="object")throw new K("ActionFailureError",`Credentials must evaluate to an object (received ${typeof a} instead)`);let l;try{l=sE.optional().parse(a);}catch(c){throw new K("ActionFailureError",`Credentials provided do not follow the required format: ${c}`)}await this.browser.loadAuthState(l);break}case "ELEMENT_CHECK":{let a=(n.timeout??ws)*1e3,l=this.generator.getAgentConfig()?.assertion;if(OZ(n.assertion)&&!n.useSelector&&n.target.type==="description"&&l&&l!=="v1"){let d={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let u=await kv({command:d,logger:s,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory()});return {succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${u.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:u.afterScreenshotOverride}}finally{d.cache?.memory&&NS(n,d.cache?.memory.traces,s);}}let c=await PZ({command:n,tracer:t,timeoutMs:a,targetingWrapper:d=>this.wrapElementTargetingCommand(d),fixtures:this.getControllerFixtures(),disableCache:r});return {fail:!c.success,data:c.data,elementInteracted:c.elementInteractedDisplayString,thoughts:c.err?.message??c.thoughts??`Element assertion ${c.success?"succeeded":"failed"}.`,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "PAGE_CHECK":{let a=await Ys({action:async()=>Dv({assertion:n.assertion,browser:this.browser,logger:s,timeout:n.timeout,signal:this.executeAbortController.signal,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:s});return {fail:!a.success,data:a.data,thoughts:a.success?"Page assertion passed.":a.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:false}}case "REGISTER_REQUEST_LISTENER":{let a=new uu(n.requestMatcher),l=this.browser.registerRequestListener(a);return this.registeredListeners[n.key]=l.then(async c=>await Fk(c)).catch(c=>{s.error({err:c},"Failed to get request listener response");}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AWAIT_LISTENER":{let a=this.registeredListeners[n.key];if(!a)throw new K("ActionFailureError",`No listener registered with key: ${n.key}`);let l=n.timeout??10;return {data:await Re(a,{milliseconds:l*1e3,message:`Request listener timed out after ${l} seconds`}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "RECORD_REQUESTS":{let a=new uu(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,{matches:l=>a.matches({url:l.request.url,method:l.request.method}),onRequestStart:(l,c)=>{this.recordedRequests[n.key][l]=vv(c);},onRequestComplete:(l,c)=>{this.recordedRequests[n.key]?.[l]&&(this.recordedRequests[n.key][l]=vv(c));}}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GET_RECORDED_REQUESTS":{let a=this.recordedRequests[n.key];if(!a)throw new K("ActionFailureError",`No recorder registered with key: ${n.key}`);return delete this.recordedRequests[n.key],{data:Object.values(a),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "SET_HEADER":{let a;return n.requestMatcher&&(a=new uu(n.requestMatcher)),this.browser.setHeader(n.name,n.value,a),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "MOCK_ROUTE":return {data:{key:this.browser.registerMock(n.key,new uu(n.requestMatcher),async(l,c)=>{let d=await ru({orgId:this.orgId,code:n.responseGenerator,fragment:false,context:o,timeoutMs:void 0,logger:s,localTools:this.localCodeEvalTools,mock:{request:l,response:c},disallowVariableUpdates:true,responseSerialization:"RESPONSE"}),u=F$.parse(d);return new Response(u.body,{status:u.status,headers:u.headers})},n.fetchOriginalResponse??false)},succeedImmediately:false,urlAfterCommand:this.browser.url()};case "REMOVE_ROUTE_MOCK":return this.browser.removeMock(n.key),{succeedImmediately:false,urlAfterCommand:this.browser.url()};case "OFFLINE_MODE":return await this.browser.setOfflineMode(n.enable),{succeedImmediately:false,urlAfterCommand:this.browser.url()};default:return (l=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {succeedImmediately:false,urlAfterCommand:this.browser.url()}}async getReverseMappedDescription({browserState:t,targetId:n,disableCache:o,screenshot:r}){return (await this.generator.getReverseMappedDescription({browserState:t,target:n,screenshot:r},{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:Rt(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights();}async startRecordMode({params:t,abortController:n,isClickToRecord:o}){this.recordAbortController=n;let r=new Ov({signal:n.signal,...t});return await this.browser.startRecording(this.recordAbortController.signal,r,o),r}async runSectionAutohealing(t){return this.generator.getAutohealingProposal(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:Rt(this.logger)})}async getFailureRecoveryPlan(t,n){return this.generator.getFailureRecoveryPlan(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:Rt(n??this.logger)})}};var lD=async e=>{let{step:t,resolvedInputs:n}=e.moduleParams,{logger:o,context:r,storage:i,codeEvalTools:s,controller:a}=e.fixtures,l=a.browser,{orgId:c,runId:d}=e.inputs,u=a.executeAbortController.signal;Object.keys(n).length>0&&(r.setInputs(n),o.info(ss({json:{inputs:n,moduleId:t.moduleId},maxJsonStringSize:1e3}),"Set module inputs"));let p,m=false,h,g;if(t.cacheConfig||t.defaultCacheAllInvocations){let f=t.cacheConfig?.cacheKey||t.defaultCacheKey||"",S=await Dr({orgId:c,s:f,context:r,logger:o,localTools:s,signal:u});g={orgId:c,cacheKeys:[S,...Object.entries(n).map(([A,E])=>`${A}:${E}`)]},o.info({original:f,keyParams:g},"Module cache key params");let T=Date.now();for(;Date.now()-T<IV;){u?.throwIfAborted();let A=await i.getCacheResult(g);if(A){o.info({cacheResult:dn(A,1e3,true)},"Got result from module execution cache"),p=Fv(t,n,"SUCCESS"),p.message="Used cached module result.",p.data=JSON.parse(A),m=true;break}else o.info({cacheKey:f,keyParams:g},"No cache result found, continuing with lock acquisition");let E=await i.acquireCacheLock({keyParams:g,clientMetadata:`hostName:${hostname()};runId:${d}`},u);if(E.acquired){h=E.keyPrefix,o.info({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Acquired cache lock and proceeding with module execution");break}else o.debug({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Failed to acquire cache lock, retrying...");await Xe(2500+Math.random()*1e4,u);}}try{if(!p)p=await NOe(e);else if(t.autoAuth){let f=sE.safeParse(p.data);if(!f.success)throw new K("UserConfigurationError",`Cached authentication module result is not a valid storage state: ${f.error.message}`);o.debug("Automatically loading auth state after cached module result"),await l.loadAuthState(f.data);let S=!1,T=t.advanced?.cacheInvalidation;if(T&&T.type==="PAGE_CHECK"){let A={type:"CONTENT",value:T.substring},E=await Dv({timeout:ws,assertion:A,browser:l,logger:o,signal:u,autoExpandIframes:!!l.userBrowserSettings.autoExpandIframes});E.success?o.debug({invalResult:E},"Cached result still valid after page check, continuing..."):(o.info({invalResult:E},"Invalidating cached result due to page check failure"),S=!0);}if(g&&S)return await i.deleteCacheResult(g),lD(e)}}finally{try{h!==void 0&&!m&&p?.status==="SUCCESS"&&await LOe({step:t,result:p,browser:a.browser,cacheKeyPrefix:h,logger:o,storage:i});}finally{h!==void 0&&await i.releaseCacheLock(h);}}return p},NOe=async e=>{let{currentParentIdChain:t}=e,{step:n,tracer:o}=e.moduleParams,r=Fv(n,e.moduleParams.resolvedInputs,"SUCCESS"),i=await o.startSubSteps(),{status:s,results:a}=await e.executeStepList({...e,listParams:{steps:n.steps,containerName:`module ('${n.name}')`,tracer:i,currentParentIdChain:t}});return r.results=a,r.status=s,r.finishedAt=new Date,Ws({asyncTasks:e.work.asyncTasks,nestedResults:a,result:r,logger:e.fixtures.logger}),r};function Fv(e,t,n){let o={};return Object.entries(t).forEach(([i,s])=>{o[i]=JSON.stringify(s);}),{type:"MODULE",id:e.id,moduleId:e.moduleId,moduleName:e.name,startedAt:new Date,cacheConfig:e.cacheConfig,inputs:o,results:[],finishedAt:new Date,status:n}}async function UZ({orgId:e,step:t,context:n,logger:o,codeEvalTools:r,signal:i}){let s={};try{for(let a of t.parameters??[]){let l=t.inputs?.[a]??t.defaultParameters?.[a];if(!l){o.warn(`No value or default found for parameter '${a}' that is required by module '${t.name}'`);continue}s[a]=await ru({orgId:e,code:l,fragment:!0,context:n,logger:o,localTools:r,signal:i});}return s}catch(a){throw i?.throwIfAborted(),new K("UserConfigurationError",`Failed to evaluate module inputs: ${a}`)}}async function LOe({step:e,result:t,browser:n,cacheKeyPrefix:o,logger:r,storage:i}){let s=e.cacheConfig?.cacheExpiryMs;(!s||s===UW)&&(s=e.defaultCacheTtl??HW);let a;e.autoAuth?a=JSON.stringify(await n.saveAuthState()):t.data!==void 0?a=JSON.stringify(t.data):a='""',r.debug({cacheKeyPrefix:o,ttlMs:s,truncatedCacheResultJson:ss({json:a,maxJsonStringSize:1e4})},"Setting module cache result"),await i.setCacheResult({result:a,keyPrefix:o,ttlMs:s});}async function Xp(e,t,n){return kOe(e,t,n)}async function kOe(e,t,n){let o=new Date;try{return n.throwIfAborted(),await t()}catch(r){let i=new Date,s="FAILED",a;if(n.aborted||r instanceof DOMException&&r.name==="AbortError"?(a="Step aborted by user.",s="CANCELLED"):r instanceof K?a=`${r}`:a=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=Fv(e,{},"FAILED");return l.message=a,l.startedAt=o,l.finishedAt=i,l}return {...XC(e),startedAt:o,finishedAt:i,status:s,data:null,message:a,results:[]}}}async function ki(e,t){let n=false;try{return e&&!e.state.failureRecoveryDisabled&&(e.state.failureRecoveryDisabled=!0,n=!0),await t()}finally{e&&n&&(e.state.failureRecoveryDisabled=void 0);}}var Bv=20;function V({text:e,section:t}){if(!t)return [{type:"text",text:e}];let n=`### ${t}`;return e.length===0?[{type:"text",text:n}]:[{type:"text",text:`${n}
5744
5744
  ${e}`}]}function gi({base64Data:e,mediaType:t,section:n}){return n?[{type:"text",text:`### ${n}`},{type:"media",data:e,mediaType:t}]:[{type:"media",data:e,mediaType:t}]}function re(e){if(e.length===0)throw new dt("No content parts provided to construct the tool response content.");return {type:"content",value:e}}function wa(e){return {type:"content",value:[{type:"text",text:e}]}}function HZ(e,t=2e4){let n={};for(let[o,r]of Object.entries(e)){if(typeof r=="object"&&r!==null){let i=JSON.stringify(r,null,2);if(it(i)>t){n[o]="[too large truncated]";continue}n[o]=r;continue}n[o]=r;}return n}function GZ(e,t){let n={},o=0,r=Object.entries(e).map(([i,s])=>{let a=JSON.stringify(s,null,2),l=it(a);return {key:i,value:s,tokens:l}}).sort((i,s)=>i.tokens-s.tokens);for(let{key:i,value:s,tokens:a}of r)o+a<=t&&(n[i]=s,o+=a);return n}function jZ({projectRoot:e,filePath:t,pathLabel:n="path"}){if(!t||!Mn__default.isAbsolute(t))return t;let o=Mn__default.relative(e,t);if(o.startsWith("..")||Mn__default.isAbsolute(o))throw new Error(`Error: ${n} "${t}" must be inside project root "${e}".`);return o}function $Z(e){return e.map(t=>{switch(t.type){case "text":return t;case "media":return {type:"image",data:t.data,mimeType:t.mediaType};default:return (o=>{throw new Error("Unhandled content part")})()}})}var zZ=["__generated__"],WZ=[".env",".npmrc",".netrc",".git-credentials","credentials","credentials.json"],qZ=[".env.","id_rsa","id_ecdsa","id_ed25519","service-account"],KZ=[".pem",".key",".p12",".pfx",".keystore",".jks",".tfstate"],YZ=[".tfstate."],Uv=[...WZ.map(e=>`**/${e}`),...qZ.map(e=>`**/${e}*`),...KZ.map(e=>`**/*${e}`),...YZ.map(e=>`**/*${e}*`)];function VZ(e){let t=Mn__default.basename(e).toLowerCase();return WZ.includes(t)||qZ.some(n=>t.startsWith(n))||KZ.some(n=>t.endsWith(n))||YZ.some(n=>t.includes(n))}function Rb(e,t){return Mn__default.resolve(Mn__default.resolve(e),t)}async function JZ(e,t){let n=Rb(e,t);if(VZ(n))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);let o=await pD.realpath(n);if(VZ(o))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);return o}var BOe=z.object({pattern:z.string().min(1).describe("Glob pattern to match against file paths (relative to the search root). Patterns are NOT recursive by default \u2014 `*` matches a single path segment, the same way shell globs do. Prefix with `**/` for recursive globs (e.g. `**/*.ts` to find all TypeScript files, `**/open-app*` to find any file whose basename starts with `open-app`)."),path:z.string().optional().describe("Optional repo-relative directory to start the search in. Defaults to the working directory root."),maxResults:z.int().min(1).max(1e3).default(100).describe("Maximum number of paths to return. Defaults to 100.")}),UOe="Find files by glob pattern. Skips common build/dependency/IDE directories (package manager folders, .git, dist, build, .next, __generated__, etc.) by default. Returns one repo-relative path per line.";function Gv(e){return {tool:tool({description:UOe,inputSchema:BOe,execute:async n=>{let o=await HOe(n,e);return re(V({text:GOe(n.pattern,o)}))},toModelOutput:({output:n})=>n}),name:Qa}}async function HOe({pattern:e,path:t,maxResults:n},o){let r=Mn__default.resolve(o.repoRoot),i=t?Rb(r,t):r;return (await Oc([e],{cwd:i,ignore:[...zZ.map(a=>`**/${a}`),...Uv],maxDepth:1/0,nodir:true,signal:AbortSignal.timeout(3e4)})).slice(0,n).map(a=>Mn__default.relative(r,Mn__default.resolve(i,a)))}function GOe(e,t){return t.length===0?!e.includes("**/")&&!e.startsWith("**")?`(no matching files. Tip: '${e}' only matches at the top of the search root \u2014 prepend '**/' for a recursive match, e.g. '**/${e}'.)`:"(no matching files)":t.join(`
5745
5745
  `)}function jv({lines:e,startLine:t,maxLines:n,maxBytes:o,truncateLineChars:r}){let i=e.length,s=Math.max(1,t);if(s>i)return {content:"",endLine:s-1,droppedLines:0,droppedBytesFromByteCap:0};let a=Math.min(i,s-1+n),l=e.slice(s-1,a).map(g=>r?XZ(g,300):g),c=l.join(`
@@ -7471,7 +7471,7 @@ with this test we are editing:
7471
7471
  to pick which of these modules are relevant:
7472
7472
 
7473
7473
  `;let p=aUe(c);u+=p;let m=streamObject({schema:FF,model:d("claude-sonnet-4-5-20250929"),system:sUe,messages:[{role:"user",content:u}],providerOptions:{anthropic:Dl}}),h=[];for await(let A of m.textStream)h.push(A);let g=h.join(""),f;try{let A=JSON.parse(g);f=FF.parse(A);}catch(A){r.error({rawResponse:g,parseError:A},"Failed to parse AI response as JSON"),n.addError(`Failed to parse AI response: ${J(A)}. Raw response: ${g}`);return}let S=new Set(c.map(A=>A.moduleId)),T=f.recommendations.filter(A=>S.has(A.moduleId)?!0:(r.warn({moduleId:A.moduleId,moduleName:A.moduleName},"AI recommended a module that doesn't exist"),!1));n.addPartFromText(JSON.stringify({recommendations:T,totalModulesAnalyzed:c.length},null,2));}catch(c){r.error({err:c},"Error in module recommendation"),n.addError(`Failed to recommend modules: ${J(c)}`);}}}),gI=[cUe,rUe];var dUe=1e5,jee=Go({schema:{name:ly,description:"Get the current browser state for a granular session. Defaults: screenshot on, browser snapshot off. The browser snapshot includes the URL, accessibility tree, and other context. Ask for it (returnBrowserState: true) when you need it for locator resolution or richer page structure\u2014e.g. when screenshot-only output is insufficient. For large pages, pass `hint` to AI-filter the snapshot down to the relevant sections.",inputSchema:{sessionId:z.string().describe("The session id to query."),returnBrowserState:z.boolean().default(false).describe("Include the serialized browser snapshot. Default false. Set to true when you need the browser snapshot for element targeting or page structure."),returnScreenshot:z.boolean().default(true).describe("Include a screenshot. Default true. Set to false if you already have a screenshot of the present state and don't need a new one. EX: you just previewed a step and see that the page is too complicated and need the browser snapshot."),hint:z.string().optional().describe("Short natural-language description of what you need from the page (e.g. the action you are about to take or the element you are looking for). Required when returnBrowserState=true and the page is large: the hint is fed into an AI page-filtering step that returns only the most relevant sections of the accessibility tree, keeping the snapshot under the per-tool token budget.")}},handle:async(e,t,n)=>{let o=vu({response:n,sessionId:t.sessionId,toolName:ly});if(!o)return;o.controller.setOpen();let r=await NF({browser:o.controller.browser,supportsFileOutput:e.supportsFileOutput,returnBrowserState:t.returnBrowserState,returnScreenshot:t.returnScreenshot,tokenLimit:dUe,hint:t.hint,filtering:{generator:e.generator,orgId:e.orgId,logger:e.logger,signal:o.controller.executeAbortController.signal}});n.addContentParts(r);}}),$ee=Go({schema:{name:cy,description:"Get the current environment variables for a session.",inputSchema:{sessionId:z.string()}},handle:async(e,t,n)=>{let o=vu({response:n,sessionId:t.sessionId,toolName:cy});if(!o)return;let r=await Ts({testContext:o.context,supportsFileOutput:e.supportsFileOutput});n.addContentParts(r);}});var Vee=Go({schema:{name:ic,description:`Start a granular browser session for a specific test. Requires a testId. Returns session metadata (sessionId, testId, testFileAbsolutePath, projectConfigAbsolutePath, cwd, viewport, etc.), a Step Authoring Guide artifact that includes projectRootAbsolutePath, projectConfigAbsolutePath, and cwd, and a Test Content section that lists every step in the bound test with its stable stepId context. ${Fb} Read the Step Authoring Guide artifact before creating, previewing, running, or splicing CLI-style steps. Use the Test Content section for the step ids required by tools that operate on existing steps in this session's test. After editing with splice, prefer the splice response or request returnTest for the updated active-session step ids. Use ${zo} to inspect persisted test state by id or path, especially for a different test.`,inputSchema:{testId:z.string().describe("The test id to target when starting a session."),envName:z.string().optional().describe("Optional environment override (matches CLI --env behavior). Defaults to the test's default env when omitted."),projectConfigPath:z.string().optional().describe("Optional path to a momentic.config.yaml file (matches CLI --config)."),projectNameFilter:z.string().optional().describe("Optional project name filter for workspace configs (matches CLI --filter)."),headfulBrowser:z.boolean().optional().describe("Whether to launch a headful browser for the session. When omitted, uses the MCP server default if configured."),video:z.boolean().optional().describe("Whether to record a video of the browser session. When omitted, uses the MCP server default if configured. When the session is terminated, the response will include the path to the video output directory.")}},handle:async(e,t,n)=>{let{logger:o}=e,r=t.video??e.videoDefault??false,i;r&&(fs(e.project.rootDir),i=ys({rootDir:e.project.rootDir,entity:"video",ext:"d"}),mkdirSync(i,{recursive:true}));let s;try{let l=vo();if(!l){n.addError("API client is not initialized; cannot start MCP session.");return}let c=await js({project:await tn({configFilePath:t.projectConfigPath??e.project.configFilePath,nameFilter:t.projectNameFilter,skipExitOnError:!0}),apiClient:l}),d=new Es(l,e.orgId,c);s=await As.startSession({logger:o,storage:d,testId:t.testId,idleTimeoutMs:e.sessionIdleTimeoutMs,runner:"mcp",envName:t.envName,headfulOverride:t.headfulBrowser??e.headfulDefault??!0,customHeaders:e.customHeaders,devicePixelRatio:e.devicePixelRatio,videoOutputDir:i});}catch(l){n.addError(J(l));return}bs({type:"mcp:session_started",test_platform:"web"});let a=s.controller.browser.getViewport();n.addPartFromText(JSON.stringify({sessionId:s.sessionId,testId:s.testId,testFileAbsolutePath:s.testFileAbsolutePath,projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:process.cwd(),createdAt:s.createdAt,expiresAt:s.lastAccessedAt+s.idleTimeoutMs,idleTimeoutMinutes:s.idleTimeoutMs/(60*1e3),envName:s.envName,baseUrl:s.baseUrl,viewport:a},null,2)),n.addContentParts(await p8({projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:process.cwd(),stepSchema:Br(),stepSchemaTitle:"Step schema",supportsFileOutput:e.supportsFileOutput}));try{let l=await Cu({project:s.storage.getProject(),storage:s.storage,selector:{id:s.testId},envName:s.envName,logger:o,mutableStepState:s.mutableStepState,includeCache:!1,hydrateStepIdentity:!0,supportsFileOutput:e.supportsFileOutput});n.addContentParts(l);}catch(l){o.warn({sessionId:s.sessionId,err:l},"Session started but resolved test content could not be loaded");}try{n.addContentParts(await br({browser:s.controller.browser,supportsFileOutput:e.supportsFileOutput}));}catch(l){o.warn({sessionId:s.sessionId,err:l},"Session started but initial screenshot capture failed"),n.addPartFromText(JSON.stringify({warning:"Session started successfully, but initial screenshot capture failed.",screenshotError:J(l)},null,2));}i&&n.addContentParts(V({text:or({filePath:i,title:"Video output directory"}),section:"Video Output"}));}}),zee=Go({schema:{name:RA,description:"Kill a granular browser session by sessionId. Returns available session ids if the target is missing.",inputSchema:{sessionId:z.string().describe("The session id to terminate.")}},handle:async(e,t,n)=>{let{sessionId:o}=t;try{let r=As.getSession(o),i=r?.videoOutputDir,s=await As.killSession(t.sessionId,"explicit kill");if(s.killed&&bs({type:"mcp:session_killed",test_platform:"web",reason:"explicit kill"}),!s.killed){r?n.addError(`Failed to terminate session '${t.sessionId}'.`):n.addError(JSON.stringify({message:`No active session found for id '${t.sessionId}'.`,availableSessionIds:As.listSessionIds()},null,2));return}n.addPartFromText(JSON.stringify({sessionId:t.sessionId,killed:!0},null,2));let a=await m8({killResult:s,rootDir:e.project.rootDir});a&&n.addContentParts(V({text:or({filePath:a.filePath,title:"Session span report"}),section:"Session Spans"})),i&&n.addContentParts(V({text:or({filePath:i,title:"Video output directory"}),section:"Video Output"}));}catch(r){n.addError(J(r));}}});var df=async({step:e,controller:t,executionOptions:n,storage:o,codeEvalTools:r,logger:i,socket:s,testContext:a,orgId:l,sessionId:c,usageTracker:d,apiClient:u})=>{let{results:p}=await BF({steps:[e],controller:t,executionOptions:n,storage:o,codeEvalTools:r,logger:i,socket:s,testContext:a,orgId:l,sessionId:c,usageTracker:d,apiClient:u});return p[0]},BF=async({steps:e,fromStep:t,toStep:n,tracer:o,controller:r,executionOptions:i,storage:s,codeEvalTools:a,logger:l,socket:c,testContext:d,orgId:u,sessionId:p,usageTracker:m,apiClient:h})=>{let g={controller:r,storage:s,codeEvalTools:a,logger:l,context:d,usageTracker:m},f=o??(c?new od({orgId:u,parentStep:null,parentTracer:null,socket:c}):new lS);r.setOpen();let S={results:[],asyncTasks:[],state:{autoHealingDisabled:true,failureRecoveryDisabled:true,failureRecoveryAttempts:0},...t&&{fastForwardingToStep:true}},T=()=>Xs({listParams:{containerName:"agent-step-list",steps:e,tracer:f},fixtures:g,options:{collectDebugData:false,reinitializeBrowser:false,disableHealing:true},inputs:{orgId:u,userId:YQ(),runId:randomUUID(),sessionId:p,steps:e,testMetadata:null,orgSettings:{},fromStep:t,toStep:n},callbacks:{test:{},step:{}},runParams:h?{apiClient:h}:null,work:S});return i?r.withExecutionOptions(i,T):T()};async function fI({step:e,project:t,logger:n,storage:o,controller:r,codeEvalTools:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:d,tempCaches:u,usageTracker:p,apiClient:m}){let h=await Iw(e,{project:t,logger:n,tempCaches:u});switch(h.type){case "PRESET_ACTION":return gUe({step:h,logger:n,storage:o,controller:r,codeEvalTools:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:d,tempCaches:u,usageTracker:p,apiClient:m});case "AI_ACTION_DYNAMIC":return fUe({step:h,logger:n,storage:o,controller:r,codeEvalTools:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:d,usageTracker:p,apiClient:m});case "RESOLVED_MODULE":return yUe({step:h,logger:n,storage:o,controller:r,codeEvalTools:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:d,usageTracker:p,apiClient:m});default:{let[g,f]=await Promise.all([br({browser:r.browser,supportsFileOutput:d}),Ts({testContext:c,supportsFileOutput:d})]);return [...V({text:`Preview for step type ${h.type} is not supported. Only PRESET_ACTION, RESOLVED_MODULE, and AI_ACTION_DYNAMIC are supported.`,section:"Error"}),...g,...f]}}}async function gUe({step:e,logger:t,storage:n,controller:o,codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,tempCaches:d,usageTracker:u,apiClient:p}){let m=await df({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:true},codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,usageTracker:u,apiClient:p}),h=[];m?m.status==="SUCCESS"?(SUe({logger:t,tempCaches:d,command:e.command,parts:h}),h.push(...V({text:`Step Execution successful: ${m.message}`,section:"Successful Result"}))):h.push(...V({text:`Step Execution failed: ${m.message}`,section:"Error"})):h.push(...V({text:"Step Execution errored for an unknown reason.",section:"Error"}));let[g,f]=await Promise.all([br({browser:o.browser,supportsFileOutput:c}),Ts({testContext:l,supportsFileOutput:c})]);return h.push(...g,...f),h}async function fUe({step:e,logger:t,storage:n,controller:o,codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,usageTracker:d,apiClient:u}){let p=await df({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:true},codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,usageTracker:d,apiClient:u}),m=[];p?p.status==="SUCCESS"?m.push(...V({text:`AI action completed successfully: ${p.message??"Goal achieved"}`,section:"Successful Result"})):m.push(...V({text:`AI action failed: ${p.message??"Unknown error while previewing AI action"}`,section:"Error"})):m.push(...V({text:"AI action executed with unknown result.",section:"Error"}));let[h,g]=await Promise.all([br({browser:o.browser,supportsFileOutput:c}),Ts({testContext:l,supportsFileOutput:c})]);return m.push(...h,...g),m}async function yUe({step:e,logger:t,storage:n,controller:o,codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,usageTracker:d,apiClient:u}){let p=await df({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:true},codeEvalTools:r,socket:i,orgId:s,sessionId:a,testContext:l,usageTracker:d,apiClient:u}),m=[];p?p.status==="SUCCESS"?m.push(...V({text:`Module executed successfully: ${p.message}`,section:"Successful Result"})):m.push(...V({text:`Module execution failed: ${p.message}`,section:"Error"})):m.push(...V({text:"Module execution errored for an unknown reason.",section:"Error"}));let[h,g]=await Promise.all([br({browser:o.browser,supportsFileOutput:c}),Ts({testContext:l,supportsFileOutput:c})]);return m.push(...h,...g),m}function SUe({logger:e,tempCaches:t,command:n,parts:o}){if(t&&Oo(n)&&n.cache)try{let r=randomUUID();t[r]=qa.parse(cloneDeep({type:n.type,cache:n.cache})),o.push(...V({text:r,section:"CacheId"}));}catch(r){e.warn({err:r},"Failed to save temp cache for step. Continuing...");}}var Wee=({steps:e,fromStep:t,toStep:n})=>{let o={total:0,fastForwardingToStep:true},r=(i,s)=>{if(i.skipped)return false;let a=s.map(c=>c.id),l=Jb(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return o.total+=1,!!(n&&Jb(i.id,a,n.toStepId,n.parentStepIdChain))};return li({steps:e,earlyStop:true,onPresetAction:(i,s)=>r(i,s.parentChain),onConditional:(i,s)=>{if(i.skipped)return false;let a=s.parentChain.map(c=>c.id),l=Jb(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return !!(n&&Jb(i.id,a,n.toStepId,n.parentStepIdChain))},onSimpleStepContainer:(i,s)=>r(i,s.parentChain)}),o.total};var TUe="Cannot add a module step inside another module. Modules cannot be nested.";function UF(e,t){switch(t){case "setup":return e.beforeSteps??[];case "teardown":return e.afterSteps??[];case "main":return e.steps;default:{throw new Error("Unknown test section")}}}function AUe(e,t,n){let o=UF(e,t);if(!n?.length)return o;let r=MK(o,n);if(!r)throw new Error(`No step found with parent chain [${n.join(", ")}] in ${t} section, or parent does not support nested steps`);return r}function qee(e,t){let n=t.moduleId,o=r=>{r.type!=="RESOLVED_MODULE"||r.moduleId!==n||(t.parameters!==void 0&&(r.parameters=t.parameters),t.parameterEnums!==void 0&&(r.parameterEnums=t.parameterEnums),t.defaultParameters!==void 0&&(r.defaultParameters=t.defaultParameters),t.name!==void 0&&(r.name=t.name),t.description!==void 0&&(r.description=t.description),t.enabled!==void 0&&(r.enabled=t.enabled),t.steps!==void 0&&(r.steps=t.steps));};for(let r of [e.steps,e.beforeSteps,e.afterSteps])li({steps:r,onPresetAction:o,onConditional:o,onSimpleStepContainer:o});}async function yI({project:e,storage:t,orgId:n,logger:o,testPath:r,saveChangesToDisk:i,supportsFileOutput:s,tempCaches:a,mutableStepState:l,params:c,envName:d}){let u=Mn__default.join(e.rootDir,r),p=await t.getTestByPath({relativeTestPath:r,logger:o}),m=l?.stepLists??p,h=cloneDeep({steps:m.steps??[],beforeSteps:m.beforeSteps??[],afterSteps:m.afterSteps??[]}),g=cloneDeep(h),f=await Promise.all(c.steps.map(R=>Iw(R,{project:e,logger:o,tempCaches:a}))),S=cloneDeep(f),T=c.parentStepIdChain,A;try{A=AUe(g,c.targetSection,T);}catch(R){return re(V({text:`Error: ${J(R)}`,section:"Error"}))}if(c.startIndex<0||c.startIndex>A.length)return re(V({text:`Error: Invalid startIndex ${c.startIndex} for splicing ${c.targetSection} section with ${A.length} steps (must be 0-${A.length})`,section:"Error"}));let E=f.length,v=c.deleteCount,I=cloneDeep(A.slice(c.startIndex,c.startIndex+v)),O=[];if(T?.length){let R=NK(UF(g,c.targetSection),T,c.targetSection);if(O.push(...R),R.some(P=>P.type==="RESOLVED_MODULE")&&f.some(P=>P.type==="RESOLVED_MODULE"))return re(V({text:`Error: ${TUe}`,section:"Error"}))}A.splice(c.startIndex,c.deleteCount,...f);for(let R of f)R.type==="RESOLVED_MODULE"&&qee(g,R);for(let R of O)R.type==="RESOLVED_MODULE"&&qee(g,R);if(l&&(l.stepLists=g),o.info({testPath:r,testFilePath:u,saveChangesToDisk:i,projectFileFormat:e.config.fileFormat,targetSection:c.targetSection,parentStepIdChain:T??[],insertedCount:E,deletedCount:v},"MCP splice persistence decision"),i){let R=await t.updateTestByPath({logger:o,relativeTestPath:r,stepLists:g,schemaVersion:at});o.info({testPath:r,testFilePath:u,projectFileFormat:e.config.fileFormat,moduleUpdateCount:R.moduleUpdates.length,snapshotCacheCount:R.snapshotCachesToSave.length},"MCP splice persisted test changes to disk");}else o.info({testPath:r,testFilePath:u,projectFileFormat:e.config.fileFormat},"MCP splice skipped disk persistence");let _=[...V({text:`Successfully spliced ${E} step(s) at index ${c.startIndex} in the ${c.targetSection} section, removing ${v} step(s).`,section:"Result"})];return _.push(...await RUe({logger:o,project:e,orgId:n,testId:p.id,environment:d,originalSteps:h,updatedSteps:g})),_.push(...await X9({rootDir:e.rootDir,supportsFileOutput:s,deletedStepRefs:I.map((R,x)=>({id:R.id,index:c.startIndex+x})),insertedStepRefs:S.map((R,x)=>({id:R.id,index:c.startIndex+x})),deletedSteps:Vd(I,{includeCache:false}),insertedSteps:Vd(S,{includeCache:false}),metadata:{section:c.targetSection,parentStepIdChain:T??[],startIndex:c.startIndex,deleteCount:v,insertedCount:E},artifactEntity:"splice-restoration-payload"})),c.returnTest&&_.push(...V({text:JSON.stringify(await dI({project:e,storage:t,selector:{path:r},envName:d,logger:o,mutableStepState:l,supportsFileOutput:s,hydrateStepIdentity:false}),null,2),section:"Test Content"})),re(_)}async function SI({project:e,logger:t,testPath:n,storage:o,controller:r,codeEvalTools:i,socket:s,orgId:a,sessionId:l,envName:c,testContext:d,tracer:u,params:p,tokenLimit:m,supportsFileOutput:h,usageTracker:g,mutableStepState:f,apiClient:S,disableCache:T}){let{fromStep:A,toStep:E,targetSection:v}=p,I=await o.getTestByPath({relativeTestPath:n,logger:t}),{alwaysSaveCache:O,noCache:_}=Wc(),R=await Bi({logger:t,orgId:a,project:e,alwaysSaveCache:O,noCache:_||T===true}),x=f?.stepLists??{beforeSteps:I.beforeSteps??[],afterSteps:I.afterSteps??[],steps:I.steps};await R.resolveStepCacheEntries({logger:t,schemaVersion:I.schemaVersion,stepLists:x,testId:I.id,environment:c,useSnapshotIdentityCache:!f&&e.config.fileFormat==="v2"}),f&&(f.stepLists=x);let P=T?cloneDeep(x):x;T&&EUe(P);let H=UF(P,v),B=cloneDeep({steps:P.steps,beforeSteps:P.beforeSteps,afterSteps:P.afterSteps}),{result:G}=xp(H,A.fromStepId,A.parentStepIdChain);if(!G)return re(V({text:`Error: No step found with id "${A.fromStepId}" and parent chain [${A.parentStepIdChain.join(", ")}] in ${v} section.`,section:"Error"}));if(E){let{result:we}=xp(H,E.toStepId,E.parentStepIdChain);if(!we)return re(V({text:`Error: No step found with id "${E.toStepId}" and parent chain [${E.parentStepIdChain.join(", ")}] in ${v} section.`,section:"Error"}))}if(u?.setProgressTotal){let we=Wee({steps:H,fromStep:A,toStep:E});u.setProgressTotal(we);}r.setOpen();let ie;try{ie=await BF({steps:H,controller:r,storage:o,codeEvalTools:i,logger:t,socket:s,orgId:a,sessionId:l,testContext:d,fromStep:A,toStep:E,tracer:u,usageTracker:g,apiClient:S});}finally{await g.flush(t);}let{results:Z}=ie;if(!Z||Z.length===0)return re(V({text:"Error: No steps were executed.",section:"Error"}));let j=Z.at(-1);if(!j)return re(V({text:"Error: No steps were executed.",section:"Error"}));let z={logger:t,cacheStorage:R,orgId:a,testId:I.id,environment:c,originalStepsWithCaches:B,updatedStepsWithCaches:{steps:P.steps,beforeSteps:P.beforeSteps??[],afterSteps:P.afterSteps??[]}},q=j.status!=="SUCCESS";await Pp({logger:t,cacheStorage:R,orgId:a,testId:I.id,environment:c,stepLists:z.updatedStepsWithCaches,useSnapshotIdentityCache:e.config.fileFormat==="v2"}),q?j.status==="FAILED"&&await Zh(z):await Op(z);let X=v==="main"?"":` in ${v}`,te=we=>{let tt="fromStepId"in we?we.fromStepId:we.toStepId;return we.parentStepIdChain.length>0?`id "${tt}" (parent chain [${we.parentStepIdChain.join(", ")}])`:`id "${tt}"`},U=A?te(A):"beginning",se=E?`Steps from ${U} through ${te(E)}${X}`:`Steps from ${U} to end${X}`,ce=[];if(q)ce.push(...V({text:`Error: step with id ${j.id} failed: ${j.message}`,section:"Error"}));else {r.setOpen();let we=`${se} executed successfully.`;ce.push(...V({text:we,section:"Result"})),j.data&&ce.push(...V({text:`Data: ${JSON.stringify(j.data,null,2)}`,section:"Result Data"}));}let[ke,Me]=await Promise.all([br({browser:r.browser,supportsFileOutput:h}),Ts({testContext:d,supportsFileOutput:h,limits:{tokenLimit:m}})]);return re([...ce,...ke,...Me])}function EUe(e){for(let t of [e.steps,e.beforeSteps,e.afterSteps])t&&CUe(t);}function CUe(e){li({steps:e,earlyStop:false,onPresetAction:t=>(Oo(t.command)&&delete t.command.cache,false),onSimpleStepContainer:()=>false,onConditional:()=>false});}async function RUe({logger:e,project:t,orgId:n,testId:o,environment:r,originalSteps:i,updatedSteps:s}){let a=[];try{let{alwaysSaveCache:l,noCache:c}=Wc(),d=await Bi({logger:e,orgId:n,project:t,alwaysSaveCache:l,noCache:c});await Pp({logger:e,cacheStorage:d,orgId:n,testId:o,environment:r,stepLists:s,useSnapshotIdentityCache:t.config.fileFormat==="v2"}),await Op({logger:e,cacheStorage:d,orgId:n,testId:o,environment:r,originalStepsWithCaches:i,updatedStepsWithCaches:s});}catch(l){e.warn({err:l},"Failed to save step caches after execution, future runs may be slower"),a.push(...V({text:"Warning: Steps were saved successfully, but updating the step cache failed. Future runs may be slower until the cache is refreshed.",section:"Warning"}));}return a}var HF=class{constructor(t,n,o,r){this.reporter=t;this.step=n;this.parentStepIdChain=o;this.setTotal=r;}loggerBindings;attachBeforeScreenshot(t){}attachAfterScreenshot(t){}attachBeforeHtmlSnapshot(t){}attachAfterHtmlSnapshot(t){}recordTargetAutoHeal(t){}storeTraceAsset(){}async finish(t){this.reporter.onStepComplete(this.step);}async startSubSteps(){return new bI(this.reporter,this.parentStepIdChain.concat(this.step.id),this.setTotal)}},bI=class{constructor(t,n=[],o){this.reporter=t;this.parentStepIdChain=n;this.setTotal=o;}loggerBindings;setProgressTotal(t){this.setTotal(t);}async getScreenshot(t,n){}async getHtmlSnapshot(t,n){}flushResults(t){}async startStep(t,n){return this.reporter.onStepStart(t.step),new HF(this.reporter,t.step,this.parentStepIdChain,this.setTotal)}};function Kee(e,t,n,o){let r=Yb(e),i={completed:0,total:0},s=new AbortController,a=false,l=p=>{r&&D9(e,i,p,t,s,n);},c=()=>{r&&(a||(a=true,l("Starting step execution...")));},d=p=>{!Number.isFinite(p)||p<0||(i.total=p);},u={onStepStart:p=>{c(),i.total===i.completed&&(i.total+=1),l(`Starting: ${Fn(p)}`);},onStepComplete:p=>{o(),c(),i.completed+=1,i.total<i.completed&&(i.total=i.completed),l(`Completed: ${Fn(p)}`);}};return new bI(u,[],d)}var Jee=`CLI-style step definition. Use the Step Authoring Guide artifact returned from ${ic} when you start your session to get the full step schema.`,vUe=Go({schema:{name:OH,description:"Create a test. The name must satisfy Momentic entity naming rules, and you must provide either a baseUrl or environment or the tool will fail.",inputSchema:dO},handle:async(e,t,n,o)=>{try{let r=await e.storage.createTest(t);bs({type:"mcp:test_create",test_platform:"web"}),n.addPartFromText(JSON.stringify(r,null,2));}catch(r){n.addError(J(r));return}}}),wUe=Go({schema:{name:zo,description:`Fetch a loaded test by id or path, including resolved module steps and stable stepId and parentStepIdChain values for the persisted test state. Use this to inspect a test before starting a session or to inspect a different test. For the active session after ${rp}, prefer the splice response or request returnTest on the splice call for updated step ids. Step ids from another test are inspection-only for the active session. Start a session for that test before running or editing it.`,inputSchema:{testId:z.string().optional().describe(`Id of the test to fetch. If you do not already know it, list project tests with ${V_}. Either testId or testPath is required.`),testPath:z.string().optional().describe("Path to the test file, relative to the project root or absolute. When provided, skips the entity-registry lookup. Either testId or testPath is required.")}},handle:async(e,t,n,o)=>{try{let r=t.testId?{id:t.testId}:t.testPath?{path:t.testPath}:void 0;if(!r){n.addError("Either testId or testPath is required.");return}let i=await Cu({project:e.project,storage:e.storage,selector:r,envName:void 0,logger:e.logger,includeCache:!1,hydrateStepIdentity:!0,supportsFileOutput:e.supportsFileOutput});n.addContentParts(i);}catch(r){n.addError(J(r));return}}}),Yee=Go({schema:{name:CA,description:`Reload the active session's test from disk into mutable in-memory step state. Use this after manually editing a v2 YAML test/module on disk and running lint, before ${Xm}. Returns updated Test Content with step ids for the active session.`,inputSchema:{sessionId:z.string().describe("The active session whose bound test should be reloaded.")}},handle:async(e,t,n,o)=>{let r=vu({response:n,sessionId:t.sessionId,toolName:CA});if(!r)return;let i=r.storage.getProject();if(i.config.fileFormat!=="v2"){n.addError(`${CA} is only available for v2 file-format projects.`);return}let s=await r.storage.getTestByPath({relativeTestPath:r.relativeTestPath,logger:e.logger}),a={beforeSteps:s.beforeSteps,steps:s.steps,afterSteps:s.afterSteps},{alwaysSaveCache:l,noCache:c}=Wc(),d=await Bi({logger:e.logger,orgId:r.orgId,project:i,alwaysSaveCache:l,noCache:c});r.mutableStepState.testId=s.id,r.mutableStepState.stepLists=await Gd({cacheStorage:d,logger:e.logger,schemaVersion:s.schemaVersion,stepLists:a,testId:s.id,environment:r.envName,useSnapshotIdentityCache:true}),n.addContentParts(V({text:`Reloaded test ${s.id} from disk into session ${r.sessionId}.`,section:"Result"})),n.addContentParts(await Cu({project:i,storage:r.storage,selector:{path:r.relativeTestPath},envName:r.envName,logger:e.logger,mutableStepState:r.mutableStepState,includeCache:false,hydrateStepIdentity:false,supportsFileOutput:e.supportsFileOutput}));}}),IUe={...Yee,addToolToMcpServer:(e,t)=>{e.project.config.fileFormat==="v2"&&Yee.addToolToMcpServer(e,t);}},xUe=Go({schema:{name:V_,description:`List local test artifacts. Returns a Project Context section with projectRootAbsolutePath, projectConfigAbsolutePath, and cwd, plus separate segments for each relevant artifact type: tests, modules, and environments. ${Fb} When file output is enabled, the artifact links are relative to cwd. Read or grep only the specific artifact files you need instead of loading everything at once. Assume nothing changed since your last successful call to this tool unless the user indicates updates (e.g. new/changed tests, modules, environments, or project config change); avoid redundant calls just to refresh.`,inputSchema:{}},handle:async(e,t,n,o)=>{let{project:r,logger:i}=e,s=[],a=[];try{let[c,d]=await Promise.all([e.storage.listTests(),e.storage.listModules()]),u=c.map(m=>({id:m.id,name:m.name,description:m.description,testFileAbsolutePath:m.fullFilePath,labels:m.labels||[]}));s.push({title:"Tests",entity:"test-list",payload:{tests:u}});let p=d.map(m=>({id:m.id,name:m.name,description:m.description,fullFilePath:m.fullFilePath,type:m.type}));s.push({title:"Modules",entity:"module-list",payload:{modules:p}});}catch(c){a.push(`Tests and modules discovery failed: ${J(c)}`);}try{let c=e.storage.listEnvironments(i);s.push({title:"Environments",entity:"environment-list",payload:{environments:c}});}catch(c){a.push(`Environments discovery failed: ${J(c)}`);}let l=await h8({artifacts:s,rootDir:r.rootDir,supportsFileOutput:e.supportsFileOutput,projectRootAbsolutePath:r.rootDir,projectConfigAbsolutePath:r.configFilePath,cwd:process.cwd()});n.addContentParts(l),a.length>0&&n.addContentParts(V({section:"Discovery Errors",text:a.map(c=>`- ${c}`).join(`
7474
- `)}));}}),Xee=Go({schema:{name:dy,description:"Execute a step without adding it to the test. IMPORTANT: do NOT preview an AI Action (AI_ACTION_DYNAMIC) step with this tool. AI Actions run many sub-steps and routinely take well over 60s, and MCP tool calls are capped at 60s and cancelled regardless of progress \u2014 the step is killed and its work lost. ALWAYS preview an AI Action with the equivalent `momentic preview-step` CLI command in your terminal, which has no MCP tool-call timeout. When this server runs with --daemon the CLI shares this session, so pass the same sessionId; otherwise drive the whole flow over the CLI.",inputSchema:{sessionId:z.string(),step:z.string().describe(Jee)}},handle:async(e,t,n,o)=>{let{sessionId:r,step:i}=t,s=vu({response:n,sessionId:r,toolName:dy});if(!s)return;s.controller.setOpen();let a;try{a=await fI({project:s.storage.getProject(),step:i,logger:e.logger,storage:s.storage,controller:s.controller,codeEvalTools:s.codeEvalTools,orgId:s.orgId,sessionId:s.sessionId,testContext:s.context,supportsFileOutput:e.supportsFileOutput,tempCaches:s.tempCaches,usageTracker:s.usageTracker,apiClient:vo()});}finally{await s.usageTracker.flush(e.logger);}n.addContentParts(a);}}),Qee=Go({schema:{name:rp,description:"Insert, delete, or replace steps in the active session's test by index. Use parentStepIdChain to splice into nested steps (e.g. inside a conditional or module). The response includes inserted/deleted step refs with the updated active-session ids; use those ids for later run_step calls. The response always includes a recovery artifact with the full deleted and inserted payloads; only inspect it when you need to undo or inspect a mistaken splice.",inputSchema:{sessionId:z.string(),startIndex:z.number(),deleteCount:z.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z.array(z.string()).describe(Jee),targetSection:ip.default("main"),parentStepIdChain:z.array(z.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,n,o)=>{let r=vu({response:n,sessionId:t.sessionId,toolName:rp});if(!r)return;let i=await yI({project:r.storage.getProject(),storage:r.storage,orgId:r.orgId,logger:e.logger,testPath:r.relativeTestPath,envName:r.envName,saveChangesToDisk:e.saveChangesToDisk,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,mutableStepState:r.mutableStepState,params:{startIndex:t.startIndex,deleteCount:t.deleteCount,steps:t.steps,targetSection:t.targetSection,parentStepIdChain:t.parentStepIdChain,returnTest:t.returnTest}});t.steps.length>0&&bs({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let s=i.value.map(a=>a.type==="media"?{type:"media",data:a.data,mediaType:"image/jpeg"}:a);n.addContentParts(s);}}),Zee=Go({schema:{name:Xm,description:`${EA} Use step ids from the active session: the Test Content section returned by ${ic}, or the inserted/deleted refs returned by ${rp}. If you need a full updated post-splice view, set returnTest on the splice call. Do not parse the raw YAML at testFileAbsolutePath for step ids; v2 simplified test files do not store step ids on disk. IMPORTANT: do NOT run a range containing an AI Action (AI_ACTION_DYNAMIC) with this tool. AI Actions run many sub-steps and routinely take well over 60s, and MCP tool calls are capped at 60s and cancelled regardless of progress \u2014 the run is killed and its work lost. ALWAYS execute such a range with the equivalent \`momentic run-step\` CLI command in your terminal, which has no MCP tool-call timeout. When this server runs with --daemon the CLI shares this session, so pass the same sessionId; otherwise drive the whole flow over the CLI.`,inputSchema:{sessionId:z.string(),fromStep:kA,toStep:DA.optional(),targetSection:ip.default("main"),resetSession:z.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z.boolean().default(false).describe("Run this invocation without reading or writing step caches.")}},handle:async(e,t,n,o)=>{let r=vu({response:n,sessionId:t.sessionId,toolName:Xm});if(!r)return;r.controller.setOpen(),t.resetSession&&await uI({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,apiKey:hi(),baseUrl:Uo(),controller:r.controller,testContext:r.context,supportsFileOutput:e.supportsFileOutput});let i=Kee(o,e.logger,n,()=>{As.touchSession(r.sessionId);}),s=await SI({project:r.storage.getProject(),logger:e.logger,testPath:r.relativeTestPath,storage:r.storage,controller:r.controller,codeEvalTools:r.codeEvalTools,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,tracer:i,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:vo(),disableCache:t.disableCache});bs({type:"mcp:run_step_completed",test_platform:"web",status:"completed"});let a=s.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l);n.addContentParts(a);}}),ete=[xUe,vUe,wUe,IUe];var tte=[jee,$ee,Vee,zee,Xee,Zee,Qee];async function OUe({testPath:e,logger:t,project:n,storage:o,orgId:r,mutableStepState:i}){let s=await o.getTestByPath({relativeTestPath:e,logger:t}),a=s.envs?.find(u=>u.default)?.name;if(i&&i.testId!==s.id)throw new Error(`Cannot extract a module from test ${s.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:s.steps,beforeSteps:s.beforeSteps??void 0,afterSteps:s.afterSteps??void 0},c=await Bi({logger:t,orgId:r,project:n}),d=await Gd({cacheStorage:c,logger:t,schemaVersion:s.schemaVersion,stepLists:l,testId:s.id,environment:a,useSnapshotIdentityCache:n.config.fileFormat==="v2"});return {availableSteps:d.steps,baseState:{steps:d.steps,beforeSteps:d.beforeSteps??[],afterSteps:d.afterSteps??[]},cacheSaveContext:{testId:s.id,environment:a,stepCacheStorage:c}}}async function TI({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=Un();Xa(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await OUe({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:d,startIndex:u,endIndex:p}=Q9({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(R=>R.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:OK}),{module:m}=await t.createModule({name:s.name,description:s.description??"",enabled:s.enabled??true,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,steps:d,subDir:s.subDir,momenticFiles:l});if(s.startIndex===void 0)return {module:m};if(!o||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(s.moduleInputs??{}).length>0,g=(m.parameters?.length??0)>0,f;h?f=s.moduleInputs:g?f={}:f=void 0;let S={...m,type:"RESOLVED_MODULE",id:randomUUID(),steps:m.steps,inputs:f},T=cloneDeep(c.baseState);T.steps.splice(u,p-u,S),i&&(i.stepLists=T);let{environment:A,stepCacheStorage:E,testId:v}=c.cacheSaveContext,I=e.config.fileFormat==="v2",{cachesToSave:O,snapshotCachesToSave:_}=await On({stepLists:T,useSnapshotIdentityCache:I,cacheCreationParams:{orgId:a,testId:v,environment:A}});return I&&await E.saveSnapshotCacheEntries({logger:n,entries:_}),await E.saveStepCacheEntries({logger:n,entries:O}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:T,schemaVersion:at}),{module:m}}var nte=Go({schema:{name:_H,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z.string().describe(fp),description:z.string(),enabled:z.boolean().default(true),parameters:z.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z.record(z.string(),z.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z.record(z.string(),z.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z.record(z.string(),z.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,n,o)=>{let{testPath:r,...i}=t;try{let s=jZ({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await TI({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:s,saveChangesToDisk:e.saveChangesToDisk,params:i});n.addPartFromText(JSON.stringify(a.module,null,2));}catch(s){n.addError(J(s));}}});var pf=[...ete,...gI,...tte,nte,P8,U8,V8,N8];var ote=pf.map(e=>e.tool),AI=new Map(ote.map(e=>[e.schema.name,e]));async function rte(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath;await pI(e);let{context:c}=mI({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await V9({adapter:{getTool:d=>{let u=AI.get(d);if(!u)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(AI.keys()).join(", ")}`);return {name:u.schema.name,execute:async({input:p,extra:m})=>await G9({context:c,tool:u,input:p,extra:m})}}},sessionManager:As,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:DF(e)*2,onShutdown:()=>{qc();}});}async function GF(e){let{project:t,logger:n,apiKey:o,serverUrl:r,cliVersion:i,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u}=e,p=t.configFilePath;return k9({workerType:"momentic-web-mcp",configPath:p,apiKey:o,serverUrl:r,cliVersion:i,logger:n,buildDaemonArgs:({entryScript:m})=>LUe({entryScript:m,serverUrl:r,configPath:p,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u})})}async function ite(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e;zc(r),await GF(e);let{info:i,mcpLogger:s}=kF({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return Fw({context:{logger:s},info:i,tools:j9({tools:ote,resolveDaemonStateForCall:()=>GF(e),logger:s})})}var NUe=30*6e4;async function jF({options:e,toolName:t,input:n,timeoutMs:o=NUe}){zc(e.serverUrl);let r=AI.get(t);if(!r)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(AI.keys()).join(", ")}`);let i=r.schema.inputSchema.parse(n),s=await GF(e);return uF({state:s,toolName:t,input:i,timeoutMs:o})}function LUe({entryScript:e,serverUrl:t,configPath:n,alwaysSaveCache:o,noCache:r,videoDefault:i,headfulDefault:s,devicePixelRatio:a,sessionIdleTimeoutMinutes:l}){let c=[e,"mcp","--server",t,"--daemon","--config",n,"--headful-browser",s?"true":"false","--video",i?"true":"false"];return o&&c.push("--save-cache"),r&&c.push("--disable-cache"),c.push("--pixel-ratio",String(a)),l!==void 0&&c.push("--session-idle-timeout-minutes",String(l)),c}var $F=async(e,t)=>{try{let{killed:n,failed:o}=await As.killAllSessions(e);o.length>0?t.warn({failed:o,reason:e},"Some browser sessions failed to terminate on shutdown"):n.length>0&&t.info({killedCount:n.length,reason:e},"Terminated browser sessions on shutdown");}catch(n){t.warn({err:n,reason:e},"Failed to terminate browser sessions on shutdown");}};async function VF(e){let{daemon:t,logger:n}=e,o=L9.safeParse(process.env);if(t&&o.success&&o.data[kw]==="momentic-web-mcp")return rte({...e,daemonPort:o.data[Nw],daemonToken:o.data[Lw],daemonSessionId:o.data[Dw]});if(Fd(n,true),t)return await ite(e);await pI(e);let{context:r,info:i}=mI(e);return Fw({context:r,info:i,tools:pf,shutdownHandlers:[$F,qc,async()=>{await lI();}]})}var mT="3.0.1",pn=Dh({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:mT});(async()=>{try{let e=await zs(pn);e.gitBranchName&&pn.addBinding("branch",e.gitBranchName);}catch{}})();var Iu=Router();async function CI(e){return (await fg(e,pn)).map(o=>{let r=e.modules[o.moduleId];if(!r){C.warn(`Found a dangling module with ID ${o.moduleId} that could not be found on disk.`);return}return {...r,content:o}}).filter(o=>o!==void 0)}Iu.get("/",mt(async(e,t)=>{let n=et(),o=await cs(n),r=await CI(o);t.status(200).json(r);}));Iu.post("/",mt(async(e,t)=>{let n;try{n=hV.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Xa(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=et(),r=await je(o),i=r.modules;if(Object.values(i).find(l=>l.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=Mn__default.join(o.rootDir,n.folderPath??Mn__default.dirname(n.testFilePath));if(!Bo__default.existsSync(s)||!Bo__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await vR({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));Iu.get("/:moduleId/tests",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=et(),o=await je(n),r=e.params.moduleId;if(!o.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let a of Object.values(o.tests))h3(a.fullFilePath,o).has(r)&&i.push({id:a.id,name:a.name,relativePath:a.relativePath});let s={tests:i};t.status(200).json(s);}));Iu.get("/:moduleId",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await cs(et()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Cl({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));Iu.post("/:moduleId/duplicate",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=mV.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Xa(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=et(),r=await je(o),i=r.modules[e.params.moduleId];if(!i){t.status(404).json({error:"Module not found."});return}if(Object.values(r.modules).find(h=>h.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=n.sourceModuleContent;if(s.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let a=Mn__default.join(o.rootDir,Mn__default.dirname(i.relativePath));if(!Bo__default.existsSync(a)||!Bo__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=yn(n.name),c=Mn__default.join(a,`${l}.module.yaml`),d=Al({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:u}=await On({stepLists:{steps:s.steps},createNewCacheIds:true}),p={fileType:Ie.MODULE,schemaVersion:at,moduleId:d,name:n.name,description:"",enabled:true,steps:u.steps,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,defaultCacheKey:s.defaultCacheKey,defaultCacheTtl:s.defaultCacheTtl,defaultCacheAllInvocations:s.defaultCacheAllInvocations,autoAuth:s.autoAuth,advanced:s.advanced,defaultRetries:s.defaultRetries};Hs({module:p,filePath:c,projectConfig:o.config,momenticFiles:r});let m={relativeFilePath:Mn__default.relative(o.rootDir,c)};t.status(201).json(m);}));Iu.patch("/:moduleId/move",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=fV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${J(i)}`});return}let o=et();if(!(await cs(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await b3({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));Iu.patch("/:moduleId/metadata",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=gV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=et(),r=await cs(o);await T3({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var ste=Iu;var hT=Router();hT.get("/",mt(async(e,t)=>{let n=et(),o=await je(n),r=new Set;o?.tests&&Object.values(o.tests).forEach(c=>{c.labels?.forEach(d=>r.add(d));});let i=Array.from(r).sort(),s=Object.values(o.tests),a=await CI(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));hT.get("/folders",mt(async(e,t)=>{let n=et(),o=await s3(n);t.status(200).json(o);}));hT.get("/labels",mt(async(e,t)=>{let n=et(),o=await je(n),r=new Set;for(let s of Object.values(o.tests))s.labels?.forEach(a=>r.add(a));let i=Array.from(r).sort();t.status(200).json(i);}));hT.post("/in-folder",mt(async(e,t)=>{let n=lV.safeParse(e.body);if(!n.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${n.error.message}`});return}let{pathSegments:o}=n.data,r=et(),[i,s]=await Promise.all([i3(r,o),cs(r)]),a=Object.values(i.tests),l=await CI(s),c=new Set(Object.keys(i.modules)),d=l.filter(p=>c.has(p.id)),u={tests:a,modules:d};t.status(200).json(u);}));var ate=hT;var zF=Router();zF.get("/",mt((e,t)=>{let n=PR(et(),pn);t.status(200).json(n);}));zF.get("/names",mt((e,t)=>{let o=et().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var lte=zF;var cte=Router();cte.get("/",mt((e,t)=>{let n={userId:Il(),orgId:Un(),email:Mg(),name:JQ(),pylonEmailHash:XQ(),cliVersion:mT};t.status(200).json(n);}));var dte=cte;var WF="mcp-session-id",ute="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",RI=Router();function $Ue(){let e=process.env[ute];if(!e)return Ru*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(pn.warn({envVar:ute,rawValue:e,fallback:Ru},"Invalid MCP session idle timeout env var; falling back to default"),Ru*60*1e3):t*60*1e3}function VUe(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:mT},r=et(),i=hi(),s=Uo(),a=pn.child({orgId:Un(),userId:Il(),...o}),l=new Ot({baseUrl:s,apiKey:i,logger:a}),c=jy(process.env.MOMENTIC_HEADFUL_BROWSER),d=new hr(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),u=Un(),p=new Es(l,u,r);return {context:{project:r,orgId:u,logger:a,generator:d,apiClient:l,storage:p,serverId:o.serverId,extractBaseDir:gs(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:cn,knowledgeCitations:[],sessionIdleTimeoutMs:$Ue(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ri},info:o}}var rd={};RI.post("/",async(e,t)=>{let n=String(e.headers[WF]??"");try{if(n&&rd[n]){await rd[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=VUe(),i=pF(o,r,pf),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{rd[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&rd[a]&&delete rd[a],i.close().catch(()=>{});},await i.connect(s),await s.handleRequest(e,t,e.body);return}t.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});}catch{t.headersSent||t.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null});}});RI.get("/",async(e,t)=>{let n=String(e.headers[WF]??"");if(!n||!rd[n]){t.status(400).send("Invalid or missing session ID");return}await rd[n].handleRequest(e,t);});RI.delete("/",async(e,t)=>{let n=String(e.headers[WF]??"");if(!n||!rd[n]){t.status(400).send("Invalid or missing session ID");return}let o=rd[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var mte=RI;var hte=Router();hte.get("/:id",mt(async(e,t)=>{let{id:n}=e.params;if(!n){t.status(400).json({error:"Missing ID"});return}let o=vo();if(!o){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await o.fetchOnDemandScreenshot(n);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){pn.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var gte=hte;var vI=Router();vI.get("/",mt(async(e,t)=>{let n=new Map;for(let i of await dL())n.set(i.configFilePath,i);let o=et();n.set(o.configFilePath,o);let r=[...n.values()].map(i=>({name:i.config.name,configFilePath:i.configFilePath,fileFormat:i.config.fileFormat}));t.status(200).json(r);}));vI.get("/current",mt((e,t)=>{let n=et();if(!n){t.status(404).json({error:"No project found."});return}let o={name:n.config.name,configFilePath:n.configFilePath,fileFormat:n.config.fileFormat};t.status(200).json(o);}));vI.post("/set",mt(async(e,t)=>{let n;try{n=bV.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}pn.info("Setting local project");try{let o=await tn({configFilePath:n.configFilePath}),r=vo();if(!r)throw new Error("API client is not initialized.");await Lg({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var fte=vI;var yte=Router();yte.get("/",mt((e,t)=>{let n=et(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var Ste=yte;var zl=Router();zl.post("/",mt(async(e,t)=>{let n;try{n=uV.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=et(),r=await uT({project:o,input:n});bs({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(o){if(o instanceof dt){t.status(400).json({error:o.message});return}throw o}}));zl.get("/:testPath",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=await cs(o),i;try{i=await Oi(Mn__default.join(o.rootDir,n),pn,r),await(await Bi({logger:pn,orgId:Un(),project:o})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(a=>a.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:pn,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await _R({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:at,momenticFiles:r,project:o});}catch(s){pn.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));zl.get("/:testPath/metadata",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=Mn__default.join(o.rootDir,n);if(!Bo__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=Bo__default.statSync(r),s=await zs(pn),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));zl.patch("/:testPath/metadata",mt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=dV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:eb(e.params.testPath,n,et()).newRelativeTestPath};t.status(200).json(r);}));zl.patch("/:testPath",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=cV.parse(e.body);}catch(m){pn.warn({err:m},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${m}`});return}pn.info({testPath:n},"Save received");let r=et(),i=await cs(r),s;try{s=Mc(n,r);}catch(m){t.status(400).json({error:`Existing test file on disk is invalid: ${m}`});return}let a=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:d,snapshotCachesToSave:u}=await On({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:Un(),testId:s.id,environment:s.envs?.find(m=>m.default)?.name}}),p=await Bi({logger:pn,orgId:Un(),project:r});a&&await p.saveSnapshotCacheEntries({logger:pn,entries:u}),await p.saveStepCacheEntries({logger:pn,entries:d}),sL({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));zl.patch("/:testPath/environments",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=SV.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}eb(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},et()),t.status(201).json({message:"ok"});}));zl.patch("/:testPath/move",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=yV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${J(i)}`});return}let r=et();if(!Bo__default.existsSync(Mn__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await A3({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));zl.delete("/:testPath",mt((e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=Mn__default.join(o.rootDir,n);if(!Bo__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}Bo__default.unlinkSync(r),t.status(200).json({message:"ok"});}));zl.post("/:testPath/duplicate",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=pV.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Xa(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=et(),i=Mn__default.join(r.rootDir,n);if(!Bo__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await je(r),a;try{a=await Oi(i,pn,s);}catch(h){t.status(400).send({error:h.message});return}let l=Al({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=no.parse({...a,name:o.name,id:l}),{stepsToSave:d}=await On({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),u=Mn__default.dirname(i),p=Mn__default.join(u,`${o.name}.test.yaml`);Gs({test:{fileType:Ie.TEST,...c,...d},filePath:p,projectConfig:r.config,momenticFiles:s});let m={relativeFilePath:Mn__default.relative(r.rootDir,p)};bs({type:"test_editor:test_duplicated"}),t.status(201).json(m);}));var bte=zl;var fm=(r=>(r.SUCCEEDED="succeeded",r.FAILED="failed",r.BLOCKED="blocked",r.UNTESTABLE="untestable",r))(fm||{});function gf(e,t={}){let n=[];(t.includeTitle??true)&&n.push("# Explorer agent result"),n.push(Tte({titleBase:"## Changed user journeys",emptyMessage:"_No user-facing journeys identified in this diff window._",items:e.changedJourneys,format:YUe})),n.push(Tte({titleBase:"## Proposed test plans",emptyMessage:"_No test plans proposed._",items:e.testPlans,format:JUe})),e.buildSummary&&n.push(XUe(e.buildSummary));let o=Ate(e.notes,"## Notes");return o&&n.push(o),n.join(`
7474
+ `)}));}}),Xee=Go({schema:{name:dy,description:"Execute a step without adding it to the test. IMPORTANT: do NOT preview an AI Action (AI_ACTION_DYNAMIC) step with this tool. AI Actions run many sub-steps and routinely take well over 60s, and MCP tool calls are capped at 60s and cancelled regardless of progress \u2014 the step is killed and its work lost. ALWAYS preview an AI Action with the equivalent `momentic preview-step` CLI command in your terminal, which has no MCP tool-call timeout. When this server runs with --daemon the CLI shares this session, so pass the same sessionId; otherwise drive the whole flow over the CLI.",inputSchema:{sessionId:z.string(),step:z.string().describe(Jee)}},handle:async(e,t,n,o)=>{let{sessionId:r,step:i}=t,s=vu({response:n,sessionId:r,toolName:dy});if(!s)return;s.controller.setOpen();let a;try{a=await fI({project:s.storage.getProject(),step:i,logger:e.logger,storage:s.storage,controller:s.controller,codeEvalTools:s.codeEvalTools,orgId:s.orgId,sessionId:s.sessionId,testContext:s.context,supportsFileOutput:e.supportsFileOutput,tempCaches:s.tempCaches,usageTracker:s.usageTracker,apiClient:vo()});}finally{await s.usageTracker.flush(e.logger);}n.addContentParts(a);}}),Qee=Go({schema:{name:rp,description:"Insert, delete, or replace steps in the active session's test by index. Use parentStepIdChain to splice into nested steps (e.g. inside a conditional or module). The response includes inserted/deleted step refs with the updated active-session ids; use those ids for later run_step calls. The response always includes a recovery artifact with the full deleted and inserted payloads; only inspect it when you need to undo or inspect a mistaken splice.",inputSchema:{sessionId:z.string(),startIndex:z.number(),deleteCount:z.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z.array(z.string()).describe(Jee),targetSection:ip.default("main"),parentStepIdChain:z.array(z.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,n,o)=>{let r=vu({response:n,sessionId:t.sessionId,toolName:rp});if(!r)return;let i=await yI({project:r.storage.getProject(),storage:r.storage,orgId:r.orgId,logger:e.logger,testPath:r.relativeTestPath,envName:r.envName,saveChangesToDisk:e.saveChangesToDisk,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,mutableStepState:r.mutableStepState,params:{startIndex:t.startIndex,deleteCount:t.deleteCount,steps:t.steps,targetSection:t.targetSection,parentStepIdChain:t.parentStepIdChain,returnTest:t.returnTest}});t.steps.length>0&&bs({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let s=i.value.map(a=>a.type==="media"?{type:"media",data:a.data,mediaType:"image/jpeg"}:a);n.addContentParts(s);}}),Zee=Go({schema:{name:Xm,description:`${EA} Use step ids from the active session: the Test Content section returned by ${ic}, or the inserted/deleted refs returned by ${rp}. If you need a full updated post-splice view, set returnTest on the splice call. Do not parse the raw YAML at testFileAbsolutePath for step ids; v2 simplified test files do not store step ids on disk. IMPORTANT: do NOT run a range containing an AI Action (AI_ACTION_DYNAMIC) with this tool. AI Actions run many sub-steps and routinely take well over 60s, and MCP tool calls are capped at 60s and cancelled regardless of progress \u2014 the run is killed and its work lost. ALWAYS execute such a range with the equivalent \`momentic run-step\` CLI command in your terminal, which has no MCP tool-call timeout. When this server runs with --daemon the CLI shares this session, so pass the same sessionId; otherwise drive the whole flow over the CLI.`,inputSchema:{sessionId:z.string(),fromStep:kA,toStep:DA.optional(),targetSection:ip.default("main"),resetSession:z.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z.boolean().default(false).describe("Run this invocation without reading or writing step caches.")}},handle:async(e,t,n,o)=>{let r=vu({response:n,sessionId:t.sessionId,toolName:Xm});if(!r)return;r.controller.setOpen(),t.resetSession&&await uI({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,apiKey:hi(),baseUrl:Uo(),controller:r.controller,testContext:r.context,supportsFileOutput:e.supportsFileOutput});let i=Kee(o,e.logger,n,()=>{As.touchSession(r.sessionId);}),s=await SI({project:r.storage.getProject(),logger:e.logger,testPath:r.relativeTestPath,storage:r.storage,controller:r.controller,codeEvalTools:r.codeEvalTools,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,tracer:i,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:vo(),disableCache:t.disableCache});bs({type:"mcp:run_step_completed",test_platform:"web",status:"completed"});let a=s.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l);n.addContentParts(a);}}),ete=[xUe,vUe,wUe,IUe];var tte=[jee,$ee,Vee,zee,Xee,Zee,Qee];async function OUe({testPath:e,logger:t,project:n,storage:o,orgId:r,mutableStepState:i}){let s=await o.getTestByPath({relativeTestPath:e,logger:t}),a=s.envs?.find(u=>u.default)?.name;if(i&&i.testId!==s.id)throw new Error(`Cannot extract a module from test ${s.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:s.steps,beforeSteps:s.beforeSteps??void 0,afterSteps:s.afterSteps??void 0},c=await Bi({logger:t,orgId:r,project:n}),d=await Gd({cacheStorage:c,logger:t,schemaVersion:s.schemaVersion,stepLists:l,testId:s.id,environment:a,useSnapshotIdentityCache:n.config.fileFormat==="v2"});return {availableSteps:d.steps,baseState:{steps:d.steps,beforeSteps:d.beforeSteps??[],afterSteps:d.afterSteps??[]},cacheSaveContext:{testId:s.id,environment:a,stepCacheStorage:c}}}async function TI({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=Un();Xa(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await OUe({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:d,startIndex:u,endIndex:p}=Q9({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(R=>R.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:OK}),{module:m}=await t.createModule({name:s.name,description:s.description??"",enabled:s.enabled??true,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,steps:d,subDir:s.subDir,momenticFiles:l});if(s.startIndex===void 0)return {module:m};if(!o||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(s.moduleInputs??{}).length>0,g=(m.parameters?.length??0)>0,f;h?f=s.moduleInputs:g?f={}:f=void 0;let S={...m,type:"RESOLVED_MODULE",id:randomUUID(),steps:m.steps,inputs:f},T=cloneDeep(c.baseState);T.steps.splice(u,p-u,S),i&&(i.stepLists=T);let{environment:A,stepCacheStorage:E,testId:v}=c.cacheSaveContext,I=e.config.fileFormat==="v2",{cachesToSave:O,snapshotCachesToSave:_}=await On({stepLists:T,useSnapshotIdentityCache:I,cacheCreationParams:{orgId:a,testId:v,environment:A}});return I&&await E.saveSnapshotCacheEntries({logger:n,entries:_}),await E.saveStepCacheEntries({logger:n,entries:O}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:T,schemaVersion:at}),{module:m}}var nte=Go({schema:{name:_H,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z.string().describe(fp),description:z.string(),enabled:z.boolean().default(true),parameters:z.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z.record(z.string(),z.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z.record(z.string(),z.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z.record(z.string(),z.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,n,o)=>{let{testPath:r,...i}=t;try{let s=jZ({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await TI({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:s,saveChangesToDisk:e.saveChangesToDisk,params:i});n.addPartFromText(JSON.stringify(a.module,null,2));}catch(s){n.addError(J(s));}}});var pf=[...ete,...gI,...tte,nte,P8,U8,V8,N8];var ote=pf.map(e=>e.tool),AI=new Map(ote.map(e=>[e.schema.name,e]));async function rte(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath;await pI(e);let{context:c}=mI({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await V9({adapter:{getTool:d=>{let u=AI.get(d);if(!u)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(AI.keys()).join(", ")}`);return {name:u.schema.name,execute:async({input:p,extra:m})=>await G9({context:c,tool:u,input:p,extra:m})}}},sessionManager:As,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:DF(e)*2,onShutdown:()=>{qc();}});}async function GF(e){let{project:t,logger:n,apiKey:o,serverUrl:r,cliVersion:i,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u}=e,p=t.configFilePath;return k9({workerType:"momentic-web-mcp",configPath:p,apiKey:o,serverUrl:r,cliVersion:i,logger:n,buildDaemonArgs:({entryScript:m})=>LUe({entryScript:m,serverUrl:r,configPath:p,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u})})}async function ite(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e;zc(r),await GF(e);let{info:i,mcpLogger:s}=kF({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return Fw({context:{logger:s},info:i,tools:j9({tools:ote,resolveDaemonStateForCall:()=>GF(e),logger:s})})}var NUe=30*6e4;async function jF({options:e,toolName:t,input:n,timeoutMs:o=NUe}){zc(e.serverUrl);let r=AI.get(t);if(!r)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(AI.keys()).join(", ")}`);let i=r.schema.inputSchema.parse(n),s=await GF(e);return uF({state:s,toolName:t,input:i,timeoutMs:o})}function LUe({entryScript:e,serverUrl:t,configPath:n,alwaysSaveCache:o,noCache:r,videoDefault:i,headfulDefault:s,devicePixelRatio:a,sessionIdleTimeoutMinutes:l}){let c=[e,"mcp","--server",t,"--daemon","--config",n,"--headful-browser",s?"true":"false","--video",i?"true":"false"];return o&&c.push("--save-cache"),r&&c.push("--disable-cache"),c.push("--pixel-ratio",String(a)),l!==void 0&&c.push("--session-idle-timeout-minutes",String(l)),c}var $F=async(e,t)=>{try{let{killed:n,failed:o}=await As.killAllSessions(e);o.length>0?t.warn({failed:o,reason:e},"Some browser sessions failed to terminate on shutdown"):n.length>0&&t.info({killedCount:n.length,reason:e},"Terminated browser sessions on shutdown");}catch(n){t.warn({err:n,reason:e},"Failed to terminate browser sessions on shutdown");}};async function VF(e){let{daemon:t,logger:n}=e,o=L9.safeParse(process.env);if(t&&o.success&&o.data[kw]==="momentic-web-mcp")return rte({...e,daemonPort:o.data[Nw],daemonToken:o.data[Lw],daemonSessionId:o.data[Dw]});if(Fd(n,true),t)return await ite(e);await pI(e);let{context:r,info:i}=mI(e);return Fw({context:r,info:i,tools:pf,shutdownHandlers:[$F,qc,async()=>{await lI();}]})}var mT="3.0.2",pn=Dh({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:mT});(async()=>{try{let e=await zs(pn);e.gitBranchName&&pn.addBinding("branch",e.gitBranchName);}catch{}})();var Iu=Router();async function CI(e){return (await fg(e,pn)).map(o=>{let r=e.modules[o.moduleId];if(!r){C.warn(`Found a dangling module with ID ${o.moduleId} that could not be found on disk.`);return}return {...r,content:o}}).filter(o=>o!==void 0)}Iu.get("/",mt(async(e,t)=>{let n=et(),o=await cs(n),r=await CI(o);t.status(200).json(r);}));Iu.post("/",mt(async(e,t)=>{let n;try{n=hV.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Xa(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=et(),r=await je(o),i=r.modules;if(Object.values(i).find(l=>l.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=Mn__default.join(o.rootDir,n.folderPath??Mn__default.dirname(n.testFilePath));if(!Bo__default.existsSync(s)||!Bo__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await vR({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));Iu.get("/:moduleId/tests",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=et(),o=await je(n),r=e.params.moduleId;if(!o.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let a of Object.values(o.tests))h3(a.fullFilePath,o).has(r)&&i.push({id:a.id,name:a.name,relativePath:a.relativePath});let s={tests:i};t.status(200).json(s);}));Iu.get("/:moduleId",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await cs(et()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Cl({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));Iu.post("/:moduleId/duplicate",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=mV.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Xa(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=et(),r=await je(o),i=r.modules[e.params.moduleId];if(!i){t.status(404).json({error:"Module not found."});return}if(Object.values(r.modules).find(h=>h.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=n.sourceModuleContent;if(s.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let a=Mn__default.join(o.rootDir,Mn__default.dirname(i.relativePath));if(!Bo__default.existsSync(a)||!Bo__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=yn(n.name),c=Mn__default.join(a,`${l}.module.yaml`),d=Al({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:u}=await On({stepLists:{steps:s.steps},createNewCacheIds:true}),p={fileType:Ie.MODULE,schemaVersion:at,moduleId:d,name:n.name,description:"",enabled:true,steps:u.steps,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,defaultCacheKey:s.defaultCacheKey,defaultCacheTtl:s.defaultCacheTtl,defaultCacheAllInvocations:s.defaultCacheAllInvocations,autoAuth:s.autoAuth,advanced:s.advanced,defaultRetries:s.defaultRetries};Hs({module:p,filePath:c,projectConfig:o.config,momenticFiles:r});let m={relativeFilePath:Mn__default.relative(o.rootDir,c)};t.status(201).json(m);}));Iu.patch("/:moduleId/move",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=fV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${J(i)}`});return}let o=et();if(!(await cs(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await b3({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));Iu.patch("/:moduleId/metadata",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=gV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=et(),r=await cs(o);await T3({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var ste=Iu;var hT=Router();hT.get("/",mt(async(e,t)=>{let n=et(),o=await je(n),r=new Set;o?.tests&&Object.values(o.tests).forEach(c=>{c.labels?.forEach(d=>r.add(d));});let i=Array.from(r).sort(),s=Object.values(o.tests),a=await CI(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));hT.get("/folders",mt(async(e,t)=>{let n=et(),o=await s3(n);t.status(200).json(o);}));hT.get("/labels",mt(async(e,t)=>{let n=et(),o=await je(n),r=new Set;for(let s of Object.values(o.tests))s.labels?.forEach(a=>r.add(a));let i=Array.from(r).sort();t.status(200).json(i);}));hT.post("/in-folder",mt(async(e,t)=>{let n=lV.safeParse(e.body);if(!n.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${n.error.message}`});return}let{pathSegments:o}=n.data,r=et(),[i,s]=await Promise.all([i3(r,o),cs(r)]),a=Object.values(i.tests),l=await CI(s),c=new Set(Object.keys(i.modules)),d=l.filter(p=>c.has(p.id)),u={tests:a,modules:d};t.status(200).json(u);}));var ate=hT;var zF=Router();zF.get("/",mt((e,t)=>{let n=PR(et(),pn);t.status(200).json(n);}));zF.get("/names",mt((e,t)=>{let o=et().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var lte=zF;var cte=Router();cte.get("/",mt((e,t)=>{let n={userId:Il(),orgId:Un(),email:Mg(),name:JQ(),pylonEmailHash:XQ(),cliVersion:mT};t.status(200).json(n);}));var dte=cte;var WF="mcp-session-id",ute="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",RI=Router();function $Ue(){let e=process.env[ute];if(!e)return Ru*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(pn.warn({envVar:ute,rawValue:e,fallback:Ru},"Invalid MCP session idle timeout env var; falling back to default"),Ru*60*1e3):t*60*1e3}function VUe(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:mT},r=et(),i=hi(),s=Uo(),a=pn.child({orgId:Un(),userId:Il(),...o}),l=new Ot({baseUrl:s,apiKey:i,logger:a}),c=jy(process.env.MOMENTIC_HEADFUL_BROWSER),d=new hr(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),u=Un(),p=new Es(l,u,r);return {context:{project:r,orgId:u,logger:a,generator:d,apiClient:l,storage:p,serverId:o.serverId,extractBaseDir:gs(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:cn,knowledgeCitations:[],sessionIdleTimeoutMs:$Ue(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ri},info:o}}var rd={};RI.post("/",async(e,t)=>{let n=String(e.headers[WF]??"");try{if(n&&rd[n]){await rd[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=VUe(),i=pF(o,r,pf),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{rd[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&rd[a]&&delete rd[a],i.close().catch(()=>{});},await i.connect(s),await s.handleRequest(e,t,e.body);return}t.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});}catch{t.headersSent||t.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null});}});RI.get("/",async(e,t)=>{let n=String(e.headers[WF]??"");if(!n||!rd[n]){t.status(400).send("Invalid or missing session ID");return}await rd[n].handleRequest(e,t);});RI.delete("/",async(e,t)=>{let n=String(e.headers[WF]??"");if(!n||!rd[n]){t.status(400).send("Invalid or missing session ID");return}let o=rd[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var mte=RI;var hte=Router();hte.get("/:id",mt(async(e,t)=>{let{id:n}=e.params;if(!n){t.status(400).json({error:"Missing ID"});return}let o=vo();if(!o){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await o.fetchOnDemandScreenshot(n);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){pn.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var gte=hte;var vI=Router();vI.get("/",mt(async(e,t)=>{let n=new Map;for(let i of await dL())n.set(i.configFilePath,i);let o=et();n.set(o.configFilePath,o);let r=[...n.values()].map(i=>({name:i.config.name,configFilePath:i.configFilePath,fileFormat:i.config.fileFormat}));t.status(200).json(r);}));vI.get("/current",mt((e,t)=>{let n=et();if(!n){t.status(404).json({error:"No project found."});return}let o={name:n.config.name,configFilePath:n.configFilePath,fileFormat:n.config.fileFormat};t.status(200).json(o);}));vI.post("/set",mt(async(e,t)=>{let n;try{n=bV.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}pn.info("Setting local project");try{let o=await tn({configFilePath:n.configFilePath}),r=vo();if(!r)throw new Error("API client is not initialized.");await Lg({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var fte=vI;var yte=Router();yte.get("/",mt((e,t)=>{let n=et(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var Ste=yte;var zl=Router();zl.post("/",mt(async(e,t)=>{let n;try{n=uV.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=et(),r=await uT({project:o,input:n});bs({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(o){if(o instanceof dt){t.status(400).json({error:o.message});return}throw o}}));zl.get("/:testPath",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=await cs(o),i;try{i=await Oi(Mn__default.join(o.rootDir,n),pn,r),await(await Bi({logger:pn,orgId:Un(),project:o})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(a=>a.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:pn,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await _R({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:at,momenticFiles:r,project:o});}catch(s){pn.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));zl.get("/:testPath/metadata",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=Mn__default.join(o.rootDir,n);if(!Bo__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=Bo__default.statSync(r),s=await zs(pn),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));zl.patch("/:testPath/metadata",mt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=dV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:eb(e.params.testPath,n,et()).newRelativeTestPath};t.status(200).json(r);}));zl.patch("/:testPath",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=cV.parse(e.body);}catch(m){pn.warn({err:m},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${m}`});return}pn.info({testPath:n},"Save received");let r=et(),i=await cs(r),s;try{s=Mc(n,r);}catch(m){t.status(400).json({error:`Existing test file on disk is invalid: ${m}`});return}let a=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:d,snapshotCachesToSave:u}=await On({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:Un(),testId:s.id,environment:s.envs?.find(m=>m.default)?.name}}),p=await Bi({logger:pn,orgId:Un(),project:r});a&&await p.saveSnapshotCacheEntries({logger:pn,entries:u}),await p.saveStepCacheEntries({logger:pn,entries:d}),sL({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));zl.patch("/:testPath/environments",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=SV.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}eb(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},et()),t.status(201).json({message:"ok"});}));zl.patch("/:testPath/move",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=yV.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${J(i)}`});return}let r=et();if(!Bo__default.existsSync(Mn__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await A3({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));zl.delete("/:testPath",mt((e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=et(),r=Mn__default.join(o.rootDir,n);if(!Bo__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}Bo__default.unlinkSync(r),t.status(200).json({message:"ok"});}));zl.post("/:testPath/duplicate",mt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=pV.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Xa(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=et(),i=Mn__default.join(r.rootDir,n);if(!Bo__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await je(r),a;try{a=await Oi(i,pn,s);}catch(h){t.status(400).send({error:h.message});return}let l=Al({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=no.parse({...a,name:o.name,id:l}),{stepsToSave:d}=await On({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),u=Mn__default.dirname(i),p=Mn__default.join(u,`${o.name}.test.yaml`);Gs({test:{fileType:Ie.TEST,...c,...d},filePath:p,projectConfig:r.config,momenticFiles:s});let m={relativeFilePath:Mn__default.relative(r.rootDir,p)};bs({type:"test_editor:test_duplicated"}),t.status(201).json(m);}));var bte=zl;var fm=(r=>(r.SUCCEEDED="succeeded",r.FAILED="failed",r.BLOCKED="blocked",r.UNTESTABLE="untestable",r))(fm||{});function gf(e,t={}){let n=[];(t.includeTitle??true)&&n.push("# Explorer agent result"),n.push(Tte({titleBase:"## Changed user journeys",emptyMessage:"_No user-facing journeys identified in this diff window._",items:e.changedJourneys,format:YUe})),n.push(Tte({titleBase:"## Proposed test plans",emptyMessage:"_No test plans proposed._",items:e.testPlans,format:JUe})),e.buildSummary&&n.push(XUe(e.buildSummary));let o=Ate(e.notes,"## Notes");return o&&n.push(o),n.join(`
7475
7475
 
7476
7476
  `)}function YUe(e){let t=e.evidence.length>0?`
7477
7477
 
@@ -8510,7 +8510,7 @@ ${s.stack}`),l.status(500).send(`Internal Server Error: ${s.message}`);}),e){let
8510
8510
  ${e.length===0?"(none)":r.join(`
8511
8511
  `)}
8512
8512
  </inScopeTests>
8513
- `}function xVe(e){return ` - ${e.path} (${e.status}, +${e.insertions??0} -${e.deletions??0})`}var sd={searchObservedTests:"search_observed_tests",searchSegments:"search_segments",getObservedTest:"get_observed_test",getSegment:"get_segment",listObservedTestsForSegment:"list_observed_tests_for_segment",addSelectedTest:"add_selected_test",removeSelectedTest:"remove_selected_test",viewSelectedTests:"view_selected_tests",submit:"submit_selection"},Goe="ai-select",xB=200,joe=z.object({query:z.string().min(1).max(2e3).describe("Natural-language query against App Graph node text."),k:z.number().int().min(1).max(50).describe("Max results to return. Start small (5-10) when narrowing a surface; raise for broad/exploratory searches.")}),_B=z.object({id:z.string().min(1)}),_Ve=z.object({testId:z.string().min(1).describe("Test id (from search_observed_tests results or the <inScopeTests> list)."),testName:z.string().min(1).max(500).optional().describe("Short human-readable test name (used in view_selected_tests output and logs)."),rationale:z.string().min(1).max(500).describe("Why this test should run for this diff. Reference the changed surface, not the test id."),relevanceLabel:nP.describe("high = directly exercises the changed surface; medium = adjacent feature coverage; low = broad smoke or fallback.")}),PVe=z.object({testId:z.string().min(1),reason:z.string().min(1).max(500).optional().describe("Why this test is being removed (for logs).")}),OVe=z.object({userSummary:z.string().min(1).max(2e3).describe("Plain-English summary written directly to the developer reading their CI output. 2-3 sentences in human terms about what kinds of tests were picked and why, referencing product surface (e.g. 'payment method UI', 'invoice export', 'sign-in retry') \u2014 not segment ids, observed-test ids, or tool calls. Example: 'Picked 14 tests covering payment-method UI because this PR changes the card-entry form. Also added 3 checkout end-to-end tests since payments are central to that flow.'"),anchorSegmentIds:z.array(z.string().min(1)).max(20).default([]).describe("Segment ids the agent identified as directly relevant to the change. Recorded in the plan for context.")});function $oe(e){let t={[sd.searchObservedTests]:tool({description:"Hybrid (vector + lexical) search over previously-observed tests in the App Graph. Use to find tests by name, goal, test path, or description.",inputSchema:joe,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.searchObservedTests({repository:e.repository,query:o.query,k:o.k});return re(V({text:JSON.stringify(r.results,null,2),section:"observed-test search results"}))},toModelOutput:({output:o})=>o}),[sd.searchSegments]:tool({description:"Hybrid (vector + lexical) search over App Graph segments. Use to find feature surfaces, journeys, or product areas relevant to the diff.",inputSchema:joe,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.searchSegments({repository:e.repository,query:o.query,k:o.k});return re(V({text:JSON.stringify(r.results,null,2),section:"segment search results"}))},toModelOutput:({output:o})=>o}),[sd.getObservedTest]:tool({description:"Fetch the full record for an observed test by test id (matched realizations, coverage edges, recent execution metadata).",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.getObservedTest(o.id);return re(V({text:JSON.stringify(r,null,2),section:`observed-test ${o.id}`}))},toModelOutput:({output:o})=>o}),[sd.getSegment]:tool({description:"Fetch a segment's realizations and feature memberships. Use to understand a candidate anchor segment before submitting.",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.getSegment(o.id);return re(V({text:JSON.stringify(r,null,2),section:`segment ${o.id}`}))},toModelOutput:({output:o})=>o}),[sd.listObservedTestsForSegment]:tool({description:"List observed tests whose realizations match a given segment. Useful for enumerating coverage of an anchor segment.",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.listObservedTestsForSegment(o.id);return re(V({text:JSON.stringify(r,null,2),section:`observed tests for segment ${o.id}`}))},toModelOutput:({output:o})=>o}),...MVe(e),[sd.addSelectedTest]:tool({description:`Add a test to the running selection list (or replace the entry if it is already on the list). Use throughout the investigation as evidence accumulates \u2014 do not wait until the end. Capped at ${xB} entries; remove low-value picks with remove_selected_test before adding more if you hit the cap.`,inputSchema:_Ve,execute:async o=>(e.toolCallCount+=1,e.inScopeTestIds.has(o.testId)?e.selectedTestCandidates.size>=xB&&!e.selectedTestCandidates.has(o.testId)?re(V({text:JSON.stringify({ok:false,reason:`selection list is at the ${xB}-test cap; remove a lower-value pick first`,total:e.selectedTestCandidates.size},null,2),section:"selection rejected"})):(e.selectedTestCandidates.set(o.testId,{testId:o.testId,testName:o.testName,rationale:o.rationale,relevanceLabel:o.relevanceLabel}),re(V({text:JSON.stringify({ok:true,testId:o.testId,total:e.selectedTestCandidates.size},null,2),section:"selection updated"}))):re(V({text:JSON.stringify({ok:false,reason:`testId "${o.testId}" is not in <inScopeTests>; only those tests can run, so this pick would be discarded. Find the matching test in <inScopeTests> by path/name and add it with that exact testId.`,testId:o.testId},null,2),section:"selection rejected"}))),toModelOutput:({output:o})=>o}),[sd.removeSelectedTest]:tool({description:"Remove a test from the running selection list. Use when new evidence shows a previously-added test is not relevant after all.",inputSchema:PVe,execute:async o=>{e.toolCallCount+=1;let r=e.selectedTestCandidates.delete(o.testId);return re(V({text:JSON.stringify({removed:r,testId:o.testId,total:e.selectedTestCandidates.size},null,2),section:"selection updated"}))},toModelOutput:({output:o})=>o}),[sd.viewSelectedTests]:tool({description:"View the current state of the selection list. Returns every added test with its rationale and relevance label, plus the running anchor-segment set. Use to check progress before submitting.",inputSchema:z.object({}),execute:async()=>{e.toolCallCount+=1;let o=Array.from(e.selectedTestCandidates.values()).map(r=>({testId:r.testId,testName:r.testName,rationale:r.rationale,relevanceLabel:r.relevanceLabel}));return re(V({text:JSON.stringify({selectedTests:o,anchorSegmentIds:Array.from(e.anchorSegmentIds),total:o.length},null,2),section:"current selection"}))},toModelOutput:({output:o})=>o}),[sd.submit]:tool({description:"Finalize the selection: provide the userSummary and the anchor-segment set. The list of tests itself is the running state built with add_selected_test / remove_selected_test \u2014 do not pass it here. Call this exactly once when investigation is complete.",inputSchema:OVe,execute:async o=>{for(let r of o.anchorSegmentIds)e.anchorSegmentIds.add(r);return e.finalSubmission={userSummary:o.userSummary,candidates:Array.from(e.selectedTestCandidates.values()),anchorSegmentIds:Array.from(e.anchorSegmentIds)},re(V({text:JSON.stringify({accepted:e.finalSubmission.candidates.length,anchorSegmentIds:e.finalSubmission.anchorSegmentIds},null,2),section:"selection submitted"}))},toModelOutput:({output:o})=>o})},n={};for(let[o,r]of Object.entries(t)){let i=yr({tool:r,name:o,logger:e.logger,logPrefix:"AI Select ",agentName:Goe});n[o]=fi({tool:i,name:o,spanName:`ai_select.tool.${o}`,attributes:{"momentic.agent_name":Goe}});}return n}function MVe(e){let t={};for(let n of Ib){let o=n(e.codeReadingContext);t[o.name]=NVe({tool:o.tool,context:e});}return t}function NVe(e){let t=e.tool,n=t.execute?.bind(t);return n?{...t,execute:async(o,r)=>(e.context.toolCallCount+=1,n(o,r))}:t}var Voe="gpt-5.5-2026-04-23",GVe=25,jVe=18e4,$Ve=4096;async function zoe(e){let t=e.logger.bindings().sessionId??randomUUID$1(),n=e.logger.child({agentName:"ai-select",sessionId:t}),o=await mkdtemp(ya.join(tmpdir$1(),`momentic-ai-select-${t}-`)),r={apiClient:e.apiClient,logger:n,repository:e.repository,codeReadingContext:{logger:n,repoRoot:e.repoRoot,baseSha:e.diff.mergeBase,headSha:e.diff.headSha,spoolDir:o},toolCallCount:0,inScopeTestIds:new Set(e.candidateTests.map(p=>p.testId)),selectedTestCandidates:new Map,anchorSegmentIds:new Set,finalSubmission:null},i=$oe(r),s=e.diff.changedFiles.reduce((p,m)=>p+(m.insertions??0)+(m.deletions??0),0),a={logger:n,streamType:"github-pr-summary",sessionId:t},l=e.generator.getAzureOpenAIModelFactory(a),c=e.generator.getOpenAIModelFactory({...a,useOpenAIResponsesWebSocket:true}),d=Date.now();try{let p=Di({providerFallback:{logger:n,providers:[{id:"azure",model:l(Voe)},{id:"openai",model:c(Voe)}]},system:Uoe(s),messages:[{role:"user",content:Hoe(e.diff,e.budgetCap,e.candidateTests)}],tools:i,stopWhen:[stepCountIs(GVe),hasToolCall("submit_selection")],maxOutputTokens:$Ve,abortSignal:AbortSignal.timeout(jVe),providerOptions:{openai:{reasoningEffort:"low",store:!1,textVerbosity:"low"},azure:{reasoningEffort:"low",store:!1,textVerbosity:"low"}}});await Promise.all([p.text,p.steps,p.response]);}catch(p){return n.error({err:p},"ai-select agent stream errored or was aborted"),{submission:null,reason:`AI selection failed: ${J(p)}`,toolCallCount:r.toolCallCount,durationMs:Date.now()-d}}finally{await rm$1(o,{recursive:true,force:true}).catch(p=>{n.warn({err:p,spoolDir:o},"failed to clean ai-select spool dir");});}let u=Date.now()-d;return r.finalSubmission?{submission:r.finalSubmission,toolCallCount:r.toolCallCount,durationMs:u}:(n.error({toolCallCount:r.toolCallCount,durationMs:u},"ai-select agent finished without calling submit_selection; falling open"),{submission:null,reason:"AI selection finished without returning a result.",toolCallCount:r.toolCallCount,durationMs:u})}var ad="/v1/app-graph",Ax=class{constructor(t,n){this.apiClient=t;this.logger=n;}async claim(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return lG.parse(n)}async getPlan(t){let n=new URLSearchParams({repository:t.repository,headSha:t.headSha}),o=await this.apiClient.sendRequest(`${ad}/ai-select/plan?${n.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return dG.parse(o)}async finalize(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return cG.parse(n)}async release(t){await this.apiClient.sendRequest(`${ad}/ai-select/release`,{method:"POST",body:{selectionPlanKey:t},retries:1,requestTimeoutMs:5e3}).catch(n=>{this.logger.warn({err:n,selectionPlanKey:t},"Failed to release ai-select lock");});}async searchObservedTests(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/search/observed-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rP.parse(n)}async searchSegments(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/search/segments`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rP.parse(n)}async getObservedTest(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/observed-tests/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return uG.parse(n)}async getSegment(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/segments/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return pG.parse(n)}async listObservedTestsForSegment(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{method:"GET",retries:2,requestTimeoutMs:1e4});return mG.parse(n)}},VVe=2e3,Woe=12e4;async function qoe(e){let t=Date.now()+(e.timeoutMs??Woe),n=0;for(;;){n+=1;let o=await e.client.claim(e.claim);if(o.status==="claimed")return {kind:"claimed",selectionPlanKey:o.selectionPlanKey,trackId:o.trackId};if(o.status==="ready")return {kind:"ready",plan:o.plan,planId:o.planId};if(Date.now()>=t)throw new Error(`ai-select: timed out waiting for plan after ${e.timeoutMs??Woe}ms`);e.logger.info({attempt:n,claimedBy:o.claimedBy},"ai-select plan computing on another shard; polling"),await Xe(o.retryAfterMs??VVe);}}async function zVe(e){try{return await bx({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return vB({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function PB(e){let t=new Ax(e.apiClient,e.logger),n;try{n=await bx({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger});}catch(a){let l=a instanceof Em?a.message:`Could not assemble diff against base ref: ${J(a)}.`,c=Foe({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),d=c?await vB({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:c,logger:e.logger}):null;if(d)n=d;else {let u=e.config?.onBaseUnavailable??"use-head";switch(u){case "fail":throw new Em(`AI selection base unavailable and ai.select.onBaseUnavailable is "fail": ${l}`);case "run-all":return {kind:"run-all",reason:l,diff:null};case "use-head":{let p=await zVe(e);if(p===null)return {kind:"run-all",reason:`Could not assemble diff against the HEAD commit's parent: ${l}`,diff:null};n=p;break}default:return ot(u)}}}if(n.changedFiles.length===0)return {kind:"run-none",reason:"No source-code changes detected between base and head.",diff:n};let o=await qoe({client:t,claim:{repository:e.repository,headSha:n.headSha,baseRef:n.baseRef,changedFiles:n.changedFiles.map(a=>a.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(o.kind==="ready")return {kind:"ready",plan:o.plan,planId:o.planId,mode:"SELECTED",diff:n};let r=await zoe({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:e.repoRoot,diff:n,budgetCap:e.budgetCap,candidateTests:e.candidateTests});if(r.submission===null)return await t.release(o.selectionPlanKey),{kind:"run-all",reason:r.reason,diff:n};let i=new Map(e.candidateTests.map(a=>[a.testId,a.testPath])),s=r.submission.candidates.map(a=>({testId:a.testId,testPath:i.get(a.testId)??null,name:a.testName??a.testId,rationale:a.rationale,relevanceLabel:a.relevanceLabel}));try{let a=await t.finalize({selectionPlanKey:o.selectionPlanKey,repository:e.repository,headSha:n.headSha,mode:"SELECTED",userSummary:r.submission.userSummary,toolCallCount:r.toolCallCount,selectedTests:s,anchorSegmentIds:r.submission.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap}});return {kind:"ready",plan:a.plan,planId:a.planId,mode:"SELECTED",diff:n}}catch(a){return e.logger.error({err:a},"ai-select finalize failed; falling back to run-all"),await t.release(o.selectionPlanKey),{kind:"run-all",reason:`Could not record selection plan: ${J(a)}.`,diff:n}}}var Koe=()=>process.exit(130),Yoe=()=>process.exit(143);process.on("SIGINT",Koe);process.on("SIGTERM",Yoe);function ET(){process.off("SIGINT",Koe),process.off("SIGTERM",Yoe);}function Cm(e){let t=e??YVe();return Joe()&&t===1&&C.warn("Running with --pixel-ratio=1 on a Retina screen. Viewport calculations may be incorrect; omit the flag to auto-detect."),t}function YVe(){let e=Joe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var Joe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function Ex(e,t=true,n=false){let o=ZVe(e),r=await XVe.which(o[0],true),i=o.slice(1),s=JVe.exec(QVe(r),i,{delay:100,silent:n});if(t)return s}var Xoe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function eze(e,{context:t}){return e instanceof Bn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${Xoe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${J(e)}`}function Qoe(e){return e instanceof Bn?e.rawError.includes("Resource not accessible by integration")?Xoe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":J(e)}function Zoe(e,t){C.error(eze(e,t));}function Cx(e){return ere(e,"runs","run")}function OB(e){return ere(e,"run-groups","run group")}function ere(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?nze(o,t,n):o;if(!z.guid().safeParse(r).success)throw new Error(`Invalid ${n} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function nze(e,t,n){let o;try{o=new URL(e);}catch{throw new Error(`Invalid ${n} URL: ${e}`)}let r=o.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${n} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function Rx(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(oze()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Tn="3.0.1",{checkCLIVersion:Si,getLatestCLIVersion:tre}=DQ({packageName:"momentic",currentVersion:Tn,changelogUrl:"https://github.com/momentic-ai/cli/blob/main/CHANGELOG.md",updateCommand:"npx momentic@latest upgrade"});sxe("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:ld,setAnalyticsIdentity:MB,shutdownAnalytics:nre}=FE({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:GQ});async function ft(){try{await Re(Promise.all([kE(),wt.flush(),nre(),VE()]),{milliseconds:5e3});}catch{}}async function wf({tests:e,momenticFiles:t,project:n,yes:o,include:r,exclude:i,labels:s,logger:a}){let l=new Set;if(e&&e.length>0){let d=e.some(p=>Bo__default.existsSync(p)),u=cwd();d?(u!==n.rootDir&&a.warn(`Test paths resolve against the current directory ('${u}'), not the project root ('${n.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!Bo__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let m;try{m=Bo__default.statSync(p).isDirectory();}catch(g){a.warn({err:g},`Skipping path ${p} because it cannot be read`);return}let h=Mn__default.resolve(p);Object.values(t.tests).filter(g=>m?g.fullFilePath.startsWith(h):g.fullFilePath===h).forEach(g=>{l.add(g.fullFilePath);});})):Object.values(t.tests).forEach(p=>{e.some(m=>p.relativePath.includes(m))&&l.add(p.fullFilePath);});}else !o&&!await ko("No test paths or substrings were provided. Do you want to run all tests?")&&(a.error("Cancelled by user."),process.exit(1)),Object.values(t.tests).forEach(u=>{l.add(u.fullFilePath);});for(let d of l){let u=Mn__default.relative(n.rootDir,d);r&&!r.some(p=>new RegExp(p).test(u))&&l.delete(d),i&&i.some(p=>new RegExp(p).test(u))&&l.delete(d);}let c=Array.from(l).map(async d=>{try{let u=await Oi(d,xe,t);if(Pg.gt(u.schemaVersion,at)&&a.warn(`Test ${d} has schema version ${u.schemaVersion}, which is greater than what is currently supported by this SDK. Please update your momentic package version to avoid unexpected behavior.`),s&&s.length>0){let p=u.labels||[];if(!s.some(h=>p.includes(h)))return null}return {...u,fullFilePath:d,relativeFilePath:Mn__default.relative(n.rootDir,d)}}catch(u){a.error(`Failed to read and resolve test at '${d}': ${J(u)}`),process.exit(1);}});return compact(await Promise.all(c))}function rre({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:n=false,skipQuarantined:o=false}){let[r,i]=partition(e,l=>l.disabled),[s,a]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:o?s:[],testsToRun:n?[]:a,quarantinedTestsToRun:o?[]:s}}function ire({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:n,testInputMatrix:o}){let r=[],i=(s,a,l)=>{o?o.forEach((c,d)=>{r.push({inputs:c,inputIndex:d,testDefinition:s,quarantined:a,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:s,quarantined:a,quarantinedMetadata:l});};return e.forEach(s=>i(s,false)),t.forEach(s=>i(s,true,n[s.id])),r}async function sre({orgId:e,codeEvalTools:t,logger:n,outputDefinitions:o,testContext:r}){let i={};for(let s of o){let{name:a,value:l}=s;i[a]=await Dr({orgId:e,s:l,localTools:t,logger:n,context:r});}return i}var are=new Set;async function lre({baseUrl:e,envName:t,devicePixelRatio:n,apiClient:o,test:r,storageClient:i,codeEvalTools:s,generator:a,orgId:l,variables:c,logger:d,customHeaders:u,testInputs:p,localBrowserConfig:m,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:S,browserTypeOverride:T,attemptedRemoteBrowserProviders:A}){let E={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:xe,mode:"runner"},{controller:v,context:I}=await iT({baseUrl:e,envName:t,test:r,variables:c,logger:d,orgId:l,localBrowserConfig:m,aiSettings:h,customHeaders:u,codeEvalTools:s,storage:i,enricher:new Uc(E,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:T,callbacks:{onNetworkPage:O=>f.onNetworkPage(O),onNetworkLogs:O=>f.onNetworkLogs(O)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:O,timestamp:_})=>{f.setActiveVideo(O,_);}}:void 0,validateBrowserType:O=>{RS(O)||(xe.warn({browserType:O,testName:r.name},"Browser required by test does not appear to be installed"),!are.has(O)&&(are.add(O),C.warn(`Browser ${O} does not appear to be installed. Run '${ap(O)}' if you hit launch errors.`)));},createRemoteBrowserConnection:m.remoteBrowser?async()=>{let O=await o.createRemoteBrowserConnection({runId:S,attemptedProviders:A});return O.provider&&A?.push(O.provider),O}:void 0});try{await rI({orgId:l,test:r,testInputs:p,localTools:s,logger:d,context:I});}catch(O){try{await v.browser.cleanup();}catch(_){d.error({err:_},"Failed to clean up browser after test input resolution failed");}throw O instanceof sT&&(C.error(O.message),process.exit(1)),O}return {controller:v,context:I}}function cre({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!Tc){let o="This test is ineligible for failure recovery since this does not appear to be a CI environment";return n.warn(o),C.debug(o),false}return true}async function dre({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,stepCallbacks:r}){let{orgId:i,userId:s,runId:a}=n,{runTracer:l,runGroupTracer:c,project:d,apiClient:u}=o,{controller:p,context:m,codeEvalTools:h,storageClient:g,logger:f,usageTracker:S,tracer:T}=t,{test:A,orgSettings:E}=e;f.info(`Running test '${A.name}' locally (run link: https://app.momentic.ai/runs/${a})`);let v={controller:p,storage:g,usageTracker:S,context:m,logger:f,codeEvalTools:h},I={orgId:i,userId:s,runId:a,testMetadata:A,steps:A.steps,beforeSteps:A.beforeSteps,afterSteps:A.afterSteps,orgSettings:E},O={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await cre({testAdvancedSettings:A.advanced,orgSettings:E.ai,logger:f})};return dee({fixtures:v,inputs:I,options:O,callbacks:{step:r??{},test:{onTestComplete:async()=>{await p.browser.cleanup(),await h.dispose();}}},testParams:{attemptTracer:T},runParams:{runTracer:l,runGroupTracer:c,project:d,apiClient:u,captureEvent:ld,abortSignal:o.abortSignal}})}async function ure(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await uze(e)}catch(r){Md(r);let i="Fatal error running test";n.error({err:r},i),C.error({err:r},i);let s=op(r);return {results:[],parameters:e,failureReason:"UnknownError",failureDetails:{errorMessage:s.message,errorStack:s.stack},status:"FAILED",attempts:0,test:t,filePath:t.relativeFilePath,startedAt:o,lastAttemptStartedAt:o,finishedAt:new Date,outputs:{},quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata}}}async function uze(e){let{testDefinition:t,project:n,apiClient:o,orgId:r,userId:i,urlOverride:s,runGroupTracer:a,logger:l,gitMetadata:c,cacheOptions:d,runId:u,testInputs:p,quarantined:m,quarantinedMetadata:h,usageTracker:g}=e,f=new vg(o,r),S=Vp({logger:l,orgId:r,client:o,gitMetadata:c,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:d.noCache,isolateCachesByEnvironment:n.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),{envName:T,resolvedEnv:A,environmentVariables:E,baseUrl:v}=XR({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:B=>Bp(B,n,l)}),I=await Gd({cacheStorage:S,logger:l,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:T,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),O=I.steps,_=I.beforeSteps??void 0,R=I.afterSteps??void 0,x=await a.startRun({logger:l,runId:u,originalSteps:{beforeSteps:t.beforeSteps,steps:t.steps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:v,environmentName:T,schemaVersion:t.schemaVersion,resolvedInputs:p,quarantined:m,quarantinedReason:h?.quarantinedReason,aiSettings:e.project.config.ai}),P=l.child(x.loggerBindings||{});Object.entries(x.envVarBindings||{}).forEach(([B,G])=>{E[B]=G;});let H=await pze({...e,variables:E,envName:T,resolvedEnv:A,baseUrl:v,storageClient:f,tracer:x,runGroupTracer:a,logger:P,cacheStorage:S,stepsWithCaches:O,beforeStepsWithCaches:_,afterStepsWithCaches:R,usageTracker:g});return await x.finish({logger:l,status:H.status,finishedAt:H.finishedAt,failureDetails:H.failureDetails,failureReason:H.failureReason,isFlake:H.isFlake,failureRecoveryDetails:H.failureRecoveryDetails}),{runId:x.runId,...H}}async function pze(e){let{testDefinition:t,stepsWithCaches:n,beforeStepsWithCaches:o,afterStepsWithCaches:r,project:i,regenerateGoldenFiles:s,apiClient:a,generator:l,baseUrl:c,storageClient:d,orgId:u,userId:p,envName:m,urlOverride:h,customHeaders:g,testInputs:f,variables:S,resolvedEnv:T,retriesOverride:A,devicePixelRatio:E,logUpdate:v,tracer:I,runGroupTracer:O,logger:_,cacheStorage:R,gitMetadata:x,quarantined:P,quarantinedMetadata:H,usageTracker:B}=e,G=i.config.ai?.aiFailureAnalysis??false,ie=new Date,Z=new Sg(i,a,s),j={...i.config},z={envName:m,urlOverride:h,customHeaders:g,testInputs:f},q={...i.config.browser||{},...T?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},X=q.remoteBrowser===true,te=[],U,se=Math.abs(A??t.retries??i.config.retries??1),ce=[];_.info({...x,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let ke=0;ke<=se;ke++){let Me=randomUUID(),we=await I.startAttempt(Me),tt=_.child(we.loggerBindings||{}),Be={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(o),afterSteps:cloneDeep(r)};ke!==0&&v("RETRY",`attempt ${ke+1}/${se+1}`);let ae=new Date,Fe=new Gc({httpClient:new ui({baseUrl:a.baseUrl,apiKey:a.apiKey,logger:tt,mode:"runner"}),fakerSeed:j.advanced?.fakerConstantSeed?$y:void 0});try{let{controller:st,context:Ke}=await lre({tracer:we,runId:I.runId,baseUrl:c,envName:m,apiClient:a,devicePixelRatio:E,logger:tt,storageClient:d,codeEvalTools:Fe,test:Be,generator:l,orgId:u,variables:S,customHeaders:g,testInputs:f,localBrowserConfig:q,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:te,aiSettings:{...i.config.ai||{},...Be.advanced||{}},visualDiffScreenshotStorage:Z});e.abortSignal&&(e.abortSignal.aborted?st.executeAbortController.abort():e.abortSignal.addEventListener("abort",()=>{st.executeAbortController.abort();},{once:!0})),U=await dre({attemptMetadata:{attemptNumber:ke+1,orgId:u,userId:p,runId:I.runId},attemptFixtures:{logger:tt,storageClient:d,usageTracker:B,codeEvalTools:Fe,context:Ke,controller:st,tracer:we},attemptInputs:{test:Be,orgSettings:j},runFixtures:{runTracer:I,runGroupTracer:O,project:i,apiClient:a,abortSignal:e.abortSignal},stepCallbacks:{onStepStart:e.onStepStart}});let De=new Date,Ei={logger:_,cacheStorage:R,orgId:u,testId:t.id,environment:m,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(o),afterSteps:cloneDeep(r)},updatedStepsWithCaches:{steps:Be.steps,beforeSteps:Be.beforeSteps,afterSteps:Be.afterSteps}};await Pp({logger:_,cacheStorage:R,orgId:u,testId:t.id,environment:m,stepLists:Ei.updatedStepsWithCaches,useSnapshotIdentityCache:i.config.fileFormat==="v2"}),U?.status==="PASSED"?await Op(Ei):U?.status==="FAILED"&&ke===se&&await Zh(Ei),await we.finish({logger:tt,result:U}),ce.unshift(U.status);let Ci=await sre({orgId:u,codeEvalTools:Fe,logger:tt,outputDefinitions:t.outputs??[],testContext:Ke}),Zs=IG(ce),Fa=ke+1;if(U.status!=="FAILED")return {...U,runAttemptId:Me,parameters:z,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:De,attempts:Fa,baseUrl:c,outputs:Ci,isFlake:Zs,quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X};let Hi=U.failedStepResult,fo=Hi?.message||"Unknown failure",Xn=Hi?.failureReason??lH(fo)??"UnknownError",xo=tt.child({failureReason:Xn,errorMessage:fo,numAttempts:(se+1).toString(),name:Be.name});if(ke<se){xo.warn(`Retrying failed execution attempt for run: ${fo}`);continue}xo.error(`Test failed after all exhausting attempts: ${fo}`);let $r=new Error(fo),Qn={errorMessage:fo,errorStack:$r.stack},$o;if(i.config.ai?.classification?.enabled===!0){let sn=Hi?.failureClassification;sn||(e.onStepStart?.("Classifying failure"),sn=await Uw({runTracer:I,runGroupTracer:O,outputDir:e.outputDir,orgId:u,project:i,generator:l,apiClient:a,logger:_,testPlatform:"web",aiSettings:i.config.ai,captureEvent:ld,abortSignal:e.abortSignal,failedStepMessage:Hi?.message})),sn&&($o=sn.classification.category,Xn=sn.classification.category,Qn.classification={reason:sn.classification.category,secondaryCategories:sn.classification.secondaryCategories,summary:sn.classification.reasoning,recoverable:sn.classification.recoverable,confidence:sn.classification.confidence,action:sn.action,citations:sn.classification.citations,source:"v2"});}else if(G){let sn;try{if(U.results&&U.results.length>0){e.onStepStart?.("Classifying failure");let{classification:Rs,aiFailureReason:L}=await WY({logger:tt,browserStateStorage:we,generator:l,fullResults:U,failureReason:Xn,error:$r,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});sn=Rs,$o=L;}}catch(Rs){tt.warn({err:Rs},"Failed to classify test results");}sn&&(Qn.classification=sn,Xn=$o??Xn,Qn.classification.source="v1");}return {...U,runAttemptId:Me,parameters:z,failureDetails:Qn,failureReason:Xn,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:De,attempts:ke+1,baseUrl:c,outputs:Ci,quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X}}catch(st){let Ke=`Encountered fatal platform error while running test '${Be.name}'`;tt.error({err:st},Ke),C.error({err:st},Ke);let De=op(st);return await we.finish({logger:tt,result:{status:"FAILED"}}),{status:"FAILED",failureDetails:{errorMessage:De.message,errorStack:De.stack},failureReason:"InternalPlatformError",runAttemptId:Me,results:[],parameters:z,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:new Date,attempts:ke+1,baseUrl:c,outputs:{},quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X}}}throw new Error("This code should not be reachable")}function kB(e){return createHash("sha1").update(e).digest("hex")}var hze=["tab","view","mode","step"],gze=[/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i,/^(?=.*\d)[A-Za-z0-9_-]{16,256}$/,/^\d{3,32}$/,/^[0-9A-HJKMNP-TV-Z]{26}$/];function fze(e){return gze.some(t=>t.test(e))}function pre(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??hze),i=n.pathname.split("/").map(c=>c.length>0&&fze(c)?"{id}":c).join("/"),s=[],a=Array.from(n.searchParams.keys()).sort();for(let c of a){if(!o.has(c))continue;let d=n.searchParams.getAll(c).sort();for(let u of d)s.push(`${encodeURIComponent(c)}=${encodeURIComponent(u)}`);}let l=s.length>0?`?${s.join("&")}`:"";return `${n.protocol}//${n.host}${i}${l}`}var yze=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),Sze=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,bze=[/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,/\b[0-9a-f]{12,64}\b/gi,/\b[0-9A-HJKMNP-TV-Z]{26}\b/g,/\b\d{5,}\b/g,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,16}\b/g],mre=new Set(["h1","h2","h3","h4","h5","h6"]),Tze=new Set(["input","select","textarea"]);function Aze(e){let t=e;for(let n of bze)t=t.replace(n,"{id}");return t}function hre(e){return Aze(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function Eze(e){let t=e.length;return t<=4?"txt:xs":t<=16?"txt:s":t<=64?"txt:m":t<=256?"txt:l":"txt:xl"}function Cze(e,t){return e==="href"?t.startsWith("#")?"href:hash":t.startsWith("/")?"href:rel":/^https?:\/\//.test(t)?"href:abs":/^(mailto|tel):/.test(t)?`href:${t.split(":")[0]}`:"href:other":Sze.test(t)?"@gen":hre(t)}function gre(e,t,n){let o=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),s=`<${o}@${i}`;if(r!==void 0&&(s+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>yze.has(c.toLowerCase())).sort();for(let c of l){let d=c.toLowerCase();if(d==="role")continue;let u=e.attributes[c];if(u===void 0)continue;let p=Cze(d,u);s+=` ${d}=${p}`;}}n.tokens.push(s);let a=e.text?.trim();a!==void 0&&a.length>0&&(r==="button"||r==="link"||r==="heading"||o==="button"||o==="a"||o==="label"||mre.has(o)?n.tokens.push(`label=${hre(a)}`):n.tokens.push(Eze(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(Tze.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(mre.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])gre(l,t+1,n);}function fre(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return gre(e,0,t),{tokens:t.tokens,counts:t.counts}}function yre(e,t){let n=new TextEncoder().encode(e),o=n.length,r=Math.floor(o/4),i=t>>>0,s=3432918353,a=461845907;for(let u=0;u<r;u++){let p=u*4,m=n[p]|n[p+1]<<8|n[p+2]<<16|n[p+3]<<24;m=Math.imul(m,s),m=m<<15|m>>>17,m=Math.imul(m,a),i^=m,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=o&3,d=r*4;return c===3&&(l^=n[d+2]<<16),c>=2&&(l^=n[d+1]<<8),c>=1&&(l^=n[d],l=Math.imul(l,s),l=l<<15|l>>>17,l=Math.imul(l,a),i^=l),i^=o,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var vx=128,Rze=4294967295,vze=(()=>{let e=[];for(let t=0;t<vx;t++)e.push(yre(`perm:${t}`,0));return e})();function Sre(e){let t=new Uint32Array(vx);for(let o=0;o<vx;o++)t[o]=Rze;let n=new Set(e);for(let o of n)for(let r=0;r<vx;r++){let i=yre(o,vze[r]);i<t[r]&&(t[r]=i);}return t}var Ize=32;function DB(e){let t=pre(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=fre(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=Sre(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,Ize),minhash:Array.from(i),canonicalUrl:t}}var xze=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),wn="\uFFFD",M;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z";})(M||(M={}));var bi={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function wx(e){return e>=55296&&e<=57343}function bre(e){return e>=56320&&e<=57343}function Tre(e,t){return (e-55296)*1024+9216+t}function Ix(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function xx(e){return e>=64976&&e<=65007||xze.has(e)}var ee;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text";})(ee||(ee={}));var Pze=65536,_x=class{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=false,this.lastChunkWritten=false,this.endOfChunkHit=false,this.bufferWaterline=Pze,this.isEol=false,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1;}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,n){let{line:o,col:r,offset:i}=this,s=r+n,a=i+n;return {code:t,startLine:o,endLine:o,startCol:s,endCol:s,startOffset:a,endOffset:a}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)));}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos;}_processSurrogate(t){if(this.pos!==this.html.length-1){let n=this.html.charCodeAt(this.pos+1);if(bre(n))return this.pos++,this._addGap(),Tre(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,M.EOF;return this._err(ee.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0);}write(t,n){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=n;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,n){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(n)return this.html.startsWith(t,this.pos);for(let o=0;o<t.length;o++)if((this.html.charCodeAt(this.pos+o)|32)!==t.charCodeAt(o))return false;return true}peek(t){let n=this.pos+t;if(n>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,M.EOF;let o=this.html.charCodeAt(n);return o===M.CARRIAGE_RETURN?M.LINE_FEED:o}advance(){if(this.pos++,this.isEol&&(this.isEol=false,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,M.EOF;let t=this.html.charCodeAt(this.pos);return t===M.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,M.LINE_FEED):t===M.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,wx(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===M.LINE_FEED||t===M.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){Ix(t)?this._err(ee.controlCharacterInInputStream):xx(t)&&this._err(ee.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var Gt;(function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION";})(Gt||(Gt={}));function Px(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}var Mze=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function Are(e){return e>=55296&&e<=57343||e>1114111?65533:Mze.get(e)??e}function Ere(e){let t=atob(e),n=t.length&-2,o=new Uint16Array(n/2);for(let r=0,i=0;r<n;r+=2){let s=t.charCodeAt(r),a=t.charCodeAt(r+1);o[i++]=s|a<<8;}return o}var FB=Ere("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var Hr;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.FLAG13=8192]="FLAG13",e[e.BRANCH_LENGTH=8064]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE";})(Hr||(Hr={}));var Jn;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z";})(Jn||(Jn={}));var Cre=32;function BB(e){return e>=Jn.ZERO&&e<=Jn.NINE}function Nze(e){return e>=Jn.UPPER_A&&e<=Jn.UPPER_F||e>=Jn.LOWER_A&&e<=Jn.LOWER_F}function Lze(e){return e>=Jn.UPPER_A&&e<=Jn.UPPER_Z||e>=Jn.LOWER_A&&e<=Jn.LOWER_Z||BB(e)}function kze(e){return e===Jn.EQUALS||Lze(e)}var rr;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity";})(rr||(rr={}));var Kl;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(Kl||(Kl={}));var Ox=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=rr.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Kl.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=rr.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case rr.EntityStart:return t.charCodeAt(n)===Jn.NUM?(this.state=rr.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=rr.NamedEntity,this.stateNamedEntity(t,n));case rr.NumericStart:return this.stateNumericStart(t,n);case rr.NumericDecimal:return this.stateNumericDecimal(t,n);case rr.NumericHex:return this.stateNumericHex(t,n);case rr.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|Cre)===Jn.LOWER_X?(this.state=rr.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=rr.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(BB(o)||Nze(o)){let r=o<=Jn.NINE?o-Jn.ZERO:(o|Cre)-Jn.LOWER_A+10;this.result=this.result*16+r,this.consumed++,n++;}else return this.emitNumericEntity(o,3)}return -1}stateNumericDecimal(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(BB(o))this.result=this.result*10+(o-Jn.ZERO),this.consumed++,n++;else return this.emitNumericEntity(o,2)}return -1}emitNumericEntity(t,n){if(this.consumed<=n)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===Jn.SEMI)this.consumed+=1;else if(this.decodeMode===Kl.Strict)return 0;return this.emitCodePoint(Are(this.result),this.consumed),this.errors&&(t!==Jn.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&Hr.FLAG13){let a=(r&Hr.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Hr.JUMP_TABLE;if(t.charCodeAt(n)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}for(;this.runConsumed<a;){if(n>=t.length)return -1;let l=this.runConsumed-1,c=o[this.treeIndex+1+(l>>1)],d=l%2===0?c&255:c>>8&255;if(t.charCodeAt(n)!==d)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(a>>1),r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===Jn.SEMI&&i!==0&&r&Hr.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=Dze(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===Kl.Attribute&&(i===0||kze(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14,i!==0){if(s===Jn.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Kl.Strict&&!(r&Hr.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}n++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:n}=this,o=(n[t]&Hr.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,o,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,o){let{decodeTree:r}=this;return this.emitCodePoint(n===1?r[t]&~(Hr.VALUE_LENGTH|Hr.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case rr.NamedEntity:return this.result!==0&&(this.decodeMode!==Kl.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case rr.NumericDecimal:return this.emitNumericEntity(0,2);case rr.NumericHex:return this.emitNumericEntity(0,3);case rr.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case rr.EntityStart:return 0}}};function Dze(e,t,n,o){let r=(t&Hr.BRANCH_LENGTH)>>7,i=t&Hr.JUMP_TABLE;if(r===0)return i!==0&&o===i?n:-1;if(i){let c=o-i;return c<0||c>=r?-1:e[n+c]-1}let s=r+1>>1,a=0,l=r-1;for(;a<=l;){let c=a+l>>>1,d=c>>1,p=e[n+d]>>(c&1)*8&255;if(p<o)a=c+1;else if(p>o)l=c-1;else return e[n+s+c]}return -1}var he;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/";})(he||(he={}));var cd;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size";})(cd||(cd={}));var Ti;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Ti||(Ti={}));var Y;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp";})(Y||(Y={}));var y;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP";})(y||(y={}));var Fze=new Map([[Y.A,y.A],[Y.ADDRESS,y.ADDRESS],[Y.ANNOTATION_XML,y.ANNOTATION_XML],[Y.APPLET,y.APPLET],[Y.AREA,y.AREA],[Y.ARTICLE,y.ARTICLE],[Y.ASIDE,y.ASIDE],[Y.B,y.B],[Y.BASE,y.BASE],[Y.BASEFONT,y.BASEFONT],[Y.BGSOUND,y.BGSOUND],[Y.BIG,y.BIG],[Y.BLOCKQUOTE,y.BLOCKQUOTE],[Y.BODY,y.BODY],[Y.BR,y.BR],[Y.BUTTON,y.BUTTON],[Y.CAPTION,y.CAPTION],[Y.CENTER,y.CENTER],[Y.CODE,y.CODE],[Y.COL,y.COL],[Y.COLGROUP,y.COLGROUP],[Y.DD,y.DD],[Y.DESC,y.DESC],[Y.DETAILS,y.DETAILS],[Y.DIALOG,y.DIALOG],[Y.DIR,y.DIR],[Y.DIV,y.DIV],[Y.DL,y.DL],[Y.DT,y.DT],[Y.EM,y.EM],[Y.EMBED,y.EMBED],[Y.FIELDSET,y.FIELDSET],[Y.FIGCAPTION,y.FIGCAPTION],[Y.FIGURE,y.FIGURE],[Y.FONT,y.FONT],[Y.FOOTER,y.FOOTER],[Y.FOREIGN_OBJECT,y.FOREIGN_OBJECT],[Y.FORM,y.FORM],[Y.FRAME,y.FRAME],[Y.FRAMESET,y.FRAMESET],[Y.H1,y.H1],[Y.H2,y.H2],[Y.H3,y.H3],[Y.H4,y.H4],[Y.H5,y.H5],[Y.H6,y.H6],[Y.HEAD,y.HEAD],[Y.HEADER,y.HEADER],[Y.HGROUP,y.HGROUP],[Y.HR,y.HR],[Y.HTML,y.HTML],[Y.I,y.I],[Y.IMG,y.IMG],[Y.IMAGE,y.IMAGE],[Y.INPUT,y.INPUT],[Y.IFRAME,y.IFRAME],[Y.KEYGEN,y.KEYGEN],[Y.LABEL,y.LABEL],[Y.LI,y.LI],[Y.LINK,y.LINK],[Y.LISTING,y.LISTING],[Y.MAIN,y.MAIN],[Y.MALIGNMARK,y.MALIGNMARK],[Y.MARQUEE,y.MARQUEE],[Y.MATH,y.MATH],[Y.MENU,y.MENU],[Y.META,y.META],[Y.MGLYPH,y.MGLYPH],[Y.MI,y.MI],[Y.MO,y.MO],[Y.MN,y.MN],[Y.MS,y.MS],[Y.MTEXT,y.MTEXT],[Y.NAV,y.NAV],[Y.NOBR,y.NOBR],[Y.NOFRAMES,y.NOFRAMES],[Y.NOEMBED,y.NOEMBED],[Y.NOSCRIPT,y.NOSCRIPT],[Y.OBJECT,y.OBJECT],[Y.OL,y.OL],[Y.OPTGROUP,y.OPTGROUP],[Y.OPTION,y.OPTION],[Y.P,y.P],[Y.PARAM,y.PARAM],[Y.PLAINTEXT,y.PLAINTEXT],[Y.PRE,y.PRE],[Y.RB,y.RB],[Y.RP,y.RP],[Y.RT,y.RT],[Y.RTC,y.RTC],[Y.RUBY,y.RUBY],[Y.S,y.S],[Y.SCRIPT,y.SCRIPT],[Y.SEARCH,y.SEARCH],[Y.SECTION,y.SECTION],[Y.SELECT,y.SELECT],[Y.SOURCE,y.SOURCE],[Y.SMALL,y.SMALL],[Y.SPAN,y.SPAN],[Y.STRIKE,y.STRIKE],[Y.STRONG,y.STRONG],[Y.STYLE,y.STYLE],[Y.SUB,y.SUB],[Y.SUMMARY,y.SUMMARY],[Y.SUP,y.SUP],[Y.TABLE,y.TABLE],[Y.TBODY,y.TBODY],[Y.TEMPLATE,y.TEMPLATE],[Y.TEXTAREA,y.TEXTAREA],[Y.TFOOT,y.TFOOT],[Y.TD,y.TD],[Y.TH,y.TH],[Y.THEAD,y.THEAD],[Y.TITLE,y.TITLE],[Y.TR,y.TR],[Y.TRACK,y.TRACK],[Y.TT,y.TT],[Y.U,y.U],[Y.UL,y.UL],[Y.SVG,y.SVG],[Y.VAR,y.VAR],[Y.WBR,y.WBR],[Y.XMP,y.XMP]]);function Rm(e){var t;return (t=Fze.get(e))!==null&&t!==void 0?t:y.UNKNOWN}var be=y,Rre={[he.HTML]:new Set([be.ADDRESS,be.APPLET,be.AREA,be.ARTICLE,be.ASIDE,be.BASE,be.BASEFONT,be.BGSOUND,be.BLOCKQUOTE,be.BODY,be.BR,be.BUTTON,be.CAPTION,be.CENTER,be.COL,be.COLGROUP,be.DD,be.DETAILS,be.DIR,be.DIV,be.DL,be.DT,be.EMBED,be.FIELDSET,be.FIGCAPTION,be.FIGURE,be.FOOTER,be.FORM,be.FRAME,be.FRAMESET,be.H1,be.H2,be.H3,be.H4,be.H5,be.H6,be.HEAD,be.HEADER,be.HGROUP,be.HR,be.HTML,be.IFRAME,be.IMG,be.INPUT,be.LI,be.LINK,be.LISTING,be.MAIN,be.MARQUEE,be.MENU,be.META,be.NAV,be.NOEMBED,be.NOFRAMES,be.NOSCRIPT,be.OBJECT,be.OL,be.P,be.PARAM,be.PLAINTEXT,be.PRE,be.SCRIPT,be.SECTION,be.SELECT,be.SOURCE,be.STYLE,be.SUMMARY,be.TABLE,be.TBODY,be.TD,be.TEMPLATE,be.TEXTAREA,be.TFOOT,be.TH,be.THEAD,be.TITLE,be.TR,be.TRACK,be.UL,be.WBR,be.XMP]),[he.MATHML]:new Set([be.MI,be.MO,be.MN,be.MS,be.MTEXT,be.ANNOTATION_XML]),[he.SVG]:new Set([be.TITLE,be.FOREIGN_OBJECT,be.DESC]),[he.XLINK]:new Set,[he.XML]:new Set,[he.XMLNS]:new Set},CT=new Set([be.H1,be.H2,be.H3,be.H4,be.H5,be.H6]);new Set([Y.STYLE,Y.SCRIPT,Y.XMP,Y.IFRAME,Y.NOEMBED,Y.NOFRAMES,Y.PLAINTEXT]);var k;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND";})(k||(k={}));var Gr={DATA:k.DATA,RCDATA:k.RCDATA,RAWTEXT:k.RAWTEXT,SCRIPT_DATA:k.SCRIPT_DATA,PLAINTEXT:k.PLAINTEXT,CDATA_SECTION:k.CDATA_SECTION};function Uze(e){return e>=M.DIGIT_0&&e<=M.DIGIT_9}function RT(e){return e>=M.LATIN_CAPITAL_A&&e<=M.LATIN_CAPITAL_Z}function Hze(e){return e>=M.LATIN_SMALL_A&&e<=M.LATIN_SMALL_Z}function qu(e){return Hze(e)||RT(e)}function vre(e){return qu(e)||Uze(e)}function Mx(e){return e+32}function Ire(e){return e===M.SPACE||e===M.LINE_FEED||e===M.TABULATION||e===M.FORM_FEED}function wre(e){return Ire(e)||e===M.SOLIDUS||e===M.GREATER_THAN_SIGN}function Gze(e){return e===M.NULL?ee.nullCharacterReference:e>1114111?ee.characterReferenceOutsideUnicodeRange:wx(e)?ee.surrogateCharacterReference:xx(e)?ee.noncharacterCharacterReference:Ix(e)||e===M.CARRIAGE_RETURN?ee.controlCharacterReference:null}var vT=class{constructor(t,n){this.options=t,this.handler=n,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=k.DATA,this.returnState=k.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new _x(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new Ox(FB,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ee.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(ee.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=Gze(o);r&&this._err(r,1);}}:void 0);}_err(t,n=0){var o,r;(r=(o=this.handler).onParseError)===null||r===void 0||r.call(o,this.preprocessor.getError(t,n));}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=true;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t);}this.inLoop=false;}}pause(){this.paused=true;}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=false,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.());}write(t,n,o){this.active=true,this.preprocessor.write(t,n),this._runParsingLoop(),this.paused||o?.();}insertHtmlAtCurrentPos(t){this.active=true,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop();}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=false,true):false}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let n=0;n<t;n++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,n){return this.preprocessor.startsWith(t,n)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:Gt.START_TAG,tagName:"",tagID:y.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:Gt.END_TAG,tagName:"",tagID:y.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:Gt.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:Gt.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,n){this.currentCharacterToken={type:t,chars:n,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,n;let o=this.currentToken;if(Px(o,this.currentAttr.name)===null){if(o.attrs.push(this.currentAttr),o.location&&this.currentLocation){let r=(t=(n=o.location).attrs)!==null&&t!==void 0?t:n.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(ee.duplicateAttribute);}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset);}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1);}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=Rm(t.tagName),t.type===Gt.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ee.endTagWithAttributes),t.selfClosing&&this._err(ee.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk();}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk();}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk();}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case Gt.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Gt.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Gt.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null;}}_emitEOFToken(){let t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:Gt.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,n);}_emitCodePoint(t){let n=Ire(t)?Gt.WHITESPACE_CHARACTER:t===M.NULL?Gt.NULL_CHARACTER:Gt.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(Gt.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=k.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Kl.Attribute:Kl.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===k.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===k.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===k.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case k.DATA:{this._stateData(t);break}case k.RCDATA:{this._stateRcdata(t);break}case k.RAWTEXT:{this._stateRawtext(t);break}case k.SCRIPT_DATA:{this._stateScriptData(t);break}case k.PLAINTEXT:{this._statePlaintext(t);break}case k.TAG_OPEN:{this._stateTagOpen(t);break}case k.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case k.TAG_NAME:{this._stateTagName(t);break}case k.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case k.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case k.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case k.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case k.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case k.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case k.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case k.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case k.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case k.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case k.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case k.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case k.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case k.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case k.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case k.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case k.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case k.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case k.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case k.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case k.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case k.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case k.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case k.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case k.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case k.BOGUS_COMMENT:{this._stateBogusComment(t);break}case k.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case k.COMMENT_START:{this._stateCommentStart(t);break}case k.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case k.COMMENT:{this._stateComment(t);break}case k.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case k.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case k.COMMENT_END:{this._stateCommentEnd(t);break}case k.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case k.DOCTYPE:{this._stateDoctype(t);break}case k.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case k.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case k.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case k.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case k.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case k.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case k.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case k.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case k.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case k.CDATA_SECTION:{this._stateCdataSection(t);break}case k.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case k.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case k.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case k.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.TAG_OPEN;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitCodePoint(t);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case M.AMPERSAND:{this._startCharacterReference();break}case M.LESS_THAN_SIGN:{this.state=k.RCDATA_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.RAWTEXT_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(qu(t))this._createStartTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.EXCLAMATION_MARK:{this.state=k.MARKUP_DECLARATION_OPEN;break}case M.SOLIDUS:{this.state=k.END_TAG_OPEN;break}case M.QUESTION_MARK:{this._err(ee.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);break}case M.EOF:{this._err(ee.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ee.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=k.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(qu(t))this._createEndTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.GREATER_THAN_SIGN:{this._err(ee.missingEndTagName),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ee.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.SOLIDUS:{this.state=k.SELF_CLOSING_START_TAG;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentTagToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.tagName+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateRcdataLessThanSign(t){t===M.SOLIDUS?this.state=k.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=k.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){qu(t)?(this.state=k.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=k.RCDATA,this._stateRcdata(t));}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,false))return !this._ensureHibernation();this._createEndTagToken();let n=this.currentToken;switch(n.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=k.BEFORE_ATTRIBUTE_NAME,false;case M.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=k.SELF_CLOSING_START_TAG,false;case M.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=k.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===M.SOLIDUS?this.state=k.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){qu(t)?(this.state=k.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case M.SOLIDUS:{this.state=k.SCRIPT_DATA_END_TAG_OPEN;break}case M.EXCLAMATION_MARK:{this.state=k.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=k.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){qu(t)?(this.state=k.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===M.HYPHEN_MINUS?(this.state=k.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===M.HYPHEN_MINUS?(this.state=k.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case M.HYPHEN_MINUS:{this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.GREATER_THAN_SIGN:{this.state=k.SCRIPT_DATA,this._emitChars(">");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===M.SOLIDUS?this.state=k.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:qu(t)?(this._emitChars("<"),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagOpen(t){qu(t)?(this.state=k.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(bi.SCRIPT,false)&&wre(this.preprocessor.peek(bi.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<bi.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case M.HYPHEN_MINUS:{this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.GREATER_THAN_SIGN:{this.state=k.SCRIPT_DATA,this._emitChars(">");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===M.SOLIDUS?(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(bi.SCRIPT,false)&&wre(this.preprocessor.peek(bi.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<bi.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=k.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.SOLIDUS:case M.GREATER_THAN_SIGN:case M.EOF:{this.state=k.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case M.EQUALS_SIGN:{this._err(ee.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=k.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=k.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:case M.SOLIDUS:case M.GREATER_THAN_SIGN:case M.EOF:{this._leaveAttrName(),this.state=k.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case M.EQUALS_SIGN:{this._leaveAttrName(),this.state=k.BEFORE_ATTRIBUTE_VALUE;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:{this._err(ee.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.name+=wn;break}default:this.currentAttr.name+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateAfterAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.SOLIDUS:{this.state=k.SELF_CLOSING_START_TAG;break}case M.EQUALS_SIGN:{this.state=k.BEFORE_ATTRIBUTE_VALUE;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=k.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{this.state=k.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this.state=k.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingAttributeValue),this.state=k.DATA,this.emitCurrentTagToken();break}default:this.state=k.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case M.APOSTROPHE:{this.state=k.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this._leaveAttrValue(),this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=k.DATA,this.emitCurrentTagToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:case M.EQUALS_SIGN:case M.GRAVE_ACCENT:{this._err(ee.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this._leaveAttrValue(),this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.SOLIDUS:{this._leaveAttrValue(),this.state=k.SELF_CLOSING_START_TAG;break}case M.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._err(ee.missingWhitespaceBetweenAttributes),this.state=k.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case M.GREATER_THAN_SIGN:{let n=this.currentToken;n.selfClosing=true,this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._err(ee.unexpectedSolidusInTag),this.state=k.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this.emitCurrentComment(n),this._emitEOFToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.data+=wn;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(bi.DASH_DASH,true)?(this._createCommentToken(bi.DASH_DASH.length+1),this.state=k.COMMENT_START):this._consumeSequenceIfMatch(bi.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(bi.DOCTYPE.length+1),this.state=k.DOCTYPE):this._consumeSequenceIfMatch(bi.CDATA_START,true)?this.inForeignNode?this.state=k.CDATA_SECTION:(this._err(ee.cdataInHtmlContent),this._createCommentToken(bi.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=k.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ee.incorrectlyOpenedComment),this._createCommentToken(2),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_START_DASH;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptClosingOfEmptyComment),this.state=k.DATA;let n=this.currentToken;this.emitCurrentComment(n);break}default:this.state=k.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptClosingOfEmptyComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=k.COMMENT,this._stateComment(t);}}_stateComment(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END_DASH;break}case M.LESS_THAN_SIGN:{n.data+="<",this.state=k.COMMENT_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.data+=wn;break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let n=this.currentToken;switch(t){case M.EXCLAMATION_MARK:{n.data+="!",this.state=k.COMMENT_LESS_THAN_SIGN_BANG;break}case M.LESS_THAN_SIGN:{n.data+="<";break}default:this.state=k.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===M.HYPHEN_MINUS?this.state=k.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=k.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===M.HYPHEN_MINUS?this.state=k.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=k.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==M.GREATER_THAN_SIGN&&t!==M.EOF&&this._err(ee.nestedComment),this.state=k.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END;break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=k.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentComment(n);break}case M.EXCLAMATION_MARK:{this.state=k.COMMENT_END_BANG;break}case M.HYPHEN_MINUS:{n.data+="-";break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--",this.state=k.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{n.data+="--!",this.state=k.COMMENT_END_DASH;break}case M.GREATER_THAN_SIGN:{this._err(ee.incorrectlyClosedComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--!",this.state=k.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case M.EOF:{this._err(ee.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingWhitespaceBeforeDoctypeName),this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(RT(t))this._createDoctypeToken(String.fromCharCode(Mx(t))),this.state=k.DOCTYPE_NAME;else switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.NULL:{this._err(ee.unexpectedNullCharacter),this._createDoctypeToken(wn),this.state=k.DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=k.DOCTYPE_NAME;}}_stateDoctypeName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.AFTER_DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.name+=wn;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateAfterDoctypeName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(bi.PUBLIC,false)?this.state=k.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(bi.SYSTEM,false)?this.state=k.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ee.invalidCharacterSequenceAfterDoctypeName),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.publicId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case M.APOSTROPHE:{this.state=k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.publicId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.QUOTATION_MARK:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.systemId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case M.APOSTROPHE:{this.state=k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.systemId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.NULL:{this._err(ee.unexpectedNullCharacter);break}case M.EOF:{this.emitCurrentDoctype(n),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case M.RIGHT_SQUARE_BRACKET:{this.state=k.CDATA_SECTION_BRACKET;break}case M.EOF:{this._err(ee.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===M.RIGHT_SQUARE_BRACKET?this.state=k.CDATA_SECTION_END:(this._emitChars("]"),this.state=k.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA;break}case M.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=k.CDATA_SECTION,this._stateCdataSection(t);}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else {this.active=false,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=true;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(M.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&vre(this.preprocessor.peek(1))?k.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){vre(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===M.SEMICOLON&&this._err(ee.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var Ore=new Set([y.DD,y.DT,y.LI,y.OPTGROUP,y.OPTION,y.P,y.RB,y.RP,y.RT,y.RTC]),xre=new Set([...Ore,y.CAPTION,y.COLGROUP,y.TBODY,y.TD,y.TFOOT,y.TH,y.THEAD,y.TR]),Nx=new Set([y.APPLET,y.CAPTION,y.HTML,y.MARQUEE,y.OBJECT,y.TABLE,y.TD,y.TEMPLATE,y.TH]),jze=new Set([...Nx,y.OL,y.UL]),$ze=new Set([...Nx,y.BUTTON]),_re=new Set([y.ANNOTATION_XML,y.MI,y.MN,y.MO,y.MS,y.MTEXT]),Pre=new Set([y.DESC,y.FOREIGN_OBJECT,y.TITLE]),Vze=new Set([y.TR,y.TEMPLATE,y.HTML]),zze=new Set([y.TBODY,y.TFOOT,y.THEAD,y.TEMPLATE,y.HTML]),Wze=new Set([y.TABLE,y.TEMPLATE,y.HTML]),qze=new Set([y.TD,y.TH]),Lx=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,n,o){this.treeAdapter=n,this.handler=o,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=y.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===y.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===he.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,n){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=n,this.currentTagId=n,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,n,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,n){let o=this._indexOf(t);this.items[o]=n,o===this.stackTop&&(this.current=n);}insertAfter(t,n,o){let r=this._indexOf(t)+1;this.items.splice(r,0,n),this.tagIDs.splice(r,0,o),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop);}popUntilTagNamePopped(t){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(t,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==he.HTML);this.shortenToLength(Math.max(n,0));}shortenToLength(t){for(;this.stackTop>=t;){let n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop<t);}}popUntilElementPopped(t){let n=this._indexOf(t);this.shortenToLength(Math.max(n,0));}popUntilPopped(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(Math.max(o,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(CT,he.HTML);}popUntilTableCellPopped(){this.popUntilPopped(qze,he.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,n){for(let o=this.stackTop;o>=0;o--)if(t.has(this.tagIDs[o])&&this.treeAdapter.getNamespaceURI(this.items[o])===n)return o;return -1}clearBackTo(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(o+1);}clearBackToTableContext(){this.clearBackTo(Wze,he.HTML);}clearBackToTableBodyContext(){this.clearBackTo(zze,he.HTML);}clearBackToTableRowContext(){this.clearBackTo(Vze,he.HTML);}remove(t){let n=this._indexOf(t);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===y.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let n=this._indexOf(t)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===y.HTML}hasInDynamicScope(t,n){for(let o=this.stackTop;o>=0;o--){let r=this.tagIDs[o];switch(this.treeAdapter.getNamespaceURI(this.items[o])){case he.HTML:{if(r===t)return true;if(n.has(r))return false;break}case he.SVG:{if(Pre.has(r))return false;break}case he.MATHML:{if(_re.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,Nx)}hasInListItemScope(t){return this.hasInDynamicScope(t,jze)}hasInButtonScope(t){return this.hasInDynamicScope(t,$ze)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case he.HTML:{if(CT.has(n))return true;if(Nx.has(n))return false;break}case he.SVG:{if(Pre.has(n))return false;break}case he.MATHML:{if(_re.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===he.HTML)switch(this.tagIDs[n]){case t:return true;case y.TABLE:case y.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===he.HTML)switch(this.tagIDs[t]){case y.TBODY:case y.THEAD:case y.TFOOT:return true;case y.TABLE:case y.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===he.HTML)switch(this.tagIDs[n]){case t:return true;case y.OPTION:case y.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&Ore.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&xre.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&xre.has(this.currentTagId);)this.pop();}};var Ma;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Ma||(Ma={}));var Mre={type:Ma.Marker},kx=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,n){let o=[],r=n.length,i=this.treeAdapter.getTagName(t),s=this.treeAdapter.getNamespaceURI(t);for(let a=0;a<this.entries.length;a++){let l=this.entries[a];if(l.type===Ma.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===s){let d=this.treeAdapter.getAttrList(c);d.length===r&&o.push({idx:a,attrs:d});}}return o}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let n=this.treeAdapter.getAttrList(t),o=this._getNoahArkConditionCandidates(t,n);if(o.length<3)return;let r=new Map(n.map(s=>[s.name,s.value])),i=0;for(let s=0;s<o.length;s++){let a=o[s];a.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(a.idx,1));}}insertMarker(){this.entries.unshift(Mre);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Ma.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Ma.Element,element:t,token:n});}removeEntry(t){let n=this.entries.indexOf(t);n!==-1&&this.entries.splice(n,1);}clearToLastMarker(){let t=this.entries.indexOf(Mre);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Ma.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Ma.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Ma.Element&&n.element===t)}};var Na={createDocument(){return {nodeName:"#document",mode:Ti.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,n){return {nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return {nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return {nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e;},insertBefore(e,t,n){let o=e.childNodes.indexOf(n);e.childNodes.splice(o,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,n,o){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=n,r.systemId=o;else {let i={nodeName:"#documentType",name:t,publicId:n,systemId:o,parentNode:null};Na.appendChild(e,i);}},setDocumentMode(e,t){e.mode=t;},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null;}},insertText(e,t){if(e.childNodes.length>0){let n=e.childNodes[e.childNodes.length-1];if(Na.isTextNode(n)){n.value+=t;return}}Na.appendChild(e,Na.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Na.isTextNode(o)?o.value+=t:Na.insertBefore(e,Na.createTextNode(t),n);},adoptAttributes(e,t){let n=new Set(e.attrs.map(o=>o.name));for(let o=0;o<t.length;o++)n.has(t[o].name)||e.attrs.push(t[o]);},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t;},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t};}};var Lre="html",Kze="about:legacy-compat",Yze="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",kre=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Jze=[...kre,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],Xze=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Dre=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Qze=[...Dre,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Nre(e,t){return t.some(n=>e.startsWith(n))}function Fre(e){return e.name===Lre&&e.publicId===null&&(e.systemId===null||e.systemId===Kze)}function Bre(e){if(e.name!==Lre)return Ti.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===Yze)return Ti.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),Xze.has(n))return Ti.QUIRKS;let o=t===null?Jze:kre;if(Nre(n,o))return Ti.QUIRKS;if(o=t===null?Dre:Qze,Nre(n,o))return Ti.LIMITED_QUIRKS}return Ti.NO_QUIRKS}var Ure={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},e1e="definitionurl",t1e="definitionURL",n1e=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),o1e=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:he.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:he.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:he.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:he.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:he.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:he.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:he.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:he.XML}],["xml:space",{prefix:"xml",name:"space",namespace:he.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:he.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:he.XMLNS}]]),r1e=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),i1e=new Set([y.B,y.BIG,y.BLOCKQUOTE,y.BODY,y.BR,y.CENTER,y.CODE,y.DD,y.DIV,y.DL,y.DT,y.EM,y.EMBED,y.H1,y.H2,y.H3,y.H4,y.H5,y.H6,y.HEAD,y.HR,y.I,y.IMG,y.LI,y.LISTING,y.MENU,y.META,y.NOBR,y.OL,y.P,y.PRE,y.RUBY,y.S,y.SMALL,y.SPAN,y.STRONG,y.STRIKE,y.SUB,y.SUP,y.TABLE,y.TT,y.U,y.UL,y.VAR]);function Hre(e){let t=e.tagID;return t===y.FONT&&e.attrs.some(({name:o})=>o===cd.COLOR||o===cd.SIZE||o===cd.FACE)||i1e.has(t)}function UB(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===e1e){e.attrs[t].name=t1e;break}}function HB(e){for(let t=0;t<e.attrs.length;t++){let n=n1e.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function Dx(e){for(let t=0;t<e.attrs.length;t++){let n=o1e.get(e.attrs[t].name);n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace);}}function Gre(e){let t=r1e.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Rm(e.tagName));}function s1e(e,t){return t===he.MATHML&&(e===y.MI||e===y.MO||e===y.MN||e===y.MS||e===y.MTEXT)}function a1e(e,t,n){if(t===he.MATHML&&e===y.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===cd.ENCODING){let r=n[o].value.toLowerCase();return r===Ure.TEXT_HTML||r===Ure.APPLICATION_XML}}return t===he.SVG&&(e===y.FOREIGN_OBJECT||e===y.DESC||e===y.TITLE)}function jre(e,t,n,o){return (!o||o===he.HTML)&&a1e(e,t,n)||(!o||o===he.MATHML)&&s1e(e,t)}var l1e="hidden",c1e=8,d1e=3,F;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET";})(F||(F={}));var u1e={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},qre=new Set([y.TABLE,y.TBODY,y.TFOOT,y.THEAD,y.TR]),Vre={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Na,onParseError:null},NT=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=F.INITIAL,this.originalInsertionMode=F.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=false,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=false,this.framesetOk=true,this.skipNextNewLine=false,this.fosterParentingEnabled=false,this.options={...Vre,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=n??this.treeAdapter.createDocument(),this.tokenizer=new vT(this.options,this),this.activeFormattingElements=new kx(this.treeAdapter),this.fragmentContextID=o?Rm(this.treeAdapter.getTagName(o)):y.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new Lx(this.document,this.treeAdapter,this);}static parse(t,n){let o=new this(n);return o.tokenizer.write(t,true),o.document}static getFragmentParser(t,n){let o={...Vre,...n};t??(t=o.treeAdapter.createElement(Y.TEMPLATE,he.HTML,[]));let r=o.treeAdapter.createElement("documentmock",he.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===y.TEMPLATE&&i.tmplInsertionModeStack.unshift(F.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),n=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,n),n}_err(t,n,o){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:u1e,s={code:n,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:o?i.startLine:i.endLine,endCol:o?i.startCol:i.endCol,endOffset:o?i.startOffset:i.endOffset};this.onParseError(s);}onItemPush(t,n,o){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),o&&this.openElements.stackTop>0&&this._setContextModes(t,n);}onItemPop(t,n){var o,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(o=this.treeAdapter).onItemPop)===null||r===void 0||r.call(o,t,this.openElements.current),n){let i,s;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,s=this.fragmentContextID):{current:i,currentTagId:s}=this.openElements,this._setContextModes(i,s);}}_setContextModes(t,n){let o=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===he.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,he.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=F.TEXT;}switchToPlaintextParsing(){this.insertionMode=F.TEXT,this.originalInsertionMode=F.IN_BODY,this.tokenizer.state=Gr.PLAINTEXT;}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===Y.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==he.HTML))switch(this.fragmentContextID){case y.TITLE:case y.TEXTAREA:{this.tokenizer.state=Gr.RCDATA;break}case y.STYLE:case y.XMP:case y.IFRAME:case y.NOEMBED:case y.NOFRAMES:case y.NOSCRIPT:{this.tokenizer.state=Gr.RAWTEXT;break}case y.SCRIPT:{this.tokenizer.state=Gr.SCRIPT_DATA;break}case y.PLAINTEXT:{this.tokenizer.state=Gr.PLAINTEXT;break}}}_setDocumentType(t){let n=t.name||"",o=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,o,r),t.location){let s=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));s&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}}_attachElementToTree(t,n){if(this.options.sourceCodeLocationInfo){let o=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(t,o);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let o=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(o??this.document,t);}}_appendElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location);}_insertElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID);}_insertFakeElement(t,n){let o=this.treeAdapter.createElement(t,he.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,he.HTML,t.attrs),o=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,o),this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(Y.HTML,he.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,y.HTML);}_appendCommentNode(t,n){let o=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(n,o),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location);}_insertCharacters(t){let n,o;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:o}=this._findFosterParentingLocation(),o?this.treeAdapter.insertTextBefore(n,t.chars,o):this.treeAdapter.insertText(n,t.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(n),i=o?r.lastIndexOf(o):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){let{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:l,endCol:c,endOffset:d});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}_adoptNodes(t,n){for(let o=this.treeAdapter.getFirstChild(t);o;o=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(o),this.treeAdapter.appendChild(n,o);}_setEndLocation(t,n){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&n.location){let o=n.location,r=this.treeAdapter.getTagName(t),i=n.type===Gt.END_TAG&&r===n.tagName?{endTag:{...o},endLine:o.endLine,endCol:o.endCol,endOffset:o.endOffset}:{endLine:o.startLine,endCol:o.startCol,endOffset:o.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let n,o;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,o=this.fragmentContextID):{current:n,currentTagId:o}=this.openElements,t.tagID===y.SVG&&this.treeAdapter.getTagName(n)===Y.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===he.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===y.MGLYPH||t.tagID===y.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,he.HTML)}_processToken(t){switch(t.type){case Gt.CHARACTER:{this.onCharacter(t);break}case Gt.NULL_CHARACTER:{this.onNullCharacter(t);break}case Gt.COMMENT:{this.onComment(t);break}case Gt.DOCTYPE:{this.onDoctype(t);break}case Gt.START_TAG:{this._processStartTag(t);break}case Gt.END_TAG:{this.onEndTag(t);break}case Gt.EOF:{this.onEof(t);break}case Gt.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return jre(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Ma.Marker||this.openElements.contains(r.element)),o=n===-1?t-1:n-1;for(let r=o;r>=0;r--){let i=this.activeFormattingElements.entries[r];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current;}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=F.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(y.P),this.openElements.popUntilTagNamePopped(y.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case y.TR:{this.insertionMode=F.IN_ROW;return}case y.TBODY:case y.THEAD:case y.TFOOT:{this.insertionMode=F.IN_TABLE_BODY;return}case y.CAPTION:{this.insertionMode=F.IN_CAPTION;return}case y.COLGROUP:{this.insertionMode=F.IN_COLUMN_GROUP;return}case y.TABLE:{this.insertionMode=F.IN_TABLE;return}case y.BODY:{this.insertionMode=F.IN_BODY;return}case y.FRAMESET:{this.insertionMode=F.IN_FRAMESET;return}case y.SELECT:{this._resetInsertionModeForSelect(t);return}case y.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case y.HTML:{this.insertionMode=this.headElement?F.AFTER_HEAD:F.BEFORE_HEAD;return}case y.TD:case y.TH:{if(t>0){this.insertionMode=F.IN_CELL;return}break}case y.HEAD:{if(t>0){this.insertionMode=F.IN_HEAD;return}break}}this.insertionMode=F.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===y.TEMPLATE)break;if(o===y.TABLE){this.insertionMode=F.IN_SELECT_IN_TABLE;return}}this.insertionMode=F.IN_SELECT;}_isElementCausesFosterParenting(t){return qre.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let n=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case y.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===he.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case y.TABLE:{let o=this.treeAdapter.getParentNode(n);return o?{parent:o,beforeElement:n}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,t,n.beforeElement):this.treeAdapter.appendChild(n.parent,t);}_isSpecialElement(t,n){let o=this.treeAdapter.getNamespaceURI(t);return Rre[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){GWe(this,t);return}switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.IN_BODY:case F.IN_CAPTION:case F.IN_CELL:case F.IN_TEMPLATE:{Yre(this,t);break}case F.TEXT:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_TABLE_TEXT:{tie(this,t);break}case F.IN_COLUMN_GROUP:{Bx(this,t);break}case F.AFTER_BODY:{Ux(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){HWe(this,t);return}switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.TEXT:{this._insertCharacters(t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_COLUMN_GROUP:{Bx(this,t);break}case F.AFTER_BODY:{Ux(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){jB(this,t);return}switch(this.insertionMode){case F.INITIAL:case F.BEFORE_HTML:case F.BEFORE_HEAD:case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:case F.IN_BODY:case F.IN_TABLE:case F.IN_CAPTION:case F.IN_COLUMN_GROUP:case F.IN_TABLE_BODY:case F.IN_ROW:case F.IN_CELL:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:case F.IN_TEMPLATE:case F.IN_FRAMESET:case F.AFTER_FRAMESET:{jB(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.AFTER_BODY:{S1e(this,t);break}case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{b1e(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case F.INITIAL:{T1e(this,t);break}case F.BEFORE_HEAD:case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:{this._err(t,ee.misplacedDoctype);break}case F.IN_TABLE_TEXT:{IT(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ee.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?jWe(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{A1e(this,t);break}case F.BEFORE_HEAD:{C1e(this,t);break}case F.IN_HEAD:{La(this,t);break}case F.IN_HEAD_NO_SCRIPT:{w1e(this,t);break}case F.AFTER_HEAD:{x1e(this,t);break}case F.IN_BODY:{jr(this,t);break}case F.IN_TABLE:{xf(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_CAPTION:{RWe(this,t);break}case F.IN_COLUMN_GROUP:{WB(this,t);break}case F.IN_TABLE_BODY:{jx(this,t);break}case F.IN_ROW:{$x(this,t);break}case F.IN_CELL:{IWe(this,t);break}case F.IN_SELECT:{rie(this,t);break}case F.IN_SELECT_IN_TABLE:{_We(this,t);break}case F.IN_TEMPLATE:{OWe(this,t);break}case F.AFTER_BODY:{NWe(this,t);break}case F.IN_FRAMESET:{LWe(this,t);break}case F.AFTER_FRAMESET:{DWe(this,t);break}case F.AFTER_AFTER_BODY:{BWe(this,t);break}case F.AFTER_AFTER_FRAMESET:{UWe(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?$We(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{E1e(this,t);break}case F.BEFORE_HEAD:{R1e(this,t);break}case F.IN_HEAD:{v1e(this,t);break}case F.IN_HEAD_NO_SCRIPT:{I1e(this,t);break}case F.AFTER_HEAD:{_1e(this,t);break}case F.IN_BODY:{Gx(this,t);break}case F.TEXT:{hWe(this,t);break}case F.IN_TABLE:{LT(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_CAPTION:{vWe(this,t);break}case F.IN_COLUMN_GROUP:{wWe(this,t);break}case F.IN_TABLE_BODY:{$B(this,t);break}case F.IN_ROW:{oie(this,t);break}case F.IN_CELL:{xWe(this,t);break}case F.IN_SELECT:{iie(this,t);break}case F.IN_SELECT_IN_TABLE:{PWe(this,t);break}case F.IN_TEMPLATE:{MWe(this,t);break}case F.AFTER_BODY:{aie(this,t);break}case F.IN_FRAMESET:{kWe(this,t);break}case F.AFTER_FRAMESET:{FWe(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onEof(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.IN_BODY:case F.IN_TABLE:case F.IN_CAPTION:case F.IN_COLUMN_GROUP:case F.IN_TABLE_BODY:case F.IN_ROW:case F.IN_CELL:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:{Zre(this,t);break}case F.TEXT:{gWe(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_TEMPLATE:{sie(this,t);break}case F.AFTER_BODY:case F.IN_FRAMESET:case F.AFTER_FRAMESET:case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{zB(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===M.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1);}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:case F.TEXT:case F.IN_COLUMN_GROUP:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:case F.IN_FRAMESET:case F.AFTER_FRAMESET:{this._insertCharacters(t);break}case F.IN_BODY:case F.IN_CAPTION:case F.IN_CELL:case F.IN_TEMPLATE:case F.AFTER_BODY:case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{Kre(this,t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_TABLE_TEXT:{eie(this,t);break}}}};function p1e(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):Qre(e,t),n}function m1e(e,t){let n=null,o=e.openElements.stackTop;for(;o>=0;o--){let r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[o])&&(n=r);}return n||(e.openElements.shortenToLength(Math.max(o,0)),e.activeFormattingElements.removeEntry(t)),n}function h1e(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,s=r;s!==n;i++,s=r){r=e.openElements.getCommonAncestor(s);let a=e.activeFormattingElements.getElementEntry(s),l=a&&i>=d1e;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=g1e(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function g1e(e,t){let n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function f1e(e,t,n){let o=e.treeAdapter.getTagName(t),r=Rm(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===y.TEMPLATE&&i===he.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function y1e(e,t,n){let o=e.treeAdapter.getNamespaceURI(n.element),{token:r}=n,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i,r.tagID);}function VB(e,t){for(let n=0;n<c1e;n++){let o=p1e(e,t);if(!o)break;let r=m1e(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=h1e(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&f1e(e,s,i),y1e(e,r,o);}}function jB(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function S1e(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function b1e(e,t){e._appendCommentNode(t,e.document);}function zB(e,t){if(e.stopped=true,t.location){let n=e.fragmentContext?0:2;for(let o=e.openElements.stackTop;o>=n;o--)e._setEndLocation(e.openElements.items[o],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let o=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(o);if(r&&!r.endTag&&(e._setEndLocation(o,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],s=e.treeAdapter.getNodeSourceCodeLocation(i);s&&!s.endTag&&e._setEndLocation(i,t);}}}}function T1e(e,t){e._setDocumentType(t);let n=t.forceQuirks?Ti.QUIRKS:Bre(t);Fre(t)||e._err(t,ee.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=F.BEFORE_HTML;}function wT(e,t){e._err(t,ee.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Ti.QUIRKS),e.insertionMode=F.BEFORE_HTML,e._processToken(t);}function A1e(e,t){t.tagID===y.HTML?(e._insertElement(t,he.HTML),e.insertionMode=F.BEFORE_HEAD):xT(e,t);}function E1e(e,t){let n=t.tagID;(n===y.HTML||n===y.HEAD||n===y.BODY||n===y.BR)&&xT(e,t);}function xT(e,t){e._insertFakeRootElement(),e.insertionMode=F.BEFORE_HEAD,e._processToken(t);}function C1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.HEAD:{e._insertElement(t,he.HTML),e.headElement=e.openElements.current,e.insertionMode=F.IN_HEAD;break}default:_T(e,t);}}function R1e(e,t){let n=t.tagID;n===y.HEAD||n===y.BODY||n===y.HTML||n===y.BR?_T(e,t):e._err(t,ee.endTagWithoutMatchingOpenElement);}function _T(e,t){e._insertFakeElement(Y.HEAD,y.HEAD),e.headElement=e.openElements.current,e.insertionMode=F.IN_HEAD,e._processToken(t);}function La(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.TITLE:{e._switchToTextParsing(t,Gr.RCDATA);break}case y.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Gr.RAWTEXT):(e._insertElement(t,he.HTML),e.insertionMode=F.IN_HEAD_NO_SCRIPT);break}case y.NOFRAMES:case y.STYLE:{e._switchToTextParsing(t,Gr.RAWTEXT);break}case y.SCRIPT:{e._switchToTextParsing(t,Gr.SCRIPT_DATA);break}case y.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=F.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(F.IN_TEMPLATE);break}case y.HEAD:{e._err(t,ee.misplacedStartTagForHeadElement);break}default:PT(e,t);}}function v1e(e,t){switch(t.tagID){case y.HEAD:{e.openElements.pop(),e.insertionMode=F.AFTER_HEAD;break}case y.BODY:case y.BR:case y.HTML:{PT(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function vm(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==y.TEMPLATE&&e._err(t,ee.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(y.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ee.endTagWithoutMatchingOpenElement);}function PT(e,t){e.openElements.pop(),e.insertionMode=F.AFTER_HEAD,e._processToken(t);}function w1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BASEFONT:case y.BGSOUND:case y.HEAD:case y.LINK:case y.META:case y.NOFRAMES:case y.STYLE:{La(e,t);break}case y.NOSCRIPT:{e._err(t,ee.nestedNoscriptInHead);break}default:OT(e,t);}}function I1e(e,t){switch(t.tagID){case y.NOSCRIPT:{e.openElements.pop(),e.insertionMode=F.IN_HEAD;break}case y.BR:{OT(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function OT(e,t){let n=t.type===Gt.EOF?ee.openElementsLeftAfterEof:ee.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=F.IN_HEAD,e._processToken(t);}function x1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BODY:{e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=F.IN_BODY;break}case y.FRAMESET:{e._insertElement(t,he.HTML),e.insertionMode=F.IN_FRAMESET;break}case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:case y.NOFRAMES:case y.SCRIPT:case y.STYLE:case y.TEMPLATE:case y.TITLE:{e._err(t,ee.abandonedHeadElementChild),e.openElements.push(e.headElement,y.HEAD),La(e,t),e.openElements.remove(e.headElement);break}case y.HEAD:{e._err(t,ee.misplacedStartTagForHeadElement);break}default:MT(e,t);}}function _1e(e,t){switch(t.tagID){case y.BODY:case y.HTML:case y.BR:{MT(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function MT(e,t){e._insertFakeElement(Y.BODY,y.BODY),e.insertionMode=F.IN_BODY,Hx(e,t);}function Hx(e,t){switch(t.type){case Gt.CHARACTER:{Yre(e,t);break}case Gt.WHITESPACE_CHARACTER:{Kre(e,t);break}case Gt.COMMENT:{jB(e,t);break}case Gt.START_TAG:{jr(e,t);break}case Gt.END_TAG:{Gx(e,t);break}case Gt.EOF:{Zre(e,t);break}}}function Kre(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function Yre(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function P1e(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function O1e(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function M1e(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_FRAMESET);}function N1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML);}function L1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&CT.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,he.HTML);}function k1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function D1e(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),n||(e.formElement=e.openElements.current));}function F1e(e,t){e.framesetOk=false;let n=t.tagID;for(let o=e.openElements.stackTop;o>=0;o--){let r=e.openElements.tagIDs[o];if(n===y.LI&&r===y.LI||(n===y.DD||n===y.DT)&&(r===y.DD||r===y.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==y.ADDRESS&&r!==y.DIV&&r!==y.P&&e._isSpecialElement(e.openElements.items[o],r))break}e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML);}function B1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.tokenizer.state=Gr.PLAINTEXT;}function U1e(e,t){e.openElements.hasInScope(y.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.framesetOk=false;}function H1e(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Y.A);n&&(VB(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function G1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function j1e(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(y.NOBR)&&(VB(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function $1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function V1e(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ti.QUIRKS&&e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=F.IN_TABLE;}function Jre(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,he.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function Xre(e){let t=Px(e,cd.TYPE);return t!=null&&t.toLowerCase()===l1e}function z1e(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,he.HTML),Xre(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function W1e(e,t){e._appendElement(t,he.HTML),t.ackSelfClosing=true;}function q1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._appendElement(t,he.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function K1e(e,t){t.tagName=Y.IMG,t.tagID=y.IMG,Jre(e,t);}function Y1e(e,t){e._insertElement(t,he.HTML),e.skipNextNewLine=true,e.tokenizer.state=Gr.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=F.TEXT;}function J1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Gr.RAWTEXT);}function X1e(e,t){e.framesetOk=false,e._switchToTextParsing(t,Gr.RAWTEXT);}function zre(e,t){e._switchToTextParsing(t,Gr.RAWTEXT);}function Q1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===F.IN_TABLE||e.insertionMode===F.IN_CAPTION||e.insertionMode===F.IN_TABLE_BODY||e.insertionMode===F.IN_ROW||e.insertionMode===F.IN_CELL?F.IN_SELECT_IN_TABLE:F.IN_SELECT;}function Z1e(e,t){e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML);}function eWe(e,t){e.openElements.hasInScope(y.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,he.HTML);}function tWe(e,t){e.openElements.hasInScope(y.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(y.RTC),e._insertElement(t,he.HTML);}function nWe(e,t){e._reconstructActiveFormattingElements(),UB(t),Dx(t),t.selfClosing?e._appendElement(t,he.MATHML):e._insertElement(t,he.MATHML),t.ackSelfClosing=true;}function oWe(e,t){e._reconstructActiveFormattingElements(),HB(t),Dx(t),t.selfClosing?e._appendElement(t,he.SVG):e._insertElement(t,he.SVG),t.ackSelfClosing=true;}function Wre(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML);}function jr(e,t){switch(t.tagID){case y.I:case y.S:case y.B:case y.U:case y.EM:case y.TT:case y.BIG:case y.CODE:case y.FONT:case y.SMALL:case y.STRIKE:case y.STRONG:{G1e(e,t);break}case y.A:{H1e(e,t);break}case y.H1:case y.H2:case y.H3:case y.H4:case y.H5:case y.H6:{L1e(e,t);break}case y.P:case y.DL:case y.OL:case y.UL:case y.DIV:case y.DIR:case y.NAV:case y.MAIN:case y.MENU:case y.ASIDE:case y.CENTER:case y.FIGURE:case y.FOOTER:case y.HEADER:case y.HGROUP:case y.DIALOG:case y.DETAILS:case y.ADDRESS:case y.ARTICLE:case y.SEARCH:case y.SECTION:case y.SUMMARY:case y.FIELDSET:case y.BLOCKQUOTE:case y.FIGCAPTION:{N1e(e,t);break}case y.LI:case y.DD:case y.DT:{F1e(e,t);break}case y.BR:case y.IMG:case y.WBR:case y.AREA:case y.EMBED:case y.KEYGEN:{Jre(e,t);break}case y.HR:{q1e(e,t);break}case y.RB:case y.RTC:{eWe(e,t);break}case y.RT:case y.RP:{tWe(e,t);break}case y.PRE:case y.LISTING:{k1e(e,t);break}case y.XMP:{J1e(e,t);break}case y.SVG:{oWe(e,t);break}case y.HTML:{P1e(e,t);break}case y.BASE:case y.LINK:case y.META:case y.STYLE:case y.TITLE:case y.SCRIPT:case y.BGSOUND:case y.BASEFONT:case y.TEMPLATE:{La(e,t);break}case y.BODY:{O1e(e,t);break}case y.FORM:{D1e(e,t);break}case y.NOBR:{j1e(e,t);break}case y.MATH:{nWe(e,t);break}case y.TABLE:{V1e(e,t);break}case y.INPUT:{z1e(e,t);break}case y.PARAM:case y.TRACK:case y.SOURCE:{W1e(e,t);break}case y.IMAGE:{K1e(e,t);break}case y.BUTTON:{U1e(e,t);break}case y.APPLET:case y.OBJECT:case y.MARQUEE:{$1e(e,t);break}case y.IFRAME:{X1e(e,t);break}case y.SELECT:{Q1e(e,t);break}case y.OPTION:case y.OPTGROUP:{Z1e(e,t);break}case y.NOEMBED:case y.NOFRAMES:{zre(e,t);break}case y.FRAMESET:{M1e(e,t);break}case y.TEXTAREA:{Y1e(e,t);break}case y.NOSCRIPT:{e.options.scriptingEnabled?zre(e,t):Wre(e,t);break}case y.PLAINTEXT:{B1e(e,t);break}case y.COL:case y.TH:case y.TD:case y.TR:case y.HEAD:case y.FRAME:case y.TBODY:case y.TFOOT:case y.THEAD:case y.CAPTION:case y.COLGROUP:break;default:Wre(e,t);}}function rWe(e,t){if(e.openElements.hasInScope(y.BODY)&&(e.insertionMode=F.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function iWe(e,t){e.openElements.hasInScope(y.BODY)&&(e.insertionMode=F.AFTER_BODY,aie(e,t));}function sWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function aWe(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(y.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(y.FORM):n&&e.openElements.remove(n));}function lWe(e){e.openElements.hasInButtonScope(y.P)||e._insertFakeElement(Y.P,y.P),e._closePElement();}function cWe(e){e.openElements.hasInListItemScope(y.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(y.LI),e.openElements.popUntilTagNamePopped(y.LI));}function dWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function uWe(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function pWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function mWe(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Y.BR,y.BR),e.openElements.pop(),e.framesetOk=false;}function Qre(e,t){let n=t.tagName,o=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],s=e.openElements.tagIDs[r];if(o===s&&(o!==y.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,s))break}}function Gx(e,t){switch(t.tagID){case y.A:case y.B:case y.I:case y.S:case y.U:case y.EM:case y.TT:case y.BIG:case y.CODE:case y.FONT:case y.NOBR:case y.SMALL:case y.STRIKE:case y.STRONG:{VB(e,t);break}case y.P:{lWe(e);break}case y.DL:case y.UL:case y.OL:case y.DIR:case y.DIV:case y.NAV:case y.PRE:case y.MAIN:case y.MENU:case y.ASIDE:case y.BUTTON:case y.CENTER:case y.FIGURE:case y.FOOTER:case y.HEADER:case y.HGROUP:case y.DIALOG:case y.ADDRESS:case y.ARTICLE:case y.DETAILS:case y.SEARCH:case y.SECTION:case y.SUMMARY:case y.LISTING:case y.FIELDSET:case y.BLOCKQUOTE:case y.FIGCAPTION:{sWe(e,t);break}case y.LI:{cWe(e);break}case y.DD:case y.DT:{dWe(e,t);break}case y.H1:case y.H2:case y.H3:case y.H4:case y.H5:case y.H6:{uWe(e);break}case y.BR:{mWe(e);break}case y.BODY:{rWe(e,t);break}case y.HTML:{iWe(e,t);break}case y.FORM:{aWe(e);break}case y.APPLET:case y.OBJECT:case y.MARQUEE:{pWe(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:Qre(e,t);}}function Zre(e,t){e.tmplInsertionModeStack.length>0?sie(e,t):zB(e,t);}function hWe(e,t){var n;t.tagID===y.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function gWe(e,t){e._err(t,ee.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function GB(e,t){if(e.openElements.currentTagId!==void 0&&qre.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=F.IN_TABLE_TEXT,t.type){case Gt.CHARACTER:{tie(e,t);break}case Gt.WHITESPACE_CHARACTER:{eie(e,t);break}}else kT(e,t);}function fWe(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_CAPTION;}function yWe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_COLUMN_GROUP;}function SWe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Y.COLGROUP,y.COLGROUP),e.insertionMode=F.IN_COLUMN_GROUP,WB(e,t);}function bWe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_TABLE_BODY;}function TWe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Y.TBODY,y.TBODY),e.insertionMode=F.IN_TABLE_BODY,jx(e,t);}function AWe(e,t){e.openElements.hasInTableScope(y.TABLE)&&(e.openElements.popUntilTagNamePopped(y.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function EWe(e,t){Xre(t)?e._appendElement(t,he.HTML):kT(e,t),t.ackSelfClosing=true;}function CWe(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,he.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function xf(e,t){switch(t.tagID){case y.TD:case y.TH:case y.TR:{TWe(e,t);break}case y.STYLE:case y.SCRIPT:case y.TEMPLATE:{La(e,t);break}case y.COL:{SWe(e,t);break}case y.FORM:{CWe(e,t);break}case y.TABLE:{AWe(e,t);break}case y.TBODY:case y.TFOOT:case y.THEAD:{bWe(e,t);break}case y.INPUT:{EWe(e,t);break}case y.CAPTION:{fWe(e,t);break}case y.COLGROUP:{yWe(e,t);break}default:kT(e,t);}}function LT(e,t){switch(t.tagID){case y.TABLE:{e.openElements.hasInTableScope(y.TABLE)&&(e.openElements.popUntilTagNamePopped(y.TABLE),e._resetInsertionMode());break}case y.TEMPLATE:{vm(e,t);break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TBODY:case y.TD:case y.TFOOT:case y.TH:case y.THEAD:case y.TR:break;default:kT(e,t);}}function kT(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,Hx(e,t),e.fosterParentingEnabled=n;}function eie(e,t){e.pendingCharacterTokens.push(t);}function tie(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function IT(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)kT(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var nie=new Set([y.CAPTION,y.COL,y.COLGROUP,y.TBODY,y.TD,y.TFOOT,y.TH,y.THEAD,y.TR]);function RWe(e,t){let n=t.tagID;nie.has(n)?e.openElements.hasInTableScope(y.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_TABLE,xf(e,t)):jr(e,t);}function vWe(e,t){let n=t.tagID;switch(n){case y.CAPTION:case y.TABLE:{e.openElements.hasInTableScope(y.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_TABLE,n===y.TABLE&&LT(e,t));break}case y.BODY:case y.COL:case y.COLGROUP:case y.HTML:case y.TBODY:case y.TD:case y.TFOOT:case y.TH:case y.THEAD:case y.TR:break;default:Gx(e,t);}}function WB(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.COL:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.TEMPLATE:{La(e,t);break}default:Bx(e,t);}}function wWe(e,t){switch(t.tagID){case y.COLGROUP:{e.openElements.currentTagId===y.COLGROUP&&(e.openElements.pop(),e.insertionMode=F.IN_TABLE);break}case y.TEMPLATE:{vm(e,t);break}case y.COL:break;default:Bx(e,t);}}function Bx(e,t){e.openElements.currentTagId===y.COLGROUP&&(e.openElements.pop(),e.insertionMode=F.IN_TABLE,e._processToken(t));}function jx(e,t){switch(t.tagID){case y.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_ROW;break}case y.TH:case y.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(Y.TR,y.TR),e.insertionMode=F.IN_ROW,$x(e,t);break}case y.CAPTION:case y.COL:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE,xf(e,t));break}default:xf(e,t);}}function $B(e,t){let n=t.tagID;switch(t.tagID){case y.TBODY:case y.TFOOT:case y.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE);break}case y.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE,LT(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TD:case y.TH:case y.TR:break;default:LT(e,t);}}function $x(e,t){switch(t.tagID){case y.TH:case y.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_CELL,e.activeFormattingElements.insertMarker();break}case y.CAPTION:case y.COL:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:case y.TR:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,jx(e,t));break}default:xf(e,t);}}function oie(e,t){switch(t.tagID){case y.TR:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY);break}case y.TABLE:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,$B(e,t));break}case y.TBODY:case y.TFOOT:case y.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(y.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,$B(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TD:case y.TH:break;default:LT(e,t);}}function IWe(e,t){let n=t.tagID;nie.has(n)?(e.openElements.hasInTableScope(y.TD)||e.openElements.hasInTableScope(y.TH))&&(e._closeTableCell(),$x(e,t)):jr(e,t);}function xWe(e,t){let n=t.tagID;switch(n){case y.TD:case y.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_ROW);break}case y.TABLE:case y.TBODY:case y.TFOOT:case y.THEAD:case y.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),oie(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:break;default:Gx(e,t);}}function rie(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.OPTION:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e._insertElement(t,he.HTML);break}case y.OPTGROUP:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop(),e._insertElement(t,he.HTML);break}case y.HR:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop(),e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.INPUT:case y.KEYGEN:case y.TEXTAREA:case y.SELECT:{e.openElements.hasInSelectScope(y.SELECT)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),t.tagID!==y.SELECT&&e._processStartTag(t));break}case y.SCRIPT:case y.TEMPLATE:{La(e,t);break}}}function iie(e,t){switch(t.tagID){case y.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===y.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===y.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop();break}case y.OPTION:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop();break}case y.SELECT:{e.openElements.hasInSelectScope(y.SELECT)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode());break}case y.TEMPLATE:{vm(e,t);break}}}function _We(e,t){let n=t.tagID;n===y.CAPTION||n===y.TABLE||n===y.TBODY||n===y.TFOOT||n===y.THEAD||n===y.TR||n===y.TD||n===y.TH?(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),e._processStartTag(t)):rie(e,t);}function PWe(e,t){let n=t.tagID;n===y.CAPTION||n===y.TABLE||n===y.TBODY||n===y.TFOOT||n===y.THEAD||n===y.TR||n===y.TD||n===y.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),e.onEndTag(t)):iie(e,t);}function OWe(e,t){switch(t.tagID){case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:case y.NOFRAMES:case y.SCRIPT:case y.STYLE:case y.TEMPLATE:case y.TITLE:{La(e,t);break}case y.CAPTION:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:{e.tmplInsertionModeStack[0]=F.IN_TABLE,e.insertionMode=F.IN_TABLE,xf(e,t);break}case y.COL:{e.tmplInsertionModeStack[0]=F.IN_COLUMN_GROUP,e.insertionMode=F.IN_COLUMN_GROUP,WB(e,t);break}case y.TR:{e.tmplInsertionModeStack[0]=F.IN_TABLE_BODY,e.insertionMode=F.IN_TABLE_BODY,jx(e,t);break}case y.TD:case y.TH:{e.tmplInsertionModeStack[0]=F.IN_ROW,e.insertionMode=F.IN_ROW,$x(e,t);break}default:e.tmplInsertionModeStack[0]=F.IN_BODY,e.insertionMode=F.IN_BODY,jr(e,t);}}function MWe(e,t){t.tagID===y.TEMPLATE&&vm(e,t);}function sie(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(y.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):zB(e,t);}function NWe(e,t){t.tagID===y.HTML?jr(e,t):Ux(e,t);}function aie(e,t){var n;if(t.tagID===y.HTML){if(e.fragmentContext||(e.insertionMode=F.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===y.HTML){e._setEndLocation(e.openElements.items[0],t);let o=e.openElements.items[1];o&&!(!((n=e.treeAdapter.getNodeSourceCodeLocation(o))===null||n===void 0)&&n.endTag)&&e._setEndLocation(o,t);}}else Ux(e,t);}function Ux(e,t){e.insertionMode=F.IN_BODY,Hx(e,t);}function LWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.FRAMESET:{e._insertElement(t,he.HTML);break}case y.FRAME:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.NOFRAMES:{La(e,t);break}}}function kWe(e,t){t.tagID===y.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==y.FRAMESET&&(e.insertionMode=F.AFTER_FRAMESET));}function DWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.NOFRAMES:{La(e,t);break}}}function FWe(e,t){t.tagID===y.HTML&&(e.insertionMode=F.AFTER_AFTER_FRAMESET);}function BWe(e,t){t.tagID===y.HTML?jr(e,t):Fx(e,t);}function Fx(e,t){e.insertionMode=F.IN_BODY,Hx(e,t);}function UWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.NOFRAMES:{La(e,t);break}}}function HWe(e,t){t.chars=wn,e._insertCharacters(t);}function GWe(e,t){e._insertCharacters(t),e.framesetOk=false;}function lie(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==he.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function jWe(e,t){if(Hre(t))lie(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===he.MATHML?UB(t):o===he.SVG&&(Gre(t),HB(t)),Dx(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function $We(e,t){if(t.tagID===y.P||t.tagID===y.BR){lie(e),e._endTagOutsideForeignContent(t);return}for(let n=e.openElements.stackTop;n>0;n--){let o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===he.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(o);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(n);break}}}new Set([Y.AREA,Y.BASE,Y.BASEFONT,Y.BGSOUND,Y.BR,Y.COL,Y.EMBED,Y.FRAME,Y.HR,Y.IMG,Y.INPUT,Y.KEYGEN,Y.LINK,Y.META,Y.PARAM,Y.SOURCE,Y.TRACK,Y.WBR]);function cie(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=NT.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var VWe=5e3,die=1024;function qB(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function zWe(e){return e.nodeName==="#text"}function KB(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let n=e.tagName.toLowerCase(),o,r;for(let{name:l,value:c}of e.attrs){let d=l.toLowerCase();if(d==="role"){r=c;continue}o===void 0&&(o={}),o[d]=c;}let i,s=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(zWe(l)){let c=l.value;if(c&&c.trim().length>0){let d=c.length>die?c.slice(0,die):c;i=i===void 0?d:`${i} ${d}`;}}else if(qB(l)){let c=KB(l,t);c!==void 0&&s.push(c);}}let a={tag:n};return r!==void 0&&(a.role=r),o!==void 0&&(a.attributes=o),i!==void 0&&(a.text=i),s.length>0&&(a.children=s),a}function YB(e){let t=cie(e),n={nodesLeft:VWe};for(let i of t.childNodes)if(qB(i)&&i.tagName.toLowerCase()==="body"){let s=KB(i,n);if(s!==void 0)return s}let o=[];for(let i of t.childNodes){if(n.nodesLeft<=0)break;if(qB(i)){let s=KB(i,n);s!==void 0&&o.push(s);}}let r={tag:"body"};return o.length>0&&(r.children=o),r}var WWe=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),wm=class{constructor(t,n,o,r,i,s){this.orgId=t;this.testId=n;this.testName=o;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=s;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,n){return this.diskStorage.readFile(`${cr}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${cr}/${n}.html`)?.toString()}recordStepStat(t){t.type!=="PRESET_ACTION"?this.stepFrequenciesByType[t.type]=(this.stepFrequenciesByType[t.type]||0)+1:this.stepFrequenciesByType[t.command.type]=(this.stepFrequenciesByType[t.command.type]||0)+1;}sendFinalizedStepStats(){for(let[t,n]of Object.entries(this.stepFrequenciesByType))wt.increment("test_step_execution",n,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,n){let{step:o,parentStepIdChain:r}=t;this.recordStepStat(o);let i={step:o,status:"RUNNING",startedAt:new Date},s=[...n];this.currentResults=s;let a=new XB(this.orgId,this.testId,this.testName,i,this.diskStorage,l=>{this.flushResults([...s,l]);},r??[],this.appGraphSink);return this.children.push(a),a}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(n=>n.finishInternal({status:HG(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function qWe(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return ot(e)}}function JB(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var XB=class{constructor(t,n,o,r,i,s,a,l){this.orgId=t;this.testId=n;this.testName=o;this.metadata=r;this.diskStorage=i;this.parentFlushResults=s;this.parentStepIdChain=a;this.appGraphSink=l;this.interactionTracer=new lu(void 0,c=>this.storeTraceAsset(c)),au.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.jpeg`,contents:o});}attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.jpeg`,contents:o});}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.html`,contents:o});}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,url:r,logger:i}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.html`,contents:o}),this.appGraphSink&&WWe.has(this.metadata.step.type)&&this.appGraphSink({html:o,url:r,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:i});}recordTargetAutoHeal(t){let{healType:n}=t,o=n==="AI"?"ai-target-heal":"cache-heal";wt.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.diskStorage.storeFile({name:`${cr}/${t.snapshotId}.${t.extension??"jpeg"}`,contents:t.data});}async finishInternal(t){this.finished||(this.finished=true,this.interactionTracer.finish(),await Promise.all(this.children.map(n=>n.finish({status:qWe(t.status),finishedAt:t.finishedAt}))));}recordStepDuration(t,n){if(!LE(t))return;let o=NE(t);wt.distribution("test_step_duration",n,[`type:${o}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}async finish(t){!this.finished&&t.resolvedStep!==void 0&&t.durationMs!==void 0&&this.recordStepDuration(t.resolvedStep,t.durationMs),await this.finishInternal(t.step),t.step.trace=this.interactionTracer.getRootSpan();}getResultBuilderForCurrentStep(){let t=this.metadata.step;switch(t.type){case "RESOLVED_MODULE":return n=>({...t,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n,type:"MODULE"});case "CONDITIONAL":return n=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:Mp(r.steps)})),elseSteps:t.elseSteps?Mp(t.elseSteps):void 0,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return n=>({...t,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return ot(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new wm(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var Vx=class{constructor(t,n,o,r,i,s,a){this.orgId=t;this.testId=n;this.testName=o;this.runAttemptId=r;this.metadata=i;this.diskStorage=s;this.recordVideo=a;this.diskStorage.mkdir(cr),this.harPagesStream=this.diskStorage.createFileStream(`${cr}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${cr}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${cr}/resource-usage.ndjson`),this.resourceUsageSampler=g2({keepSamples:false,onSample:l=>{this.resourceUsageStream.write(`${JSON.stringify(l)}
8513
+ `}function xVe(e){return ` - ${e.path} (${e.status}, +${e.insertions??0} -${e.deletions??0})`}var sd={searchObservedTests:"search_observed_tests",searchSegments:"search_segments",getObservedTest:"get_observed_test",getSegment:"get_segment",listObservedTestsForSegment:"list_observed_tests_for_segment",addSelectedTest:"add_selected_test",removeSelectedTest:"remove_selected_test",viewSelectedTests:"view_selected_tests",submit:"submit_selection"},Goe="ai-select",xB=200,joe=z.object({query:z.string().min(1).max(2e3).describe("Natural-language query against App Graph node text."),k:z.number().int().min(1).max(50).describe("Max results to return. Start small (5-10) when narrowing a surface; raise for broad/exploratory searches.")}),_B=z.object({id:z.string().min(1)}),_Ve=z.object({testId:z.string().min(1).describe("Test id (from search_observed_tests results or the <inScopeTests> list)."),testName:z.string().min(1).max(500).optional().describe("Short human-readable test name (used in view_selected_tests output and logs)."),rationale:z.string().min(1).max(500).describe("Why this test should run for this diff. Reference the changed surface, not the test id."),relevanceLabel:nP.describe("high = directly exercises the changed surface; medium = adjacent feature coverage; low = broad smoke or fallback.")}),PVe=z.object({testId:z.string().min(1),reason:z.string().min(1).max(500).optional().describe("Why this test is being removed (for logs).")}),OVe=z.object({userSummary:z.string().min(1).max(2e3).describe("Plain-English summary written directly to the developer reading their CI output. 2-3 sentences in human terms about what kinds of tests were picked and why, referencing product surface (e.g. 'payment method UI', 'invoice export', 'sign-in retry') \u2014 not segment ids, observed-test ids, or tool calls. Example: 'Picked 14 tests covering payment-method UI because this PR changes the card-entry form. Also added 3 checkout end-to-end tests since payments are central to that flow.'"),anchorSegmentIds:z.array(z.string().min(1)).max(20).default([]).describe("Segment ids the agent identified as directly relevant to the change. Recorded in the plan for context.")});function $oe(e){let t={[sd.searchObservedTests]:tool({description:"Hybrid (vector + lexical) search over previously-observed tests in the App Graph. Use to find tests by name, goal, test path, or description.",inputSchema:joe,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.searchObservedTests({repository:e.repository,query:o.query,k:o.k});return re(V({text:JSON.stringify(r.results,null,2),section:"observed-test search results"}))},toModelOutput:({output:o})=>o}),[sd.searchSegments]:tool({description:"Hybrid (vector + lexical) search over App Graph segments. Use to find feature surfaces, journeys, or product areas relevant to the diff.",inputSchema:joe,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.searchSegments({repository:e.repository,query:o.query,k:o.k});return re(V({text:JSON.stringify(r.results,null,2),section:"segment search results"}))},toModelOutput:({output:o})=>o}),[sd.getObservedTest]:tool({description:"Fetch the full record for an observed test by test id (matched realizations, coverage edges, recent execution metadata).",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.getObservedTest(o.id);return re(V({text:JSON.stringify(r,null,2),section:`observed-test ${o.id}`}))},toModelOutput:({output:o})=>o}),[sd.getSegment]:tool({description:"Fetch a segment's realizations and feature memberships. Use to understand a candidate anchor segment before submitting.",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.getSegment(o.id);return re(V({text:JSON.stringify(r,null,2),section:`segment ${o.id}`}))},toModelOutput:({output:o})=>o}),[sd.listObservedTestsForSegment]:tool({description:"List observed tests whose realizations match a given segment. Useful for enumerating coverage of an anchor segment.",inputSchema:_B,execute:async o=>{e.toolCallCount+=1;let r=await e.apiClient.listObservedTestsForSegment(o.id);return re(V({text:JSON.stringify(r,null,2),section:`observed tests for segment ${o.id}`}))},toModelOutput:({output:o})=>o}),...MVe(e),[sd.addSelectedTest]:tool({description:`Add a test to the running selection list (or replace the entry if it is already on the list). Use throughout the investigation as evidence accumulates \u2014 do not wait until the end. Capped at ${xB} entries; remove low-value picks with remove_selected_test before adding more if you hit the cap.`,inputSchema:_Ve,execute:async o=>(e.toolCallCount+=1,e.inScopeTestIds.has(o.testId)?e.selectedTestCandidates.size>=xB&&!e.selectedTestCandidates.has(o.testId)?re(V({text:JSON.stringify({ok:false,reason:`selection list is at the ${xB}-test cap; remove a lower-value pick first`,total:e.selectedTestCandidates.size},null,2),section:"selection rejected"})):(e.selectedTestCandidates.set(o.testId,{testId:o.testId,testName:o.testName,rationale:o.rationale,relevanceLabel:o.relevanceLabel}),re(V({text:JSON.stringify({ok:true,testId:o.testId,total:e.selectedTestCandidates.size},null,2),section:"selection updated"}))):re(V({text:JSON.stringify({ok:false,reason:`testId "${o.testId}" is not in <inScopeTests>; only those tests can run, so this pick would be discarded. Find the matching test in <inScopeTests> by path/name and add it with that exact testId.`,testId:o.testId},null,2),section:"selection rejected"}))),toModelOutput:({output:o})=>o}),[sd.removeSelectedTest]:tool({description:"Remove a test from the running selection list. Use when new evidence shows a previously-added test is not relevant after all.",inputSchema:PVe,execute:async o=>{e.toolCallCount+=1;let r=e.selectedTestCandidates.delete(o.testId);return re(V({text:JSON.stringify({removed:r,testId:o.testId,total:e.selectedTestCandidates.size},null,2),section:"selection updated"}))},toModelOutput:({output:o})=>o}),[sd.viewSelectedTests]:tool({description:"View the current state of the selection list. Returns every added test with its rationale and relevance label, plus the running anchor-segment set. Use to check progress before submitting.",inputSchema:z.object({}),execute:async()=>{e.toolCallCount+=1;let o=Array.from(e.selectedTestCandidates.values()).map(r=>({testId:r.testId,testName:r.testName,rationale:r.rationale,relevanceLabel:r.relevanceLabel}));return re(V({text:JSON.stringify({selectedTests:o,anchorSegmentIds:Array.from(e.anchorSegmentIds),total:o.length},null,2),section:"current selection"}))},toModelOutput:({output:o})=>o}),[sd.submit]:tool({description:"Finalize the selection: provide the userSummary and the anchor-segment set. The list of tests itself is the running state built with add_selected_test / remove_selected_test \u2014 do not pass it here. Call this exactly once when investigation is complete.",inputSchema:OVe,execute:async o=>{for(let r of o.anchorSegmentIds)e.anchorSegmentIds.add(r);return e.finalSubmission={userSummary:o.userSummary,candidates:Array.from(e.selectedTestCandidates.values()),anchorSegmentIds:Array.from(e.anchorSegmentIds)},re(V({text:JSON.stringify({accepted:e.finalSubmission.candidates.length,anchorSegmentIds:e.finalSubmission.anchorSegmentIds},null,2),section:"selection submitted"}))},toModelOutput:({output:o})=>o})},n={};for(let[o,r]of Object.entries(t)){let i=yr({tool:r,name:o,logger:e.logger,logPrefix:"AI Select ",agentName:Goe});n[o]=fi({tool:i,name:o,spanName:`ai_select.tool.${o}`,attributes:{"momentic.agent_name":Goe}});}return n}function MVe(e){let t={};for(let n of Ib){let o=n(e.codeReadingContext);t[o.name]=NVe({tool:o.tool,context:e});}return t}function NVe(e){let t=e.tool,n=t.execute?.bind(t);return n?{...t,execute:async(o,r)=>(e.context.toolCallCount+=1,n(o,r))}:t}var Voe="gpt-5.5-2026-04-23",GVe=25,jVe=18e4,$Ve=4096;async function zoe(e){let t=e.logger.bindings().sessionId??randomUUID$1(),n=e.logger.child({agentName:"ai-select",sessionId:t}),o=await mkdtemp(ya.join(tmpdir$1(),`momentic-ai-select-${t}-`)),r={apiClient:e.apiClient,logger:n,repository:e.repository,codeReadingContext:{logger:n,repoRoot:e.repoRoot,baseSha:e.diff.mergeBase,headSha:e.diff.headSha,spoolDir:o},toolCallCount:0,inScopeTestIds:new Set(e.candidateTests.map(p=>p.testId)),selectedTestCandidates:new Map,anchorSegmentIds:new Set,finalSubmission:null},i=$oe(r),s=e.diff.changedFiles.reduce((p,m)=>p+(m.insertions??0)+(m.deletions??0),0),a={logger:n,streamType:"github-pr-summary",sessionId:t},l=e.generator.getAzureOpenAIModelFactory(a),c=e.generator.getOpenAIModelFactory({...a,useOpenAIResponsesWebSocket:true}),d=Date.now();try{let p=Di({providerFallback:{logger:n,providers:[{id:"azure",model:l(Voe)},{id:"openai",model:c(Voe)}]},system:Uoe(s),messages:[{role:"user",content:Hoe(e.diff,e.budgetCap,e.candidateTests)}],tools:i,stopWhen:[stepCountIs(GVe),hasToolCall("submit_selection")],maxOutputTokens:$Ve,abortSignal:AbortSignal.timeout(jVe),providerOptions:{openai:{reasoningEffort:"low",store:!1,textVerbosity:"low"},azure:{reasoningEffort:"low",store:!1,textVerbosity:"low"}}});await Promise.all([p.text,p.steps,p.response]);}catch(p){return n.error({err:p},"ai-select agent stream errored or was aborted"),{submission:null,reason:`AI selection failed: ${J(p)}`,toolCallCount:r.toolCallCount,durationMs:Date.now()-d}}finally{await rm$1(o,{recursive:true,force:true}).catch(p=>{n.warn({err:p,spoolDir:o},"failed to clean ai-select spool dir");});}let u=Date.now()-d;return r.finalSubmission?{submission:r.finalSubmission,toolCallCount:r.toolCallCount,durationMs:u}:(n.error({toolCallCount:r.toolCallCount,durationMs:u},"ai-select agent finished without calling submit_selection; falling open"),{submission:null,reason:"AI selection finished without returning a result.",toolCallCount:r.toolCallCount,durationMs:u})}var ad="/v1/app-graph",Ax=class{constructor(t,n){this.apiClient=t;this.logger=n;}async claim(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return lG.parse(n)}async getPlan(t){let n=new URLSearchParams({repository:t.repository,headSha:t.headSha}),o=await this.apiClient.sendRequest(`${ad}/ai-select/plan?${n.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return dG.parse(o)}async finalize(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return cG.parse(n)}async release(t){await this.apiClient.sendRequest(`${ad}/ai-select/release`,{method:"POST",body:{selectionPlanKey:t},retries:1,requestTimeoutMs:5e3}).catch(n=>{this.logger.warn({err:n,selectionPlanKey:t},"Failed to release ai-select lock");});}async searchObservedTests(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/search/observed-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rP.parse(n)}async searchSegments(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/search/segments`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rP.parse(n)}async getObservedTest(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/observed-tests/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return uG.parse(n)}async getSegment(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/segments/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return pG.parse(n)}async listObservedTestsForSegment(t){let n=await this.apiClient.sendRequest(`${ad}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{method:"GET",retries:2,requestTimeoutMs:1e4});return mG.parse(n)}},VVe=2e3,Woe=12e4;async function qoe(e){let t=Date.now()+(e.timeoutMs??Woe),n=0;for(;;){n+=1;let o=await e.client.claim(e.claim);if(o.status==="claimed")return {kind:"claimed",selectionPlanKey:o.selectionPlanKey,trackId:o.trackId};if(o.status==="ready")return {kind:"ready",plan:o.plan,planId:o.planId};if(Date.now()>=t)throw new Error(`ai-select: timed out waiting for plan after ${e.timeoutMs??Woe}ms`);e.logger.info({attempt:n,claimedBy:o.claimedBy},"ai-select plan computing on another shard; polling"),await Xe(o.retryAfterMs??VVe);}}async function zVe(e){try{return await bx({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return vB({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function PB(e){let t=new Ax(e.apiClient,e.logger),n;try{n=await bx({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger});}catch(a){let l=a instanceof Em?a.message:`Could not assemble diff against base ref: ${J(a)}.`,c=Foe({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),d=c?await vB({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:c,logger:e.logger}):null;if(d)n=d;else {let u=e.config?.onBaseUnavailable??"use-head";switch(u){case "fail":throw new Em(`AI selection base unavailable and ai.select.onBaseUnavailable is "fail": ${l}`);case "run-all":return {kind:"run-all",reason:l,diff:null};case "use-head":{let p=await zVe(e);if(p===null)return {kind:"run-all",reason:`Could not assemble diff against the HEAD commit's parent: ${l}`,diff:null};n=p;break}default:return ot(u)}}}if(n.changedFiles.length===0)return {kind:"run-none",reason:"No source-code changes detected between base and head.",diff:n};let o=await qoe({client:t,claim:{repository:e.repository,headSha:n.headSha,baseRef:n.baseRef,changedFiles:n.changedFiles.map(a=>a.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(o.kind==="ready")return {kind:"ready",plan:o.plan,planId:o.planId,mode:"SELECTED",diff:n};let r=await zoe({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:e.repoRoot,diff:n,budgetCap:e.budgetCap,candidateTests:e.candidateTests});if(r.submission===null)return await t.release(o.selectionPlanKey),{kind:"run-all",reason:r.reason,diff:n};let i=new Map(e.candidateTests.map(a=>[a.testId,a.testPath])),s=r.submission.candidates.map(a=>({testId:a.testId,testPath:i.get(a.testId)??null,name:a.testName??a.testId,rationale:a.rationale,relevanceLabel:a.relevanceLabel}));try{let a=await t.finalize({selectionPlanKey:o.selectionPlanKey,repository:e.repository,headSha:n.headSha,mode:"SELECTED",userSummary:r.submission.userSummary,toolCallCount:r.toolCallCount,selectedTests:s,anchorSegmentIds:r.submission.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap}});return {kind:"ready",plan:a.plan,planId:a.planId,mode:"SELECTED",diff:n}}catch(a){return e.logger.error({err:a},"ai-select finalize failed; falling back to run-all"),await t.release(o.selectionPlanKey),{kind:"run-all",reason:`Could not record selection plan: ${J(a)}.`,diff:n}}}var Koe=()=>process.exit(130),Yoe=()=>process.exit(143);process.on("SIGINT",Koe);process.on("SIGTERM",Yoe);function ET(){process.off("SIGINT",Koe),process.off("SIGTERM",Yoe);}function Cm(e){let t=e??YVe();return Joe()&&t===1&&C.warn("Running with --pixel-ratio=1 on a Retina screen. Viewport calculations may be incorrect; omit the flag to auto-detect."),t}function YVe(){let e=Joe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var Joe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function Ex(e,t=true,n=false){let o=ZVe(e),r=await XVe.which(o[0],true),i=o.slice(1),s=JVe.exec(QVe(r),i,{delay:100,silent:n});if(t)return s}var Xoe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function eze(e,{context:t}){return e instanceof Bn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${Xoe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${J(e)}`}function Qoe(e){return e instanceof Bn?e.rawError.includes("Resource not accessible by integration")?Xoe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":J(e)}function Zoe(e,t){C.error(eze(e,t));}function Cx(e){return ere(e,"runs","run")}function OB(e){return ere(e,"run-groups","run group")}function ere(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?nze(o,t,n):o;if(!z.guid().safeParse(r).success)throw new Error(`Invalid ${n} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function nze(e,t,n){let o;try{o=new URL(e);}catch{throw new Error(`Invalid ${n} URL: ${e}`)}let r=o.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${n} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function Rx(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(oze()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Tn="3.0.2",{checkCLIVersion:Si,getLatestCLIVersion:tre}=DQ({packageName:"momentic",currentVersion:Tn,changelogUrl:"https://github.com/momentic-ai/cli/blob/main/CHANGELOG.md",updateCommand:"npx momentic@latest upgrade"});sxe("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:ld,setAnalyticsIdentity:MB,shutdownAnalytics:nre}=FE({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:GQ});async function ft(){try{await Re(Promise.all([kE(),wt.flush(),nre(),VE()]),{milliseconds:5e3});}catch{}}async function wf({tests:e,momenticFiles:t,project:n,yes:o,include:r,exclude:i,labels:s,logger:a}){let l=new Set;if(e&&e.length>0){let d=e.some(p=>Bo__default.existsSync(p)),u=cwd();d?(u!==n.rootDir&&a.warn(`Test paths resolve against the current directory ('${u}'), not the project root ('${n.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!Bo__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let m;try{m=Bo__default.statSync(p).isDirectory();}catch(g){a.warn({err:g},`Skipping path ${p} because it cannot be read`);return}let h=Mn__default.resolve(p);Object.values(t.tests).filter(g=>m?g.fullFilePath.startsWith(h):g.fullFilePath===h).forEach(g=>{l.add(g.fullFilePath);});})):Object.values(t.tests).forEach(p=>{e.some(m=>p.relativePath.includes(m))&&l.add(p.fullFilePath);});}else !o&&!await ko("No test paths or substrings were provided. Do you want to run all tests?")&&(a.error("Cancelled by user."),process.exit(1)),Object.values(t.tests).forEach(u=>{l.add(u.fullFilePath);});for(let d of l){let u=Mn__default.relative(n.rootDir,d);r&&!r.some(p=>new RegExp(p).test(u))&&l.delete(d),i&&i.some(p=>new RegExp(p).test(u))&&l.delete(d);}let c=Array.from(l).map(async d=>{try{let u=await Oi(d,xe,t);if(Pg.gt(u.schemaVersion,at)&&a.warn(`Test ${d} has schema version ${u.schemaVersion}, which is greater than what is currently supported by this SDK. Please update your momentic package version to avoid unexpected behavior.`),s&&s.length>0){let p=u.labels||[];if(!s.some(h=>p.includes(h)))return null}return {...u,fullFilePath:d,relativeFilePath:Mn__default.relative(n.rootDir,d)}}catch(u){a.error(`Failed to read and resolve test at '${d}': ${J(u)}`),process.exit(1);}});return compact(await Promise.all(c))}function rre({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:n=false,skipQuarantined:o=false}){let[r,i]=partition(e,l=>l.disabled),[s,a]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:o?s:[],testsToRun:n?[]:a,quarantinedTestsToRun:o?[]:s}}function ire({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:n,testInputMatrix:o}){let r=[],i=(s,a,l)=>{o?o.forEach((c,d)=>{r.push({inputs:c,inputIndex:d,testDefinition:s,quarantined:a,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:s,quarantined:a,quarantinedMetadata:l});};return e.forEach(s=>i(s,false)),t.forEach(s=>i(s,true,n[s.id])),r}async function sre({orgId:e,codeEvalTools:t,logger:n,outputDefinitions:o,testContext:r}){let i={};for(let s of o){let{name:a,value:l}=s;i[a]=await Dr({orgId:e,s:l,localTools:t,logger:n,context:r});}return i}var are=new Set;async function lre({baseUrl:e,envName:t,devicePixelRatio:n,apiClient:o,test:r,storageClient:i,codeEvalTools:s,generator:a,orgId:l,variables:c,logger:d,customHeaders:u,testInputs:p,localBrowserConfig:m,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:S,browserTypeOverride:T,attemptedRemoteBrowserProviders:A}){let E={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:xe,mode:"runner"},{controller:v,context:I}=await iT({baseUrl:e,envName:t,test:r,variables:c,logger:d,orgId:l,localBrowserConfig:m,aiSettings:h,customHeaders:u,codeEvalTools:s,storage:i,enricher:new Uc(E,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:T,callbacks:{onNetworkPage:O=>f.onNetworkPage(O),onNetworkLogs:O=>f.onNetworkLogs(O)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:O,timestamp:_})=>{f.setActiveVideo(O,_);}}:void 0,validateBrowserType:O=>{RS(O)||(xe.warn({browserType:O,testName:r.name},"Browser required by test does not appear to be installed"),!are.has(O)&&(are.add(O),C.warn(`Browser ${O} does not appear to be installed. Run '${ap(O)}' if you hit launch errors.`)));},createRemoteBrowserConnection:m.remoteBrowser?async()=>{let O=await o.createRemoteBrowserConnection({runId:S,attemptedProviders:A});return O.provider&&A?.push(O.provider),O}:void 0});try{await rI({orgId:l,test:r,testInputs:p,localTools:s,logger:d,context:I});}catch(O){try{await v.browser.cleanup();}catch(_){d.error({err:_},"Failed to clean up browser after test input resolution failed");}throw O instanceof sT&&(C.error(O.message),process.exit(1)),O}return {controller:v,context:I}}function cre({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!Tc){let o="This test is ineligible for failure recovery since this does not appear to be a CI environment";return n.warn(o),C.debug(o),false}return true}async function dre({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,stepCallbacks:r}){let{orgId:i,userId:s,runId:a}=n,{runTracer:l,runGroupTracer:c,project:d,apiClient:u}=o,{controller:p,context:m,codeEvalTools:h,storageClient:g,logger:f,usageTracker:S,tracer:T}=t,{test:A,orgSettings:E}=e;f.info(`Running test '${A.name}' locally (run link: https://app.momentic.ai/runs/${a})`);let v={controller:p,storage:g,usageTracker:S,context:m,logger:f,codeEvalTools:h},I={orgId:i,userId:s,runId:a,testMetadata:A,steps:A.steps,beforeSteps:A.beforeSteps,afterSteps:A.afterSteps,orgSettings:E},O={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await cre({testAdvancedSettings:A.advanced,orgSettings:E.ai,logger:f})};return dee({fixtures:v,inputs:I,options:O,callbacks:{step:r??{},test:{onTestComplete:async()=>{await p.browser.cleanup(),await h.dispose();}}},testParams:{attemptTracer:T},runParams:{runTracer:l,runGroupTracer:c,project:d,apiClient:u,captureEvent:ld,abortSignal:o.abortSignal}})}async function ure(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await uze(e)}catch(r){Md(r);let i="Fatal error running test";n.error({err:r},i),C.error({err:r},i);let s=op(r);return {results:[],parameters:e,failureReason:"UnknownError",failureDetails:{errorMessage:s.message,errorStack:s.stack},status:"FAILED",attempts:0,test:t,filePath:t.relativeFilePath,startedAt:o,lastAttemptStartedAt:o,finishedAt:new Date,outputs:{},quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata}}}async function uze(e){let{testDefinition:t,project:n,apiClient:o,orgId:r,userId:i,urlOverride:s,runGroupTracer:a,logger:l,gitMetadata:c,cacheOptions:d,runId:u,testInputs:p,quarantined:m,quarantinedMetadata:h,usageTracker:g}=e,f=new vg(o,r),S=Vp({logger:l,orgId:r,client:o,gitMetadata:c,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:d.noCache,isolateCachesByEnvironment:n.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),{envName:T,resolvedEnv:A,environmentVariables:E,baseUrl:v}=XR({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:B=>Bp(B,n,l)}),I=await Gd({cacheStorage:S,logger:l,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:T,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),O=I.steps,_=I.beforeSteps??void 0,R=I.afterSteps??void 0,x=await a.startRun({logger:l,runId:u,originalSteps:{beforeSteps:t.beforeSteps,steps:t.steps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:v,environmentName:T,schemaVersion:t.schemaVersion,resolvedInputs:p,quarantined:m,quarantinedReason:h?.quarantinedReason,aiSettings:e.project.config.ai}),P=l.child(x.loggerBindings||{});Object.entries(x.envVarBindings||{}).forEach(([B,G])=>{E[B]=G;});let H=await pze({...e,variables:E,envName:T,resolvedEnv:A,baseUrl:v,storageClient:f,tracer:x,runGroupTracer:a,logger:P,cacheStorage:S,stepsWithCaches:O,beforeStepsWithCaches:_,afterStepsWithCaches:R,usageTracker:g});return await x.finish({logger:l,status:H.status,finishedAt:H.finishedAt,failureDetails:H.failureDetails,failureReason:H.failureReason,isFlake:H.isFlake,failureRecoveryDetails:H.failureRecoveryDetails}),{runId:x.runId,...H}}async function pze(e){let{testDefinition:t,stepsWithCaches:n,beforeStepsWithCaches:o,afterStepsWithCaches:r,project:i,regenerateGoldenFiles:s,apiClient:a,generator:l,baseUrl:c,storageClient:d,orgId:u,userId:p,envName:m,urlOverride:h,customHeaders:g,testInputs:f,variables:S,resolvedEnv:T,retriesOverride:A,devicePixelRatio:E,logUpdate:v,tracer:I,runGroupTracer:O,logger:_,cacheStorage:R,gitMetadata:x,quarantined:P,quarantinedMetadata:H,usageTracker:B}=e,G=i.config.ai?.aiFailureAnalysis??false,ie=new Date,Z=new Sg(i,a,s),j={...i.config},z={envName:m,urlOverride:h,customHeaders:g,testInputs:f},q={...i.config.browser||{},...T?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},X=q.remoteBrowser===true,te=[],U,se=Math.abs(A??t.retries??i.config.retries??1),ce=[];_.info({...x,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let ke=0;ke<=se;ke++){let Me=randomUUID(),we=await I.startAttempt(Me),tt=_.child(we.loggerBindings||{}),Be={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(o),afterSteps:cloneDeep(r)};ke!==0&&v("RETRY",`attempt ${ke+1}/${se+1}`);let ae=new Date,Fe=new Gc({httpClient:new ui({baseUrl:a.baseUrl,apiKey:a.apiKey,logger:tt,mode:"runner"}),fakerSeed:j.advanced?.fakerConstantSeed?$y:void 0});try{let{controller:st,context:Ke}=await lre({tracer:we,runId:I.runId,baseUrl:c,envName:m,apiClient:a,devicePixelRatio:E,logger:tt,storageClient:d,codeEvalTools:Fe,test:Be,generator:l,orgId:u,variables:S,customHeaders:g,testInputs:f,localBrowserConfig:q,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:te,aiSettings:{...i.config.ai||{},...Be.advanced||{}},visualDiffScreenshotStorage:Z});e.abortSignal&&(e.abortSignal.aborted?st.executeAbortController.abort():e.abortSignal.addEventListener("abort",()=>{st.executeAbortController.abort();},{once:!0})),U=await dre({attemptMetadata:{attemptNumber:ke+1,orgId:u,userId:p,runId:I.runId},attemptFixtures:{logger:tt,storageClient:d,usageTracker:B,codeEvalTools:Fe,context:Ke,controller:st,tracer:we},attemptInputs:{test:Be,orgSettings:j},runFixtures:{runTracer:I,runGroupTracer:O,project:i,apiClient:a,abortSignal:e.abortSignal},stepCallbacks:{onStepStart:e.onStepStart}});let De=new Date,Ei={logger:_,cacheStorage:R,orgId:u,testId:t.id,environment:m,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(o),afterSteps:cloneDeep(r)},updatedStepsWithCaches:{steps:Be.steps,beforeSteps:Be.beforeSteps,afterSteps:Be.afterSteps}};await Pp({logger:_,cacheStorage:R,orgId:u,testId:t.id,environment:m,stepLists:Ei.updatedStepsWithCaches,useSnapshotIdentityCache:i.config.fileFormat==="v2"}),U?.status==="PASSED"?await Op(Ei):U?.status==="FAILED"&&ke===se&&await Zh(Ei),await we.finish({logger:tt,result:U}),ce.unshift(U.status);let Ci=await sre({orgId:u,codeEvalTools:Fe,logger:tt,outputDefinitions:t.outputs??[],testContext:Ke}),Zs=IG(ce),Fa=ke+1;if(U.status!=="FAILED")return {...U,runAttemptId:Me,parameters:z,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:De,attempts:Fa,baseUrl:c,outputs:Ci,isFlake:Zs,quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X};let Hi=U.failedStepResult,fo=Hi?.message||"Unknown failure",Xn=Hi?.failureReason??lH(fo)??"UnknownError",xo=tt.child({failureReason:Xn,errorMessage:fo,numAttempts:(se+1).toString(),name:Be.name});if(ke<se){xo.warn(`Retrying failed execution attempt for run: ${fo}`);continue}xo.error(`Test failed after all exhausting attempts: ${fo}`);let $r=new Error(fo),Qn={errorMessage:fo,errorStack:$r.stack},$o;if(i.config.ai?.classification?.enabled===!0){let sn=Hi?.failureClassification;sn||(e.onStepStart?.("Classifying failure"),sn=await Uw({runTracer:I,runGroupTracer:O,outputDir:e.outputDir,orgId:u,project:i,generator:l,apiClient:a,logger:_,testPlatform:"web",aiSettings:i.config.ai,captureEvent:ld,abortSignal:e.abortSignal,failedStepMessage:Hi?.message})),sn&&($o=sn.classification.category,Xn=sn.classification.category,Qn.classification={reason:sn.classification.category,secondaryCategories:sn.classification.secondaryCategories,summary:sn.classification.reasoning,recoverable:sn.classification.recoverable,confidence:sn.classification.confidence,action:sn.action,citations:sn.classification.citations,source:"v2"});}else if(G){let sn;try{if(U.results&&U.results.length>0){e.onStepStart?.("Classifying failure");let{classification:Rs,aiFailureReason:L}=await WY({logger:tt,browserStateStorage:we,generator:l,fullResults:U,failureReason:Xn,error:$r,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});sn=Rs,$o=L;}}catch(Rs){tt.warn({err:Rs},"Failed to classify test results");}sn&&(Qn.classification=sn,Xn=$o??Xn,Qn.classification.source="v1");}return {...U,runAttemptId:Me,parameters:z,failureDetails:Qn,failureReason:Xn,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:De,attempts:ke+1,baseUrl:c,outputs:Ci,quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X}}catch(st){let Ke=`Encountered fatal platform error while running test '${Be.name}'`;tt.error({err:st},Ke),C.error({err:st},Ke);let De=op(st);return await we.finish({logger:tt,result:{status:"FAILED"}}),{status:"FAILED",failureDetails:{errorMessage:De.message,errorStack:De.stack},failureReason:"InternalPlatformError",runAttemptId:Me,results:[],parameters:z,test:Be,filePath:Be.relativeFilePath,startedAt:ie,lastAttemptStartedAt:ae,finishedAt:new Date,attempts:ke+1,baseUrl:c,outputs:{},quarantined:P,quarantinedMetadata:H,usedRemoteBrowser:X}}}throw new Error("This code should not be reachable")}function kB(e){return createHash("sha1").update(e).digest("hex")}var hze=["tab","view","mode","step"],gze=[/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i,/^(?=.*\d)[A-Za-z0-9_-]{16,256}$/,/^\d{3,32}$/,/^[0-9A-HJKMNP-TV-Z]{26}$/];function fze(e){return gze.some(t=>t.test(e))}function pre(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??hze),i=n.pathname.split("/").map(c=>c.length>0&&fze(c)?"{id}":c).join("/"),s=[],a=Array.from(n.searchParams.keys()).sort();for(let c of a){if(!o.has(c))continue;let d=n.searchParams.getAll(c).sort();for(let u of d)s.push(`${encodeURIComponent(c)}=${encodeURIComponent(u)}`);}let l=s.length>0?`?${s.join("&")}`:"";return `${n.protocol}//${n.host}${i}${l}`}var yze=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),Sze=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,bze=[/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,/\b[0-9a-f]{12,64}\b/gi,/\b[0-9A-HJKMNP-TV-Z]{26}\b/g,/\b\d{5,}\b/g,/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,16}\b/g],mre=new Set(["h1","h2","h3","h4","h5","h6"]),Tze=new Set(["input","select","textarea"]);function Aze(e){let t=e;for(let n of bze)t=t.replace(n,"{id}");return t}function hre(e){return Aze(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function Eze(e){let t=e.length;return t<=4?"txt:xs":t<=16?"txt:s":t<=64?"txt:m":t<=256?"txt:l":"txt:xl"}function Cze(e,t){return e==="href"?t.startsWith("#")?"href:hash":t.startsWith("/")?"href:rel":/^https?:\/\//.test(t)?"href:abs":/^(mailto|tel):/.test(t)?`href:${t.split(":")[0]}`:"href:other":Sze.test(t)?"@gen":hre(t)}function gre(e,t,n){let o=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),s=`<${o}@${i}`;if(r!==void 0&&(s+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>yze.has(c.toLowerCase())).sort();for(let c of l){let d=c.toLowerCase();if(d==="role")continue;let u=e.attributes[c];if(u===void 0)continue;let p=Cze(d,u);s+=` ${d}=${p}`;}}n.tokens.push(s);let a=e.text?.trim();a!==void 0&&a.length>0&&(r==="button"||r==="link"||r==="heading"||o==="button"||o==="a"||o==="label"||mre.has(o)?n.tokens.push(`label=${hre(a)}`):n.tokens.push(Eze(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(Tze.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(mre.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])gre(l,t+1,n);}function fre(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return gre(e,0,t),{tokens:t.tokens,counts:t.counts}}function yre(e,t){let n=new TextEncoder().encode(e),o=n.length,r=Math.floor(o/4),i=t>>>0,s=3432918353,a=461845907;for(let u=0;u<r;u++){let p=u*4,m=n[p]|n[p+1]<<8|n[p+2]<<16|n[p+3]<<24;m=Math.imul(m,s),m=m<<15|m>>>17,m=Math.imul(m,a),i^=m,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=o&3,d=r*4;return c===3&&(l^=n[d+2]<<16),c>=2&&(l^=n[d+1]<<8),c>=1&&(l^=n[d],l=Math.imul(l,s),l=l<<15|l>>>17,l=Math.imul(l,a),i^=l),i^=o,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var vx=128,Rze=4294967295,vze=(()=>{let e=[];for(let t=0;t<vx;t++)e.push(yre(`perm:${t}`,0));return e})();function Sre(e){let t=new Uint32Array(vx);for(let o=0;o<vx;o++)t[o]=Rze;let n=new Set(e);for(let o of n)for(let r=0;r<vx;r++){let i=yre(o,vze[r]);i<t[r]&&(t[r]=i);}return t}var Ize=32;function DB(e){let t=pre(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=fre(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=Sre(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,Ize),minhash:Array.from(i),canonicalUrl:t}}var xze=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),wn="\uFFFD",M;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z";})(M||(M={}));var bi={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function wx(e){return e>=55296&&e<=57343}function bre(e){return e>=56320&&e<=57343}function Tre(e,t){return (e-55296)*1024+9216+t}function Ix(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function xx(e){return e>=64976&&e<=65007||xze.has(e)}var ee;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text";})(ee||(ee={}));var Pze=65536,_x=class{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=false,this.lastChunkWritten=false,this.endOfChunkHit=false,this.bufferWaterline=Pze,this.isEol=false,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1;}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,n){let{line:o,col:r,offset:i}=this,s=r+n,a=i+n;return {code:t,startLine:o,endLine:o,startCol:s,endCol:s,startOffset:a,endOffset:a}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)));}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos;}_processSurrogate(t){if(this.pos!==this.html.length-1){let n=this.html.charCodeAt(this.pos+1);if(bre(n))return this.pos++,this._addGap(),Tre(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,M.EOF;return this._err(ee.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0);}write(t,n){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=n;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,n){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(n)return this.html.startsWith(t,this.pos);for(let o=0;o<t.length;o++)if((this.html.charCodeAt(this.pos+o)|32)!==t.charCodeAt(o))return false;return true}peek(t){let n=this.pos+t;if(n>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,M.EOF;let o=this.html.charCodeAt(n);return o===M.CARRIAGE_RETURN?M.LINE_FEED:o}advance(){if(this.pos++,this.isEol&&(this.isEol=false,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,M.EOF;let t=this.html.charCodeAt(this.pos);return t===M.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,M.LINE_FEED):t===M.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,wx(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===M.LINE_FEED||t===M.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){Ix(t)?this._err(ee.controlCharacterInInputStream):xx(t)&&this._err(ee.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var Gt;(function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION";})(Gt||(Gt={}));function Px(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}var Mze=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function Are(e){return e>=55296&&e<=57343||e>1114111?65533:Mze.get(e)??e}function Ere(e){let t=atob(e),n=t.length&-2,o=new Uint16Array(n/2);for(let r=0,i=0;r<n;r+=2){let s=t.charCodeAt(r),a=t.charCodeAt(r+1);o[i++]=s|a<<8;}return o}var FB=Ere("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var Hr;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.FLAG13=8192]="FLAG13",e[e.BRANCH_LENGTH=8064]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE";})(Hr||(Hr={}));var Jn;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z";})(Jn||(Jn={}));var Cre=32;function BB(e){return e>=Jn.ZERO&&e<=Jn.NINE}function Nze(e){return e>=Jn.UPPER_A&&e<=Jn.UPPER_F||e>=Jn.LOWER_A&&e<=Jn.LOWER_F}function Lze(e){return e>=Jn.UPPER_A&&e<=Jn.UPPER_Z||e>=Jn.LOWER_A&&e<=Jn.LOWER_Z||BB(e)}function kze(e){return e===Jn.EQUALS||Lze(e)}var rr;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity";})(rr||(rr={}));var Kl;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(Kl||(Kl={}));var Ox=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=rr.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Kl.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=rr.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case rr.EntityStart:return t.charCodeAt(n)===Jn.NUM?(this.state=rr.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=rr.NamedEntity,this.stateNamedEntity(t,n));case rr.NumericStart:return this.stateNumericStart(t,n);case rr.NumericDecimal:return this.stateNumericDecimal(t,n);case rr.NumericHex:return this.stateNumericHex(t,n);case rr.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|Cre)===Jn.LOWER_X?(this.state=rr.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=rr.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(BB(o)||Nze(o)){let r=o<=Jn.NINE?o-Jn.ZERO:(o|Cre)-Jn.LOWER_A+10;this.result=this.result*16+r,this.consumed++,n++;}else return this.emitNumericEntity(o,3)}return -1}stateNumericDecimal(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(BB(o))this.result=this.result*10+(o-Jn.ZERO),this.consumed++,n++;else return this.emitNumericEntity(o,2)}return -1}emitNumericEntity(t,n){if(this.consumed<=n)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===Jn.SEMI)this.consumed+=1;else if(this.decodeMode===Kl.Strict)return 0;return this.emitCodePoint(Are(this.result),this.consumed),this.errors&&(t!==Jn.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&Hr.FLAG13){let a=(r&Hr.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Hr.JUMP_TABLE;if(t.charCodeAt(n)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}for(;this.runConsumed<a;){if(n>=t.length)return -1;let l=this.runConsumed-1,c=o[this.treeIndex+1+(l>>1)],d=l%2===0?c&255:c>>8&255;if(t.charCodeAt(n)!==d)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(a>>1),r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===Jn.SEMI&&i!==0&&r&Hr.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=Dze(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===Kl.Attribute&&(i===0||kze(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&Hr.VALUE_LENGTH)>>14,i!==0){if(s===Jn.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Kl.Strict&&!(r&Hr.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}n++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:n}=this,o=(n[t]&Hr.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,o,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,o){let{decodeTree:r}=this;return this.emitCodePoint(n===1?r[t]&~(Hr.VALUE_LENGTH|Hr.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case rr.NamedEntity:return this.result!==0&&(this.decodeMode!==Kl.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case rr.NumericDecimal:return this.emitNumericEntity(0,2);case rr.NumericHex:return this.emitNumericEntity(0,3);case rr.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case rr.EntityStart:return 0}}};function Dze(e,t,n,o){let r=(t&Hr.BRANCH_LENGTH)>>7,i=t&Hr.JUMP_TABLE;if(r===0)return i!==0&&o===i?n:-1;if(i){let c=o-i;return c<0||c>=r?-1:e[n+c]-1}let s=r+1>>1,a=0,l=r-1;for(;a<=l;){let c=a+l>>>1,d=c>>1,p=e[n+d]>>(c&1)*8&255;if(p<o)a=c+1;else if(p>o)l=c-1;else return e[n+s+c]}return -1}var he;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/";})(he||(he={}));var cd;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size";})(cd||(cd={}));var Ti;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Ti||(Ti={}));var Y;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp";})(Y||(Y={}));var y;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP";})(y||(y={}));var Fze=new Map([[Y.A,y.A],[Y.ADDRESS,y.ADDRESS],[Y.ANNOTATION_XML,y.ANNOTATION_XML],[Y.APPLET,y.APPLET],[Y.AREA,y.AREA],[Y.ARTICLE,y.ARTICLE],[Y.ASIDE,y.ASIDE],[Y.B,y.B],[Y.BASE,y.BASE],[Y.BASEFONT,y.BASEFONT],[Y.BGSOUND,y.BGSOUND],[Y.BIG,y.BIG],[Y.BLOCKQUOTE,y.BLOCKQUOTE],[Y.BODY,y.BODY],[Y.BR,y.BR],[Y.BUTTON,y.BUTTON],[Y.CAPTION,y.CAPTION],[Y.CENTER,y.CENTER],[Y.CODE,y.CODE],[Y.COL,y.COL],[Y.COLGROUP,y.COLGROUP],[Y.DD,y.DD],[Y.DESC,y.DESC],[Y.DETAILS,y.DETAILS],[Y.DIALOG,y.DIALOG],[Y.DIR,y.DIR],[Y.DIV,y.DIV],[Y.DL,y.DL],[Y.DT,y.DT],[Y.EM,y.EM],[Y.EMBED,y.EMBED],[Y.FIELDSET,y.FIELDSET],[Y.FIGCAPTION,y.FIGCAPTION],[Y.FIGURE,y.FIGURE],[Y.FONT,y.FONT],[Y.FOOTER,y.FOOTER],[Y.FOREIGN_OBJECT,y.FOREIGN_OBJECT],[Y.FORM,y.FORM],[Y.FRAME,y.FRAME],[Y.FRAMESET,y.FRAMESET],[Y.H1,y.H1],[Y.H2,y.H2],[Y.H3,y.H3],[Y.H4,y.H4],[Y.H5,y.H5],[Y.H6,y.H6],[Y.HEAD,y.HEAD],[Y.HEADER,y.HEADER],[Y.HGROUP,y.HGROUP],[Y.HR,y.HR],[Y.HTML,y.HTML],[Y.I,y.I],[Y.IMG,y.IMG],[Y.IMAGE,y.IMAGE],[Y.INPUT,y.INPUT],[Y.IFRAME,y.IFRAME],[Y.KEYGEN,y.KEYGEN],[Y.LABEL,y.LABEL],[Y.LI,y.LI],[Y.LINK,y.LINK],[Y.LISTING,y.LISTING],[Y.MAIN,y.MAIN],[Y.MALIGNMARK,y.MALIGNMARK],[Y.MARQUEE,y.MARQUEE],[Y.MATH,y.MATH],[Y.MENU,y.MENU],[Y.META,y.META],[Y.MGLYPH,y.MGLYPH],[Y.MI,y.MI],[Y.MO,y.MO],[Y.MN,y.MN],[Y.MS,y.MS],[Y.MTEXT,y.MTEXT],[Y.NAV,y.NAV],[Y.NOBR,y.NOBR],[Y.NOFRAMES,y.NOFRAMES],[Y.NOEMBED,y.NOEMBED],[Y.NOSCRIPT,y.NOSCRIPT],[Y.OBJECT,y.OBJECT],[Y.OL,y.OL],[Y.OPTGROUP,y.OPTGROUP],[Y.OPTION,y.OPTION],[Y.P,y.P],[Y.PARAM,y.PARAM],[Y.PLAINTEXT,y.PLAINTEXT],[Y.PRE,y.PRE],[Y.RB,y.RB],[Y.RP,y.RP],[Y.RT,y.RT],[Y.RTC,y.RTC],[Y.RUBY,y.RUBY],[Y.S,y.S],[Y.SCRIPT,y.SCRIPT],[Y.SEARCH,y.SEARCH],[Y.SECTION,y.SECTION],[Y.SELECT,y.SELECT],[Y.SOURCE,y.SOURCE],[Y.SMALL,y.SMALL],[Y.SPAN,y.SPAN],[Y.STRIKE,y.STRIKE],[Y.STRONG,y.STRONG],[Y.STYLE,y.STYLE],[Y.SUB,y.SUB],[Y.SUMMARY,y.SUMMARY],[Y.SUP,y.SUP],[Y.TABLE,y.TABLE],[Y.TBODY,y.TBODY],[Y.TEMPLATE,y.TEMPLATE],[Y.TEXTAREA,y.TEXTAREA],[Y.TFOOT,y.TFOOT],[Y.TD,y.TD],[Y.TH,y.TH],[Y.THEAD,y.THEAD],[Y.TITLE,y.TITLE],[Y.TR,y.TR],[Y.TRACK,y.TRACK],[Y.TT,y.TT],[Y.U,y.U],[Y.UL,y.UL],[Y.SVG,y.SVG],[Y.VAR,y.VAR],[Y.WBR,y.WBR],[Y.XMP,y.XMP]]);function Rm(e){var t;return (t=Fze.get(e))!==null&&t!==void 0?t:y.UNKNOWN}var be=y,Rre={[he.HTML]:new Set([be.ADDRESS,be.APPLET,be.AREA,be.ARTICLE,be.ASIDE,be.BASE,be.BASEFONT,be.BGSOUND,be.BLOCKQUOTE,be.BODY,be.BR,be.BUTTON,be.CAPTION,be.CENTER,be.COL,be.COLGROUP,be.DD,be.DETAILS,be.DIR,be.DIV,be.DL,be.DT,be.EMBED,be.FIELDSET,be.FIGCAPTION,be.FIGURE,be.FOOTER,be.FORM,be.FRAME,be.FRAMESET,be.H1,be.H2,be.H3,be.H4,be.H5,be.H6,be.HEAD,be.HEADER,be.HGROUP,be.HR,be.HTML,be.IFRAME,be.IMG,be.INPUT,be.LI,be.LINK,be.LISTING,be.MAIN,be.MARQUEE,be.MENU,be.META,be.NAV,be.NOEMBED,be.NOFRAMES,be.NOSCRIPT,be.OBJECT,be.OL,be.P,be.PARAM,be.PLAINTEXT,be.PRE,be.SCRIPT,be.SECTION,be.SELECT,be.SOURCE,be.STYLE,be.SUMMARY,be.TABLE,be.TBODY,be.TD,be.TEMPLATE,be.TEXTAREA,be.TFOOT,be.TH,be.THEAD,be.TITLE,be.TR,be.TRACK,be.UL,be.WBR,be.XMP]),[he.MATHML]:new Set([be.MI,be.MO,be.MN,be.MS,be.MTEXT,be.ANNOTATION_XML]),[he.SVG]:new Set([be.TITLE,be.FOREIGN_OBJECT,be.DESC]),[he.XLINK]:new Set,[he.XML]:new Set,[he.XMLNS]:new Set},CT=new Set([be.H1,be.H2,be.H3,be.H4,be.H5,be.H6]);new Set([Y.STYLE,Y.SCRIPT,Y.XMP,Y.IFRAME,Y.NOEMBED,Y.NOFRAMES,Y.PLAINTEXT]);var k;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND";})(k||(k={}));var Gr={DATA:k.DATA,RCDATA:k.RCDATA,RAWTEXT:k.RAWTEXT,SCRIPT_DATA:k.SCRIPT_DATA,PLAINTEXT:k.PLAINTEXT,CDATA_SECTION:k.CDATA_SECTION};function Uze(e){return e>=M.DIGIT_0&&e<=M.DIGIT_9}function RT(e){return e>=M.LATIN_CAPITAL_A&&e<=M.LATIN_CAPITAL_Z}function Hze(e){return e>=M.LATIN_SMALL_A&&e<=M.LATIN_SMALL_Z}function qu(e){return Hze(e)||RT(e)}function vre(e){return qu(e)||Uze(e)}function Mx(e){return e+32}function Ire(e){return e===M.SPACE||e===M.LINE_FEED||e===M.TABULATION||e===M.FORM_FEED}function wre(e){return Ire(e)||e===M.SOLIDUS||e===M.GREATER_THAN_SIGN}function Gze(e){return e===M.NULL?ee.nullCharacterReference:e>1114111?ee.characterReferenceOutsideUnicodeRange:wx(e)?ee.surrogateCharacterReference:xx(e)?ee.noncharacterCharacterReference:Ix(e)||e===M.CARRIAGE_RETURN?ee.controlCharacterReference:null}var vT=class{constructor(t,n){this.options=t,this.handler=n,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=k.DATA,this.returnState=k.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new _x(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new Ox(FB,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ee.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(ee.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=Gze(o);r&&this._err(r,1);}}:void 0);}_err(t,n=0){var o,r;(r=(o=this.handler).onParseError)===null||r===void 0||r.call(o,this.preprocessor.getError(t,n));}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=true;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t);}this.inLoop=false;}}pause(){this.paused=true;}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=false,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.());}write(t,n,o){this.active=true,this.preprocessor.write(t,n),this._runParsingLoop(),this.paused||o?.();}insertHtmlAtCurrentPos(t){this.active=true,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop();}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=false,true):false}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let n=0;n<t;n++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,n){return this.preprocessor.startsWith(t,n)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:Gt.START_TAG,tagName:"",tagID:y.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:Gt.END_TAG,tagName:"",tagID:y.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:Gt.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:Gt.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,n){this.currentCharacterToken={type:t,chars:n,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,n;let o=this.currentToken;if(Px(o,this.currentAttr.name)===null){if(o.attrs.push(this.currentAttr),o.location&&this.currentLocation){let r=(t=(n=o.location).attrs)!==null&&t!==void 0?t:n.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(ee.duplicateAttribute);}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset);}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1);}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=Rm(t.tagName),t.type===Gt.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ee.endTagWithAttributes),t.selfClosing&&this._err(ee.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk();}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk();}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk();}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case Gt.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Gt.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Gt.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null;}}_emitEOFToken(){let t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:Gt.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,n);}_emitCodePoint(t){let n=Ire(t)?Gt.WHITESPACE_CHARACTER:t===M.NULL?Gt.NULL_CHARACTER:Gt.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(Gt.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=k.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Kl.Attribute:Kl.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===k.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===k.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===k.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case k.DATA:{this._stateData(t);break}case k.RCDATA:{this._stateRcdata(t);break}case k.RAWTEXT:{this._stateRawtext(t);break}case k.SCRIPT_DATA:{this._stateScriptData(t);break}case k.PLAINTEXT:{this._statePlaintext(t);break}case k.TAG_OPEN:{this._stateTagOpen(t);break}case k.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case k.TAG_NAME:{this._stateTagName(t);break}case k.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case k.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case k.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case k.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case k.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case k.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case k.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case k.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case k.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case k.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case k.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case k.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case k.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case k.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case k.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case k.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case k.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case k.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case k.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case k.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case k.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case k.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case k.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case k.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case k.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case k.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case k.BOGUS_COMMENT:{this._stateBogusComment(t);break}case k.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case k.COMMENT_START:{this._stateCommentStart(t);break}case k.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case k.COMMENT:{this._stateComment(t);break}case k.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case k.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case k.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case k.COMMENT_END:{this._stateCommentEnd(t);break}case k.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case k.DOCTYPE:{this._stateDoctype(t);break}case k.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case k.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case k.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case k.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case k.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case k.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case k.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case k.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case k.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case k.CDATA_SECTION:{this._stateCdataSection(t);break}case k.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case k.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case k.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case k.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.TAG_OPEN;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitCodePoint(t);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case M.AMPERSAND:{this._startCharacterReference();break}case M.LESS_THAN_SIGN:{this.state=k.RCDATA_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.RAWTEXT_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(qu(t))this._createStartTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.EXCLAMATION_MARK:{this.state=k.MARKUP_DECLARATION_OPEN;break}case M.SOLIDUS:{this.state=k.END_TAG_OPEN;break}case M.QUESTION_MARK:{this._err(ee.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);break}case M.EOF:{this._err(ee.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ee.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=k.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(qu(t))this._createEndTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.GREATER_THAN_SIGN:{this._err(ee.missingEndTagName),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ee.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.SOLIDUS:{this.state=k.SELF_CLOSING_START_TAG;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentTagToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.tagName+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateRcdataLessThanSign(t){t===M.SOLIDUS?this.state=k.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=k.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){qu(t)?(this.state=k.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=k.RCDATA,this._stateRcdata(t));}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,false))return !this._ensureHibernation();this._createEndTagToken();let n=this.currentToken;switch(n.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=k.BEFORE_ATTRIBUTE_NAME,false;case M.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=k.SELF_CLOSING_START_TAG,false;case M.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=k.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===M.SOLIDUS?this.state=k.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){qu(t)?(this.state=k.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case M.SOLIDUS:{this.state=k.SCRIPT_DATA_END_TAG_OPEN;break}case M.EXCLAMATION_MARK:{this.state=k.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=k.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){qu(t)?(this.state=k.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===M.HYPHEN_MINUS?(this.state=k.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===M.HYPHEN_MINUS?(this.state=k.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=k.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case M.HYPHEN_MINUS:{this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case M.GREATER_THAN_SIGN:{this.state=k.SCRIPT_DATA,this._emitChars(">");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===M.SOLIDUS?this.state=k.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:qu(t)?(this._emitChars("<"),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagOpen(t){qu(t)?(this.state=k.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(bi.SCRIPT,false)&&wre(this.preprocessor.peek(bi.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<bi.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=k.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case M.HYPHEN_MINUS:{this._emitChars("-");break}case M.LESS_THAN_SIGN:{this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case M.GREATER_THAN_SIGN:{this.state=k.SCRIPT_DATA,this._emitChars(">");break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(wn);break}case M.EOF:{this._err(ee.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===M.SOLIDUS?(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(bi.SCRIPT,false)&&wre(this.preprocessor.peek(bi.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<bi.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=k.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.SOLIDUS:case M.GREATER_THAN_SIGN:case M.EOF:{this.state=k.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case M.EQUALS_SIGN:{this._err(ee.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=k.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=k.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:case M.SOLIDUS:case M.GREATER_THAN_SIGN:case M.EOF:{this._leaveAttrName(),this.state=k.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case M.EQUALS_SIGN:{this._leaveAttrName(),this.state=k.BEFORE_ATTRIBUTE_VALUE;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:{this._err(ee.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.name+=wn;break}default:this.currentAttr.name+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateAfterAttributeName(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.SOLIDUS:{this.state=k.SELF_CLOSING_START_TAG;break}case M.EQUALS_SIGN:{this.state=k.BEFORE_ATTRIBUTE_VALUE;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=k.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{this.state=k.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this.state=k.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingAttributeValue),this.state=k.DATA,this.emitCurrentTagToken();break}default:this.state=k.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case M.APOSTROPHE:{this.state=k.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this._leaveAttrValue(),this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.AMPERSAND:{this._startCharacterReference();break}case M.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=k.DATA,this.emitCurrentTagToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),this.currentAttr.value+=wn;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:case M.EQUALS_SIGN:case M.GRAVE_ACCENT:{this._err(ee.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this._leaveAttrValue(),this.state=k.BEFORE_ATTRIBUTE_NAME;break}case M.SOLIDUS:{this._leaveAttrValue(),this.state=k.SELF_CLOSING_START_TAG;break}case M.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._err(ee.missingWhitespaceBetweenAttributes),this.state=k.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case M.GREATER_THAN_SIGN:{let n=this.currentToken;n.selfClosing=true,this.state=k.DATA,this.emitCurrentTagToken();break}case M.EOF:{this._err(ee.eofInTag),this._emitEOFToken();break}default:this._err(ee.unexpectedSolidusInTag),this.state=k.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this.emitCurrentComment(n),this._emitEOFToken();break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.data+=wn;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(bi.DASH_DASH,true)?(this._createCommentToken(bi.DASH_DASH.length+1),this.state=k.COMMENT_START):this._consumeSequenceIfMatch(bi.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(bi.DOCTYPE.length+1),this.state=k.DOCTYPE):this._consumeSequenceIfMatch(bi.CDATA_START,true)?this.inForeignNode?this.state=k.CDATA_SECTION:(this._err(ee.cdataInHtmlContent),this._createCommentToken(bi.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=k.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ee.incorrectlyOpenedComment),this._createCommentToken(2),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_START_DASH;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptClosingOfEmptyComment),this.state=k.DATA;let n=this.currentToken;this.emitCurrentComment(n);break}default:this.state=k.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptClosingOfEmptyComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=k.COMMENT,this._stateComment(t);}}_stateComment(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END_DASH;break}case M.LESS_THAN_SIGN:{n.data+="<",this.state=k.COMMENT_LESS_THAN_SIGN;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.data+=wn;break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let n=this.currentToken;switch(t){case M.EXCLAMATION_MARK:{n.data+="!",this.state=k.COMMENT_LESS_THAN_SIGN_BANG;break}case M.LESS_THAN_SIGN:{n.data+="<";break}default:this.state=k.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===M.HYPHEN_MINUS?this.state=k.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=k.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===M.HYPHEN_MINUS?this.state=k.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=k.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==M.GREATER_THAN_SIGN&&t!==M.EOF&&this._err(ee.nestedComment),this.state=k.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{this.state=k.COMMENT_END;break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=k.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentComment(n);break}case M.EXCLAMATION_MARK:{this.state=k.COMMENT_END_BANG;break}case M.HYPHEN_MINUS:{n.data+="-";break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--",this.state=k.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let n=this.currentToken;switch(t){case M.HYPHEN_MINUS:{n.data+="--!",this.state=k.COMMENT_END_DASH;break}case M.GREATER_THAN_SIGN:{this._err(ee.incorrectlyClosedComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ee.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--!",this.state=k.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case M.EOF:{this._err(ee.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingWhitespaceBeforeDoctypeName),this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(RT(t))this._createDoctypeToken(String.fromCharCode(Mx(t))),this.state=k.DOCTYPE_NAME;else switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.NULL:{this._err(ee.unexpectedNullCharacter),this._createDoctypeToken(wn),this.state=k.DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=k.DOCTYPE_NAME;}}_stateDoctypeName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.AFTER_DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.name+=wn;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(RT(t)?Mx(t):t);}}_stateAfterDoctypeName(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(bi.PUBLIC,false)?this.state=k.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(bi.SYSTEM,false)?this.state=k.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ee.invalidCharacterSequenceAfterDoctypeName),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.publicId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case M.APOSTROPHE:{this.state=k.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.publicId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case M.GREATER_THAN_SIGN:{this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.QUOTATION_MARK:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:{this.state=k.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.QUOTATION_MARK:{this._err(ee.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ee.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.QUOTATION_MARK:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ee.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case M.QUOTATION_MARK:{this.state=k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.systemId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case M.APOSTROPHE:{this.state=k.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case M.NULL:{this._err(ee.unexpectedNullCharacter),n.systemId+=wn;break}case M.GREATER_THAN_SIGN:{this._err(ee.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case M.SPACE:case M.LINE_FEED:case M.TABULATION:case M.FORM_FEED:break;case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ee.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ee.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=k.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let n=this.currentToken;switch(t){case M.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.NULL:{this._err(ee.unexpectedNullCharacter);break}case M.EOF:{this.emitCurrentDoctype(n),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case M.RIGHT_SQUARE_BRACKET:{this.state=k.CDATA_SECTION_BRACKET;break}case M.EOF:{this._err(ee.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===M.RIGHT_SQUARE_BRACKET?this.state=k.CDATA_SECTION_END:(this._emitChars("]"),this.state=k.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case M.GREATER_THAN_SIGN:{this.state=k.DATA;break}case M.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=k.CDATA_SECTION,this._stateCdataSection(t);}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else {this.active=false,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=true;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(M.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&vre(this.preprocessor.peek(1))?k.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){vre(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===M.SEMICOLON&&this._err(ee.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var Ore=new Set([y.DD,y.DT,y.LI,y.OPTGROUP,y.OPTION,y.P,y.RB,y.RP,y.RT,y.RTC]),xre=new Set([...Ore,y.CAPTION,y.COLGROUP,y.TBODY,y.TD,y.TFOOT,y.TH,y.THEAD,y.TR]),Nx=new Set([y.APPLET,y.CAPTION,y.HTML,y.MARQUEE,y.OBJECT,y.TABLE,y.TD,y.TEMPLATE,y.TH]),jze=new Set([...Nx,y.OL,y.UL]),$ze=new Set([...Nx,y.BUTTON]),_re=new Set([y.ANNOTATION_XML,y.MI,y.MN,y.MO,y.MS,y.MTEXT]),Pre=new Set([y.DESC,y.FOREIGN_OBJECT,y.TITLE]),Vze=new Set([y.TR,y.TEMPLATE,y.HTML]),zze=new Set([y.TBODY,y.TFOOT,y.THEAD,y.TEMPLATE,y.HTML]),Wze=new Set([y.TABLE,y.TEMPLATE,y.HTML]),qze=new Set([y.TD,y.TH]),Lx=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,n,o){this.treeAdapter=n,this.handler=o,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=y.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===y.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===he.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,n){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=n,this.currentTagId=n,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,n,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,n){let o=this._indexOf(t);this.items[o]=n,o===this.stackTop&&(this.current=n);}insertAfter(t,n,o){let r=this._indexOf(t)+1;this.items.splice(r,0,n),this.tagIDs.splice(r,0,o),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop);}popUntilTagNamePopped(t){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(t,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==he.HTML);this.shortenToLength(Math.max(n,0));}shortenToLength(t){for(;this.stackTop>=t;){let n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop<t);}}popUntilElementPopped(t){let n=this._indexOf(t);this.shortenToLength(Math.max(n,0));}popUntilPopped(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(Math.max(o,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(CT,he.HTML);}popUntilTableCellPopped(){this.popUntilPopped(qze,he.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,n){for(let o=this.stackTop;o>=0;o--)if(t.has(this.tagIDs[o])&&this.treeAdapter.getNamespaceURI(this.items[o])===n)return o;return -1}clearBackTo(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(o+1);}clearBackToTableContext(){this.clearBackTo(Wze,he.HTML);}clearBackToTableBodyContext(){this.clearBackTo(zze,he.HTML);}clearBackToTableRowContext(){this.clearBackTo(Vze,he.HTML);}remove(t){let n=this._indexOf(t);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===y.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let n=this._indexOf(t)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===y.HTML}hasInDynamicScope(t,n){for(let o=this.stackTop;o>=0;o--){let r=this.tagIDs[o];switch(this.treeAdapter.getNamespaceURI(this.items[o])){case he.HTML:{if(r===t)return true;if(n.has(r))return false;break}case he.SVG:{if(Pre.has(r))return false;break}case he.MATHML:{if(_re.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,Nx)}hasInListItemScope(t){return this.hasInDynamicScope(t,jze)}hasInButtonScope(t){return this.hasInDynamicScope(t,$ze)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case he.HTML:{if(CT.has(n))return true;if(Nx.has(n))return false;break}case he.SVG:{if(Pre.has(n))return false;break}case he.MATHML:{if(_re.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===he.HTML)switch(this.tagIDs[n]){case t:return true;case y.TABLE:case y.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===he.HTML)switch(this.tagIDs[t]){case y.TBODY:case y.THEAD:case y.TFOOT:return true;case y.TABLE:case y.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===he.HTML)switch(this.tagIDs[n]){case t:return true;case y.OPTION:case y.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&Ore.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&xre.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&xre.has(this.currentTagId);)this.pop();}};var Ma;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Ma||(Ma={}));var Mre={type:Ma.Marker},kx=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,n){let o=[],r=n.length,i=this.treeAdapter.getTagName(t),s=this.treeAdapter.getNamespaceURI(t);for(let a=0;a<this.entries.length;a++){let l=this.entries[a];if(l.type===Ma.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===s){let d=this.treeAdapter.getAttrList(c);d.length===r&&o.push({idx:a,attrs:d});}}return o}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let n=this.treeAdapter.getAttrList(t),o=this._getNoahArkConditionCandidates(t,n);if(o.length<3)return;let r=new Map(n.map(s=>[s.name,s.value])),i=0;for(let s=0;s<o.length;s++){let a=o[s];a.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(a.idx,1));}}insertMarker(){this.entries.unshift(Mre);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Ma.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Ma.Element,element:t,token:n});}removeEntry(t){let n=this.entries.indexOf(t);n!==-1&&this.entries.splice(n,1);}clearToLastMarker(){let t=this.entries.indexOf(Mre);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Ma.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Ma.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Ma.Element&&n.element===t)}};var Na={createDocument(){return {nodeName:"#document",mode:Ti.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,n){return {nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return {nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return {nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e;},insertBefore(e,t,n){let o=e.childNodes.indexOf(n);e.childNodes.splice(o,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,n,o){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=n,r.systemId=o;else {let i={nodeName:"#documentType",name:t,publicId:n,systemId:o,parentNode:null};Na.appendChild(e,i);}},setDocumentMode(e,t){e.mode=t;},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null;}},insertText(e,t){if(e.childNodes.length>0){let n=e.childNodes[e.childNodes.length-1];if(Na.isTextNode(n)){n.value+=t;return}}Na.appendChild(e,Na.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Na.isTextNode(o)?o.value+=t:Na.insertBefore(e,Na.createTextNode(t),n);},adoptAttributes(e,t){let n=new Set(e.attrs.map(o=>o.name));for(let o=0;o<t.length;o++)n.has(t[o].name)||e.attrs.push(t[o]);},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t;},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t};}};var Lre="html",Kze="about:legacy-compat",Yze="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",kre=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Jze=[...kre,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],Xze=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Dre=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Qze=[...Dre,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Nre(e,t){return t.some(n=>e.startsWith(n))}function Fre(e){return e.name===Lre&&e.publicId===null&&(e.systemId===null||e.systemId===Kze)}function Bre(e){if(e.name!==Lre)return Ti.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===Yze)return Ti.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),Xze.has(n))return Ti.QUIRKS;let o=t===null?Jze:kre;if(Nre(n,o))return Ti.QUIRKS;if(o=t===null?Dre:Qze,Nre(n,o))return Ti.LIMITED_QUIRKS}return Ti.NO_QUIRKS}var Ure={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},e1e="definitionurl",t1e="definitionURL",n1e=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),o1e=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:he.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:he.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:he.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:he.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:he.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:he.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:he.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:he.XML}],["xml:space",{prefix:"xml",name:"space",namespace:he.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:he.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:he.XMLNS}]]),r1e=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),i1e=new Set([y.B,y.BIG,y.BLOCKQUOTE,y.BODY,y.BR,y.CENTER,y.CODE,y.DD,y.DIV,y.DL,y.DT,y.EM,y.EMBED,y.H1,y.H2,y.H3,y.H4,y.H5,y.H6,y.HEAD,y.HR,y.I,y.IMG,y.LI,y.LISTING,y.MENU,y.META,y.NOBR,y.OL,y.P,y.PRE,y.RUBY,y.S,y.SMALL,y.SPAN,y.STRONG,y.STRIKE,y.SUB,y.SUP,y.TABLE,y.TT,y.U,y.UL,y.VAR]);function Hre(e){let t=e.tagID;return t===y.FONT&&e.attrs.some(({name:o})=>o===cd.COLOR||o===cd.SIZE||o===cd.FACE)||i1e.has(t)}function UB(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===e1e){e.attrs[t].name=t1e;break}}function HB(e){for(let t=0;t<e.attrs.length;t++){let n=n1e.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function Dx(e){for(let t=0;t<e.attrs.length;t++){let n=o1e.get(e.attrs[t].name);n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace);}}function Gre(e){let t=r1e.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Rm(e.tagName));}function s1e(e,t){return t===he.MATHML&&(e===y.MI||e===y.MO||e===y.MN||e===y.MS||e===y.MTEXT)}function a1e(e,t,n){if(t===he.MATHML&&e===y.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===cd.ENCODING){let r=n[o].value.toLowerCase();return r===Ure.TEXT_HTML||r===Ure.APPLICATION_XML}}return t===he.SVG&&(e===y.FOREIGN_OBJECT||e===y.DESC||e===y.TITLE)}function jre(e,t,n,o){return (!o||o===he.HTML)&&a1e(e,t,n)||(!o||o===he.MATHML)&&s1e(e,t)}var l1e="hidden",c1e=8,d1e=3,F;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET";})(F||(F={}));var u1e={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},qre=new Set([y.TABLE,y.TBODY,y.TFOOT,y.THEAD,y.TR]),Vre={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Na,onParseError:null},NT=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=F.INITIAL,this.originalInsertionMode=F.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=false,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=false,this.framesetOk=true,this.skipNextNewLine=false,this.fosterParentingEnabled=false,this.options={...Vre,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=n??this.treeAdapter.createDocument(),this.tokenizer=new vT(this.options,this),this.activeFormattingElements=new kx(this.treeAdapter),this.fragmentContextID=o?Rm(this.treeAdapter.getTagName(o)):y.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new Lx(this.document,this.treeAdapter,this);}static parse(t,n){let o=new this(n);return o.tokenizer.write(t,true),o.document}static getFragmentParser(t,n){let o={...Vre,...n};t??(t=o.treeAdapter.createElement(Y.TEMPLATE,he.HTML,[]));let r=o.treeAdapter.createElement("documentmock",he.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===y.TEMPLATE&&i.tmplInsertionModeStack.unshift(F.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),n=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,n),n}_err(t,n,o){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:u1e,s={code:n,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:o?i.startLine:i.endLine,endCol:o?i.startCol:i.endCol,endOffset:o?i.startOffset:i.endOffset};this.onParseError(s);}onItemPush(t,n,o){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),o&&this.openElements.stackTop>0&&this._setContextModes(t,n);}onItemPop(t,n){var o,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(o=this.treeAdapter).onItemPop)===null||r===void 0||r.call(o,t,this.openElements.current),n){let i,s;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,s=this.fragmentContextID):{current:i,currentTagId:s}=this.openElements,this._setContextModes(i,s);}}_setContextModes(t,n){let o=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===he.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,he.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=F.TEXT;}switchToPlaintextParsing(){this.insertionMode=F.TEXT,this.originalInsertionMode=F.IN_BODY,this.tokenizer.state=Gr.PLAINTEXT;}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===Y.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==he.HTML))switch(this.fragmentContextID){case y.TITLE:case y.TEXTAREA:{this.tokenizer.state=Gr.RCDATA;break}case y.STYLE:case y.XMP:case y.IFRAME:case y.NOEMBED:case y.NOFRAMES:case y.NOSCRIPT:{this.tokenizer.state=Gr.RAWTEXT;break}case y.SCRIPT:{this.tokenizer.state=Gr.SCRIPT_DATA;break}case y.PLAINTEXT:{this.tokenizer.state=Gr.PLAINTEXT;break}}}_setDocumentType(t){let n=t.name||"",o=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,o,r),t.location){let s=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));s&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}}_attachElementToTree(t,n){if(this.options.sourceCodeLocationInfo){let o=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(t,o);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let o=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(o??this.document,t);}}_appendElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location);}_insertElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID);}_insertFakeElement(t,n){let o=this.treeAdapter.createElement(t,he.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,he.HTML,t.attrs),o=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,o),this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(Y.HTML,he.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,y.HTML);}_appendCommentNode(t,n){let o=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(n,o),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location);}_insertCharacters(t){let n,o;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:o}=this._findFosterParentingLocation(),o?this.treeAdapter.insertTextBefore(n,t.chars,o):this.treeAdapter.insertText(n,t.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(n),i=o?r.lastIndexOf(o):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){let{endLine:l,endCol:c,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:l,endCol:c,endOffset:d});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}_adoptNodes(t,n){for(let o=this.treeAdapter.getFirstChild(t);o;o=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(o),this.treeAdapter.appendChild(n,o);}_setEndLocation(t,n){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&n.location){let o=n.location,r=this.treeAdapter.getTagName(t),i=n.type===Gt.END_TAG&&r===n.tagName?{endTag:{...o},endLine:o.endLine,endCol:o.endCol,endOffset:o.endOffset}:{endLine:o.startLine,endCol:o.startCol,endOffset:o.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let n,o;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,o=this.fragmentContextID):{current:n,currentTagId:o}=this.openElements,t.tagID===y.SVG&&this.treeAdapter.getTagName(n)===Y.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===he.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===y.MGLYPH||t.tagID===y.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,he.HTML)}_processToken(t){switch(t.type){case Gt.CHARACTER:{this.onCharacter(t);break}case Gt.NULL_CHARACTER:{this.onNullCharacter(t);break}case Gt.COMMENT:{this.onComment(t);break}case Gt.DOCTYPE:{this.onDoctype(t);break}case Gt.START_TAG:{this._processStartTag(t);break}case Gt.END_TAG:{this.onEndTag(t);break}case Gt.EOF:{this.onEof(t);break}case Gt.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return jre(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Ma.Marker||this.openElements.contains(r.element)),o=n===-1?t-1:n-1;for(let r=o;r>=0;r--){let i=this.activeFormattingElements.entries[r];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current;}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=F.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(y.P),this.openElements.popUntilTagNamePopped(y.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case y.TR:{this.insertionMode=F.IN_ROW;return}case y.TBODY:case y.THEAD:case y.TFOOT:{this.insertionMode=F.IN_TABLE_BODY;return}case y.CAPTION:{this.insertionMode=F.IN_CAPTION;return}case y.COLGROUP:{this.insertionMode=F.IN_COLUMN_GROUP;return}case y.TABLE:{this.insertionMode=F.IN_TABLE;return}case y.BODY:{this.insertionMode=F.IN_BODY;return}case y.FRAMESET:{this.insertionMode=F.IN_FRAMESET;return}case y.SELECT:{this._resetInsertionModeForSelect(t);return}case y.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case y.HTML:{this.insertionMode=this.headElement?F.AFTER_HEAD:F.BEFORE_HEAD;return}case y.TD:case y.TH:{if(t>0){this.insertionMode=F.IN_CELL;return}break}case y.HEAD:{if(t>0){this.insertionMode=F.IN_HEAD;return}break}}this.insertionMode=F.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===y.TEMPLATE)break;if(o===y.TABLE){this.insertionMode=F.IN_SELECT_IN_TABLE;return}}this.insertionMode=F.IN_SELECT;}_isElementCausesFosterParenting(t){return qre.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let n=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case y.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===he.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case y.TABLE:{let o=this.treeAdapter.getParentNode(n);return o?{parent:o,beforeElement:n}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,t,n.beforeElement):this.treeAdapter.appendChild(n.parent,t);}_isSpecialElement(t,n){let o=this.treeAdapter.getNamespaceURI(t);return Rre[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){GWe(this,t);return}switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.IN_BODY:case F.IN_CAPTION:case F.IN_CELL:case F.IN_TEMPLATE:{Yre(this,t);break}case F.TEXT:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_TABLE_TEXT:{tie(this,t);break}case F.IN_COLUMN_GROUP:{Bx(this,t);break}case F.AFTER_BODY:{Ux(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){HWe(this,t);return}switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.TEXT:{this._insertCharacters(t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_COLUMN_GROUP:{Bx(this,t);break}case F.AFTER_BODY:{Ux(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){jB(this,t);return}switch(this.insertionMode){case F.INITIAL:case F.BEFORE_HTML:case F.BEFORE_HEAD:case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:case F.IN_BODY:case F.IN_TABLE:case F.IN_CAPTION:case F.IN_COLUMN_GROUP:case F.IN_TABLE_BODY:case F.IN_ROW:case F.IN_CELL:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:case F.IN_TEMPLATE:case F.IN_FRAMESET:case F.AFTER_FRAMESET:{jB(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.AFTER_BODY:{S1e(this,t);break}case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{b1e(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case F.INITIAL:{T1e(this,t);break}case F.BEFORE_HEAD:case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:{this._err(t,ee.misplacedDoctype);break}case F.IN_TABLE_TEXT:{IT(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ee.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?jWe(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{A1e(this,t);break}case F.BEFORE_HEAD:{C1e(this,t);break}case F.IN_HEAD:{La(this,t);break}case F.IN_HEAD_NO_SCRIPT:{w1e(this,t);break}case F.AFTER_HEAD:{x1e(this,t);break}case F.IN_BODY:{jr(this,t);break}case F.IN_TABLE:{xf(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_CAPTION:{RWe(this,t);break}case F.IN_COLUMN_GROUP:{WB(this,t);break}case F.IN_TABLE_BODY:{jx(this,t);break}case F.IN_ROW:{$x(this,t);break}case F.IN_CELL:{IWe(this,t);break}case F.IN_SELECT:{rie(this,t);break}case F.IN_SELECT_IN_TABLE:{_We(this,t);break}case F.IN_TEMPLATE:{OWe(this,t);break}case F.AFTER_BODY:{NWe(this,t);break}case F.IN_FRAMESET:{LWe(this,t);break}case F.AFTER_FRAMESET:{DWe(this,t);break}case F.AFTER_AFTER_BODY:{BWe(this,t);break}case F.AFTER_AFTER_FRAMESET:{UWe(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?$We(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{E1e(this,t);break}case F.BEFORE_HEAD:{R1e(this,t);break}case F.IN_HEAD:{v1e(this,t);break}case F.IN_HEAD_NO_SCRIPT:{I1e(this,t);break}case F.AFTER_HEAD:{_1e(this,t);break}case F.IN_BODY:{Gx(this,t);break}case F.TEXT:{hWe(this,t);break}case F.IN_TABLE:{LT(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_CAPTION:{vWe(this,t);break}case F.IN_COLUMN_GROUP:{wWe(this,t);break}case F.IN_TABLE_BODY:{$B(this,t);break}case F.IN_ROW:{oie(this,t);break}case F.IN_CELL:{xWe(this,t);break}case F.IN_SELECT:{iie(this,t);break}case F.IN_SELECT_IN_TABLE:{PWe(this,t);break}case F.IN_TEMPLATE:{MWe(this,t);break}case F.AFTER_BODY:{aie(this,t);break}case F.IN_FRAMESET:{kWe(this,t);break}case F.AFTER_FRAMESET:{FWe(this,t);break}case F.AFTER_AFTER_BODY:{Fx(this,t);break}}}onEof(t){switch(this.insertionMode){case F.INITIAL:{wT(this,t);break}case F.BEFORE_HTML:{xT(this,t);break}case F.BEFORE_HEAD:{_T(this,t);break}case F.IN_HEAD:{PT(this,t);break}case F.IN_HEAD_NO_SCRIPT:{OT(this,t);break}case F.AFTER_HEAD:{MT(this,t);break}case F.IN_BODY:case F.IN_TABLE:case F.IN_CAPTION:case F.IN_COLUMN_GROUP:case F.IN_TABLE_BODY:case F.IN_ROW:case F.IN_CELL:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:{Zre(this,t);break}case F.TEXT:{gWe(this,t);break}case F.IN_TABLE_TEXT:{IT(this,t);break}case F.IN_TEMPLATE:{sie(this,t);break}case F.AFTER_BODY:case F.IN_FRAMESET:case F.AFTER_FRAMESET:case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{zB(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===M.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1);}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case F.IN_HEAD:case F.IN_HEAD_NO_SCRIPT:case F.AFTER_HEAD:case F.TEXT:case F.IN_COLUMN_GROUP:case F.IN_SELECT:case F.IN_SELECT_IN_TABLE:case F.IN_FRAMESET:case F.AFTER_FRAMESET:{this._insertCharacters(t);break}case F.IN_BODY:case F.IN_CAPTION:case F.IN_CELL:case F.IN_TEMPLATE:case F.AFTER_BODY:case F.AFTER_AFTER_BODY:case F.AFTER_AFTER_FRAMESET:{Kre(this,t);break}case F.IN_TABLE:case F.IN_TABLE_BODY:case F.IN_ROW:{GB(this,t);break}case F.IN_TABLE_TEXT:{eie(this,t);break}}}};function p1e(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):Qre(e,t),n}function m1e(e,t){let n=null,o=e.openElements.stackTop;for(;o>=0;o--){let r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[o])&&(n=r);}return n||(e.openElements.shortenToLength(Math.max(o,0)),e.activeFormattingElements.removeEntry(t)),n}function h1e(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,s=r;s!==n;i++,s=r){r=e.openElements.getCommonAncestor(s);let a=e.activeFormattingElements.getElementEntry(s),l=a&&i>=d1e;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=g1e(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function g1e(e,t){let n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function f1e(e,t,n){let o=e.treeAdapter.getTagName(t),r=Rm(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===y.TEMPLATE&&i===he.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function y1e(e,t,n){let o=e.treeAdapter.getNamespaceURI(n.element),{token:r}=n,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i,r.tagID);}function VB(e,t){for(let n=0;n<c1e;n++){let o=p1e(e,t);if(!o)break;let r=m1e(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=h1e(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&f1e(e,s,i),y1e(e,r,o);}}function jB(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function S1e(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function b1e(e,t){e._appendCommentNode(t,e.document);}function zB(e,t){if(e.stopped=true,t.location){let n=e.fragmentContext?0:2;for(let o=e.openElements.stackTop;o>=n;o--)e._setEndLocation(e.openElements.items[o],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let o=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(o);if(r&&!r.endTag&&(e._setEndLocation(o,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],s=e.treeAdapter.getNodeSourceCodeLocation(i);s&&!s.endTag&&e._setEndLocation(i,t);}}}}function T1e(e,t){e._setDocumentType(t);let n=t.forceQuirks?Ti.QUIRKS:Bre(t);Fre(t)||e._err(t,ee.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=F.BEFORE_HTML;}function wT(e,t){e._err(t,ee.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Ti.QUIRKS),e.insertionMode=F.BEFORE_HTML,e._processToken(t);}function A1e(e,t){t.tagID===y.HTML?(e._insertElement(t,he.HTML),e.insertionMode=F.BEFORE_HEAD):xT(e,t);}function E1e(e,t){let n=t.tagID;(n===y.HTML||n===y.HEAD||n===y.BODY||n===y.BR)&&xT(e,t);}function xT(e,t){e._insertFakeRootElement(),e.insertionMode=F.BEFORE_HEAD,e._processToken(t);}function C1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.HEAD:{e._insertElement(t,he.HTML),e.headElement=e.openElements.current,e.insertionMode=F.IN_HEAD;break}default:_T(e,t);}}function R1e(e,t){let n=t.tagID;n===y.HEAD||n===y.BODY||n===y.HTML||n===y.BR?_T(e,t):e._err(t,ee.endTagWithoutMatchingOpenElement);}function _T(e,t){e._insertFakeElement(Y.HEAD,y.HEAD),e.headElement=e.openElements.current,e.insertionMode=F.IN_HEAD,e._processToken(t);}function La(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.TITLE:{e._switchToTextParsing(t,Gr.RCDATA);break}case y.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Gr.RAWTEXT):(e._insertElement(t,he.HTML),e.insertionMode=F.IN_HEAD_NO_SCRIPT);break}case y.NOFRAMES:case y.STYLE:{e._switchToTextParsing(t,Gr.RAWTEXT);break}case y.SCRIPT:{e._switchToTextParsing(t,Gr.SCRIPT_DATA);break}case y.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=F.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(F.IN_TEMPLATE);break}case y.HEAD:{e._err(t,ee.misplacedStartTagForHeadElement);break}default:PT(e,t);}}function v1e(e,t){switch(t.tagID){case y.HEAD:{e.openElements.pop(),e.insertionMode=F.AFTER_HEAD;break}case y.BODY:case y.BR:case y.HTML:{PT(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function vm(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==y.TEMPLATE&&e._err(t,ee.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(y.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ee.endTagWithoutMatchingOpenElement);}function PT(e,t){e.openElements.pop(),e.insertionMode=F.AFTER_HEAD,e._processToken(t);}function w1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BASEFONT:case y.BGSOUND:case y.HEAD:case y.LINK:case y.META:case y.NOFRAMES:case y.STYLE:{La(e,t);break}case y.NOSCRIPT:{e._err(t,ee.nestedNoscriptInHead);break}default:OT(e,t);}}function I1e(e,t){switch(t.tagID){case y.NOSCRIPT:{e.openElements.pop(),e.insertionMode=F.IN_HEAD;break}case y.BR:{OT(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function OT(e,t){let n=t.type===Gt.EOF?ee.openElementsLeftAfterEof:ee.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=F.IN_HEAD,e._processToken(t);}function x1e(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.BODY:{e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=F.IN_BODY;break}case y.FRAMESET:{e._insertElement(t,he.HTML),e.insertionMode=F.IN_FRAMESET;break}case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:case y.NOFRAMES:case y.SCRIPT:case y.STYLE:case y.TEMPLATE:case y.TITLE:{e._err(t,ee.abandonedHeadElementChild),e.openElements.push(e.headElement,y.HEAD),La(e,t),e.openElements.remove(e.headElement);break}case y.HEAD:{e._err(t,ee.misplacedStartTagForHeadElement);break}default:MT(e,t);}}function _1e(e,t){switch(t.tagID){case y.BODY:case y.HTML:case y.BR:{MT(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:e._err(t,ee.endTagWithoutMatchingOpenElement);}}function MT(e,t){e._insertFakeElement(Y.BODY,y.BODY),e.insertionMode=F.IN_BODY,Hx(e,t);}function Hx(e,t){switch(t.type){case Gt.CHARACTER:{Yre(e,t);break}case Gt.WHITESPACE_CHARACTER:{Kre(e,t);break}case Gt.COMMENT:{jB(e,t);break}case Gt.START_TAG:{jr(e,t);break}case Gt.END_TAG:{Gx(e,t);break}case Gt.EOF:{Zre(e,t);break}}}function Kre(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function Yre(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function P1e(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function O1e(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function M1e(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_FRAMESET);}function N1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML);}function L1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&CT.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,he.HTML);}function k1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function D1e(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),n||(e.formElement=e.openElements.current));}function F1e(e,t){e.framesetOk=false;let n=t.tagID;for(let o=e.openElements.stackTop;o>=0;o--){let r=e.openElements.tagIDs[o];if(n===y.LI&&r===y.LI||(n===y.DD||n===y.DT)&&(r===y.DD||r===y.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==y.ADDRESS&&r!==y.DIV&&r!==y.P&&e._isSpecialElement(e.openElements.items[o],r))break}e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML);}function B1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.tokenizer.state=Gr.PLAINTEXT;}function U1e(e,t){e.openElements.hasInScope(y.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.framesetOk=false;}function H1e(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Y.A);n&&(VB(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function G1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function j1e(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(y.NOBR)&&(VB(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,he.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function $1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function V1e(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ti.QUIRKS&&e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=F.IN_TABLE;}function Jre(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,he.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function Xre(e){let t=Px(e,cd.TYPE);return t!=null&&t.toLowerCase()===l1e}function z1e(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,he.HTML),Xre(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function W1e(e,t){e._appendElement(t,he.HTML),t.ackSelfClosing=true;}function q1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._appendElement(t,he.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function K1e(e,t){t.tagName=Y.IMG,t.tagID=y.IMG,Jre(e,t);}function Y1e(e,t){e._insertElement(t,he.HTML),e.skipNextNewLine=true,e.tokenizer.state=Gr.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=F.TEXT;}function J1e(e,t){e.openElements.hasInButtonScope(y.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Gr.RAWTEXT);}function X1e(e,t){e.framesetOk=false,e._switchToTextParsing(t,Gr.RAWTEXT);}function zre(e,t){e._switchToTextParsing(t,Gr.RAWTEXT);}function Q1e(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===F.IN_TABLE||e.insertionMode===F.IN_CAPTION||e.insertionMode===F.IN_TABLE_BODY||e.insertionMode===F.IN_ROW||e.insertionMode===F.IN_CELL?F.IN_SELECT_IN_TABLE:F.IN_SELECT;}function Z1e(e,t){e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML);}function eWe(e,t){e.openElements.hasInScope(y.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,he.HTML);}function tWe(e,t){e.openElements.hasInScope(y.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(y.RTC),e._insertElement(t,he.HTML);}function nWe(e,t){e._reconstructActiveFormattingElements(),UB(t),Dx(t),t.selfClosing?e._appendElement(t,he.MATHML):e._insertElement(t,he.MATHML),t.ackSelfClosing=true;}function oWe(e,t){e._reconstructActiveFormattingElements(),HB(t),Dx(t),t.selfClosing?e._appendElement(t,he.SVG):e._insertElement(t,he.SVG),t.ackSelfClosing=true;}function Wre(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,he.HTML);}function jr(e,t){switch(t.tagID){case y.I:case y.S:case y.B:case y.U:case y.EM:case y.TT:case y.BIG:case y.CODE:case y.FONT:case y.SMALL:case y.STRIKE:case y.STRONG:{G1e(e,t);break}case y.A:{H1e(e,t);break}case y.H1:case y.H2:case y.H3:case y.H4:case y.H5:case y.H6:{L1e(e,t);break}case y.P:case y.DL:case y.OL:case y.UL:case y.DIV:case y.DIR:case y.NAV:case y.MAIN:case y.MENU:case y.ASIDE:case y.CENTER:case y.FIGURE:case y.FOOTER:case y.HEADER:case y.HGROUP:case y.DIALOG:case y.DETAILS:case y.ADDRESS:case y.ARTICLE:case y.SEARCH:case y.SECTION:case y.SUMMARY:case y.FIELDSET:case y.BLOCKQUOTE:case y.FIGCAPTION:{N1e(e,t);break}case y.LI:case y.DD:case y.DT:{F1e(e,t);break}case y.BR:case y.IMG:case y.WBR:case y.AREA:case y.EMBED:case y.KEYGEN:{Jre(e,t);break}case y.HR:{q1e(e,t);break}case y.RB:case y.RTC:{eWe(e,t);break}case y.RT:case y.RP:{tWe(e,t);break}case y.PRE:case y.LISTING:{k1e(e,t);break}case y.XMP:{J1e(e,t);break}case y.SVG:{oWe(e,t);break}case y.HTML:{P1e(e,t);break}case y.BASE:case y.LINK:case y.META:case y.STYLE:case y.TITLE:case y.SCRIPT:case y.BGSOUND:case y.BASEFONT:case y.TEMPLATE:{La(e,t);break}case y.BODY:{O1e(e,t);break}case y.FORM:{D1e(e,t);break}case y.NOBR:{j1e(e,t);break}case y.MATH:{nWe(e,t);break}case y.TABLE:{V1e(e,t);break}case y.INPUT:{z1e(e,t);break}case y.PARAM:case y.TRACK:case y.SOURCE:{W1e(e,t);break}case y.IMAGE:{K1e(e,t);break}case y.BUTTON:{U1e(e,t);break}case y.APPLET:case y.OBJECT:case y.MARQUEE:{$1e(e,t);break}case y.IFRAME:{X1e(e,t);break}case y.SELECT:{Q1e(e,t);break}case y.OPTION:case y.OPTGROUP:{Z1e(e,t);break}case y.NOEMBED:case y.NOFRAMES:{zre(e,t);break}case y.FRAMESET:{M1e(e,t);break}case y.TEXTAREA:{Y1e(e,t);break}case y.NOSCRIPT:{e.options.scriptingEnabled?zre(e,t):Wre(e,t);break}case y.PLAINTEXT:{B1e(e,t);break}case y.COL:case y.TH:case y.TD:case y.TR:case y.HEAD:case y.FRAME:case y.TBODY:case y.TFOOT:case y.THEAD:case y.CAPTION:case y.COLGROUP:break;default:Wre(e,t);}}function rWe(e,t){if(e.openElements.hasInScope(y.BODY)&&(e.insertionMode=F.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function iWe(e,t){e.openElements.hasInScope(y.BODY)&&(e.insertionMode=F.AFTER_BODY,aie(e,t));}function sWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function aWe(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(y.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(y.FORM):n&&e.openElements.remove(n));}function lWe(e){e.openElements.hasInButtonScope(y.P)||e._insertFakeElement(Y.P,y.P),e._closePElement();}function cWe(e){e.openElements.hasInListItemScope(y.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(y.LI),e.openElements.popUntilTagNamePopped(y.LI));}function dWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function uWe(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function pWe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function mWe(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Y.BR,y.BR),e.openElements.pop(),e.framesetOk=false;}function Qre(e,t){let n=t.tagName,o=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],s=e.openElements.tagIDs[r];if(o===s&&(o!==y.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,s))break}}function Gx(e,t){switch(t.tagID){case y.A:case y.B:case y.I:case y.S:case y.U:case y.EM:case y.TT:case y.BIG:case y.CODE:case y.FONT:case y.NOBR:case y.SMALL:case y.STRIKE:case y.STRONG:{VB(e,t);break}case y.P:{lWe(e);break}case y.DL:case y.UL:case y.OL:case y.DIR:case y.DIV:case y.NAV:case y.PRE:case y.MAIN:case y.MENU:case y.ASIDE:case y.BUTTON:case y.CENTER:case y.FIGURE:case y.FOOTER:case y.HEADER:case y.HGROUP:case y.DIALOG:case y.ADDRESS:case y.ARTICLE:case y.DETAILS:case y.SEARCH:case y.SECTION:case y.SUMMARY:case y.LISTING:case y.FIELDSET:case y.BLOCKQUOTE:case y.FIGCAPTION:{sWe(e,t);break}case y.LI:{cWe(e);break}case y.DD:case y.DT:{dWe(e,t);break}case y.H1:case y.H2:case y.H3:case y.H4:case y.H5:case y.H6:{uWe(e);break}case y.BR:{mWe(e);break}case y.BODY:{rWe(e,t);break}case y.HTML:{iWe(e,t);break}case y.FORM:{aWe(e);break}case y.APPLET:case y.OBJECT:case y.MARQUEE:{pWe(e,t);break}case y.TEMPLATE:{vm(e,t);break}default:Qre(e,t);}}function Zre(e,t){e.tmplInsertionModeStack.length>0?sie(e,t):zB(e,t);}function hWe(e,t){var n;t.tagID===y.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function gWe(e,t){e._err(t,ee.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function GB(e,t){if(e.openElements.currentTagId!==void 0&&qre.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=F.IN_TABLE_TEXT,t.type){case Gt.CHARACTER:{tie(e,t);break}case Gt.WHITESPACE_CHARACTER:{eie(e,t);break}}else kT(e,t);}function fWe(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_CAPTION;}function yWe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_COLUMN_GROUP;}function SWe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Y.COLGROUP,y.COLGROUP),e.insertionMode=F.IN_COLUMN_GROUP,WB(e,t);}function bWe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_TABLE_BODY;}function TWe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Y.TBODY,y.TBODY),e.insertionMode=F.IN_TABLE_BODY,jx(e,t);}function AWe(e,t){e.openElements.hasInTableScope(y.TABLE)&&(e.openElements.popUntilTagNamePopped(y.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function EWe(e,t){Xre(t)?e._appendElement(t,he.HTML):kT(e,t),t.ackSelfClosing=true;}function CWe(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,he.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function xf(e,t){switch(t.tagID){case y.TD:case y.TH:case y.TR:{TWe(e,t);break}case y.STYLE:case y.SCRIPT:case y.TEMPLATE:{La(e,t);break}case y.COL:{SWe(e,t);break}case y.FORM:{CWe(e,t);break}case y.TABLE:{AWe(e,t);break}case y.TBODY:case y.TFOOT:case y.THEAD:{bWe(e,t);break}case y.INPUT:{EWe(e,t);break}case y.CAPTION:{fWe(e,t);break}case y.COLGROUP:{yWe(e,t);break}default:kT(e,t);}}function LT(e,t){switch(t.tagID){case y.TABLE:{e.openElements.hasInTableScope(y.TABLE)&&(e.openElements.popUntilTagNamePopped(y.TABLE),e._resetInsertionMode());break}case y.TEMPLATE:{vm(e,t);break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TBODY:case y.TD:case y.TFOOT:case y.TH:case y.THEAD:case y.TR:break;default:kT(e,t);}}function kT(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,Hx(e,t),e.fosterParentingEnabled=n;}function eie(e,t){e.pendingCharacterTokens.push(t);}function tie(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function IT(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)kT(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var nie=new Set([y.CAPTION,y.COL,y.COLGROUP,y.TBODY,y.TD,y.TFOOT,y.TH,y.THEAD,y.TR]);function RWe(e,t){let n=t.tagID;nie.has(n)?e.openElements.hasInTableScope(y.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_TABLE,xf(e,t)):jr(e,t);}function vWe(e,t){let n=t.tagID;switch(n){case y.CAPTION:case y.TABLE:{e.openElements.hasInTableScope(y.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(y.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_TABLE,n===y.TABLE&&LT(e,t));break}case y.BODY:case y.COL:case y.COLGROUP:case y.HTML:case y.TBODY:case y.TD:case y.TFOOT:case y.TH:case y.THEAD:case y.TR:break;default:Gx(e,t);}}function WB(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.COL:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.TEMPLATE:{La(e,t);break}default:Bx(e,t);}}function wWe(e,t){switch(t.tagID){case y.COLGROUP:{e.openElements.currentTagId===y.COLGROUP&&(e.openElements.pop(),e.insertionMode=F.IN_TABLE);break}case y.TEMPLATE:{vm(e,t);break}case y.COL:break;default:Bx(e,t);}}function Bx(e,t){e.openElements.currentTagId===y.COLGROUP&&(e.openElements.pop(),e.insertionMode=F.IN_TABLE,e._processToken(t));}function jx(e,t){switch(t.tagID){case y.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_ROW;break}case y.TH:case y.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(Y.TR,y.TR),e.insertionMode=F.IN_ROW,$x(e,t);break}case y.CAPTION:case y.COL:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE,xf(e,t));break}default:xf(e,t);}}function $B(e,t){let n=t.tagID;switch(t.tagID){case y.TBODY:case y.TFOOT:case y.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE);break}case y.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE,LT(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TD:case y.TH:case y.TR:break;default:LT(e,t);}}function $x(e,t){switch(t.tagID){case y.TH:case y.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,he.HTML),e.insertionMode=F.IN_CELL,e.activeFormattingElements.insertMarker();break}case y.CAPTION:case y.COL:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:case y.TR:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,jx(e,t));break}default:xf(e,t);}}function oie(e,t){switch(t.tagID){case y.TR:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY);break}case y.TABLE:{e.openElements.hasInTableScope(y.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,$B(e,t));break}case y.TBODY:case y.TFOOT:case y.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(y.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=F.IN_TABLE_BODY,$B(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:case y.TD:case y.TH:break;default:LT(e,t);}}function IWe(e,t){let n=t.tagID;nie.has(n)?(e.openElements.hasInTableScope(y.TD)||e.openElements.hasInTableScope(y.TH))&&(e._closeTableCell(),$x(e,t)):jr(e,t);}function xWe(e,t){let n=t.tagID;switch(n){case y.TD:case y.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=F.IN_ROW);break}case y.TABLE:case y.TBODY:case y.TFOOT:case y.THEAD:case y.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),oie(e,t));break}case y.BODY:case y.CAPTION:case y.COL:case y.COLGROUP:case y.HTML:break;default:Gx(e,t);}}function rie(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.OPTION:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e._insertElement(t,he.HTML);break}case y.OPTGROUP:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop(),e._insertElement(t,he.HTML);break}case y.HR:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop(),e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.INPUT:case y.KEYGEN:case y.TEXTAREA:case y.SELECT:{e.openElements.hasInSelectScope(y.SELECT)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),t.tagID!==y.SELECT&&e._processStartTag(t));break}case y.SCRIPT:case y.TEMPLATE:{La(e,t);break}}}function iie(e,t){switch(t.tagID){case y.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===y.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===y.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===y.OPTGROUP&&e.openElements.pop();break}case y.OPTION:{e.openElements.currentTagId===y.OPTION&&e.openElements.pop();break}case y.SELECT:{e.openElements.hasInSelectScope(y.SELECT)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode());break}case y.TEMPLATE:{vm(e,t);break}}}function _We(e,t){let n=t.tagID;n===y.CAPTION||n===y.TABLE||n===y.TBODY||n===y.TFOOT||n===y.THEAD||n===y.TR||n===y.TD||n===y.TH?(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),e._processStartTag(t)):rie(e,t);}function PWe(e,t){let n=t.tagID;n===y.CAPTION||n===y.TABLE||n===y.TBODY||n===y.TFOOT||n===y.THEAD||n===y.TR||n===y.TD||n===y.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(y.SELECT),e._resetInsertionMode(),e.onEndTag(t)):iie(e,t);}function OWe(e,t){switch(t.tagID){case y.BASE:case y.BASEFONT:case y.BGSOUND:case y.LINK:case y.META:case y.NOFRAMES:case y.SCRIPT:case y.STYLE:case y.TEMPLATE:case y.TITLE:{La(e,t);break}case y.CAPTION:case y.COLGROUP:case y.TBODY:case y.TFOOT:case y.THEAD:{e.tmplInsertionModeStack[0]=F.IN_TABLE,e.insertionMode=F.IN_TABLE,xf(e,t);break}case y.COL:{e.tmplInsertionModeStack[0]=F.IN_COLUMN_GROUP,e.insertionMode=F.IN_COLUMN_GROUP,WB(e,t);break}case y.TR:{e.tmplInsertionModeStack[0]=F.IN_TABLE_BODY,e.insertionMode=F.IN_TABLE_BODY,jx(e,t);break}case y.TD:case y.TH:{e.tmplInsertionModeStack[0]=F.IN_ROW,e.insertionMode=F.IN_ROW,$x(e,t);break}default:e.tmplInsertionModeStack[0]=F.IN_BODY,e.insertionMode=F.IN_BODY,jr(e,t);}}function MWe(e,t){t.tagID===y.TEMPLATE&&vm(e,t);}function sie(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(y.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):zB(e,t);}function NWe(e,t){t.tagID===y.HTML?jr(e,t):Ux(e,t);}function aie(e,t){var n;if(t.tagID===y.HTML){if(e.fragmentContext||(e.insertionMode=F.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===y.HTML){e._setEndLocation(e.openElements.items[0],t);let o=e.openElements.items[1];o&&!(!((n=e.treeAdapter.getNodeSourceCodeLocation(o))===null||n===void 0)&&n.endTag)&&e._setEndLocation(o,t);}}else Ux(e,t);}function Ux(e,t){e.insertionMode=F.IN_BODY,Hx(e,t);}function LWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.FRAMESET:{e._insertElement(t,he.HTML);break}case y.FRAME:{e._appendElement(t,he.HTML),t.ackSelfClosing=true;break}case y.NOFRAMES:{La(e,t);break}}}function kWe(e,t){t.tagID===y.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==y.FRAMESET&&(e.insertionMode=F.AFTER_FRAMESET));}function DWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.NOFRAMES:{La(e,t);break}}}function FWe(e,t){t.tagID===y.HTML&&(e.insertionMode=F.AFTER_AFTER_FRAMESET);}function BWe(e,t){t.tagID===y.HTML?jr(e,t):Fx(e,t);}function Fx(e,t){e.insertionMode=F.IN_BODY,Hx(e,t);}function UWe(e,t){switch(t.tagID){case y.HTML:{jr(e,t);break}case y.NOFRAMES:{La(e,t);break}}}function HWe(e,t){t.chars=wn,e._insertCharacters(t);}function GWe(e,t){e._insertCharacters(t),e.framesetOk=false;}function lie(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==he.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function jWe(e,t){if(Hre(t))lie(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===he.MATHML?UB(t):o===he.SVG&&(Gre(t),HB(t)),Dx(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function $We(e,t){if(t.tagID===y.P||t.tagID===y.BR){lie(e),e._endTagOutsideForeignContent(t);return}for(let n=e.openElements.stackTop;n>0;n--){let o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===he.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(o);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(n);break}}}new Set([Y.AREA,Y.BASE,Y.BASEFONT,Y.BGSOUND,Y.BR,Y.COL,Y.EMBED,Y.FRAME,Y.HR,Y.IMG,Y.INPUT,Y.KEYGEN,Y.LINK,Y.META,Y.PARAM,Y.SOURCE,Y.TRACK,Y.WBR]);function cie(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=NT.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var VWe=5e3,die=1024;function qB(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function zWe(e){return e.nodeName==="#text"}function KB(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let n=e.tagName.toLowerCase(),o,r;for(let{name:l,value:c}of e.attrs){let d=l.toLowerCase();if(d==="role"){r=c;continue}o===void 0&&(o={}),o[d]=c;}let i,s=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(zWe(l)){let c=l.value;if(c&&c.trim().length>0){let d=c.length>die?c.slice(0,die):c;i=i===void 0?d:`${i} ${d}`;}}else if(qB(l)){let c=KB(l,t);c!==void 0&&s.push(c);}}let a={tag:n};return r!==void 0&&(a.role=r),o!==void 0&&(a.attributes=o),i!==void 0&&(a.text=i),s.length>0&&(a.children=s),a}function YB(e){let t=cie(e),n={nodesLeft:VWe};for(let i of t.childNodes)if(qB(i)&&i.tagName.toLowerCase()==="body"){let s=KB(i,n);if(s!==void 0)return s}let o=[];for(let i of t.childNodes){if(n.nodesLeft<=0)break;if(qB(i)){let s=KB(i,n);s!==void 0&&o.push(s);}}let r={tag:"body"};return o.length>0&&(r.children=o),r}var WWe=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),wm=class{constructor(t,n,o,r,i,s){this.orgId=t;this.testId=n;this.testName=o;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=s;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,n){return this.diskStorage.readFile(`${cr}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${cr}/${n}.html`)?.toString()}recordStepStat(t){t.type!=="PRESET_ACTION"?this.stepFrequenciesByType[t.type]=(this.stepFrequenciesByType[t.type]||0)+1:this.stepFrequenciesByType[t.command.type]=(this.stepFrequenciesByType[t.command.type]||0)+1;}sendFinalizedStepStats(){for(let[t,n]of Object.entries(this.stepFrequenciesByType))wt.increment("test_step_execution",n,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,n){let{step:o,parentStepIdChain:r}=t;this.recordStepStat(o);let i={step:o,status:"RUNNING",startedAt:new Date},s=[...n];this.currentResults=s;let a=new XB(this.orgId,this.testId,this.testName,i,this.diskStorage,l=>{this.flushResults([...s,l]);},r??[],this.appGraphSink);return this.children.push(a),a}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(n=>n.finishInternal({status:HG(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function qWe(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return ot(e)}}function JB(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var XB=class{constructor(t,n,o,r,i,s,a,l){this.orgId=t;this.testId=n;this.testName=o;this.metadata=r;this.diskStorage=i;this.parentFlushResults=s;this.parentStepIdChain=a;this.appGraphSink=l;this.interactionTracer=new lu(void 0,c=>this.storeTraceAsset(c)),au.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.jpeg`,contents:o});}attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.jpeg`,contents:o});}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.html`,contents:o});}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,url:r,logger:i}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${cr}/${n}.html`,contents:o}),this.appGraphSink&&WWe.has(this.metadata.step.type)&&this.appGraphSink({html:o,url:r,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:i});}recordTargetAutoHeal(t){let{healType:n}=t,o=n==="AI"?"ai-target-heal":"cache-heal";wt.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.diskStorage.storeFile({name:`${cr}/${t.snapshotId}.${t.extension??"jpeg"}`,contents:t.data});}async finishInternal(t){this.finished||(this.finished=true,this.interactionTracer.finish(),await Promise.all(this.children.map(n=>n.finish({status:qWe(t.status),finishedAt:t.finishedAt}))));}recordStepDuration(t,n){if(!LE(t))return;let o=NE(t);wt.distribution("test_step_duration",n,[`type:${o}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}async finish(t){!this.finished&&t.resolvedStep!==void 0&&t.durationMs!==void 0&&this.recordStepDuration(t.resolvedStep,t.durationMs),await this.finishInternal(t.step),t.step.trace=this.interactionTracer.getRootSpan();}getResultBuilderForCurrentStep(){let t=this.metadata.step;switch(t.type){case "RESOLVED_MODULE":return n=>({...t,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n,type:"MODULE"});case "CONDITIONAL":return n=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:Mp(r.steps)})),elseSteps:t.elseSteps?Mp(t.elseSteps):void 0,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return n=>({...t,status:JB(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return ot(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new wm(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var Vx=class{constructor(t,n,o,r,i,s,a){this.orgId=t;this.testId=n;this.testName=o;this.runAttemptId=r;this.metadata=i;this.diskStorage=s;this.recordVideo=a;this.diskStorage.mkdir(cr),this.harPagesStream=this.diskStorage.createFileStream(`${cr}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${cr}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${cr}/resource-usage.ndjson`),this.resourceUsageSampler=g2({keepSamples:false,onSample:l=>{this.resourceUsageStream.write(`${JSON.stringify(l)}
8514
8514
  `),l.system.cpu&&(this.cpuUsageSum+=l.system.cpu.total,this.cpuSampleCount++);let c=l.system.memory.total-l.system.memory.free;this.memoryUsageSum+=c,this.memorySampleCount++;}});}finished=false;children=[];beforeResults;mainResults=[];afterResults;harPagesStream;inProgressHarEntries;harEntriesStream;resourceUsageStream;resourceUsageSampler;uiStatesStream;previousHtmlByteHash;previousFingerprint;cpuUsageSum=0;cpuSampleCount=0;memoryUsageSum=0;memorySampleCount=0;get loggerBindings(){return {runAttemptId:this.runAttemptId}}getResourceUsageAverages(){return {avgCpuUsage:this.cpuSampleCount>0?this.cpuUsageSum/this.cpuSampleCount:0,avgMemoryUsage:this.memorySampleCount>0?this.memoryUsageSum/this.memorySampleCount:0}}get videoOutputPath(){if(this.recordVideo)return Mn__default.resolve(this.diskStorage.cwd(),cr)}setActiveVideo(t,n){this.recordVideo&&(this.metadata.activeVideos=this.metadata.activeVideos||[],this.metadata.activeVideos.push({videoName:t,timestamp:n}));}setViewport(t){this.metadata.viewport=t;}onNetworkPage(t){this.finished||this.harPagesStream.write(`${JSON.stringify(t)}
8515
8515
  `);}appendUiState(t){this.finished||(this.uiStatesStream||(this.uiStatesStream=this.diskStorage.createFileStream(d$)),this.uiStatesStream.write(`${JSON.stringify(t)}
8516
8516
  `));}buildAppGraphSink(){return ({html:t,url:n,stepId:o,parentStepIdChain:r,logger:i})=>{let s=kB(t),a=s===this.previousHtmlByteHash?this.previousFingerprint:void 0;if(!a){try{a=DB({url:n,dom:YB(t)});}catch(l){i.debug({err:l,stepId:o},"Failed to compute app-graph UIState fingerprint");return}this.previousHtmlByteHash=s,this.previousFingerprint=a;}this.appendUiState({stepId:o,parentStepIdChain:r,fingerprintHash:a.fingerprintHash,minhash:Array.from(a.minhash),canonicalUrl:a.canonicalUrl,capturedAt:Date.now()});}}onNetworkLogs(t){if(!this.finished)for(let[n,o]of Object.entries(t))o.response?(delete this.inProgressHarEntries[n],this.harEntriesStream.write(`${JSON.stringify(o)}