momentic 3.7.2 → 3.7.3

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
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2e88a24b-08c7-5e86-9c68-a5d5a8a16886")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="08d001ae-f8af-52dd-8294-2143e7a037b9")}catch(e){}}();
4
4
  import * as rr from 'fs';
5
5
  import rr__default, { statSync, mkdirSync, readFileSync, writeFileSync, existsSync, unlinkSync, renameSync, readdir, readdirSync, createReadStream, rmSync } from 'fs';
6
6
  import * as I from 'zod';
@@ -197,7 +197,7 @@ Categories:
197
197
  `);if(n<1||n>o.length)return;let r=Math.max(1,n-XK),i=Math.min(o.length,n+XK),s=String(i).length,a=[];for(let l=r;l<=i;l++){let c=l===n?YTe:KTe;a.push(`${c}${String(l).padStart(s)} | ${o[l-1]??""}`);}return a.join(`
198
198
  `)}var eY="\r",tY="\x1B[1A",nY="\x1B[J",ZTe="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",eAe="|/-\\",tAe="\u2736\u2738\u2739\u273A\u2739\u2737",nAe="*",oAe="#0891b2",rAe={pass:{glyph:"\u2713",ascii:"v",paint:Qa.green},fail:{glyph:"\u2718",ascii:"x",paint:Qa.red},skip:{glyph:"\u2212",ascii:"-",paint:Qa.dim},cancel:{glyph:"\u2298",ascii:"o",paint:Qa.yellow},retry:{glyph:"\u21BB",ascii:"~",paint:Qa.yellow}};function Go(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,Qa.bold),dim:o=>n(o,Qa.gray),code:o=>n(o,Qa.hex(oAe)),spinner:o=>{let r=e.unicode?ZTe:eAe,i=(o%r.length+r.length)%r.length;return n(r.charAt(i),Qa.cyan)},classifySpinner:o=>{let r=e.unicode?tAe:nAe,i=(o%r.length+r.length)%r.length;return n(r.charAt(i),Qa.cyan)},statusGlyph:o=>{let r=rAe[o],i=e.unicode?r.glyph:r.ascii;return t?r.paint(i):i},separator:e.unicode?" \xB7 ":" | "}}function oY(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(`
199
199
  `)){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(`
200
- `)}var sAe={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}},aAe={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function rY(e,t,n=0){let o=aAe[e];if(!o)return;let r=Go(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=sAe[o];return {badge:r.statusGlyph(i),isTerminal:s}}function hd(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function iY({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 sY(){let e=$q(),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 Se=Rg({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.7.2"});var cAe=5,pm=" ";async function bR({getResults:e,checkDone:t,name:n,timeoutMs:o=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<o;){let s;i>cAe&&(C.error(`Failed to fetch ${n} status too many times.`),process.exit(1));try{s=await e(),i=0;}catch(c){i++,Se.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 aY(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 UN(e){let t=aY(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 Og(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 HN({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}=aY(e),h=St(),g=h.unicode?"\u2500":"-",f=process.stdout?.columns||80,y=(T,A,E,v)=>{let w=` ${A+1}) ${n(T)} `,P=Math.max(3,f-w.length-2);C.log(""),C.log(E(`${w}${g.repeat(P)}`)),C.log(""),v();let x=o(T);x&&(C.log(""),C.log(`${pm}${hd(x,h)}`));};YK(()=>{d.forEach((x,R)=>{y(x,R,Qa.red.bold,()=>r?.(x));}),u.forEach((x,R)=>{y(x,d.length+R,Qa.yellow.bold,()=>{let _=i?.(x)??"Cancelled";C.log(`${pm}${Qa.yellow.bold(_)}`);});});let T=(x,R,_)=>{x.length!==0&&(C.log(""),C.log(` ${_(`${x.length} ${R}`)}`),x.forEach(O=>{C.dimmed(`${pm}${n(O)}`);}));};T(d,"failed",Qa.red.bold),T(m,"failed",x=>Qa.red.bold(`${x} (quarantined)`)),T(u,"cancelled",Qa.yellow.bold),a&&(C.log(""),C.log(` ${Qa.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 w=v.length>0?` (${v.join(", ")})`:"",P=dAe(e,h,l);C.log(""),C.log(` ${Qa.green.bold(`${A} passed${w} (${E}s)`)}${P}`),sY();});}function TR(e){return HN(e),UN(e.results)}function dAe(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 AR(e){if(!e.failureDetails||!e.failureReason)return;let t=Fl({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(`${pm}${Qa.red.bold(n)}`),o&&o!==n&&(C.log(""),C.log(oY(o,pm)));let r=QK({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(`${pm}${Qa.bold("Sources:")}`);for(let s of i)C.log(`${pm} [${s.refId}] ${s.title}`);}}var Mg=" ".repeat(6);var uAe=(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);!pAe(r,i)&&o||Object.defineProperty(e,n,i);},pAe=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)},mAe=(e,t)=>{let n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n);},hAe=(e,t)=>`/* Wrapped ${e}*/
200
+ `)}var sAe={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}},aAe={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function rY(e,t,n=0){let o=aAe[e];if(!o)return;let r=Go(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=sAe[o];return {badge:r.statusGlyph(i),isTerminal:s}}function hd(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function iY({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 sY(){let e=$q(),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 Se=Rg({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.7.3"});var cAe=5,pm=" ";async function bR({getResults:e,checkDone:t,name:n,timeoutMs:o=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<o;){let s;i>cAe&&(C.error(`Failed to fetch ${n} status too many times.`),process.exit(1));try{s=await e(),i=0;}catch(c){i++,Se.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 aY(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 UN(e){let t=aY(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 Og(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 HN({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}=aY(e),h=St(),g=h.unicode?"\u2500":"-",f=process.stdout?.columns||80,y=(T,A,E,v)=>{let w=` ${A+1}) ${n(T)} `,P=Math.max(3,f-w.length-2);C.log(""),C.log(E(`${w}${g.repeat(P)}`)),C.log(""),v();let x=o(T);x&&(C.log(""),C.log(`${pm}${hd(x,h)}`));};YK(()=>{d.forEach((x,R)=>{y(x,R,Qa.red.bold,()=>r?.(x));}),u.forEach((x,R)=>{y(x,d.length+R,Qa.yellow.bold,()=>{let _=i?.(x)??"Cancelled";C.log(`${pm}${Qa.yellow.bold(_)}`);});});let T=(x,R,_)=>{x.length!==0&&(C.log(""),C.log(` ${_(`${x.length} ${R}`)}`),x.forEach(O=>{C.dimmed(`${pm}${n(O)}`);}));};T(d,"failed",Qa.red.bold),T(m,"failed",x=>Qa.red.bold(`${x} (quarantined)`)),T(u,"cancelled",Qa.yellow.bold),a&&(C.log(""),C.log(` ${Qa.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 w=v.length>0?` (${v.join(", ")})`:"",P=dAe(e,h,l);C.log(""),C.log(` ${Qa.green.bold(`${A} passed${w} (${E}s)`)}${P}`),sY();});}function TR(e){return HN(e),UN(e.results)}function dAe(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 AR(e){if(!e.failureDetails||!e.failureReason)return;let t=Fl({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(`${pm}${Qa.red.bold(n)}`),o&&o!==n&&(C.log(""),C.log(oY(o,pm)));let r=QK({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(`${pm}${Qa.bold("Sources:")}`);for(let s of i)C.log(`${pm} [${s.refId}] ${s.title}`);}}var Mg=" ".repeat(6);var uAe=(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);!pAe(r,i)&&o||Object.defineProperty(e,n,i);},pAe=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)},mAe=(e,t)=>{let n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n);},hAe=(e,t)=>`/* Wrapped ${e}*/
201
201
  ${t}`,gAe=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),fAe=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),yAe=(e,t,n)=>{let o=n===""?"":`with ${n.trim()}() `,r=hAe.bind(null,o,t.toString());Object.defineProperty(r,"name",fAe);let{writable:i,enumerable:s,configurable:a}=gAe;Object.defineProperty(e,"toString",{value:r,writable:i,enumerable:s,configurable:a});};function GN(e,t,{ignoreNonConfigurable:n=false}={}){let{name:o}=e;for(let r of Reflect.ownKeys(t))uAe(e,t,r,n);return mAe(e,t),yAe(e,t,o),e}var ER=new WeakMap,lY=(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(ER.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 GN(i,e),ER.set(i,o),i};lY.callCount=e=>{if(!ER.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return ER.get(e)};var cY=lY;var mm=[];mm.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&mm.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&mm.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var CR=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",$N=Symbol.for("signal-exit emitter"),jN=globalThis,SAe=Object.defineProperty.bind(Object),VN=class{emitted={afterExit:false,exit:false};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(jN[$N])return jN[$N];SAe(jN,$N,{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}},RR=class{},bAe=e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}}),zN=class extends RR{onExit(){return ()=>{}}load(){}unload(){}},WN=class extends RR{#s=qN.platform==="win32"?"SIGINT":"SIGHUP";#n=new VN;#e;#r;#p;#t={};#i=false;constructor(t){super(),this.#e=t,this.#t={};for(let n of mm)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(!CR(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 mm)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,mm.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 CR(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"&&CR(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)}},qN=globalThis.process,{onExit:dY}=bAe(CR(qN)?new WN(qN):new zN);var uY=ol.stderr.isTTY?ol.stderr:ol.stdout.isTTY?ol.stdout:void 0,TAe=uY?cY(()=>{dY(()=>{uY.write("\x1B[?25h");},{alwaysLast:true});}):()=>{},pY=TAe;var wR=false,Ng={};Ng.show=(e=ol.stderr)=>{e.isTTY&&(wR=false,e.write("\x1B[?25h"));};Ng.hide=(e=ol.stderr)=>{e.isTTY&&(pY(),wR=true,e.write("\x1B[?25l"));};Ng.toggle=(e,t)=>{e!==void 0&&(wR=e),wR?Ng.show(t):Ng.hide(t);};var KN=Ng;var Sb=uP(YN());function JN(){return ol.platform!=="win32"?ol.env.TERM!=="linux":!!ol.env.CI||!!ol.env.WT_SESSION||!!ol.env.TERMINUS_SUBLIME||ol.env.ConEmuTask==="{cmd::Cmder}"||ol.env.TERM_PROGRAM==="Terminus-Sublime"||ol.env.TERM_PROGRAM==="vscode"||ol.env.TERM==="xterm-256color"||ol.env.TERM==="alacritty"||ol.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var EAe={info:Qa.blue("\u2139"),success:Qa.green("\u2714"),warning:Qa.yellow("\u26A0"),error:Qa.red("\u2716")},CAe={info:Qa.blue("i"),success:Qa.green("\u221A"),warning:Qa.yellow("\u203C"),error:Qa.red("\xD7")},RAe=JN()?EAe:CAe,yb=RAe;function XN({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 vAe=XN();function QN(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return !e.includes("\x1B")&&!e.includes("\x9B")?e:e.replace(vAe,"")}function ZN({stream:e=process.stdout}={}){return !!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}function eL(){let{env:e}=ol,{TERM:t,TERM_PROGRAM:n}=e;return ol.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 wAe=3,tL=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(){ol.platform==="win32"||!ol.stdin.isTTY||(ol.stdin.setRawMode(true),ol.stdin.on("data",this.#r),ol.stdin.resume());}#e(){ol.stdin.isTTY&&(ol.stdin.off("data",this.#r),ol.stdin.pause(),ol.stdin.setRawMode(false));}#r(t){t[0]===wAe&&ol.emit("SIGINT");}},IAe=new tL,nL=IAe;uP(YN());var oL=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:ol.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:ZN({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,ol.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(!eL())this.#i=Sb.default.line;else if(t===void 0)this.#i=Sb.default.dots;else if(t!=="default"&&Sb.default[t])this.#i=Sb.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 QN(r).split(`
202
202
  `))this.#e+=Math.max(1,Math.ceil(Z4(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=Qa[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&&KN.hide(this.#o),this.#t.discardStdin&&ol.stdin.isTTY&&(this.#n=true,nL.start()),this.render(),this.#m=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#o.write(`- ${this.text}
203
203
  `),this)}stop(){return this.#c?(clearInterval(this.#m),this.#m=void 0,this.#r=0,this.clear(),this.#t.hideCursor&&KN.show(this.#o),this.#t.discardStdin&&ol.stdin.isTTY&&this.#n&&(nL.stop(),this.#n=false),this):this}succeed(t){return this.stopAndPersist({symbol:yb.success,text:t})}fail(t){return this.stopAndPersist({symbol:yb.error,text:t})}warn(t){return this.stopAndPersist({symbol:yb.warning,text:t})}info(t){return this.stopAndPersist({symbol:yb.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+`
@@ -252,7 +252,7 @@ ${u}`,{cause:d})}i=Wb({testV2:l,testName:Dn__default.basename(e,".test.yaml")});
252
252
  ${z$1.prettifyError(s)}`:`: ${Y(s)}`;C.warn(`Project config at ${e} does not match the required schema${a}`);return}let o=deletedDiff(t,n),r=nQ(o,"");r.length>0&&C.warn(`Momentic config file at ${e} contains unrecognized keys: ${r.join(", ")}. These keys will be ignored.`);let i=Hve(n);return $ve(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 jve(e){let t=tQ(e,"workspace configuration");if(t!==void 0)try{return Nve.parse(t)}catch(n){C.warn(`Possible Momentic workspace configuration file at ${e} does not adhere to the required schema: ${Y(n)}`);return}}function Vve(){let e=[],t=cwd(),n=Dn__default.parse(t).root,o=15,r=0;for(;r<o;){r++;let i=Dn__default.basename(t);if(ek.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(bc)){let a=Dn__default.join(t,s),l=dk(a);l&&e.push({configFilePath:a,config:l,rootDir:dirname(a)});}if(e.length)return e;if(t=Dn__default.dirname(t),t===n)break}return e}async function nn(e={}){let{configFilePath:t,nameFilter:n,skipExitOnError:o}=e,r=await uk(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:
253
253
  ${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 zve(e){let t=jve(e);if(!t||!t.projects||!t.projects.length)return;let n=t.projects.map(s=>(s.endsWith("/")||(s+="/"),`${s}*${bc}`)),o=AbortSignal.timeout(2e3),r;try{r=await Ad(n,{cwd:cwd(),maxDepth:Yb,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 ${Xb} is misconfigured.`),s}let i=[];for(let s of r){let a=Dn__default.join(cwd(),s),l=dk(a);l&&i.push({configFilePath:a,config:l,rootDir:dirname(a)});}return i}async function uk(e,t){if(e){e=Dn__default.resolve(e);let o=dk(e);return o?[{config:o,configFilePath:e,rootDir:Dn__default.dirname(e)}]:(console.error(`No valid Momentic project file found at ${e}.`),t||process.exit(1),[])}if(existsSync(Xb)){let o=await zve(Xb);if(o)return o}return Vve()}function vd(e,t){let n=fb.stringify(e);writeFileSync(t,n);}async function ks({project:e,apiClient:t,classificationOverrides:n}){let{classification:o,healing:r,explore:i}=(await t.getOrgSettings()).ai??{},s=qve({flags:n,config:e.config.ai?.classification,cloudConfig:o}),a=Wve({config:e.config.ai?.triage,cloudConfig:r}),l={...e.config.ai};return delete l.healing,delete l.triage,n?.disabled&&(l.aiFailureAnalysis=false),{...e,config:{...e.config,ai:{...l,classification:s,triage:a,explore:i}}}}function Wve({config:e,cloudConfig:t}){if(!(!e&&!t))return {onHealFail:e?.onHealFail??t?.onFail??hP,onHealSuccess:e?.onHealSuccess??t?.onSuccess??gP,remoteBrowser:e?.remoteBrowser}}function qve({flags:e,config:t,cloudConfig:n}){if(!(!t&&!n))return {enabled:e?.disabled?false:t?.enabled??n?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??n?.overrideExitCode??FH,categories:n?.categories??Vi}}var oQ="golden/visual-diff",rQ="reports",al="test-results";var Kve=z$1.object({width:z$1.number(),height:z$1.number()}),sf=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,n,o){let r=Dn__default.join(t.rootDir,t.config.goldenFileDir??oQ);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=o,this.apiClient=n;}async prepareGoldenScreenshotForComparison(t,n,o){if(CG(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=Dn__default.join(this.defaultGoldenScreenshotDir,`${n.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return rr__default.mkdirSync(Dn__default.dirname(r),{recursive:true}),rr__default.writeFileSync(r,o.buffer),rr__default.writeFileSync(i,JSON.stringify({width:o.width,height:o.height})),{buffer:Buffer.from(o.buffer),width:o.width,height:o.height};if(rr__default.existsSync(r)){let s=rr__default.readFileSync(r),a=Kve.parse(JSON.parse(rr__default.readFileSync(i,"utf-8")));return {buffer:s,width:a.width,height:a.height}}else throw new J("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var iQ=3e3,on=Qb(),Xve=promisify(execFile);async function gk(e,t){try{return await Qb(e).revparse(t)}catch(n){if(lQ(n))return;throw n}}async function wd(e){return gk(e,["--show-toplevel"])}async function sQ(e){return gk(e,["HEAD"])}async function aQ(e){return gk(e,["--abbrev-ref","HEAD"])}async function Dv({cwd:e,base:t,head:n,logger:o}){try{let r=(await Qb(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 fk(){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 Zb({client:e,repository:t,base:n,head:o,logger:r}){let i=Zo(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 ga(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>iQ&&!process.env.CI&&t.warn({operation:n,durationMs:s,thresholdMs:iQ,...r??{}},"[timing] slow git metadata operation");}}function Tc(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function Qve(e){let t=await sn(e,on.raw(["config","--list"])),n={};if(!t)return n;for(let o of t.split(`
254
254
  `)){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 Zve(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 Xve("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 ewe(e,t,n){let o=t?.includes("github.com"),r=t?.includes("gitlab.com");try{if(o)return Zve(e,t,n);if(r)return}catch{}}function eT(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 lQ(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 sn(e,t){try{return (await t).trim()}catch(n){if(lQ(n))return;e.error({err:n},"Failed to run git command");return}}async function fa(e,t){if(e)try{return (await Qb(t).revparse([e]))?.trim()||void 0}catch{return}}async function tT(e){let t=await fa(e);return t||await fa(`origin/${e}`)}function twe(){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 nwe(e){let[t,n,o]=await Promise.all([sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.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?Tc(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 owe(e){let[t,n,o]=await Promise.all([sn(e,on.listRemote(["--get-url","origin"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.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?Tc(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 rwe(e){let[t,n,o,r]=await Promise.all([sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.listRemote(["--get-url","origin"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.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?eT(s):void 0;return {ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:t?Tc(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 iwe(e){let[t,n,o]=await Promise.all([sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.show(["-s","--pretty=%an"]))]),r=process.env.BUILDKITE_REPO,i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?eT(r):void 0;return {ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:t?Tc(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 swe(e){let[t,n,o]=await Promise.all([sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.show(["-s","--pretty=%an"]))]),r=process.env["Build.Repository.Uri"],i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?eT(r):void 0;return {ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:t?Tc(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 awe(e,t,n){let[o,r,i,s,a,l,c,d,u]=await Promise.all([sn(e,on.revparse(["HEAD"])),sn(e,on.revparse(["--short","HEAD"])),sn(e,on.revparse(["--abbrev-ref","HEAD"])),sn(e,on.listRemote(["--get-url","origin"])),sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.show(["-s","--pretty=%B"])),sn(e,on.show(["-s","--pretty=%an"])),t?sn(e,on.raw(["merge-base","--fork-point",t])):Promise.resolve(void 0),Qve(e)]),p=d||(t?await sn(e,on.raw(["merge-base",t,"HEAD"])):void 0),m=p?await sn(e,on.show(["--no-patch","--format=%ci",p])):void 0,h=s?.includes("github.com"),g=s?.includes("gitlab.com"),f=s?eT(s):void 0,y=u["user.email"]||void 0,T=u["user.name"]||void 0,A=u["user.username"]||void 0,E=u["github.user"]||void 0,P=(n?.includeHostingUsername??true?await ewe(e,s,u):void 0)??A??E??void 0;return {ciProvider:"none",gitCommitSha:o,gitCommitShaShort:r,gitBranchName:i,gitOriginUrl:s,gitCommitTimestamp:a?Tc(a):void 0,gitCommitMessage:l,gitCommitAuthorName:c,gitLocalUsername:P,gitLocalEmail:y,gitLocalName:T,lastCommitOnMainSha:p,lastCommitOnMainTimestamp:m?Tc(m):void 0,githubRepository:h?f:void 0,gitlabProjectPath:g?f:void 0,pipelineId:void 0}}async function lwe(e){let[t,n]=await Promise.all([sn(e,on.show(["--no-patch","--format=%ci"])),sn(e,on.show(["-s","--pretty=%an"]))]),o=process.env.GIT_REPOSITORY_URL,r=o?.includes("github.com"),i=o?.includes("gitlab.com"),s=o?eT(o):void 0;return {ciProvider:"Bitrise",gitCommitSha:process.env.BITRISE_GIT_COMMIT,gitCommitShaShort:process.env.BITRISE_GIT_COMMIT?.slice(0,6),gitCommitTimestamp:t?Tc(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 cwe(){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 dwe(){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:Tc(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:Tc(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 uwe(e){let t=[...e.config.gitProtectedBranches??[]];return e.config.gitMainBranch&&t.push(e.config.gitMainBranch),{gitMainBranch:e.config.gitMainBranch,gitProtectedBranches:t}}async function ya(e,t,n){let o=twe();if(!o)return awe(e,t,n);switch(o){case "GithubActions":return nwe(e);case "GitlabCI":return owe(e);case "CircleCI":return rwe(e);case "Buildkite":return iwe(e);case "AzureDevOps":return swe(e);case "GCPCloudBuild":return cwe();case "Bitrise":return lwe(e);case "Custom":return dwe()}}async function pwe(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 ga({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 ga({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 ga({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 mwe(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 ga({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 ga({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 ga({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 hwe(e,t,n){try{if(n.githubRepository){let{owner:o,repo:r}=Pz(n.githubRepository);return await ga({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitHub",fn:()=>mwe(e,t,o,r,n),context:{githubRepository:n.githubRepository}})}else if(n.gitlabProjectPath){let o=n.gitlabProjectPath;return await ga({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitlab",fn:()=>pwe(e,t,o,n),context:{gitlabProjectPath:o}})}}catch(o){e.warn({err:o},"Failed to get remote git metadata");}return n}async function gwe(e,t,n,o){let r={},i={gitMainBranch:n.config.gitMainBranch};return ga({logger:e,operation:"getGitMetadata.total",fn:async()=>{let[s,a]=await Promise.all([ga({logger:e,operation:"getGitMetadata.getConfiguredGitMetadata",fn:()=>uwe(n),context:{projectConfigPath:n.configFilePath}}),ga({logger:e,operation:"getGitMetadata.getEnvironmentGitMetadata",fn:async()=>{let d=await ya(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 ga({logger:e,operation:"getGitMetadata.getRemoteMetadataIfNeeded",fn:()=>hwe(e,t,l),context:{githubRepository:l.githubRepository,gitlabProjectPath:l.gitlabProjectPath,gitBranchName:l.gitBranchName}});return {...s,...a,...c}},context:r})}async function cQ(e){try{let t=await Qb(e).remote(["show","origin"]);return t?t.match(/HEAD branch: (.*)$/m)?.[1]?.trim():void 0}catch{return}}async function dQ(){try{return (await on.revparse(["--is-inside-work-tree"])).trim()==="true"}catch{return false}}var hk=new Map;async function fwe(e,t,n){let o,r;try{[o,r]=await Promise.all([sn(e,on.raw(["symbolic-ref","--short","-q","HEAD"]).then(a=>a.trim())),sn(e,on.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 ei(e,t,n,o){let r=await fwe(e,n,o);if(r&&hk.has(r))return e.debug("Using cached git metadata"),hk.get(r);let i=await gwe(e,t,n,o);return r&&hk.set(r,i),i}var ywe=1024*1024;async function Bv({cwd:e,baseRef:t="HEAD"}){let n=Qb(await lf(e)),[o,r]=await Promise.all([n.diff(["--name-only","--diff-filter=ACDMRTUXB",t,"--"]),n.raw(["ls-files","--others","--exclude-standard"])]);return Swe(Hv([...uQ(o),...uQ(r)]))}function Swe(e){return e.filter(Sk)}function Sk(e){let t=ll.basename(e);return e.endsWith(".test.yaml")||e.endsWith(".module.yaml")||t===bc||t===Xb}async function Uv({cwd:e,paths:t,maxFileSizeBytes:n=ywe}){let o=await lf(e),r=[];for(let i of Hv(t)){let s=gQ({repoRoot:o,relativePath:i});if(!Sk(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 pQ({cwd:e}){let t=await lf(e),n=await promises.mkdtemp(ll.join(yk.tmpdir(),"momentic-git-snapshot-"));try{let o=Qb(t).env("GIT_INDEX_FILE",ll.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 af({cwd:e,paths:t,baseRef:n="HEAD",maxFileSizeBytes:o}){let r=await lf(e),i=Hv(t??await Bv({cwd:r,baseRef:n}));if(i.length===0)return "";let a=(await Uv({cwd:r,paths:i,maxFileSizeBytes:o})).filter(c=>c.operation==="upsert").map(c=>c.path),l=await promises.mkdtemp(ll.join(yk.tmpdir(),"momentic-git-patch-"));try{let c=Qb(r).env("GIT_INDEX_FILE",ll.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 mQ({cwd:e,patch:t}){let n=await lf(e),o=await promises.mkdtemp(ll.join(yk.tmpdir(),"momentic-git-apply-")),r=ll.join(o,"heal.patch");try{await promises.writeFile(r,t,"utf8");let i=Qb(n),s=bwe(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(gQ({repoRoot:n,relativePath:a}),!Sk(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 hQ({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 lf(e),g=await Uv({cwd:h,paths:t??await Bv({cwd:h,baseRef:o}),maxFileSizeBytes:m}),f=n??await aQ(h);if(!f)throw new _e(`Cannot determine base branch because git is not usable in '${h}'.`);let y=o??await sQ(h);if(!y)throw new _e(`Cannot determine base commit SHA because git is not usable in '${h}'.`);return {baseBranch:f,baseCommitSha:y,headBranch:r,branchPrefix:i,idempotencyKey:s,commitMessage:a,title:l,body:c,changes:g,reviewers:d,draft:u,coAuthorRange:p}}function uQ(e){return e?e.split(`
255
- `).filter(t=>t.length>0):[]}function Hv(e){return [...new Set(e)]}function bwe(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 Hv(n)}async function lf(e){let t=await wd(e);if(!t)throw new _e(`Cannot find a git repository at '${e}'. Install git and run this from inside a git worktree.`);return t}function gQ({repoRoot:e,relativePath:t}){if(!t||ll.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let n=ll.resolve(e),o=ll.resolve(n,t);if(o!==n&&!o.startsWith(`${n}${ll.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var fQ=new Set([".DS_Store","__MACOSX"]),yQ={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 Awe(e,t,n){if(yQ[n]){let i=yQ[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 bk=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 SQ(e,t){try{let n=Dn__default.join(t,rt);return la.parse(JSON.parse(rr__default.readFileSync(n,"utf-8")))}catch{throw new bk(e,t)}}function bQ(e,t,n){let o=randomUUID(),r=e.child({runGroupId:o});rr__default.rmSync(t,{recursive:true,force:true});let i=rr__default.readdirSync(n).filter(l=>!fQ.has(l)).map(l=>Dn__default.join(n,l));if(i.length===0)throw new Error(`No run groups found in results path: ${n}`);rr__default.mkdirSync(t,{recursive:true});let s={...SQ(n,i[0]),id:o,healRiskSummary:void 0,aiSelect:void 0};for(let l of i){let c=Dn__default.join(l,jn);if(!rr__default.existsSync(c))continue;let d=SQ(n,l);r.info({oldRunGroupId:d.id},"Merging run groups");for(let p in d){if(p==="id")continue;let m=p;s[m]=Awe(s,d,m);}let u=rr__default.readdirSync(c);for(let p of u){if(fQ.has(p))continue;let m=Dn__default.join(c,p),h=Dn__default.join(t,jn,p);rr__default.cpSync(m,h,{recursive:true});}}let a=Dn__default.join(t,rt);rr__default.writeFileSync(a,JSON.stringify(s,null,2));}var fe="v1",Tk="cli",wm="3.7.2";var Ewe=9e4,Cwe=3,Rwe=1500,vwe=15e3,zn=class extends Error{status;rawError;constructor(t,n,o,r={}){super(o,r),this.status=t,this.rawError=n;}},Ak=class extends _e{constructor(t,n={}){super(t,n),this.name="PlanLimitExceededError";}};async function wwe(e){return e.text().then(t=>{try{return JSON.parse(t).error}catch{return t}})}var Ek=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(){let t={"Content-Type":"application/json"};return (t[DC]=wm),(t[b2]=Tk),t}async sendRequest(t,n){let{retries:o=Cwe,requestTimeoutMs:r=Ewe,initialRetryDelayMs:i=Rwe,maxRetryDelayMs:s=vwe,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 zn&&p.status>=400&&p.status<500)throw p.status===402?new Ak(p.rawError,{cause:p}):p;if(p instanceof Error&&p.name==="AbortError"&&(d=new Tu),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=Iwe(t);return De({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 wwe(u);throw new zn(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 Iwe(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 Ni=class extends Ek{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}`,[S2]:this.mode,[FC]:this.runner}}};var Gv=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 Ck(e){}function TQ(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=Ck,onError:n=Ck,onRetry:o=Ck,onComment:r}=e,i="",s=true,a,l="",c="";function d(g){let f=s?g.replace(/^\xEF\xBB\xBF/,""):g,[y,T]=xwe(`${i}${f}`);for(let A of y)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 y=g.slice(0,f),T=g[f+1]===" "?2:1,A=g.slice(f+T);p(y,A,g);return}p(g,"",g);}function p(g,f,y){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
255
+ `).filter(t=>t.length>0):[]}function Hv(e){return [...new Set(e)]}function bwe(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 Hv(n)}async function lf(e){let t=await wd(e);if(!t)throw new _e(`Cannot find a git repository at '${e}'. Install git and run this from inside a git worktree.`);return t}function gQ({repoRoot:e,relativePath:t}){if(!t||ll.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let n=ll.resolve(e),o=ll.resolve(n,t);if(o!==n&&!o.startsWith(`${n}${ll.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var fQ=new Set([".DS_Store","__MACOSX"]),yQ={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 Awe(e,t,n){if(yQ[n]){let i=yQ[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 bk=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 SQ(e,t){try{let n=Dn__default.join(t,rt);return la.parse(JSON.parse(rr__default.readFileSync(n,"utf-8")))}catch{throw new bk(e,t)}}function bQ(e,t,n){let o=randomUUID(),r=e.child({runGroupId:o});rr__default.rmSync(t,{recursive:true,force:true});let i=rr__default.readdirSync(n).filter(l=>!fQ.has(l)).map(l=>Dn__default.join(n,l));if(i.length===0)throw new Error(`No run groups found in results path: ${n}`);rr__default.mkdirSync(t,{recursive:true});let s={...SQ(n,i[0]),id:o,healRiskSummary:void 0,aiSelect:void 0};for(let l of i){let c=Dn__default.join(l,jn);if(!rr__default.existsSync(c))continue;let d=SQ(n,l);r.info({oldRunGroupId:d.id},"Merging run groups");for(let p in d){if(p==="id")continue;let m=p;s[m]=Awe(s,d,m);}let u=rr__default.readdirSync(c);for(let p of u){if(fQ.has(p))continue;let m=Dn__default.join(c,p),h=Dn__default.join(t,jn,p);rr__default.cpSync(m,h,{recursive:true});}}let a=Dn__default.join(t,rt);rr__default.writeFileSync(a,JSON.stringify(s,null,2));}var fe="v1",Tk="cli",wm="3.7.3";var Ewe=9e4,Cwe=3,Rwe=1500,vwe=15e3,zn=class extends Error{status;rawError;constructor(t,n,o,r={}){super(o,r),this.status=t,this.rawError=n;}},Ak=class extends _e{constructor(t,n={}){super(t,n),this.name="PlanLimitExceededError";}};async function wwe(e){return e.text().then(t=>{try{return JSON.parse(t).error}catch{return t}})}var Ek=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(){let t={"Content-Type":"application/json"};return (t[DC]=wm),(t[b2]=Tk),t}async sendRequest(t,n){let{retries:o=Cwe,requestTimeoutMs:r=Ewe,initialRetryDelayMs:i=Rwe,maxRetryDelayMs:s=vwe,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 zn&&p.status>=400&&p.status<500)throw p.status===402?new Ak(p.rawError,{cause:p}):p;if(p instanceof Error&&p.name==="AbortError"&&(d=new Tu),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=Iwe(t);return De({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 wwe(u);throw new zn(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 Iwe(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 Ni=class extends Ek{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}`,[S2]:this.mode,[FC]:this.runner}}};var Gv=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 Ck(e){}function TQ(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=Ck,onError:n=Ck,onRetry:o=Ck,onComment:r}=e,i="",s=true,a,l="",c="";function d(g){let f=s?g.replace(/^\xEF\xBB\xBF/,""):g,[y,T]=xwe(`${i}${f}`);for(let A of y)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 y=g.slice(0,f),T=g[f+1]===" "?2:1,A=g.slice(f+T);p(y,A,g);return}p(g,"",g);}function p(g,f,y){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
256
256
  `;break;case "id":a=f.includes("\0")?void 0:f;break;case "retry":/^\d+$/.test(f)?o(parseInt(f,10)):n(new Gv(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:y}));break;default:n(new Gv(`Unknown field "${g.length>20?`${g.slice(0,20)}\u2026`:g}"`,{type:"unknown-field",field:g,value:f,line:y}));break}}function m(){l.length>0&&t({id:a,event:c||void 0,data:l.endsWith(`
257
257
  `)?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 xwe(e){let t=[],n="",o=0;for(;o<e.length;){let r=e.indexOf("\r",o),i=e.indexOf(`
258
258
  `,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]===`
@@ -274,7 +274,7 @@ ${t}:`]}}function QQ({id:e,model:t,created:n}){return {id:e??void 0,modelId:t??v
274
274
 
275
275
  `,F_e=1e4,b4=I__default.object({stream:I__default.boolean().optional(),type:I__default.literal("response.create").optional()}).passthrough(),B_e=b4.extend({stream:I__default.literal(true)});function T4(e={}){let t=new Qk(e);return async(n,o)=>{if(!G_e(n,o))return fetch(n,o);let r=await U_e(o?.body);if(!r)return fetch(n,o);let i=B_e.safeParse(r);return i.success?t.fetch({httpUrl:A4(n),init:o,request:i.data}):fetch(n,o)}}var Qk=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===Xk.OPEN?this.websocket:this.openPromise?this.openPromise:(this.openPromise=new Promise((o,r)=>{let i=new Xk($_e(t),{headers:j_e(n?.headers)}),s=setTimeout(()=>{i.terminate(),r(new Error("Timed out opening OpenAI responses websocket"));},F_e);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"};W_e({payload:i,compactThreshold:this.options.compactThreshold});let s=Array.isArray(t.input)?t.input:void 0,a=this.latestResponseId&&s&&this.previousFullInput?V_e({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=K_e(t),r;try{r=JSON.parse(o);}catch(a){n.controller.error(a),this.pendingRequest=void 0,this.websocket?.close();return}let i=UV.safeParse(r),s=i.success?i.data:void 0;if(q_e(s)&&n.sentContinuation&&!n.startedStreaming&&!n.retryingFullContext&&this.websocket?.readyState===Xk.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(Y_e(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(D_e)),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 U_e(e){let t=await H_e(e);if(!t)return;let n=b4.safeParse(JSON.parse(t));return n.success?n.data:void 0}async function H_e(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 G_e(e,t){return (t?.method??(e instanceof Request?e.method:"GET")).toUpperCase()==="POST"&&A4(e).endsWith("/responses")}function A4(e){return e instanceof Request?e.url:e.toString()}function $_e(e){let t=new URL(e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}function j_e(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 V_e({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(z_e)}function z_e(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 W_e({payload:e,compactThreshold:t}){t&&(e.context_management=[{type:"compaction",compact_threshold:t}]);}function q_e(e){return e?.type==="error"&&e.code==="previous_response_not_found"}function K_e(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 Y_e(e){return new TextEncoder().encode(`data: ${e}
276
276
 
277
- `)}var X_e="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD",Q_e=2e5;function Qv(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[DC]:wm,...n&&{[A2]:n},...r&&{[FC]:r},...i&&{[E2]:i}};return o&&(s[T2]=JSON.stringify(o)),s}var E4="bedrock/",C4="azure/",R4=e=>t=>{let n=Qv(e),o=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(E4)?o=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(E4.length))}`:t.startsWith(C4)&&(o=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(C4.length))}`),createAnthropic({baseURL:o,headers:n,apiKey:e.apiKey})(t)},v4=e=>t=>{let n=Qv(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??Z_e(process.env[X_e])??Q_e:void 0;return iT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?T4({compactThreshold:r}):void 0})(t)},w4=e=>t=>{let n=Qv(e);return iT({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey})(t)},I4=e=>t=>{let n=Qv(e);return iT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey})(t)};function Z_e(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}var or=class extends Ni{agentConfig;constructor(t,n){let o={...Zh,...t};QE(o),super(n),this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return Sj.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`/${fe}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:wm,...t},signal:n.abortSignal});return yj.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`/${fe}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z$1.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(`/${fe}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal});return v2.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(`/${fe}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal});return xM.parse(r)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return R2.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(`/${fe}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return xM.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`/${fe}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return C2.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`/${fe}/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(`/${fe}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return jP.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`/${fe}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return w2.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`/${fe}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return $P.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return y$.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return S$.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(`/${fe}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return gE.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`/${fe}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return Pj.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`/${fe}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return p$.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`/${fe}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return g$.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`/${fe}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return h$.parse(o)}async getIframeRegex(t,n){let o=await this.sendRequest(`/${fe}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return HH.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,orgId:i,logger:s}=t,a=async l=>{try{await this.sendRequest(`/${fe}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},...l,metadata:{orgId:i,runId:r,...l.metadata}}});}catch(c){s.warn({err:c},"Failed to upsert result classification trace");}};return a({}),{id:n,update:a}}getAnthropicModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return R4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(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 v4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(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 w4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAzureOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return I4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}};var Ot=class extends Ni{getAppUrl(){return Tg(this.baseUrl)}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${fe}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof zn?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 G2.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${fe}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return dz.parse(t).announcements}async getQuotaStatus(){let t=await this.sendRequest(`/${fe}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return $2.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${fe}/browsers/connection`,{method:"POST",body:{...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:1e4});return iq.parse(n)}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${fe}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return D2.parse(n)}async getRunExport(t){let n=await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return B2.parse(n)}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${fe}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return mq.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${fe}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async saveRunClassification(t,n){await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${fe}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return x2.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${fe}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${fe}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${fe}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return P2.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${fe}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return O2.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${fe}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${fe}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return _M.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(`/${fe}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${fe}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return _M.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${fe}/${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(`/${fe}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return M2[t](r)}async queueTests(t){let n=await this.sendRequest(`/${fe}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return I2.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${fe}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return H2.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${fe}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${fe}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${fe}/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(`/${fe}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return j2.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${fe}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return cq.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${fe}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${fe}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${fe}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${fe}/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(`/${fe}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return W2.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${fe}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return dj.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${fe}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return uj.parse(n)}catch(n){if(n instanceof zn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ki.parse(n)}catch(n){if(n instanceof zn&&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(`/${fe}/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(`/${fe}/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(`/${fe}/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(`/${fe}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return q2.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${fe}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${fe}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return K2.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${fe}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Y2.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${fe}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return J2.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${fe}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return X2.parse(o)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${fe}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return fq.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${fe}/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(`/${fe}/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 L$.parse(p)}catch(p){return u.warn({err:p},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${fe}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return tO.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(`/${fe}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.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(`/${fe}/git/github/${t}/${n}/compare?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return vz.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(`/${fe}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return wz.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${fe}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Iz.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return Ez.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return Cz.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${fe}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return _z.parse(o).template}catch(o){if(o instanceof zn&&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(`/${fe}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof zn&&s.status===404)return;throw s}return Rz.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.parse(r)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${fe}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MM.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(`/${fe}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ob.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${fe}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof zn&&s.status===404)return;throw s}return xz.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${fe}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${fe}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MM.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${fe}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z$1.record(z$1.string(),z$1.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${fe}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Q$(t)}catch(t){if(t instanceof zn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),Xh.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${fe}/quarantine`,{method:"GET"});return Q2.parse(t)}async sendExploreSlackNotification(t){await this.sendRequest(`/${fe}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${fe}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${fe}/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(`/${fe}/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(`/${fe}/limbar/android`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return eq.parse(n)}async extendEmulatorTtl(t,n){try{await this.sendRequest(`/${fe}/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(`/${fe}/limbar/${this.platformRoute(r)}/upload-url`,{method:"POST",retries:3,body:i,requestTimeoutMs:15e3,logResponse:true});return nq.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(`/${fe}/limbar/android/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(`/${fe}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return oq.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(`/${fe}/limbar/assets/${t}/${n}/${this.platformRoute(o)}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return rq.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(`/${fe}/limbar/assets/${t}/${n}/${this.platformRoute(o)}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(`/${fe}/limbar/ios`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return tq.parse(n)}async deleteIosEmulator(t){await this.sendRequest(`/${fe}/limbar/ios/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${fe}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return iz.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${fe}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return PM.parse(n)}};async function Pm(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 _d=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};var Pd=class extends Ni{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${fe}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return GH.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var pf=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Tg(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 Od="v1",rPe=2e3,x4="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Md=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(`/${Od}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${Od}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(x4);let n=await this.httpClient.sendRequest(`/${Od}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof zn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=uz.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(x4);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${Od}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?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}])=>Te(this.httpClient.sendRequest(`/${Od}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:rPe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${Od}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${Od}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${Od}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${Od}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return pz.parse(t)}};function _4(e,t,n){return fetch(e,{method:"PUT",body:n,headers:{"Content-Type":t}})}var Zv=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 _4(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 Nd({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new UC:new eD(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var eD=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=BC(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:DM(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:DM(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=fm({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&&sPe({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.7.2"];if(_t.increment("step_cache_resolution",a.cacheKeysHit.length,[...l,"outcome:hit"]),_t.increment("step_cache_resolution",a.cacheKeysMissed.length,[...l,"outcome:miss"]),_t.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 kn({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"),_t.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.7.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=uv({entries:r,orgId:this.orgId,testId:o,logger:n}),s=dv({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 sPe({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:y})=>({moduleId:g,snapshotHit:f,stats:y})),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 aPe(e){let t=new P4,n=Dn__default.join(e,rt),o=la.parse(JSON.parse(rr__default.readFileSync(n,"utf-8")));t.addLocalFile(n);for(let r of rr__default.readdirSync(Dn__default.join(e,jn))){if(!r.endsWith(".zip"))continue;let i=r.replace(/\.zip$/,""),s=new P4(Dn__default.join(e,jn,r));for(let a of s.getEntries())a.isDirectory||t.addFile(Dn__default.join(jn,i,a.entryName),a.getData());}return {runGroupId:o.id,buffer:t.toBuffer()}}async function sT(e){let{client:t,resultsPath:n,persist:o}=e;if(!rr__default.existsSync(n))return {success:false,error:"results path does not exist"};let r=new Zv(t);try{let{runGroupId:i,buffer:s}=aPe(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:Y(i)}}}var aT=class e{constructor(t,n=true){this.filePath=t;n&&rr__default.rmSync(this.filePath,{recursive:true,force:true}),rr__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(Dn__default.join(this.filePath,t));return this.children.push(n),n}cwd(){return this.filePath}mkdir(t){rr__default.mkdirSync(Dn__default.join(this.filePath,t),{recursive:true});}readFile(t){let n=Dn__default.join(this.filePath,t);if(rr__default.existsSync(n))return rr__default.readFileSync(n)}storeFile(t){let{name:n,contents:o}=t,r=Dn__default.join(this.filePath,n);try{rr__default.mkdirSync(Dn__default.dirname(r),{recursive:!0}),rr__default.writeFileSync(r,o);}catch{}}createFileStream(t){let n=Dn__default.join(this.filePath,t),o=rr__default.createWriteStream(n);return this.streams.push(o),o}createRunArchive(t,n){let o=new nD(Dn__default.join(this.filePath,jn),t,n);return this.children.push(o),o}},nD=class{children=[];tempPath;finalPath;logger;closed=false;constructor(t,n,o){this.tempPath=Dn__default.join(t,`temp-storage-${n}`),this.finalPath=Dn__default.join(t,`${n}.zip`),this.logger=o,rr__default.rmSync(this.tempPath,{recursive:true,force:true}),rr__default.rmSync(this.finalPath,{recursive:true,force:true}),rr__default.mkdirSync(this.tempPath,{recursive:true});}readFile(t){let n=Dn__default.join(this.tempPath,t);if(rr__default.existsSync(n))return rr__default.readFileSync(n)}mkdir(t){rr__default.mkdirSync(Dn__default.join(this.tempPath,t),{recursive:true});}cd(t){let n=new aT(Dn__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=Dn__default.join(this.tempPath,n);rr__default.mkdirSync(Dn__default.dirname(r),{recursive:true}),rr__default.writeFileSync(r,o);}close(){if(!this.closed){this.closed=true;for(let t of this.children)t.close();try{let t=new P4;t.addLocalFolder(this.tempPath,void 0,o=>o!==".DS_Store");let n=t.toBuffer();rr__default.writeFileSync(this.finalPath,n),rr__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 L4(e){try{return rr__default.existsSync(e)?JSON.parse(rr__default.readFileSync(e,"utf-8")):void 0}catch{return}}function O4(e){return rr__default.existsSync(e)?rr__default.readFileSync(e,"utf-8").split(`
277
+ `)}var X_e="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD",Q_e=2e5;function Qv(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[DC]:wm,...n&&{[A2]:n},...r&&{[FC]:r},...i&&{[E2]:i}};return o&&(s[T2]=JSON.stringify(o)),s}var E4="bedrock/",C4="azure/",R4=e=>t=>{let n=Qv(e),o=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(E4)?o=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(E4.length))}`:t.startsWith(C4)&&(o=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(C4.length))}`),createAnthropic({baseURL:o,headers:n,apiKey:e.apiKey})(t)},v4=e=>t=>{let n=Qv(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??Z_e(process.env[X_e])??Q_e:void 0;return iT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?T4({compactThreshold:r}):void 0})(t)},w4=e=>t=>{let n=Qv(e);return iT({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey})(t)},I4=e=>t=>{let n=Qv(e);return iT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey})(t)};function Z_e(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}var or=class extends Ni{agentConfig;constructor(t,n){let o={...Zh,...t};QE(o),super(n),this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return Sj.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`/${fe}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:wm,...t},signal:n.abortSignal});return yj.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`/${fe}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z$1.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(`/${fe}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal});return v2.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(`/${fe}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal});return xM.parse(r)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return R2.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(`/${fe}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return xM.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`/${fe}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return C2.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`/${fe}/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(`/${fe}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return jP.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`/${fe}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return w2.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`/${fe}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return $P.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return y$.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`/${fe}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return S$.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(`/${fe}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return gE.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`/${fe}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return Pj.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`/${fe}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return p$.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`/${fe}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return g$.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`/${fe}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return h$.parse(o)}async getIframeRegex(t,n){let o=await this.sendRequest(`/${fe}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return HH.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,orgId:i,logger:s}=t,a=async l=>{try{await this.sendRequest(`/${fe}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},...l,metadata:{orgId:i,runId:r,...l.metadata}}});}catch(c){s.warn({err:c},"Failed to upsert result classification trace");}};return a({}),{id:n,update:a}}getAnthropicModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return R4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(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 v4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(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 w4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}getAzureOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,parentTraceId:i}=t;return I4({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:{...It(o),promptType:r},sessionId:n,runner:this.runner,parentTraceId:i})}};var Ot=class extends Ni{getAppUrl(){return Tg(this.baseUrl)}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${fe}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof zn?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 G2.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${fe}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return dz.parse(t).announcements}async getQuotaStatus(){let t=await this.sendRequest(`/${fe}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return $2.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${fe}/browsers/connection`,{method:"POST",body:{...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:1e4});return iq.parse(n)}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${fe}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return D2.parse(n)}async getRunExport(t){let n=await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return B2.parse(n)}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${fe}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return mq.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${fe}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async saveRunClassification(t,n){await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${fe}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return x2.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${fe}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${fe}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${fe}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return P2.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${fe}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return O2.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${fe}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${fe}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return _M.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(`/${fe}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${fe}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return _M.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${fe}/${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(`/${fe}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return M2[t](r)}async queueTests(t){let n=await this.sendRequest(`/${fe}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return I2.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${fe}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return H2.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${fe}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${fe}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${fe}/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(`/${fe}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return j2.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${fe}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return cq.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${fe}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${fe}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${fe}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${fe}/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(`/${fe}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return W2.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${fe}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return dj.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${fe}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return uj.parse(n)}catch(n){if(n instanceof zn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${fe}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ki.parse(n)}catch(n){if(n instanceof zn&&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(`/${fe}/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(`/${fe}/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(`/${fe}/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(`/${fe}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return q2.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${fe}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${fe}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return K2.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${fe}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Y2.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${fe}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return J2.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${fe}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return X2.parse(o)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${fe}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return fq.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${fe}/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(`/${fe}/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 L$.parse(p)}catch(p){return u.warn({err:p},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${fe}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return tO.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(`/${fe}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.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(`/${fe}/git/github/${t}/${n}/compare?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return vz.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(`/${fe}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return wz.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${fe}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Iz.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return Ez.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return Cz.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${fe}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return _z.parse(o).template}catch(o){if(o instanceof zn&&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(`/${fe}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof zn&&s.status===404)return;throw s}return Rz.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${fe}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.parse(r)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${fe}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MM.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(`/${fe}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ob.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${fe}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof zn&&s.status===404)return;throw s}return xz.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${fe}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ob.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${fe}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return MM.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${fe}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z$1.record(z$1.string(),z$1.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${fe}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Q$(t)}catch(t){if(t instanceof zn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),Xh.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${fe}/quarantine`,{method:"GET"});return Q2.parse(t)}async sendExploreSlackNotification(t){await this.sendRequest(`/${fe}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${fe}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${fe}/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(`/${fe}/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(`/${fe}/limbar/android`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return eq.parse(n)}async extendEmulatorTtl(t,n){try{await this.sendRequest(`/${fe}/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(`/${fe}/limbar/${this.platformRoute(r)}/upload-url`,{method:"POST",retries:3,body:i,requestTimeoutMs:15e3,logResponse:true});return nq.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(`/${fe}/limbar/android/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(`/${fe}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return oq.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(`/${fe}/limbar/assets/${t}/${n}/${this.platformRoute(o)}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return rq.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(`/${fe}/limbar/assets/${t}/${n}/${this.platformRoute(o)}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(`/${fe}/limbar/ios`,{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return tq.parse(n)}async deleteIosEmulator(t){await this.sendRequest(`/${fe}/limbar/ios/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${fe}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return iz.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${fe}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return PM.parse(n)}};async function Pm(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 _d=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};var Pd=class extends Ni{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${fe}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return GH.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var pf=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Tg(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 Od="v1",rPe=2e3,x4="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Md=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(`/${Od}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${Od}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(x4);let n=await this.httpClient.sendRequest(`/${Od}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof zn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=uz.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(x4);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${Od}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?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}])=>Te(this.httpClient.sendRequest(`/${Od}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:rPe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${Od}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${Od}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${Od}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${Od}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof zn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return pz.parse(t)}};function _4(e,t,n){return fetch(e,{method:"PUT",body:n,headers:{"Content-Type":t}})}var Zv=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 _4(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 Nd({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new UC:new eD(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var eD=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=BC(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:DM(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:DM(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=fm({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&&sPe({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.7.3"];if(_t.increment("step_cache_resolution",a.cacheKeysHit.length,[...l,"outcome:hit"]),_t.increment("step_cache_resolution",a.cacheKeysMissed.length,[...l,"outcome:miss"]),_t.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 kn({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"),_t.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.7.3","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=uv({entries:r,orgId:this.orgId,testId:o,logger:n}),s=dv({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 sPe({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:y})=>({moduleId:g,snapshotHit:f,stats:y})),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 aPe(e){let t=new P4,n=Dn__default.join(e,rt),o=la.parse(JSON.parse(rr__default.readFileSync(n,"utf-8")));t.addLocalFile(n);for(let r of rr__default.readdirSync(Dn__default.join(e,jn))){if(!r.endsWith(".zip"))continue;let i=r.replace(/\.zip$/,""),s=new P4(Dn__default.join(e,jn,r));for(let a of s.getEntries())a.isDirectory||t.addFile(Dn__default.join(jn,i,a.entryName),a.getData());}return {runGroupId:o.id,buffer:t.toBuffer()}}async function sT(e){let{client:t,resultsPath:n,persist:o}=e;if(!rr__default.existsSync(n))return {success:false,error:"results path does not exist"};let r=new Zv(t);try{let{runGroupId:i,buffer:s}=aPe(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:Y(i)}}}var aT=class e{constructor(t,n=true){this.filePath=t;n&&rr__default.rmSync(this.filePath,{recursive:true,force:true}),rr__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(Dn__default.join(this.filePath,t));return this.children.push(n),n}cwd(){return this.filePath}mkdir(t){rr__default.mkdirSync(Dn__default.join(this.filePath,t),{recursive:true});}readFile(t){let n=Dn__default.join(this.filePath,t);if(rr__default.existsSync(n))return rr__default.readFileSync(n)}storeFile(t){let{name:n,contents:o}=t,r=Dn__default.join(this.filePath,n);try{rr__default.mkdirSync(Dn__default.dirname(r),{recursive:!0}),rr__default.writeFileSync(r,o);}catch{}}createFileStream(t){let n=Dn__default.join(this.filePath,t),o=rr__default.createWriteStream(n);return this.streams.push(o),o}createRunArchive(t,n){let o=new nD(Dn__default.join(this.filePath,jn),t,n);return this.children.push(o),o}},nD=class{children=[];tempPath;finalPath;logger;closed=false;constructor(t,n,o){this.tempPath=Dn__default.join(t,`temp-storage-${n}`),this.finalPath=Dn__default.join(t,`${n}.zip`),this.logger=o,rr__default.rmSync(this.tempPath,{recursive:true,force:true}),rr__default.rmSync(this.finalPath,{recursive:true,force:true}),rr__default.mkdirSync(this.tempPath,{recursive:true});}readFile(t){let n=Dn__default.join(this.tempPath,t);if(rr__default.existsSync(n))return rr__default.readFileSync(n)}mkdir(t){rr__default.mkdirSync(Dn__default.join(this.tempPath,t),{recursive:true});}cd(t){let n=new aT(Dn__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=Dn__default.join(this.tempPath,n);rr__default.mkdirSync(Dn__default.dirname(r),{recursive:true}),rr__default.writeFileSync(r,o);}close(){if(!this.closed){this.closed=true;for(let t of this.children)t.close();try{let t=new P4;t.addLocalFolder(this.tempPath,void 0,o=>o!==".DS_Store");let n=t.toBuffer();rr__default.writeFileSync(this.finalPath,n),rr__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 L4(e){try{return rr__default.existsSync(e)?JSON.parse(rr__default.readFileSync(e,"utf-8")):void 0}catch{return}}function O4(e){return rr__default.existsSync(e)?rr__default.readFileSync(e,"utf-8").split(`
278
278
  `).map(n=>n.trim()).filter(n=>n.length>0):[]}function uPe(e,t){let n=e.attemptIdToAttemptNumber.get(t);if(n)return Dn__default.join(e.inflatedPath,"attempts",n);let o=Dn__default.join(e.inflatedPath,"attempts");if(!rr__default.existsSync(o))return;let r=rr__default.readdirSync(o,{withFileTypes:true}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of r){let s=Dn__default.join(o,i,rt),a=L4(s);if(typeof a!="object"||a===null)continue;let l=a.id;if(typeof l=="string"&&l===t)return e.attemptIdToAttemptNumber.set(t,i),Dn__default.join(o,i)}}function M4(e,t,n){let o=Dn__default.join(e,"attempts");if(!rr__default.existsSync(o))return;let r=rr__default.readdirSync(o,{withFileTypes:true}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of r){let s=Dn__default.join(o,i,"assets",`${t}.${n}`);if(rr__default.existsSync(s))return s}}var tw=class{constructor(t,n,o){this.outputDir=t;this.runId=n;this.runAttemptId=o;this.runsDir=Dn__default.join(t,jn),this.zipPath=Dn__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||!rr__default.existsSync(this.zipPath))return;let o=Dn__default.join(this.runsDir,`temp-unzipped-${t}-${randomUUID()}`);rr__default.mkdirSync(o,{recursive:true}),new P4(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())rr__default.rmSync(t.inflatedPath,{recursive:true,force:true});this.inflatedByRunId.clear();}getAttemptDir(){let t=this.ensureInflatedRun(this.runId);if(t)return uPe(t,this.runAttemptId)}listVideoAssetPaths(){let t=this.getAttemptDir();if(!t)return [];let n=Dn__default.join(t,"assets");return rr__default.existsSync(n)?rr__default.readdirSync(n,{withFileTypes:true}).filter(r=>r.isFile()).map(r=>Dn__default.join(n,r.name)).filter(r=>{let i=Dn__default.extname(r).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(t,n){let o=this.getAttemptDir();if(!o)return;let r=Dn__default.join(o,"assets",`${t}.${n}`);if(rr__default.existsSync(r))try{return rr__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=L4(Dn__default.join(r,"console.json")),s=oM.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=Dn__default.join(r,"assets","har-pages.log"),s=Dn__default.join(r,"assets","har-entries.log"),a={};for(let d of O4(i)){let u=VS.safeParse(N4(d));u.success&&(a[u.data.id]=u.data);}let l={},c=O4(s);for(let d=0;d<c.length;d++){let u=c[d],p=zS.safeParse(N4(u));if(!p.success)continue;let m=`${p.data.startedDateTime}-${d}`;l[m]=p.data;}if(Object.keys(l).length!==0)return rM(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=M4(r.inflatedPath,n,"html");if(i)try{return rr__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=M4(r.inflatedPath,n,"xml");if(i)try{return rr__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 rr__default.readFileSync(Dn__default.join(r,"assets",`${n}.${i}`))}catch{continue}}};function N4(e){try{return JSON.parse(e)}catch{return}}function k4(e,t){let n=pPe(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}: ${Y(e)}`}}}function pPe(e){if(e&&typeof e=="object"&&"code"in e&&typeof e.code=="string")return e.code}function mf({test:e,envNameOverride:t,urlOverride:n,resolveEnv:o}){let r=t??mPe(e),i,s={};if(r){try{i=o(r);}catch(l){let c=`Failed to resolve environment ${r} for test ${e.name}: ${Y(l)}`;throw l instanceof _e?new _e(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[hr];typeof l=="string"&&(a=l);}if(!a)throw new au(`Cannot run test with no base URL and no ${hr} variable defined in its environment`);return {envName:r,resolvedEnv:i,environmentVariables:s,baseUrl:a}}function mPe(e){for(let t of e.envs??[])if(t.default)return t.name}async function lT(e,t,n,o,r=ct){let i=o??await je(e,false,r),s=i[n],a=hPe(s,t);if(t.id){if(a.length===0)throw new dt(`No ${n} found with id '${t.id}' in project '${e.rootDir}'.`);return nw(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(`
279
279
  `))}return nw(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 nw(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(`
280
280
  `))}return nw(a,i)}throw new Error("No valid selector field provided. Exactly one of id, name, or path must be specified.")}function nw(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 hPe(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 D4({cwd:e,projectName:t}){let n=Dn__default.join(e,bc);if(rr__default.existsSync(n))throw new Error(`A ${bc} file already exists at ${n}. Please rename or remove it to initialize a new project.`);let o=await cQ(e)??"main",r={name:t,include:tf,gitMainBranch:o,fileFormat:"v2",browser:{disableSecondaryCacheResolution:true},ai:{useMemory:true,failureRecovery:true,agentConfig:{...Zh}}};return vd(r,n),{configPath:n}}var yPe="npx skills@latest add momentic-ai/skills",SPe="https://momentic.ai/docs/integrations/mcp-server",bPe={web:["https://momentic.ai/docs/quickstart/web"],mobile:["https://momentic.ai/docs/quickstart/ios","https://momentic.ai/docs/quickstart/android"]};function F4({platform:e}){let t="npx momentic app",n=bPe[e].map(r=>Qa.underline.cyan(r)).join(Qa.dim(" \xB7 ")),o=(r,i)=>` ${Qa.dim(r.padEnd(14))}${i}`;C.log(""),C.log(Qa.bold("Next steps")),C.log(o("Editor skills",Qa.cyan(yPe))),C.log(o("Coding agent",`${Qa.dim("Momentic MCP \u2192")} ${Qa.underline.cyan(SPe)}`)),C.log(o("Local editor",Qa.cyan(t))),C.log(o("Docs",n));}var B4=["cursor","claude-code","codex","opencode","copilot"],APe={cursor:Dn__default.join(".cursor","skills"),"claude-code":Dn__default.join(".claude","skills"),codex:Dn__default.join(".agents","skills"),opencode:Dn__default.join(".opencode","skills"),copilot:Dn__default.join(".github","skills")};function U4({editor:e,skillsDir:t,cwd:n=process.cwd()}){rr__default.existsSync(t)||(C.error(`Could not find skills directory at ${t}. Is the CLI package installed correctly?`),process.exit(1));let o=rr__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=EPe({cwd:n}),i=Dn__default.join(r,APe[e]);for(let s of o){let a=Dn__default.basename(s,".md"),l=Dn__default.join(i,a),c=rr__default.readFileSync(Dn__default.join(t,s),"utf8");rr__default.mkdirSync(l,{recursive:true}),rr__default.writeFileSync(Dn__default.join(l,"SKILL.md"),c),C.success(`Installed SKILL.md at ${Dn__default.join(l,"SKILL.md")}.`);}}function EPe({cwd:e}){try{return execSync("git rev-parse --show-toplevel",{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()||e}catch{return e}}var G4=Dn__default.join(pd.homedir(),".momentic"),Ld=Dn__default.join(G4,"auth.json"),RPe=new Set(["EPERM","EACCES","EROFS"]),vPe=z$1.object({workos:z$1.object({accessToken:z$1.string(),refreshToken:z$1.string(),expiresAt:z$1.number()}),user:z$1.object({id:z$1.string(),email:z$1.string().optional()}),organizationId:z$1.string(),apiKey:z$1.string(),apiKeyName:z$1.string(),serverUrl:z$1.string(),createdAt:z$1.string(),selfServe:z$1.boolean().optional()});function $4(){if(!rr__default.existsSync(Ld))return null;try{let e=rr__default.readFileSync(Ld,"utf-8"),t=vPe.safeParse(JSON.parse(e));return t.success?t.data:null}catch{return null}}function j4(e){try{rr__default.mkdirSync(G4,{recursive:!0,mode:448}),rr__default.writeFileSync(Ld,JSON.stringify(e,null,2),{mode:384});}catch(t){throw PY(t)&&RPe.has(t.code)?new _e(`Couldn't save your Momentic credentials to ${Ld} (${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 V4(){return rr__default.existsSync(Ld)?(rr__default.unlinkSync(Ld),true):false}function ow(){return $4()?.apiKey||void 0}function rw(){return $4()?.serverUrl||void 0}var oD="client_01HM3P9MPY20QDSXAECT6PY1JF",z4="https://api.workos.com";async function W4({clientId:e}){let t=await fetch(`${z4}/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 q4({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 wPe(s*1e3);let a=await fetch(`${z4}/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 _e("The login request expired. Please run `login` again."):c==="access_denied"?new _e("Login was denied."):new Error(`WorkOS device token exchange failed: ${l.error_description??c??a.statusText}`)}throw new _e("Timed out waiting for sign-in. Please run `login` again.")}function wPe(e){return new Promise(t=>setTimeout(t,e))}async function rD({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=V2.safeParse(r);if(s.success)return {kind:"ok",data:s.data}}if(n.status===409){let s=z2.safeParse(r);if(s.success)return {kind:"multi_org",data:s.data}}let i=IPe(r)??o??n.statusText;return {kind:"error",status:n.status,message:i}}function IPe(e){if(e&&typeof e=="object"&&"error"in e){let{error:t}=e;if(typeof t=="string")return t}}async function Y4({serverUrl:e,ui:t,openBrowser:n=true,clientName:o=pd.hostname(),coldRun:r=false}){let i=await W4({clientId:oD}),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(`${Qa.bold(i.user_code)}
@@ -301,7 +301,7 @@ ${l}`:a}function sD(e,t,n={}){if(e.length===0)return "";let o=Go(t),r=Math.max(n
301
301
  ${o}
302
302
  `);}catch(n){e.logger.warn({err:n},"Failed to check CLI version against npm");}}async function oOe(e,t,n){if(!c5){c5=true;try{let o=await e.getCliAnnouncements();for(let{announcement:r,level:i}of o)C.log(`
303
303
  ${i5({announcement:r,level:i},n)}
304
- `);}catch(o){t.warn({err:o},"Failed to fetch CLI announcements");}}}var uT=25;function p5(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function m5(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function aD({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,vd(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`),xv([...new Set(o)],t));}async function pT(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function lD(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function rOe(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(Zh)){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 h5({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=rOe(e.config);return o?{fileFormatChanged:o,aiSettings:r,migration:await n()}:(!t&&lD(r)&&vd(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:r,migration:cD()})}function cD(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function dD({summary:e,fileFormatChanged:t,aiSettings:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=o?"Would migrate":"Migrated",a=Cb(r,e.migratedTestPaths.length),l=Cb(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 ${Cb(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-v2 ${Cb(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 uD=false,g5;try{let e=await import('@sentry/node'),t="production";e.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:t,enabled:t!=="development",dist:"production",release:"cli@3.7.2",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(n,o){return QY(o?.originalException)||AE(o?.originalException,_e)||ZY(o?.originalException)?null:n}}),eK(e.captureException),g5=n=>{if(!n){e.setUser(null);return}e.setUser({id:n.userId,organizationId:n.orgId,...n.email&&{email:n.email}});},uD=!0;}catch{}var f5=e=>g5?.(e);var sOe=new DR(30,60*1e3),fw="https://api.momentic.ai",bf,y5,Bd=e=>{fw=e;},Fr=()=>fw,S5=()=>Tg(fw),Wu=e=>{y5=e;},Ud=()=>y5,Vo=()=>bf,b5=()=>{if(!bf)throw new Error("Global API client has not been initialized.");return bf};var mT,pw,T5,A5,E5,mw,C5,R5=({authInfo:e,apiKey:t,apiClient:n})=>{bf=n,mT=e.orgId,pw=e.userId,T5=e.email,A5=e.name,E5=e.pylonEmailHash,mw=t,C5=e.selfServe;},Tf=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await Pm({client:e});return R5({authInfo:o,apiKey:t,apiClient:e}),o},yw=async({apiKey:e,mode:t,runner:n})=>{if(bf&&mT&&mw)return mT;let o=new Ot({baseUrl:fw,apiKey:e,logger:C,mode:t,runner:n});bf=o;try{let r=await o.getAuthInfo();return R5({authInfo:r,apiKey:e,apiClient:o}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},Wn=()=>{if(!mT)throw new Error("Your organization ID is invalid.");return mT},Ec=()=>{if(!pw)throw new Error("Your user ID is invalid.");return pw},v5=()=>pw,Af=()=>T5,w5=()=>A5,I5=()=>E5,Sw=()=>C5,Us=()=>{if(!mw)throw new Error("Your API key is invalid.");return mw},hw,gw,Hd=()=>{gw?.abort(),gw=void 0;},Ef=(e,t)=>{hw=e,Hd(),gw=new AbortController;let n=gw.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=Dn__default.resolve(e.rootDir,r.envFile);try{if(rr__default.lstatSync(i).isSymbolicLink())return;rr__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{aOe({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Cf({project:e,apiClient:t}){let n=o=>ks({project:o,apiClient:t});Ef(await n(e),async o=>n(await nn({configFilePath:o})));}var nt=()=>{if(!hw)throw new _e("No Momentic project is currently loaded. Open or select a project before invoking this action.");return hw};function aOe({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()){sOe.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{hw=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`);}}};rr__default.watchFile(r,{persistent:false},i);let s=()=>{rr__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 cOe="3.7.2",Nm=Rg({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:cOe});(async()=>{try{let e=await ya(Nm);e.gitBranchName&&Nm.addBinding("branch",e.gitBranchName);}catch{}})();var x5=Router();x5.get("/",async(e,t)=>{let n=nt(),o=Vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await ei(Nm,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=Ud(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var pD=x5;var pOe=5e3,mOe=[".js",".mjs",".cjs",".ts"];function mD(e={}){let t=Router();function n(){let u=nt();return Dn__default.dirname(u.configFilePath)}function o(u){return Dn__default.join(n(),...u)}function r(u){let p=Dn__default.relative(n(),u);return p?p.split(Dn__default.sep):[]}function i(u,p){let m=rr__default.statSync(u),h=r(u);return lM.parse({name:p,absolutePath:u,relativePath:h.join(Dn__default.sep),pathSegments:h,isDirectory:m.isDirectory(),size:m.size,createdAt:m.birthtime,modifiedAt:m.mtime,accessedAt:m.atime})}function s(u){let p=Dn__default.relative(n(),u);return p===""||!p.startsWith("..")&&!Dn__default.isAbsolute(p)}async function a(u){let p=nt();return Ad(["*"],{cwd:u,ignore:p.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(pOe)})}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=Dn__default.relative(u,p).split(Dn__default.sep).join("/");return m?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",mt(async(u,p,m)=>{let h=qz.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,y=new Set((h.data.allowedExtensions??mOe).map(R=>R.toLowerCase())),T=l(f);if(T.directoryText.startsWith("/")){p.status(200).json({suggestions:[]});return}let A=Dn__default.resolve(n(),...c(g)),E=Dn__default.resolve(A,...c(T.directoryText));if(!s(A)||!s(E)){p.status(200).json({suggestions:[]});return}if(!rr__default.existsSync(E)||!rr__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 w=v.map(R=>{let _=Dn__default.join(E,R);return {entryName:R,targetPath:_,isDirectory:rr__default.statSync(_).isDirectory()}}),P=T.filePrefix.toLowerCase(),x=w.filter(R=>R.entryName.startsWith(".")||!R.entryName.toLowerCase().startsWith(P)?false:R.isDirectory?true:y.has(Dn__default.extname(R.entryName).toLowerCase())).sort((R,_)=>R.isDirectory!==_.isDirectory?R.isDirectory?-1:1:R.entryName.localeCompare(_.entryName)).map(R=>({name:R.entryName,isDirectory:R.isDirectory,value:d({sourceDirectoryPath:A,targetPath:R.targetPath,isDirectory:R.isDirectory})}));p.status(200).json({suggestions:x});})),t.post("/",mt(async(u,p,m)=>{let h;try{h=Wz.parse(u.body).pathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let g=o(h);if(!rr__default.existsSync(g)){p.status(404).json({error:`Path not found: ${h.join(Dn__default.sep)}`});return}if(!rr__default.statSync(g).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Dn__default.sep)}`});return}let y;try{y=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=y.map(E=>{let v=Dn__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 P=await hOe(v.absolutePath);return P!==void 0&&E.has(P)?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=Kz.parse(u.body).pathSegments;}catch(y){p.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=o(h);if(rr__default.existsSync(g)){p.status(200).json({success:true,message:`Folder already exists: ${h.join(Dn__default.sep)}`,pathSegments:h});return}rr__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(Dn__default.sep)}`,pathSegments:h};p.status(201).json(f);})),t.patch("/",mt(async(u,p,m)=>{let h,g;try{let E=Yz.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),y=o(g);if(!rr__default.existsSync(f)){p.status(400).json({error:`Folder not found: ${h.join(Dn__default.sep)}`});return}if(rr__default.existsSync(y)){p.status(400).json({error:`Destination already exists: ${g.join(Dn__default.sep)}`});return}let T=Dn__default.dirname(y);rr__default.existsSync(T)||rr__default.mkdirSync(T,{recursive:true}),rr__default.renameSync(f,y);let A={success:true,message:`Folder moved from ${h.join(Dn__default.sep)} to ${g.join(Dn__default.sep)}`,pathSegments:g};p.status(200).json(A);})),t.delete("/",mt(async(u,p,m)=>{let h,g=true;try{let A=Jz.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(!rr__default.existsSync(f)){p.status(200).json({success:true,message:`Folder not found: ${h.join(Dn__default.sep)}`,pathSegments:h});return}if(!rr__default.statSync(f).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Dn__default.sep)}`});return}try{if(g)rr__default.rmSync(f,{recursive:!0,force:!0});else {if(rr__default.readdirSync(f).length>0){p.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}rr__default.rmdirSync(f);}}catch(A){let{status:E,body:v}=k4(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 hOe(e){try{let t=await rr__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 _5=Router();_5.get("/",async(e,t)=>{let n=nt(),o=Vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await ei(Nm,o,n);t.status(200).json(r);});var hD=_5;var fOe=({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{}}},P5={event:"cancel",createHandler:fOe};var yOe=({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:Y(c)});}}},O5={event:"clearAIActionCache",createHandler:yOe};var SOe=({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});}}},M5={event:"fetchA11yTree",createHandler:SOe};var bOe=({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});}}},N5={event:"fetchDom",createHandler:bOe};var TOe=({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);}},L5={event:"disconnect",createHandler:TOe};function Sa(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=AOe(n);EOe(t,o,r);let i=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await COe(i,t,o,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function AOe(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 EOe(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 COe(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}async function k5(e){let t;try{t=new URL(e.url).hostname;}catch{}let n=[];return e.headers.getSetCookie()?.forEach(o=>{let r=mC(o,t);n.push(...r);}),n}function OOe(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 MOe(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 NOe=Object.getPrototypeOf(async function(){}).constructor;async function D5(e,t,n){let o=t.code;t.options.fragment&&(o=`return ${t.code}`),o=`${o}
304
+ `);}catch(o){t.warn({err:o},"Failed to fetch CLI announcements");}}}var uT=25;function p5(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function m5(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function aD({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,vd(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`),xv([...new Set(o)],t));}async function pT(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function lD(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function rOe(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(Zh)){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 h5({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=rOe(e.config);return o?{fileFormatChanged:o,aiSettings:r,migration:await n()}:(!t&&lD(r)&&vd(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:r,migration:cD()})}function cD(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function dD({summary:e,fileFormatChanged:t,aiSettings:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=o?"Would migrate":"Migrated",a=Cb(r,e.migratedTestPaths.length),l=Cb(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 ${Cb(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-v2 ${Cb(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 uD=false,g5;try{let e=await import('@sentry/node'),t="production";e.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:t,enabled:t!=="development",dist:"production",release:"cli@3.7.3",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(n,o){return QY(o?.originalException)||AE(o?.originalException,_e)||ZY(o?.originalException)?null:n}}),eK(e.captureException),g5=n=>{if(!n){e.setUser(null);return}e.setUser({id:n.userId,organizationId:n.orgId,...n.email&&{email:n.email}});},uD=!0;}catch{}var f5=e=>g5?.(e);var sOe=new DR(30,60*1e3),fw="https://api.momentic.ai",bf,y5,Bd=e=>{fw=e;},Fr=()=>fw,S5=()=>Tg(fw),Wu=e=>{y5=e;},Ud=()=>y5,Vo=()=>bf,b5=()=>{if(!bf)throw new Error("Global API client has not been initialized.");return bf};var mT,pw,T5,A5,E5,mw,C5,R5=({authInfo:e,apiKey:t,apiClient:n})=>{bf=n,mT=e.orgId,pw=e.userId,T5=e.email,A5=e.name,E5=e.pylonEmailHash,mw=t,C5=e.selfServe;},Tf=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await Pm({client:e});return R5({authInfo:o,apiKey:t,apiClient:e}),o},yw=async({apiKey:e,mode:t,runner:n})=>{if(bf&&mT&&mw)return mT;let o=new Ot({baseUrl:fw,apiKey:e,logger:C,mode:t,runner:n});bf=o;try{let r=await o.getAuthInfo();return R5({authInfo:r,apiKey:e,apiClient:o}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},Wn=()=>{if(!mT)throw new Error("Your organization ID is invalid.");return mT},Ec=()=>{if(!pw)throw new Error("Your user ID is invalid.");return pw},v5=()=>pw,Af=()=>T5,w5=()=>A5,I5=()=>E5,Sw=()=>C5,Us=()=>{if(!mw)throw new Error("Your API key is invalid.");return mw},hw,gw,Hd=()=>{gw?.abort(),gw=void 0;},Ef=(e,t)=>{hw=e,Hd(),gw=new AbortController;let n=gw.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=Dn__default.resolve(e.rootDir,r.envFile);try{if(rr__default.lstatSync(i).isSymbolicLink())return;rr__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{aOe({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Cf({project:e,apiClient:t}){let n=o=>ks({project:o,apiClient:t});Ef(await n(e),async o=>n(await nn({configFilePath:o})));}var nt=()=>{if(!hw)throw new _e("No Momentic project is currently loaded. Open or select a project before invoking this action.");return hw};function aOe({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()){sOe.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{hw=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`);}}};rr__default.watchFile(r,{persistent:false},i);let s=()=>{rr__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 cOe="3.7.3",Nm=Rg({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:cOe});(async()=>{try{let e=await ya(Nm);e.gitBranchName&&Nm.addBinding("branch",e.gitBranchName);}catch{}})();var x5=Router();x5.get("/",async(e,t)=>{let n=nt(),o=Vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await ei(Nm,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=Ud(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var pD=x5;var pOe=5e3,mOe=[".js",".mjs",".cjs",".ts"];function mD(e={}){let t=Router();function n(){let u=nt();return Dn__default.dirname(u.configFilePath)}function o(u){return Dn__default.join(n(),...u)}function r(u){let p=Dn__default.relative(n(),u);return p?p.split(Dn__default.sep):[]}function i(u,p){let m=rr__default.statSync(u),h=r(u);return lM.parse({name:p,absolutePath:u,relativePath:h.join(Dn__default.sep),pathSegments:h,isDirectory:m.isDirectory(),size:m.size,createdAt:m.birthtime,modifiedAt:m.mtime,accessedAt:m.atime})}function s(u){let p=Dn__default.relative(n(),u);return p===""||!p.startsWith("..")&&!Dn__default.isAbsolute(p)}async function a(u){let p=nt();return Ad(["*"],{cwd:u,ignore:p.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(pOe)})}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=Dn__default.relative(u,p).split(Dn__default.sep).join("/");return m?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",mt(async(u,p,m)=>{let h=qz.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,y=new Set((h.data.allowedExtensions??mOe).map(R=>R.toLowerCase())),T=l(f);if(T.directoryText.startsWith("/")){p.status(200).json({suggestions:[]});return}let A=Dn__default.resolve(n(),...c(g)),E=Dn__default.resolve(A,...c(T.directoryText));if(!s(A)||!s(E)){p.status(200).json({suggestions:[]});return}if(!rr__default.existsSync(E)||!rr__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 w=v.map(R=>{let _=Dn__default.join(E,R);return {entryName:R,targetPath:_,isDirectory:rr__default.statSync(_).isDirectory()}}),P=T.filePrefix.toLowerCase(),x=w.filter(R=>R.entryName.startsWith(".")||!R.entryName.toLowerCase().startsWith(P)?false:R.isDirectory?true:y.has(Dn__default.extname(R.entryName).toLowerCase())).sort((R,_)=>R.isDirectory!==_.isDirectory?R.isDirectory?-1:1:R.entryName.localeCompare(_.entryName)).map(R=>({name:R.entryName,isDirectory:R.isDirectory,value:d({sourceDirectoryPath:A,targetPath:R.targetPath,isDirectory:R.isDirectory})}));p.status(200).json({suggestions:x});})),t.post("/",mt(async(u,p,m)=>{let h;try{h=Wz.parse(u.body).pathSegments;}catch(E){p.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let g=o(h);if(!rr__default.existsSync(g)){p.status(404).json({error:`Path not found: ${h.join(Dn__default.sep)}`});return}if(!rr__default.statSync(g).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Dn__default.sep)}`});return}let y;try{y=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=y.map(E=>{let v=Dn__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 P=await hOe(v.absolutePath);return P!==void 0&&E.has(P)?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=Kz.parse(u.body).pathSegments;}catch(y){p.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=o(h);if(rr__default.existsSync(g)){p.status(200).json({success:true,message:`Folder already exists: ${h.join(Dn__default.sep)}`,pathSegments:h});return}rr__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(Dn__default.sep)}`,pathSegments:h};p.status(201).json(f);})),t.patch("/",mt(async(u,p,m)=>{let h,g;try{let E=Yz.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),y=o(g);if(!rr__default.existsSync(f)){p.status(400).json({error:`Folder not found: ${h.join(Dn__default.sep)}`});return}if(rr__default.existsSync(y)){p.status(400).json({error:`Destination already exists: ${g.join(Dn__default.sep)}`});return}let T=Dn__default.dirname(y);rr__default.existsSync(T)||rr__default.mkdirSync(T,{recursive:true}),rr__default.renameSync(f,y);let A={success:true,message:`Folder moved from ${h.join(Dn__default.sep)} to ${g.join(Dn__default.sep)}`,pathSegments:g};p.status(200).json(A);})),t.delete("/",mt(async(u,p,m)=>{let h,g=true;try{let A=Jz.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(!rr__default.existsSync(f)){p.status(200).json({success:true,message:`Folder not found: ${h.join(Dn__default.sep)}`,pathSegments:h});return}if(!rr__default.statSync(f).isDirectory()){p.status(400).json({error:`Path is not a directory: ${h.join(Dn__default.sep)}`});return}try{if(g)rr__default.rmSync(f,{recursive:!0,force:!0});else {if(rr__default.readdirSync(f).length>0){p.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}rr__default.rmdirSync(f);}}catch(A){let{status:E,body:v}=k4(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 hOe(e){try{let t=await rr__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 _5=Router();_5.get("/",async(e,t)=>{let n=nt(),o=Vo();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await ei(Nm,o,n);t.status(200).json(r);});var hD=_5;var fOe=({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{}}},P5={event:"cancel",createHandler:fOe};var yOe=({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:Y(c)});}}},O5={event:"clearAIActionCache",createHandler:yOe};var SOe=({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});}}},M5={event:"fetchA11yTree",createHandler:SOe};var bOe=({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});}}},N5={event:"fetchDom",createHandler:bOe};var TOe=({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);}},L5={event:"disconnect",createHandler:TOe};function Sa(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=AOe(n);EOe(t,o,r);let i=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await COe(i,t,o,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function AOe(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 EOe(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 COe(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}async function k5(e){let t;try{t=new URL(e.url).hostname;}catch{}let n=[];return e.headers.getSetCookie()?.forEach(o=>{let r=mC(o,t);n.push(...r);}),n}function OOe(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 MOe(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 NOe=Object.getPrototypeOf(async function(){}).constructor;async function D5(e,t,n){let o=t.code;t.options.fragment&&(o=`return ${t.code}`),o=`${o}
305
305
  //# sourceURL=${SC}`;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 NOe("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","mock",...Object.keys(i??{}),o)(wOe,xOe,l.fakerInstance??faker,vOe,POe,m,h,_Oe,IOe,k5,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,OOe(s,a),...Object.values(i??{})))}catch(A){throw new fE(Y(A),{cause:A})}},f=true,y,T;try{let A=await Te(g(),{milliseconds:t.options.timeoutMs,message:`Timeout of ${t.options.timeoutMs}ms exceeded for code execution`,signal:t.signal});y=await MOe(t.options.responseSerialization??"RAW",A);}catch(A){n.error({err:A,env:r,evalCode:o},`[${e}] Error executing code: ${A}`),f=false,A instanceof Tu?T=`Timeout of ${t.options.timeoutMs}ms exceeded for code execution`:T=A instanceof Error?A.message:`${A}`;}return {result:y,variableUpdates:c,persistentVariableUpdates:u,success:f,error:T}}async function F5({code:e,fragment:t,context:n,localTools:o,logger:r,signal:i,timeoutMs:s=fu,disallowVariableUpdates:a,additionalBindings:l,responseSerialization:c,mock:d}){let u=randomUUID(),p=await D5(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 BOe=gSe(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}}),B5=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,U5=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function H5({orgId:e,code:t,fragment:n,context:o,timeoutMs:r=fu,retries:i=2,signal:s,logger:a,additionalBindings:l,disallowVariableUpdates:c,responseSerialization:d,mock:u}){if(!B5)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,m,h=0;if(!U5)throw new Error("Missing lambda auth secret.");let g=createHmac("sha256",U5).update(e).digest("hex");for(;h<=i;){h++,s?.throwIfAborted();let y={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 Te(BOe(B5,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)}),{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=hz.parse(await p.json());}catch(y){throw new Error(`Code evaluation server returned invalid response: ${y}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function qu(e){let t;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)t=await H5(e);else if(e.localTools)t=await F5({...e,localTools:e.localTools});else throw new Error("No code evaluation environment available");if(t.error){let n=`Failed to evaluate code:
306
306
  ${t.error}
307
307
  Code received:
@@ -5749,7 +5749,7 @@ ${e}`;case "ELEMENT_CHECK":return `${G6}
5749
5749
  ${e}`;default:return e}}async function Aa({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 yLe=["NAVIGATE","NEW_TAB","CLOSE_TAB","TAB","REFRESH","WAIT_FOR_URL"];async function V6({beforeUrl:e,beforePages:t,browser:n,command:o,logger:r}){if(yLe.includes(o.type))return;await yo().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 Ze(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(Nu(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 wc(e,t={}){let n=await e.getBrowserState(t);return {serializedTree:n.serialize(t.serializationOpts),tree:n}}var z6=e=>!!e&&Sh(e),W6=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&&!$6(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 K6={minChunkTokenCount:1e4,acceptableChunkTokenCount:25e3,maxChunkTokenCount:5e4,maxLineLength:4e3},q6=/<(\S+) id="(\d+)".*?>/g,SLe=/(<\/(\S+)>)|(<(\S+).*?\/>)/g,Y6=["h1","h2","section","footer","nav","aside","form","label","dialog"],bLe=[...Y6,"span","div","h3"],TLe=["table","select","form","ul","ol","menu","pre","code","dialog"],ALe=["table","form","dialog","nav","section","ul","select"];function J6(e){return ELe(e)}function ELe({logger:e,serializedTree:t,options:n}){let{minChunkTokenCount:o,acceptableChunkTokenCount:r,maxChunkTokenCount:i,maxLineLength:s}=n,a=[],l=t.split(`
5750
5750
  `),c=0,d=[],u=0,p=[],m=[],h=false;for(;c<l.length;){h&&(a.push({ids:p,content:d.join(`
5751
5751
  `),tokenLength:u}),d=[],u=0,p=m.length?[m[m.length-1].id]:[],h=false);let g=l[c],f=gt(g);u+=f,g.length>s&&(g=g.slice(0,s));let A=Array.from(g.matchAll(q6)).map(G=>G&&G.length>=3?{tagName:G[1],id:G[2]}:void 0).filter(G=>!!G),v=Array.from(g.matchAll(SLe)).map(G=>G&&(G[2]||G[4])).filter(G=>!!G);v.reverse();let w=g.replace(/ id="[0-9]+"/g,"");d.push(w);for(let G of A)p.push(G.id),m.push(G);for(let G of v){let ne=m[m.length-1];ne&&ne.tagName===G&&m.pop();}let P=m.some(G=>TLe.includes(G.tagName)),x=l[c+1]??"",R=gt(x),O=Array.from(x.matchAll(q6)).map(G=>G&&G.length>2?G[1]:void 0).filter(G=>!!G),D=O.some(G=>Y6.includes(G)),U=O.some(G=>bLe.includes(G));u+R>=i&&(h=true),u>=o&&(D&&!P||v.some(G=>ALe.includes(G)))&&(h=true),u>=r&&U&&!P&&(h=true),c++;}return d.length&&a.push({ids:p,content:d.join(`
5752
- `),tokenLength:u}),a.forEach((g,f)=>{let y=g.ids[0],T=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:y,maxId:T},`Chunk for page filtering (index ${f+1}/${a.length})`);}),{chunks:a}}var X6=5e6,RLe=1e5,vLe=3e4,wLe=6e4,ILe=1e5;async function Hs(e){let{fixtures:t}=e,{logger:n}=t,o=e.tree,r=e.serializedTree,i=gt(r);if(i>X6)throw new J("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${X6} tokens.`);if(i>RLe){let s=J6({serializedTree:r,options:K6,logger:n}),a=randomUUID();o=await xLe({...e,chunks:s.chunks,callId:a}),r=o.serialize();let l=gt(r);n.info({oldTokens:i,newTokens:l,langfuseCallId:a},"Filtered page using AI chunk ranking");}return r}async function xLe({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:vLe,mediumTokenLimit:wLe,hardTokenLimit:ILe,callId:t},{abortSignal:a,logger:l,loggerTags:It(l)}),d=[];return n.forEach((p,m)=>{c.indices.includes(m)&&(d=d.concat(p.ids));}),i.pruneUsingRelevantIds(new Set(d))}async function iF(e,t){if(!e.description)throw new J("UserConfigurationError","Cannot locate element with empty description");return Aa({action:async()=>PLe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function PLe(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:y,localCodeEvalTools:T,generator:A,abortSignal:E}=t,v=e.description,w=yo(),P=e.useMemory&&!n;o&&(v=await ni({orgId:f,s:v,context:o,localTools:T,signal:E,logger:l})),s&&(v=j6(v,s));let{serializedTree:x,tree:R}=await w.startAsyncSpan("GET_PAGE_STATE",async()=>wc(y,{allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,filterByViewport:r,abortSignal:E,skipWait:i,logger:l}),{}),_=await w.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let oe,H=Date.now(),Q;for(;!oe&&Date.now()-H<3e3;){E.throwIfAborted();try{oe=await y.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(ce){Q=ce;}}if(!oe)throw new J("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${Q?.message}`);return oe}),O=x,D=false,G=`data:image/jpeg;base64,${_.toString("base64")}`,ne=It(l);O=await Hs({type:"locator",description:v,screenshot:G,serializedTree:x,tree:R,fixtures:{generator:A,signal:E,logger:l,orgId:f}}),O!==x&&(D=true);let Z=await w.startAsyncSpan("AI_LOCATOR_CALL",async oe=>{m&&(oe.attributes.isAutoHeal=true),h&&(oe.attributes.cacheBustReason=h);let H=await A.getElementLocation({browserState:O,goal:v,screenshot:G,source:s,memory:P?a:void 0},{disableCache:n,abortSignal:E,logger:l,loggerTags:ne,useMemory:P,cacheBustReason:h});if(oe.result=H,P&&(oe.attributes.useMemory=true,oe.attributes.memoryTraces=H.rememberedTraces??[],H.updatedMemory&&(oe.attributes.memorySavedNewResult=true)),w.storeTraceAsset){let Q=randomUUID();w.storeTraceAsset({snapshotId:Q,data:_}),oe.screenshotSnapshotId=Q;}return H});if(l.debug({usedRag:D,result:Z},"Got locator result"),!(Z.id>0))throw new Nh(`Could not find any relevant element: ${Z.thoughts}`,Z.updatedMemory?{type:"GCS_TRACES",traces:Z.updatedMemory}:void 0);let{resolution:W,target:V,frameConfig:ee}=await w.startAsyncSpan("TARGET_RESOLUTION",async oe=>{let H=await y.createTargetFromA11yId({id:Z.id,requirements:Z.requirements,additionalElements:Z.additionalElements,description:v,targetSource:"AI",logger:l,skipSavingVisualAttributes:p,acceptElementMovedError:g});return oe.result={serializedElement:H.target.nodeOnlySerializedHtml??"Unknown HTML element"},H});if(W.a11yNode?.properties?.hidden&&W.a11yNode?.properties?.hidden!=="false")throw new J("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: ${W.displayString}`);return P&&(Z.updatedMemory?V.memory={type:"GCS_TRACES",traces:Z.updatedMemory}:a&&(V.memory=a)),{thoughts:Z.thoughts,target:V,resolution:W,frameConfig:ee,screenshot:G}}var OLe=15;async function Fw({command:e,logger:t,fixtures:n,useMemory:o,maxRetries:r=OLe,recoveryHint:i}){if(!e.assertion.trim())throw new J("ActionFailureError","Assertion command is missing the assertion content");let s=hO.optional().catch(void 0).parse(e.source);e.source&&!s&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let a=yo();return a.startAsyncSpan("AI_ASSERTION_CALL",async l=>{let{browser:c}=n,d=e.timeout?e.timeout*1e3:c.smartWaitingTimeout,u=bX(d,r-1),p=0,m=Date.now(),h=m+d,g=m,f,y,T;try{await Aa({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 x=h-v,R=g-v,_=Math.min(R,x);_>0&&await Ze(_,n.abortSignal);}let w=Date.now();if(p>0&&w>=h)break;let P=false;try{if(f=await Aa({action:async()=>{let R=await Z6(c,t,n.abortSignal);return y&&y.serializedTree===R.serializedTree&&y.screenshotBuff.equals(R.screenshotBuff)?(P=!0,f):(y=R,e8({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&&xb(e,f.updatedMemory,t);break}else throw f?.aiResult.thoughts?new J("AssertionFailureError",f.aiResult.thoughts):new J("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(x){n.abortSignal.throwIfAborted(),T=x instanceof Error?x:new Error(`${x}`),P?t.info(`AI check attempt ${p} failed (re-used previous result)`):t.info({err:x},`AI check assert attempt ${p} failed, retrying...`);}finally{p++,g=w+u;}}if(!f?.aiResult.result){let v=h-Date.now();v>0&&await Ze(v,n.abortSignal);}if(!f?.aiResult.result)try{f=await Aa({action:async()=>e8({command:e,state:await Z6(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&&xb(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 J("AssertionFailureError",v)}return l.result=f.aiResult,{...f,thoughts:f.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:c.url()}})}async function Z6(e,t,n){await e.waitForPageLoad({signal:n});let[o,r]=await Promise.all([wc(e,{abortSignal:n,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...o,screenshotBuff:r}}async function e8({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,y=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:y,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:y,contextChoice:A,source:a,recoveryHint:c},P=await(A==="VISION_ONLY"?(R,_)=>u.getVisualAssertionResult(R,_):(R,_)=>u.getAssertionResult(R,_))(v,{useConsensus:o,attemptNumber:s,useMemory:r,disableCache:!!e.disableCache,abortSignal:p,logger:l,loggerTags:It(l)}),x;if((P.result||i)&&P.relevantElements?.length){P.relevantElements.map(R=>d.getSerializedFormFromA11yId(R)).filter(R=>!!R);try{let R=P.relevantElements[0],{resolution:_}=await d.createTargetFromA11yId({id:R,description:null,targetSource:"AI",skipSaveToCache:!0});x=await d.screenshot({locator:_.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(R){l.debug({err:R},"Failed to capture element screenshot for trace, continuing...");}await MLe(P.relevantElements,d,l);}return {aiResult:P,afterScreenshotOverride:f,elementScreenshotOverride:x,updatedMemory:r?P.updatedMemory:void 0}}async function MLe(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 Te(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 n8(e){let{command:t,logger:n,fixtures:o,disableCache:r}=e,{browser:i,generator:s,abortSignal:a}=o;if(!t.goal.trim())throw new J("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let u=Aq(t.schema);if(u)throw new J("UserConfigurationError",u)}let l=await i.getCondensedHtml(),c=await i.screenshot({retries:2}),d=yo();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:It(n)});if(u.result=p,NLe({tracer:d,span:u,screenshot:c,htmlState:l,logger:n}),p.result==="NOT_FOUND")throw new J("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new J("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:i.url()}})}catch(u){let p=Y(u);throw p.includes("MaxGenerationLengthExceededError")?new J("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 J("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 NLe(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 o8(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await LLe(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 Ze(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function LLe(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await Ze(r.smartWaitingTimeout,o);return}if(!t.description)throw new J("UserConfigurationError","Cannot locate element with empty description");await Te(kLe(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function kLe(e,t,n){let{logger:o,iframeUrl:r}=t,{browser:i}=n;for(;Date.now()-e<i.smartWaitingTimeout;)if(await Aa({action:async()=>DLe(t,n),frameConfig:r?{type:"url",url:r}:void 0,browser:i,logger:o}))return}async function DLe(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 ni({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 J("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:It(o)});return o.debug({result:m},"Got smart waiting result"),m.isPageReady}var FLe=3e4;async function s8(e){return yo().startAsyncSpan("ELEMENT_ASSERTION",async n=>BLe(e,n),{name:"Element check"})}async function BLe(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>sE(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&Sh(l.target),d=cloneDeep(l),u=(E=false)=>{if(l=a(),!!l)if(E){let v=TL(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,FLe):0,h=p,g=0,f,y=500,T=false;for(;g<2||Date.now()-p<o;){g++,g>1&&await Ze(y,s),s?.throwIfAborted(),l=a();let E=g===1,v=c&&Date.now()-h>=m;v&&(h=Date.now());let{result:w,elementWasFound:P}=await r8({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||v,params:e});if(f=w,T=T||P,w.success)break;u(),y=Math.min(y*1.25,1e4);}if(!f)throw new J("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:w,elementWasFound:P}=await r8({cacheToUse:v,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});f=w,T=T||P,f.success||u(true);}let A=a();return f.success&&A?.target&&!T&&(A.target=Ib(A.target),A.updatedAt=new Date),t.result={success:f.success,message:f.err?.message},f}async function r8({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&&!Kc(r.target))throw new Error("Element assertion with x/y is not supported yet");let d=rJ(r.assertion),u=ULe(r.assertion),p,m=false,h=cloneDeep(e);try{let{elementInteractedDisplayString:g,result:f,thoughts:y}=await l({tracer:a,command:r,target:r.target,cache:h?.target,action:async T=>HLe(T.locator,o),options:{...r,allowNotActionableNodesOverride:u,allowIneligibleTagRedirect:u,showZeroOpacityElementsOverride:!0,disableCache:i,memory:h?.target?.memory,disableGlobalLocatorRedirect:!0,source:qp(r),skipAISmartWaiting:t,targetName:"target"},retriesWithAI:n?1:0});return p={success:f.success,data:f.data,err:f.err,elementInteractedDisplayString:g,thoughts:y},m=!0,f.success||(c.warn({aiThoughts:y,elementString:g,err:f.err},"Element check found an element but failed"),p={...f,thoughts:y}),{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 J)||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 ULe(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function HLe(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await GLe(e,t.assertion)}async function GLe(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:mn(s,500,true)},!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,o=new J("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:mn(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 J("AssertionFailureError",Y(a)),n=false;break}if(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,t.operation==="EXISTS"?o=new J("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new J("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},Qs*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:Qs*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:Qs*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=Fg(t);o=new J("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=Fg(t);n=false,o=new J("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(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,t.operation==="EXISTS"?o=new J("AssertionFailureError",`The style property ${t.property} ${a}`):o=new J("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 a8(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function bT(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 c8(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Kc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),yo().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await VLe(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof J&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function VLe({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Kc(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async O=>bT(o,{locator:O.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await bT(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 _=`${c.width}x${c.height}`,O=`${d.width}x${d.height}`;return {fail:true,thoughts:`Current screenshot (${_}) does not match saved screenshot dimensions (${O}) - 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,y=h.width*h.height,T=Math.abs(p.height-h.height),A=Math.abs(p.width-h.width);if(f>y){let _=u.cover({w:h.width,h:h.height});c.buffer=await _.getBuffer("image/jpeg"),g="current",c.width=h.width,c.height=h.height;}else if(y>f){let _=m.cover({w:p.width,h:p.height});d.buffer=await _.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,P=CNe(sF.decode(d.buffer).data,sF.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,x=P>v*100,R=`Visual diff of ${P.toFixed(2)}% detected, which is ${x?"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.`),x)throw new J("ActionFailureError",R);return {fail:x,thoughts:R,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:sF.encode(E,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var zLe=3e4;function WLe(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 d8({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??zLe/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($g(e.url)&&(l=e.url),n&&jg(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new J("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 Te((async()=>{let h=a?`${c}?${a}`:c;try{let g=WLe(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 J("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 J("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 qLe=5e3;async function Bw({timeout:e=Qs,...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 u8(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 Ze(a,t.signal),a=Math.min(Math.floor(a*1.5),qLe);else return i}return i=await u8(t),i}async function u8(e){return yo().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await KLe(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function KLe({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(p8,{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(p8,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?fd.CONTAINS:yd.CONTAINS;s=new J("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new J("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 p8({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 YLe=3e4;async function m8({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??YLe/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([u,p])=>u&&p));s["Content-Type"]="application/json";let a;if($g(e.url)&&(a=e.url),n&&jg(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new J("ActionFailureError",`Invalid URL: ${e.url}`);let c=await Te((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 J("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 J("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}throw u?.errors?.length&&u?.errors[0]?.message?new J("ActionFailureError",`GraphQL request failed with status ${c.status}: ${u.errors[0].message}`):new J("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 If=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([wc(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:{...It(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([wc(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:{...It(s)},langfuseSessionId:a})}catch(h){throw new J("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return wc(this.browser,t)}async locateElement(t){return await iF(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Aa({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 J("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 J("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 Ze(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=yo(),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:Ke}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await yo().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 Ti&&(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 Aa({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=yo(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||d)&&!VH(o))throw new J("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,T;d&&(h.info("Cache explicitly disabled for this step"),y=true,T="Cache explicitly disabled",f=void 0);let A=W6({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=A.cache,y=y||A.cacheBustedBeforeAction,!T&&A.cacheBustReason&&(T=A.cacheBustReason);let E=true;if(!z6(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:y,cacheBustReason:T});try{let{resolutionResult:v,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),P=await r(w);if(_t.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.7.2"]),qR({cmd:s,key:p,newTarget:f,logger:h,updatedWithAI:!1}),E){let x=v.decisions.filter(R=>R.matched);if(x.length!==1)h.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let R=x[0].type;n.recordTargetAutoHeal({healType:R});}}return {result:P,elementInteractedDisplayString:v.displayString}}catch(v){this.throwIfClosed();let w=_P(v);if(w&&!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 J&&!w)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"),_t.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.7.2",`missReason:${v instanceof Ti?v.cacheMissReason:"unknown"}`]);let P;f.memory&&rE(f.memory)&&(P=f.memory);let x=v instanceof Ti&&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:P,targetHealingInProgress:true},skipInitialLocateWait:x})}throw new J("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 o8({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 y=false,T=this.browser.getActiveFrameConfig(),A=i.force||f>1;try{let E;try{E=await iF({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(P){if(P instanceof Nh&&P.updatedLocatorMemory){let x={id:-1,...l,memory:P.updatedLocatorMemory};qR({cmd:s,key:i.targetName,newTarget:x,logger:c,updatedWithAI:!0});}throw P}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),y=!0);let v=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await a(v);return qR({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=It(c)),{result:w,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(y&&this.browser.setActiveFrameConfig(T),this.throwIfClosed(),f<g&&_P(E)){c.warn({err:E,aiAttempt:f},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof J?E:new J("ActionFailureError",E.message)}}throw new J("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return bT(this.browser,t)}async executePresetCommand(t,n,o,r,i){this.options?.slowMoMs&&await Ze(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 J("ActionFailureError",`Failed to substitute template strings in command: ${c.message}`,{errOptions:{cause:c}})}try{let c=await De({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 V6({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{$5(n,l);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>LD(t)}}async traceBrowserInteraction(t,n,o){return yo().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return bw({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()?Fw({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 J("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new J("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return Fw({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i})}case "AI_EXTRACT":return n8({command:n,logger:s,fixtures:this.getControllerFixtures(),disableCache:r});case "NAVIGATE":if(!$g(n.url)&&!jg(n.url,this.browser.baseUrl))throw new J("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 J("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&&Ol(n.target)){let u=$r(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??qi.height,d=this.browser.getViewport()?.width??qi.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 J("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 J("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let a=n.delay*1e3;await Ze(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(Ol(n.target)){let p=$r(n.target.pixels),m={...n,relativePosition:n.relativePosition?$r(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?$r(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 rv(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(Ol(n.fromTarget)&&Ol(n.toTarget)){let c=$r(n.fromTarget.pixels),d=$r(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:c});break}if(Ol(n.fromTarget)||Ol(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 J("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Ol(n.target)){let p=$r(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(!Kc(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:qp(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 qu({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 J("ActionFailureError",l instanceof Error?l.message:`${l}`,{errOptions:{cause:l}})}try{JSON.stringify(a);}catch(l){throw new J("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&&Ol(n.target)){let m=$r(n.target.pixels),h={...n,relativePosition:n.relativePosition?$r(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:qp(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 rv(a,p.urlAfterCommand)&&(p.succeedImmediately=true,p.succeedImmediatelyReason="URL changed"),p}case "HOVER":{if(Ol(n.target)){let c=$r(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?$r(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(!Kc(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&&!Kc(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 rv(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=XLe(fetch,a),c;try{c=new URL(n.url).hostname;}catch{}let d=await d8({command:n,baseUrl:this.browser.baseUrl,logger:s,fetchImplementation:l});return {data:Uy.parse({...d,cookies:jV(a,c)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await m8({command:n,baseUrl:this.browser.baseUrl,logger:s}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return c8({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 xZ({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 J("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&&Fu(n.storageState)){let l=Dn__default.resolve(n.storageState);rr__default.mkdirSync(Dn__default.dirname(l),{recursive:true}),rr__default.writeFileSync(l,`${JSON.stringify(a,null,2)}
5752
+ `),tokenLength:u}),a.forEach((g,f)=>{let y=g.ids[0],T=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:y,maxId:T},`Chunk for page filtering (index ${f+1}/${a.length})`);}),{chunks:a}}var X6=5e6,RLe=1e5,vLe=3e4,wLe=6e4,ILe=1e5;async function Hs(e){let{fixtures:t}=e,{logger:n}=t,o=e.tree,r=e.serializedTree,i=gt(r);if(i>X6)throw new J("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${X6} tokens.`);if(i>RLe){let s=J6({serializedTree:r,options:K6,logger:n}),a=randomUUID();o=await xLe({...e,chunks:s.chunks,callId:a}),r=o.serialize();let l=gt(r);n.info({oldTokens:i,newTokens:l,langfuseCallId:a},"Filtered page using AI chunk ranking");}return r}async function xLe({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:vLe,mediumTokenLimit:wLe,hardTokenLimit:ILe,callId:t},{abortSignal:a,logger:l,loggerTags:It(l)}),d=[];return n.forEach((p,m)=>{c.indices.includes(m)&&(d=d.concat(p.ids));}),i.pruneUsingRelevantIds(new Set(d))}async function iF(e,t){if(!e.description)throw new J("UserConfigurationError","Cannot locate element with empty description");return Aa({action:async()=>PLe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function PLe(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:y,localCodeEvalTools:T,generator:A,abortSignal:E}=t,v=e.description,w=yo(),P=e.useMemory&&!n;o&&(v=await ni({orgId:f,s:v,context:o,localTools:T,signal:E,logger:l})),s&&(v=j6(v,s));let{serializedTree:x,tree:R}=await w.startAsyncSpan("GET_PAGE_STATE",async()=>wc(y,{allowNotActionableNodesOverride:c,allowIneligibleTagRedirect:d,showZeroOpacityElementsOverride:u,filterByViewport:r,abortSignal:E,skipWait:i,logger:l}),{}),_=await w.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let oe,H=Date.now(),Q;for(;!oe&&Date.now()-H<3e3;){E.throwIfAborted();try{oe=await y.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(ce){Q=ce;}}if(!oe)throw new J("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${Q?.message}`);return oe}),O=x,D=false,G=`data:image/jpeg;base64,${_.toString("base64")}`,ne=It(l);O=await Hs({type:"locator",description:v,screenshot:G,serializedTree:x,tree:R,fixtures:{generator:A,signal:E,logger:l,orgId:f}}),O!==x&&(D=true);let Z=await w.startAsyncSpan("AI_LOCATOR_CALL",async oe=>{m&&(oe.attributes.isAutoHeal=true),h&&(oe.attributes.cacheBustReason=h);let H=await A.getElementLocation({browserState:O,goal:v,screenshot:G,source:s,memory:P?a:void 0},{disableCache:n,abortSignal:E,logger:l,loggerTags:ne,useMemory:P,cacheBustReason:h});if(oe.result=H,P&&(oe.attributes.useMemory=true,oe.attributes.memoryTraces=H.rememberedTraces??[],H.updatedMemory&&(oe.attributes.memorySavedNewResult=true)),w.storeTraceAsset){let Q=randomUUID();w.storeTraceAsset({snapshotId:Q,data:_}),oe.screenshotSnapshotId=Q;}return H});if(l.debug({usedRag:D,result:Z},"Got locator result"),!(Z.id>0))throw new Nh(`Could not find any relevant element: ${Z.thoughts}`,Z.updatedMemory?{type:"GCS_TRACES",traces:Z.updatedMemory}:void 0);let{resolution:W,target:V,frameConfig:ee}=await w.startAsyncSpan("TARGET_RESOLUTION",async oe=>{let H=await y.createTargetFromA11yId({id:Z.id,requirements:Z.requirements,additionalElements:Z.additionalElements,description:v,targetSource:"AI",logger:l,skipSavingVisualAttributes:p,acceptElementMovedError:g});return oe.result={serializedElement:H.target.nodeOnlySerializedHtml??"Unknown HTML element"},H});if(W.a11yNode?.properties?.hidden&&W.a11yNode?.properties?.hidden!=="false")throw new J("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: ${W.displayString}`);return P&&(Z.updatedMemory?V.memory={type:"GCS_TRACES",traces:Z.updatedMemory}:a&&(V.memory=a)),{thoughts:Z.thoughts,target:V,resolution:W,frameConfig:ee,screenshot:G}}var OLe=15;async function Fw({command:e,logger:t,fixtures:n,useMemory:o,maxRetries:r=OLe,recoveryHint:i}){if(!e.assertion.trim())throw new J("ActionFailureError","Assertion command is missing the assertion content");let s=hO.optional().catch(void 0).parse(e.source);e.source&&!s&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let a=yo();return a.startAsyncSpan("AI_ASSERTION_CALL",async l=>{let{browser:c}=n,d=e.timeout?e.timeout*1e3:c.smartWaitingTimeout,u=bX(d,r-1),p=0,m=Date.now(),h=m+d,g=m,f,y,T;try{await Aa({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 x=h-v,R=g-v,_=Math.min(R,x);_>0&&await Ze(_,n.abortSignal);}let w=Date.now();if(p>0&&w>=h)break;let P=false;try{if(f=await Aa({action:async()=>{let R=await Z6(c,t,n.abortSignal);return y&&y.serializedTree===R.serializedTree&&y.screenshotBuff.equals(R.screenshotBuff)?(P=!0,f):(y=R,e8({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&&xb(e,f.updatedMemory,t);break}else throw f?.aiResult.thoughts?new J("AssertionFailureError",f.aiResult.thoughts):new J("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(x){n.abortSignal.throwIfAborted(),T=x instanceof Error?x:new Error(`${x}`),P?t.info(`AI check attempt ${p} failed (re-used previous result)`):t.info({err:x},`AI check assert attempt ${p} failed, retrying...`);}finally{p++,g=w+u;}}if(!f?.aiResult.result){let v=h-Date.now();v>0&&await Ze(v,n.abortSignal);}if(!f?.aiResult.result)try{f=await Aa({action:async()=>e8({command:e,state:await Z6(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&&xb(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 J("AssertionFailureError",v)}return l.result=f.aiResult,{...f,thoughts:f.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:c.url()}})}async function Z6(e,t,n){await e.waitForPageLoad({signal:n});let[o,r]=await Promise.all([wc(e,{abortSignal:n,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...o,screenshotBuff:r}}async function e8({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,y=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:y,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:y,contextChoice:A,source:a,recoveryHint:c},P=await(A==="VISION_ONLY"?(R,_)=>u.getVisualAssertionResult(R,_):(R,_)=>u.getAssertionResult(R,_))(v,{useConsensus:o,attemptNumber:s,useMemory:r,disableCache:!!e.disableCache,abortSignal:p,logger:l,loggerTags:It(l)}),x;if((P.result||i)&&P.relevantElements?.length){P.relevantElements.map(R=>d.getSerializedFormFromA11yId(R)).filter(R=>!!R);try{let R=P.relevantElements[0],{resolution:_}=await d.createTargetFromA11yId({id:R,description:null,targetSource:"AI",skipSaveToCache:!0});x=await d.screenshot({locator:_.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(R){l.debug({err:R},"Failed to capture element screenshot for trace, continuing...");}await MLe(P.relevantElements,d,l);}return {aiResult:P,afterScreenshotOverride:f,elementScreenshotOverride:x,updatedMemory:r?P.updatedMemory:void 0}}async function MLe(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 Te(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 n8(e){let{command:t,logger:n,fixtures:o,disableCache:r}=e,{browser:i,generator:s,abortSignal:a}=o;if(!t.goal.trim())throw new J("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let u=Aq(t.schema);if(u)throw new J("UserConfigurationError",u)}let l=await i.getCondensedHtml(),c=await i.screenshot({retries:2}),d=yo();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:It(n)});if(u.result=p,NLe({tracer:d,span:u,screenshot:c,htmlState:l,logger:n}),p.result==="NOT_FOUND")throw new J("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new J("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:i.url()}})}catch(u){let p=Y(u);throw p.includes("MaxGenerationLengthExceededError")?new J("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 J("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 NLe(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 o8(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await LLe(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 Ze(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function LLe(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await Ze(r.smartWaitingTimeout,o);return}if(!t.description)throw new J("UserConfigurationError","Cannot locate element with empty description");await Te(kLe(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function kLe(e,t,n){let{logger:o,iframeUrl:r}=t,{browser:i}=n;for(;Date.now()-e<i.smartWaitingTimeout;)if(await Aa({action:async()=>DLe(t,n),frameConfig:r?{type:"url",url:r}:void 0,browser:i,logger:o}))return}async function DLe(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 ni({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 J("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:It(o)});return o.debug({result:m},"Got smart waiting result"),m.isPageReady}var FLe=3e4;async function s8(e){return yo().startAsyncSpan("ELEMENT_ASSERTION",async n=>BLe(e,n),{name:"Element check"})}async function BLe(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>sE(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&Sh(l.target),d=cloneDeep(l),u=(E=false)=>{if(l=a(),!!l)if(E){let v=TL(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,FLe):0,h=p,g=0,f,y=500,T=false;for(;g<2||Date.now()-p<o;){g++,g>1&&await Ze(y,s),s?.throwIfAborted(),l=a();let E=g===1,v=c&&Date.now()-h>=m;v&&(h=Date.now());let{result:w,elementWasFound:P}=await r8({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||v,params:e});if(f=w,T=T||P,w.success)break;u(),y=Math.min(y*1.25,1e4);}if(!f)throw new J("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:w,elementWasFound:P}=await r8({cacheToUse:v,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});f=w,T=T||P,f.success||u(true);}let A=a();return f.success&&A?.target&&!T&&(A.target=Ib(A.target),A.updatedAt=new Date),t.result={success:f.success,message:f.err?.message},f}async function r8({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&&!Kc(r.target))throw new Error("Element assertion with x/y is not supported yet");let d=rJ(r.assertion),u=ULe(r.assertion),p,m=false,h=cloneDeep(e);try{let{elementInteractedDisplayString:g,result:f,thoughts:y}=await l({tracer:a,command:r,target:r.target,cache:h?.target,action:async T=>HLe(T.locator,o),options:{...r,allowNotActionableNodesOverride:u,allowIneligibleTagRedirect:u,showZeroOpacityElementsOverride:!0,disableCache:i,memory:h?.target?.memory,disableGlobalLocatorRedirect:!0,source:qp(r),skipAISmartWaiting:t,targetName:"target"},retriesWithAI:n?1:0});return p={success:f.success,data:f.data,err:f.err,elementInteractedDisplayString:g,thoughts:y},m=!0,f.success||(c.warn({aiThoughts:y,elementString:g,err:f.err},"Element check found an element but failed"),p={...f,thoughts:y}),{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 J)||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 ULe(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function HLe(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await GLe(e,t.assertion)}async function GLe(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:mn(s,500,true)},!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,o=new J("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:mn(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 J("AssertionFailureError",Y(a)),n=false;break}if(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,t.operation==="EXISTS"?o=new J("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new J("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},Qs*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:Qs*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:Qs*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=Fg(t);o=new J("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=Fg(t);n=false,o=new J("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(!Rb(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=Fg(t);n=false,t.operation==="EXISTS"?o=new J("AssertionFailureError",`The style property ${t.property} ${a}`):o=new J("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 a8(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function bT(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 c8(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Kc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),yo().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await VLe(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof J&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function VLe({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Kc(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async O=>bT(o,{locator:O.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await bT(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 _=`${c.width}x${c.height}`,O=`${d.width}x${d.height}`;return {fail:true,thoughts:`Current screenshot (${_}) does not match saved screenshot dimensions (${O}) - 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,y=h.width*h.height,T=Math.abs(p.height-h.height),A=Math.abs(p.width-h.width);if(f>y){let _=u.cover({w:h.width,h:h.height});c.buffer=await _.getBuffer("image/jpeg"),g="current",c.width=h.width,c.height=h.height;}else if(y>f){let _=m.cover({w:p.width,h:p.height});d.buffer=await _.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,P=CNe(sF.decode(d.buffer).data,sF.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,x=P>v*100,R=`Visual diff of ${P.toFixed(2)}% detected, which is ${x?"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.`),x)throw new J("ActionFailureError",R);return {fail:x,thoughts:R,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:sF.encode(E,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var zLe=3e4;function WLe(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 d8({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??zLe/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($g(e.url)&&(l=e.url),n&&jg(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new J("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 Te((async()=>{let h=a?`${c}?${a}`:c;try{let g=WLe(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 J("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 J("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 qLe=5e3;async function Bw({timeout:e=Qs,...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 u8(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 Ze(a,t.signal),a=Math.min(Math.floor(a*1.5),qLe);else return i}return i=await u8(t),i}async function u8(e){return yo().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await KLe(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function KLe({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(p8,{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(p8,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?fd.CONTAINS:yd.CONTAINS;s=new J("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new J("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 p8({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 YLe=3e4;async function m8({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??YLe/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([u,p])=>u&&p));s["Content-Type"]="application/json";let a;if($g(e.url)&&(a=e.url),n&&jg(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new J("ActionFailureError",`Invalid URL: ${e.url}`);let c=await Te((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 J("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 J("ActionFailureError",`GraphQL request failed with status ${c.status}: ${p}`)}throw u?.errors?.length&&u?.errors[0]?.message?new J("ActionFailureError",`GraphQL request failed with status ${c.status}: ${u.errors[0].message}`):new J("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 If=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([wc(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:{...It(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([wc(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:{...It(s)},langfuseSessionId:a})}catch(h){throw new J("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return wc(this.browser,t)}async locateElement(t){return await iF(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Aa({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 J("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 J("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 Ze(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=yo(),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:Ke}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await yo().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 Ti&&(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 Aa({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=yo(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||d)&&!VH(o))throw new J("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,T;d&&(h.info("Cache explicitly disabled for this step"),y=true,T="Cache explicitly disabled",f=void 0);let A=W6({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=A.cache,y=y||A.cacheBustedBeforeAction,!T&&A.cacheBustReason&&(T=A.cacheBustReason);let E=true;if(!z6(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:y,cacheBustReason:T});try{let{resolutionResult:v,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),P=await r(w);if(_t.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.7.3"]),qR({cmd:s,key:p,newTarget:f,logger:h,updatedWithAI:!1}),E){let x=v.decisions.filter(R=>R.matched);if(x.length!==1)h.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let R=x[0].type;n.recordTargetAutoHeal({healType:R});}}return {result:P,elementInteractedDisplayString:v.displayString}}catch(v){this.throwIfClosed();let w=_P(v);if(w&&!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 J&&!w)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"),_t.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.7.3",`missReason:${v instanceof Ti?v.cacheMissReason:"unknown"}`]);let P;f.memory&&rE(f.memory)&&(P=f.memory);let x=v instanceof Ti&&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:P,targetHealingInProgress:true},skipInitialLocateWait:x})}throw new J("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 o8({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 y=false,T=this.browser.getActiveFrameConfig(),A=i.force||f>1;try{let E;try{E=await iF({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(P){if(P instanceof Nh&&P.updatedLocatorMemory){let x={id:-1,...l,memory:P.updatedLocatorMemory};qR({cmd:s,key:i.targetName,newTarget:x,logger:c,updatedWithAI:!0});}throw P}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),y=!0);let v=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await a(v);return qR({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=It(c)),{result:w,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(y&&this.browser.setActiveFrameConfig(T),this.throwIfClosed(),f<g&&_P(E)){c.warn({err:E,aiAttempt:f},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof J?E:new J("ActionFailureError",E.message)}}throw new J("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return bT(this.browser,t)}async executePresetCommand(t,n,o,r,i){this.options?.slowMoMs&&await Ze(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 J("ActionFailureError",`Failed to substitute template strings in command: ${c.message}`,{errOptions:{cause:c}})}try{let c=await De({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 V6({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{$5(n,l);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>LD(t)}}async traceBrowserInteraction(t,n,o){return yo().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return bw({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()?Fw({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 J("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new J("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return Fw({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:s,recoveryHint:i})}case "AI_EXTRACT":return n8({command:n,logger:s,fixtures:this.getControllerFixtures(),disableCache:r});case "NAVIGATE":if(!$g(n.url)&&!jg(n.url,this.browser.baseUrl))throw new J("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 J("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&&Ol(n.target)){let u=$r(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??qi.height,d=this.browser.getViewport()?.width??qi.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 J("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 J("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let a=n.delay*1e3;await Ze(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(Ol(n.target)){let p=$r(n.target.pixels),m={...n,relativePosition:n.relativePosition?$r(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?$r(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 rv(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(Ol(n.fromTarget)&&Ol(n.toTarget)){let c=$r(n.fromTarget.pixels),d=$r(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(c,d,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:c});break}if(Ol(n.fromTarget)||Ol(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 J("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Ol(n.target)){let p=$r(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(!Kc(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:qp(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 qu({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 J("ActionFailureError",l instanceof Error?l.message:`${l}`,{errOptions:{cause:l}})}try{JSON.stringify(a);}catch(l){throw new J("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&&Ol(n.target)){let m=$r(n.target.pixels),h={...n,relativePosition:n.relativePosition?$r(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:qp(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 rv(a,p.urlAfterCommand)&&(p.succeedImmediately=true,p.succeedImmediatelyReason="URL changed"),p}case "HOVER":{if(Ol(n.target)){let c=$r(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?$r(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(!Kc(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&&!Kc(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 rv(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=XLe(fetch,a),c;try{c=new URL(n.url).hostname;}catch{}let d=await d8({command:n,baseUrl:this.browser.baseUrl,logger:s,fetchImplementation:l});return {data:Uy.parse({...d,cookies:jV(a,c)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await m8({command:n,baseUrl:this.browser.baseUrl,logger:s}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return c8({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 xZ({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 J("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&&Fu(n.storageState)){let l=Dn__default.resolve(n.storageState);rr__default.mkdirSync(Dn__default.dirname(l),{recursive:true}),rr__default.writeFileSync(l,`${JSON.stringify(a,null,2)}
5753
5753
  `,"utf8");}return {data:a,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AUTH_LOAD":{let a;if(Fu(n.storageState))try{a=JSON.parse(rr__default.readFileSync(Dn__default.resolve(n.storageState),"utf8"));}catch(c){throw new J("UserConfigurationError",`Failed to read auth state from '${n.storageState}': ${Y(c)}`,{errOptions:{cause:c}})}else if(!n.storageState.trim())a=void 0;else if(a=await qu({orgId:this.orgId,code:n.storageState,fragment:false,context:o,logger:s,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof a!="object")throw new J("ActionFailureError",`Credentials must evaluate to an object (received ${typeof a} instead)`);let l;try{l=hC.optional().parse(a);}catch(c){throw new J("ActionFailureError",`Credentials provided do not follow the required format: ${c}`)}await this.browser.loadAuthState(l);break}case "ELEMENT_CHECK":{let a=(n.timeout??Qs)*1e3,l=this.generator.getAgentConfig()?.assertion;if(a8(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 Fw({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&&xb(n,d.cache?.memory.traces,s);}}let c=await s8({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 Aa({action:async()=>Bw({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 ep(n.requestMatcher),l=this.browser.registerRequestListener(a);return this.registeredListeners[n.key]=l.then(async c=>await BD(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 J("ActionFailureError",`No listener registered with key: ${n.key}`);let l=n.timeout??10;return {data:await Te(a,{milliseconds:l*1e3,message:`Request listener timed out after ${l} seconds`}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "RECORD_REQUESTS":{let a=new ep(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]=Iw(c);},onRequestComplete:(l,c)=>{this.recordedRequests[n.key]?.[l]&&(this.recordedRequests[n.key][l]=Iw(c));}}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GET_RECORDED_REQUESTS":{let a=this.recordedRequests[n.key];if(!a)throw new J("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 ep(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 ep(n.requestMatcher),async(l,c)=>{let d=await qu({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=mz.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:It(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 Nw({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:It(this.logger)})}async getFailureRecoveryPlan(t,n){return this.generator.getFailureRecoveryPlan(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:It(n??this.logger)})}};var cF=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(Ps({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||"",y=await ni({orgId:c,s:f,context:r,logger:o,localTools:s,signal:u});g={orgId:c,cacheKeys:[y,...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<Zz;){u?.throwIfAborted();let A=await i.getCacheResult(g);if(A){o.info({cacheResult:mn(A,1e3,true)},"Got result from module execution cache"),p=Uw(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 Ze(2500+Math.random()*1e4,u);}}try{if(!p)p=await eke(e);else if(t.autoAuth){let f=hC.safeParse(p.data);if(!f.success)throw new J("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 y=!1,T=t.advanced?.cacheInvalidation;if(T&&T.type==="PAGE_CHECK"){let A={type:"CONTENT",value:T.substring},E=await Bw({timeout:Qs,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"),y=!0);}if(g&&y)return await i.deleteCacheResult(g),cF(e)}}finally{try{h!==void 0&&!m&&p?.status==="SUCCESS"&&await tke({step:t,result:p,browser:a.browser,cacheKeyPrefix:h,logger:o,storage:i});}finally{h!==void 0&&await i.releaseCacheLock(h);}}return p},eke=async e=>{let{currentParentIdChain:t}=e,{step:n,tracer:o}=e.moduleParams,r=Uw(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,Sa({asyncTasks:e.work.asyncTasks,nestedResults:a,result:r,logger:e.fixtures.logger}),r};function Uw(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 g8({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 qu({orgId:e,code:l,fragment:!0,context:n,logger:o,localTools:r,signal:i});}return s}catch(a){throw i?.throwIfAborted(),new J("UserConfigurationError",`Failed to evaluate module inputs: ${a}`)}}async function tke({step:e,result:t,browser:n,cacheKeyPrefix:o,logger:r,storage:i}){let s=e.cacheConfig?.cacheExpiryMs;(!s||s===dq)&&(s=e.defaultCacheTtl??uq);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:Ps({json:a,maxJsonStringSize:1e4})},"Setting module cache result"),await i.setCacheResult({result:a,keyPrefix:o,ttlMs:s});}async function Bm(e,t,n){return nke(e,t,n)}async function nke(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 J?a=`${r}`:a=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=Uw(e,{},"FAILED");return l.message=a,l.startedAt=o,l.finishedAt=i,l}return {...nv(e),startedAt:o,finishedAt:i,status:s,data:null,message:a,results:[]}}}async function os(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 Hw=20;function $({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}
5754
5754
  ${e}`}]}function Di({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 yl(e){return {type:"content",value:[{type:"text",text:e}]}}function f8(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(gt(i)>t){n[o]="[too large truncated]";continue}n[o]=r;continue}n[o]=r;}return n}function y8(e,t){let n={},o=0,r=Object.entries(e).map(([i,s])=>{let a=JSON.stringify(s,null,2),l=gt(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 S8({projectRoot:e,filePath:t,pathLabel:n="path"}){if(!t||!Dn__default.isAbsolute(t))return t;let o=Dn__default.relative(e,t);if(o.startsWith("..")||Dn__default.isAbsolute(o))throw new Error(`Error: ${n} "${t}" must be inside project root "${e}".`);return o}function b8(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 A8=["__generated__"],E8=[".env",".npmrc",".netrc",".git-credentials","credentials","credentials.json"],C8=[".env.","id_rsa","id_ecdsa","id_ed25519","service-account"],R8=[".pem",".key",".p12",".pfx",".keystore",".jks",".tfstate"],v8=[".tfstate."],Gw=[...E8.map(e=>`**/${e}`),...C8.map(e=>`**/${e}*`),...R8.map(e=>`**/*${e}`),...v8.map(e=>`**/*${e}*`)];function T8(e){let t=Dn__default.basename(e).toLowerCase();return E8.includes(t)||C8.some(n=>t.startsWith(n))||R8.some(n=>t.endsWith(n))||v8.some(n=>t.includes(n))}function TT(e,t){return Dn__default.resolve(Dn__default.resolve(e),t)}async function w8(e,t){let n=TT(e,t);if(T8(n))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);let o=await mF.realpath(n);if(T8(o))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);return o}var ike=z$1.object({pattern:z$1.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$1.string().optional().describe("Optional repo-relative directory to start the search in. Defaults to the working directory root."),maxResults:z$1.int().min(1).max(1e3).default(100).describe("Maximum number of paths to return. Defaults to 100.")}),ske="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 jw(e){return {tool:tool({description:ske,inputSchema:ike,execute:async n=>{let o=await ake(n,e);return re($({text:lke(n.pattern,o)}))},toModelOutput:({output:n})=>n}),name:ed}}async function ake({pattern:e,path:t,maxResults:n},o){let r=Dn__default.resolve(o.repoRoot),i=t?TT(r,t):r;return (await Ad([e],{cwd:i,ignore:[...A8.map(a=>`**/${a}`),...Gw],maxDepth:1/0,nodir:true,signal:AbortSignal.timeout(3e4)})).slice(0,n).map(a=>Dn__default.relative(r,Dn__default.resolve(i,a)))}function lke(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(`
5755
5755
  `)}function Vw({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?I8(g,300):g),c=l.join(`
@@ -7486,7 +7486,7 @@ with this test we are editing:
7486
7486
  to pick which of these modules are relevant:
7487
7487
 
7488
7488
  `;let p=T$e(c);u+=p;let m=streamObject({schema:FB,model:d("claude-sonnet-4-5-20250929"),system:b$e,messages:[{role:"user",content:u}],providerOptions:{anthropic:rs}}),h=[];for await(let A of m.textStream)h.push(A);let g=h.join(""),f;try{let A=JSON.parse(g);f=FB.parse(A);}catch(A){r.error({rawResponse:g,parseError:A},"Failed to parse AI response as JSON"),n.addError(`Failed to parse AI response: ${Y(A)}. Raw response: ${g}`);return}let y=new Set(c.map(A=>A.moduleId)),T=f.recommendations.filter(A=>y.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: ${Y(c)}`);}}}),px=[E$e,y$e];var C$e=1e5,Sne=sr({schema:{name:tS,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$1.string().describe("The session id to query."),returnBrowserState:z$1.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$1.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$1.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=hp({response:n,sessionId:t.sessionId,toolName:tS});if(!o)return;o.controller.setOpen();let r=await NB({browser:o.controller.browser,supportsFileOutput:e.supportsFileOutput,returnBrowserState:t.returnBrowserState,returnScreenshot:t.returnScreenshot,tokenLimit:C$e,hint:t.hint,filtering:{generator:e.generator,orgId:e.orgId,logger:e.logger,signal:o.controller.executeAbortController.signal}});n.addContentParts(r);}}),bne=sr({schema:{name:nS,description:"Get the current environment variables for a session.",inputSchema:{sessionId:z$1.string()}},handle:async(e,t,n)=>{let o=hp({response:n,sessionId:t.sessionId,toolName:nS});if(!o)return;let r=await qs({testContext:o.context,supportsFileOutput:e.supportsFileOutput});n.addContentParts(r);}});var Tne=sr({schema:{name:Zc,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. ${MT} 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 ${Pr} to inspect persisted test state by id or path, especially for a different test.`,inputSchema:{testId:z$1.string().describe("The test id to target when starting a session."),envName:z$1.string().optional().describe("Optional environment override (matches CLI --env behavior). Defaults to the test's default env when omitted."),projectConfigPath:z$1.string().optional().describe("Optional path to a momentic.config.yaml file (matches CLI --config)."),projectNameFilter:z$1.string().optional().describe("Optional project name filter for workspace configs (matches CLI --filter)."),headfulBrowser:z$1.boolean().optional().describe("Whether to launch a headful browser for the session. When omitted, uses the MCP server default if configured."),video:z$1.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&&(js(e.project.rootDir),i=Vs({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 ks({project:await nn({configFilePath:t.projectConfigPath??e.project.configFilePath,nameFilter:t.projectNameFilter,skipExitOnError:!0}),apiClient:l}),d=new Ys(l,e.orgId,c);s=await Ks.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(Y(l));return}Ws({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 V9({projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:process.cwd(),stepSchema:as(),stepSchemaTitle:"Step schema",supportsFileOutput:e.supportsFileOutput}));try{let l=await mp({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 Ur({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:Y(l)},null,2));}i&&n.addContentParts($({text:wr({filePath:i,title:"Video output directory"}),section:"Video Output"}));}}),Ane=sr({schema:{name:xE,description:"Kill a granular browser session by sessionId. Returns available session ids if the target is missing.",inputSchema:{sessionId:z$1.string().describe("The session id to terminate.")}},handle:async(e,t,n)=>{let{sessionId:o}=t;try{let r=Ks.getSession(o),i=r?.videoOutputDir,s=await Ks.killSession(t.sessionId,"explicit kill");if(s.killed&&Ws({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:Ks.listSessionIds()},null,2));return}n.addPartFromText(JSON.stringify({sessionId:t.sessionId,killed:!0},null,2));let a=await z9({killResult:s,rootDir:e.project.rootDir});a&&n.addContentParts($({text:wr({filePath:a.filePath,title:"Session span report"}),section:"Session Spans"})),i&&n.addContentParts($({text:wr({filePath:i,title:"Video output directory"}),section:"Video Output"}));}catch(r){n.addError(Y(r));}}});var Jf=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 BB({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]},BB=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 Yd({orgId:u,parentStep:null,parentTracer:null,socket:c}):new rb);r.setOpen();let y={results:[],asyncTasks:[],state:{autoHealingDisabled:true,failureRecoveryDisabled:true,failureRecoveryAttempts:0},...t&&{fastForwardingToStep:true}},T=()=>va({listParams:{containerName:"agent-step-list",steps:e,tracer:f},fixtures:g,options:{collectDebugData:false,reinitializeBrowser:false,disableHealing:true},inputs:{orgId:u,userId:v5(),runId:randomUUID(),sessionId:p,steps:e,testMetadata:null,orgSettings:{},fromStep:t,toStep:n},callbacks:{test:{},step:{}},runParams:h?{apiClient:h}:null,work:y});return i?r.withExecutionOptions(i,T):T()};async function mx({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 vI(e,{project:t,logger:n,tempCaches:u});switch(h.type){case "PRESET_ACTION":return x$e({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 _$e({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 P$e({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([Ur({browser:r.browser,supportsFileOutput:d}),qs({testContext:c,supportsFileOutput:d})]);return [...$({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 x$e({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 Jf({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"?(O$e({logger:t,tempCaches:d,command:e.command,parts:h}),h.push(...$({text:`Step Execution successful: ${m.message}`,section:"Successful Result"}))):h.push(...$({text:`Step Execution failed: ${m.message}`,section:"Error"})):h.push(...$({text:"Step Execution errored for an unknown reason.",section:"Error"}));let[g,f]=await Promise.all([Ur({browser:o.browser,supportsFileOutput:c}),qs({testContext:l,supportsFileOutput:c})]);return h.push(...g,...f),h}async function _$e({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 Jf({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(...$({text:`AI action completed successfully: ${p.message??"Goal achieved"}`,section:"Successful Result"})):m.push(...$({text:`AI action failed: ${p.message??"Unknown error while previewing AI action"}`,section:"Error"})):m.push(...$({text:"AI action executed with unknown result.",section:"Error"}));let[h,g]=await Promise.all([Ur({browser:o.browser,supportsFileOutput:c}),qs({testContext:l,supportsFileOutput:c})]);return m.push(...h,...g),m}async function P$e({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 Jf({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(...$({text:`Module executed successfully: ${p.message}`,section:"Successful Result"})):m.push(...$({text:`Module execution failed: ${p.message}`,section:"Error"})):m.push(...$({text:"Module execution errored for an unknown reason.",section:"Error"}));let[h,g]=await Promise.all([Ur({browser:o.browser,supportsFileOutput:c}),qs({testContext:l,supportsFileOutput:c})]);return m.push(...h,...g),m}function O$e({logger:e,tempCaches:t,command:n,parts:o}){if(t&&Jo(n)&&n.cache)try{let r=randomUUID();t[r]=Dl.parse(cloneDeep({type:n.type,cache:n.cache})),o.push(...$({text:r,section:"CacheId"}));}catch(r){e.warn({err:r},"Failed to save temp cache for step. Continuing...");}}var Ene=({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=zT(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return o.total+=1,!!(n&&zT(i.id,a,n.toStepId,n.parentStepIdChain))};return Oi({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=zT(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return !!(n&&zT(i.id,a,n.toStepId,n.parentStepIdChain))},onSimpleStepContainer:(i,s)=>r(i,s.parentChain)}),o.total};var N$e="Cannot add a module step inside another module. Modules cannot be nested.";function UB(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 L$e(e,t,n){let o=UB(e,t);if(!n?.length)return o;let r=sJ(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 Cne(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])Oi({steps:r,onPresetAction:o,onConditional:o,onSimpleStepContainer:o});}async function hx({project:e,storage:t,orgId:n,logger:o,testPath:r,saveChangesToDisk:i,supportsFileOutput:s,tempCaches:a,mutableStepState:l,params:c,envName:d}){let u=Dn__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=>vI(R,{project:e,logger:o,tempCaches:a}))),y=cloneDeep(f),T=c.parentStepIdChain,A;try{A=L$e(g,c.targetSection,T);}catch(R){return re($({text:`Error: ${Y(R)}`,section:"Error"}))}if(c.startIndex<0||c.startIndex>A.length)return re($({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,w=cloneDeep(A.slice(c.startIndex,c.startIndex+v)),P=[];if(T?.length){let R=aJ(UB(g,c.targetSection),T,c.targetSection);if(P.push(...R),R.some(O=>O.type==="RESOLVED_MODULE")&&f.some(O=>O.type==="RESOLVED_MODULE"))return re($({text:`Error: ${N$e}`,section:"Error"}))}A.splice(c.startIndex,c.deleteCount,...f);for(let R of f)R.type==="RESOLVED_MODULE"&&Cne(g,R);for(let R of P)R.type==="RESOLVED_MODULE"&&Cne(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 x=[...$({text:`Successfully spliced ${E} step(s) at index ${c.startIndex} in the ${c.targetSection} section, removing ${v} step(s).`,section:"Result"})];return x.push(...await F$e({logger:o,project:e,orgId:n,testId:p.id,environment:d,originalSteps:h,updatedSteps:g})),x.push(...await xee({rootDir:e.rootDir,supportsFileOutput:s,deletedStepRefs:w.map((R,_)=>({id:R.id,index:c.startIndex+_})),insertedStepRefs:y.map((R,_)=>({id:R.id,index:c.startIndex+_})),deletedSteps:Lu(w,{includeCache:false}),insertedSteps:Lu(y,{includeCache:false}),metadata:{section:c.targetSection,parentStepIdChain:T??[],startIndex:c.startIndex,deleteCount:v,insertedCount:E},artifactEntity:"splice-restoration-payload"})),c.returnTest&&x.push(...$({text:JSON.stringify(await ax({project:e,storage:t,selector:{path:r},envName:d,logger:o,mutableStepState:l,supportsFileOutput:s,hydrateStepIdentity:false}),null,2),section:"Test Content"})),re(x)}async function gx({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:y,disableCache:T}){let{fromStep:A,toStep:E,targetSection:v}=p,w=await o.getTestByPath({relativeTestPath:n,logger:t}),{alwaysSaveCache:P,noCache:x}=Ud(),R=await cs({logger:t,orgId:a,project:e,alwaysSaveCache:P,noCache:x||T===true}),_=f?.stepLists??{beforeSteps:w.beforeSteps??[],afterSteps:w.afterSteps??[],steps:w.steps};await R.resolveStepCacheEntries({logger:t,schemaVersion:w.schemaVersion,stepLists:_,testId:w.id,environment:c,useSnapshotIdentityCache:!f&&e.config.fileFormat==="v2"}),f&&(f.stepLists=_);let O=T?cloneDeep(_):_;T&&k$e(O);let D=UB(O,v),U=cloneDeep({steps:O.steps,beforeSteps:O.beforeSteps,afterSteps:O.afterSteps}),{result:G}=gm(D,A.fromStepId,A.parentStepIdChain);if(!G)return re($({text:`Error: No step found with id "${A.fromStepId}" and parent chain [${A.parentStepIdChain.join(", ")}] in ${v} section.`,section:"Error"}));if(E){let{result:Ie}=gm(D,E.toStepId,E.parentStepIdChain);if(!Ie)return re($({text:`Error: No step found with id "${E.toStepId}" and parent chain [${E.parentStepIdChain.join(", ")}] in ${v} section.`,section:"Error"}))}if(u?.setProgressTotal){let Ie=Ene({steps:D,fromStep:A,toStep:E});u.setProgressTotal(Ie);}r.setOpen();let ne;try{ne=await BB({steps:D,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:y});}finally{await g.flush(t);}let{results:Z}=ne;if(!Z||Z.length===0)return re($({text:"Error: No steps were executed.",section:"Error"}));let j=Z.at(-1);if(!j)return re($({text:"Error: No steps were executed.",section:"Error"}));let W={logger:t,cacheStorage:R,orgId:a,testId:w.id,environment:c,originalStepsWithCaches:U,updatedStepsWithCaches:{steps:O.steps,beforeSteps:O.beforeSteps??[],afterSteps:O.afterSteps??[]}},V=j.status!=="SUCCESS";await ym({logger:t,cacheStorage:R,orgId:a,testId:w.id,environment:c,stepLists:W.updatedStepsWithCaches,useSnapshotIdentityCache:e.config.fileFormat==="v2"}),V?j.status==="FAILED"&&await Hg(W):await Sm(W);let ee=v==="main"?"":` in ${v}`,oe=Ie=>{let ot="fromStepId"in Ie?Ie.fromStepId:Ie.toStepId;return Ie.parentStepIdChain.length>0?`id "${ot}" (parent chain [${Ie.parentStepIdChain.join(", ")}])`:`id "${ot}"`},H=A?oe(A):"beginning",Q=E?`Steps from ${H} through ${oe(E)}${ee}`:`Steps from ${H} to end${ee}`,ce=[];if(V)ce.push(...$({text:`Error: step with id ${j.id} failed: ${j.message}`,section:"Error"}));else {r.setOpen();let Ie=`${Q} executed successfully.`;ce.push(...$({text:Ie,section:"Result"})),j.data&&ce.push(...$({text:`Data: ${JSON.stringify(j.data,null,2)}`,section:"Result Data"}));}let[Fe,Oe]=await Promise.all([Ur({browser:r.browser,supportsFileOutput:h}),qs({testContext:d,supportsFileOutput:h,limits:{tokenLimit:m}})]);return re([...ce,...Fe,...Oe])}function k$e(e){for(let t of [e.steps,e.beforeSteps,e.afterSteps])t&&D$e(t);}function D$e(e){Oi({steps:e,earlyStop:false,onPresetAction:t=>(Jo(t.command)&&delete t.command.cache,false),onSimpleStepContainer:()=>false,onConditional:()=>false});}async function F$e({logger:e,project:t,orgId:n,testId:o,environment:r,originalSteps:i,updatedSteps:s}){let a=[];try{let{alwaysSaveCache:l,noCache:c}=Ud(),d=await cs({logger:e,orgId:n,project:t,alwaysSaveCache:l,noCache:c});await ym({logger:e,cacheStorage:d,orgId:n,testId:o,environment:r,stepLists:s,useSnapshotIdentityCache:t.config.fileFormat==="v2"}),await Sm({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(...$({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 HB=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 fx(this.reporter,this.parentStepIdChain.concat(this.step.id),this.setTotal)}},fx=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 HB(this.reporter,t.step,this.parentStepIdChain,this.setTotal)}};function Rne(e,t,n,o){let r=VT(e),i={completed:0,total:0},s=new AbortController,a=false,l=p=>{r&&mee(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: ${Vn(p)}`);},onStepComplete:p=>{o(),c(),i.completed+=1,i.total<i.completed&&(i.total=i.completed),l(`Completed: ${Vn(p)}`);}};return new fx(u,[],d)}var wne=`CLI-style step definition. Use the Step Authoring Guide artifact returned from ${Zc} when you start your session to get the full step schema.`,B$e=sr({schema:{name:i$,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:aM},handle:async(e,t,n,o)=>{try{let r=await e.storage.createTest(t);Ws({type:"mcp:test_create",test_platform:"web"}),n.addPartFromText(JSON.stringify(r,null,2));}catch(r){n.addError(Y(r));return}}}),U$e=sr({schema:{name:Pr,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 ${zp}, 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$1.string().optional().describe(`Id of the test to fetch. If you do not already know it, list project tests with ${GP}. Either testId or testPath is required.`),testPath:z$1.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 mp({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(Y(r));return}}}),vne=sr({schema:{name:IE,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 ${Uh}. Returns updated Test Content with step ids for the active session.`,inputSchema:{sessionId:z$1.string().describe("The active session whose bound test should be reloaded.")}},handle:async(e,t,n,o)=>{let r=hp({response:n,sessionId:t.sessionId,toolName:IE});if(!r)return;let i=r.storage.getProject();if(i.config.fileFormat!=="v2"){n.addError(`${IE} 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}=Ud(),d=await cs({logger:e.logger,orgId:r.orgId,project:i,alwaysSaveCache:l,noCache:c});r.mutableStepState.testId=s.id,r.mutableStepState.stepLists=await uc({cacheStorage:d,logger:e.logger,schemaVersion:s.schemaVersion,stepLists:a,testId:s.id,environment:r.envName,useSnapshotIdentityCache:true}),n.addContentParts($({text:`Reloaded test ${s.id} from disk into session ${r.sessionId}.`,section:"Result"})),n.addContentParts(await mp({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}));}}),H$e={...vne,addToolToMcpServer:(e,t)=>{e.project.config.fileFormat==="v2"&&vne.addToolToMcpServer(e,t);}},G$e=sr({schema:{name:GP,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. ${MT} 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: ${Y(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: ${Y(c)}`);}let l=await W9({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($({section:"Discovery Errors",text:a.map(c=>`- ${c}`).join(`
7489
- `)}));}}),Ine=sr({schema:{name:oS,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$1.string(),step:z$1.string().describe(wne)}},handle:async(e,t,n,o)=>{let{sessionId:r,step:i}=t,s=hp({response:n,sessionId:r,toolName:oS});if(!s)return;s.controller.setOpen();let a;try{a=await mx({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);}}),xne=sr({schema:{name:zp,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$1.string(),startIndex:z$1.number(),deleteCount:z$1.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$1.array(z$1.string()).describe(wne),targetSection:Wp.default("main"),parentStepIdChain:z$1.array(z$1.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$1.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=hp({response:n,sessionId:t.sessionId,toolName:zp});if(!r)return;let i=await hx({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&&Ws({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);}}),_ne=sr({schema:{name:Uh,description:`${wE} Use step ids from the active session: the Test Content section returned by ${Zc}, or the inserted/deleted refs returned by ${zp}. 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$1.string(),fromStep:UE,toStep:HE.optional(),targetSection:Wp.default("main"),resetSession:z$1.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z$1.boolean().default(false).describe("Run this invocation without reading or writing step caches.")}},handle:async(e,t,n,o)=>{let r=hp({response:n,sessionId:t.sessionId,toolName:Uh});if(!r)return;r.controller.setOpen(),t.resetSession&&await lx({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,apiKey:Us(),baseUrl:Fr(),controller:r.controller,testContext:r.context,supportsFileOutput:e.supportsFileOutput});let i=Rne(o,e.logger,n,()=>{Ks.touchSession(r.sessionId);}),s=await gx({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});Ws({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);}}),Pne=[G$e,B$e,U$e,H$e];var One=[Sne,bne,Tne,Ane,Ine,_ne,xne];async function V$e({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 cs({logger:t,orgId:r,project:n}),d=await uc({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 yx({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=Wn();Gl(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await V$e({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:d,startIndex:u,endIndex:p}=_ee({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(R=>R.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:iJ}),{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 y={...m,type:"RESOLVED_MODULE",id:randomUUID(),steps:m.steps,inputs:f},T=cloneDeep(c.baseState);T.steps.splice(u,p-u,y),i&&(i.stepLists=T);let{environment:A,stepCacheStorage:E,testId:v}=c.cacheSaveContext,w=e.config.fileFormat==="v2",{cachesToSave:P,snapshotCachesToSave:x}=await kn({stepLists:T,useSnapshotIdentityCache:w,cacheCreationParams:{orgId:a,testId:v,environment:A}});return w&&await E.saveSnapshotCacheEntries({logger:n,entries:x}),await E.saveStepCacheEntries({logger:n,entries:P}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:T,schemaVersion:at}),{module:m}}var Mne=sr({schema:{name:o$,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$1.string().describe(nm),description:z$1.string(),enabled:z$1.boolean().default(true),parameters:z$1.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z$1.record(z$1.string(),z$1.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$1.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z$1.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z$1.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z$1.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=S8({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await yx({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(Y(s));}}});var Qf=[...Pne,...px,...One,Mne,l7,f7,A7,u7];var Nne=Qf.map(e=>e.tool),Sx=new Map(Nne.map(e=>[e.schema.name,e]));async function Lne(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath;await cx(e);let{context:c}=dx({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await Aee({adapter:{getTool:d=>{let u=Sx.get(d);if(!u)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(Sx.keys()).join(", ")}`);return {name:u.schema.name,execute:async({input:p,extra:m})=>await See({context:c,tool:u,input:p,extra:m})}}},sessionManager:Ks,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:DB(e)*2,onShutdown:()=>{Hd();}});}async function GB(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 pee({workerType:"momentic-web-mcp",configPath:p,apiKey:o,serverUrl:r,cliVersion:i,logger:n,buildDaemonArgs:({entryScript:m})=>q$e({entryScript:m,serverUrl:r,configPath:p,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u})})}async function kne(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e;Bd(r),await GB(e);let{info:i,mcpLogger:s}=kB({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return kI({context:{logger:s},info:i,tools:bee({tools:Nne,resolveDaemonStateForCall:()=>GB(e),logger:s})})}var W$e=30*6e4;async function $B({options:e,toolName:t,input:n,timeoutMs:o=W$e}){Bd(e.serverUrl);let r=Sx.get(t);if(!r)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(Sx.keys()).join(", ")}`);let i=r.schema.inputSchema.parse(n),s=await GB(e);return uB({state:s,toolName:t,input:i,timeoutMs:o})}function q$e({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 jB=async(e,t)=>{try{let{killed:n,failed:o}=await Ks.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 VB(e){let{daemon:t,logger:n}=e,o=uee.safeParse(process.env);if(t&&o.success&&o.data[NI]==="momentic-web-mcp")return Lne({...e,daemonPort:o.data[OI],daemonToken:o.data[MI],daemonSessionId:o.data[LI]});if(Iu(n,true),t)return await kne(e);await cx(e);let{context:r,info:i}=dx(e);return kI({context:r,info:i,tools:Qf,shutdownHandlers:[jB,Hd,async()=>{await ix();}]})}var lA="3.7.2",gn=Rg({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:lA});(async()=>{try{let e=await ya(gn);e.gitBranchName&&gn.addBinding("branch",e.gitBranchName);}catch{}})();var fp=Router();async function Tx(e){return (await of(e,gn)).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)}fp.get("/",mt(async(e,t)=>{let n=nt(),o=await Ns(n),r=await Tx(o);t.status(200).json(r);}));fp.post("/",mt(async(e,t)=>{let n;try{n=Hz.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Gl(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=nt(),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=Dn__default.join(o.rootDir,n.folderPath??Dn__default.dirname(n.testFilePath));if(!rr__default.existsSync(s)||!rr__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await Pv({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));fp.get("/:moduleId/tests",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=nt(),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))j3(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);}));fp.get("/:moduleId",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await Ns(nt()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Sc({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));fp.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=Uz.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gl(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=nt(),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=Dn__default.join(o.rootDir,Dn__default.dirname(i.relativePath));if(!rr__default.existsSync(a)||!rr__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=bn(n.name),c=Dn__default.join(a,`${l}.module.yaml`),d=fc({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:u}=await kn({stepLists:{steps:s.steps},createNewCacheIds:true}),p={fileType:xe.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};ma({module:p,filePath:c,projectConfig:o.config,momenticFiles:r});let m={relativeFilePath:Dn__default.relative(o.rootDir,c)};t.status(201).json(m);}));fp.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=$z.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${Y(i)}`});return}let o=nt();if(!(await Ns(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await K3({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));fp.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=Gz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=nt(),r=await Ns(o);await Y3({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var Dne=fp;var cA=Router();cA.get("/",mt(async(e,t)=>{let n=nt(),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 Tx(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));cA.get("/folders",mt(async(e,t)=>{let n=nt(),o=await k3(n);t.status(200).json(o);}));cA.get("/labels",mt(async(e,t)=>{let n=nt(),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);}));cA.post("/in-folder",mt(async(e,t)=>{let n=Lz.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=nt(),[i,s]=await Promise.all([L3(r,o),Ns(r)]),a=Object.values(i.tests),l=await Tx(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 Fne=cA;var zB=Router();zB.get("/",mt((e,t)=>{let n=kv(nt(),gn);t.status(200).json(n);}));zB.get("/names",mt((e,t)=>{let o=nt().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var Bne=zB;var Une=Router();Une.get("/",mt((e,t)=>{let n={userId:Ec(),orgId:Wn(),email:Af(),name:w5(),pylonEmailHash:I5(),cliVersion:lA};t.status(200).json(n);}));var Hne=Une;var WB="mcp-session-id",Gne="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",Ax=Router();function nje(){let e=process.env[Gne];if(!e)return Jd*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(gn.warn({envVar:Gne,rawValue:e,fallback:Jd},"Invalid MCP session idle timeout env var; falling back to default"),Jd*60*1e3):t*60*1e3}function oje(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:lA},r=nt(),i=Us(),s=Fr(),a=gn.child({orgId:Wn(),userId:Ec(),...o}),l=new Ot({baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),c=GS(process.env.MOMENTIC_HEADFUL_BROWSER),d=new or(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),u=Wn(),p=new Ys(l,u,r);return {context:{project:r,orgId:u,logger:a,generator:d,apiClient:l,storage:p,serverId:o.serverId,extractBaseDir:$s(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:qt,knowledgeCitations:[],sessionIdleTimeoutMs:nje(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Vi},info:o}}var Xd={};Ax.post("/",async(e,t)=>{let n=String(e.headers[WB]??"");try{if(n&&Xd[n]){await Xd[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=oje(),i=pB(o,r,Qf),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{Xd[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&Xd[a]&&delete Xd[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});}});Ax.get("/",async(e,t)=>{let n=String(e.headers[WB]??"");if(!n||!Xd[n]){t.status(400).send("Invalid or missing session ID");return}await Xd[n].handleRequest(e,t);});Ax.delete("/",async(e,t)=>{let n=String(e.headers[WB]??"");if(!n||!Xd[n]){t.status(400).send("Invalid or missing session ID");return}let o=Xd[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var jne=Ax;var Vne=Router();Vne.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){gn.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var zne=Vne;var Ex=Router();Ex.get("/",mt(async(e,t)=>{let n=new Map;for(let i of await uk())n.set(i.configFilePath,i);let o=nt();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);}));Ex.get("/current",mt((e,t)=>{let n=nt();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);}));Ex.post("/set",mt(async(e,t)=>{let n;try{n=zz.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}gn.info("Setting local project");try{let o=await nn({configFilePath:n.configFilePath}),r=Vo();if(!r)throw new Error("API client is not initialized.");await Cf({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var Wne=Ex;var qne=Router();qne.get("/",mt((e,t)=>{let n=nt(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var Kne=qne;var Dc=Router();Dc.post("/",mt(async(e,t)=>{let n;try{n=Fz.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=nt(),r=await sA({project:o,input:n});Ws({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}}));Dc.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=nt(),r=await Ns(o),i;try{i=await Zi(Dn__default.join(o.rootDir,n),gn,r),await(await cs({logger:gn,orgId:Wn(),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:gn,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await Lv({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:at,momenticFiles:r,project:o});}catch(s){gn.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));Dc.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=nt(),r=Dn__default.join(o.rootDir,n);if(!rr__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=rr__default.statSync(r),s=await ya(gn),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));Dc.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=Dz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:Jb(e.params.testPath,n,nt()).newRelativeTestPath};t.status(200).json(r);}));Dc.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=kz.parse(e.body);}catch(m){gn.warn({err:m},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${m}`});return}gn.info({testPath:n},"Save received");let r=nt(),i=await Ns(r),s;try{s=Ed(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 kn({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:Wn(),testId:s.id,environment:s.envs?.find(m=>m.default)?.name}}),p=await cs({logger:gn,orgId:Wn(),project:r});a&&await p.saveSnapshotCacheEntries({logger:gn,entries:u}),await p.saveStepCacheEntries({logger:gn,entries:d}),ak({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Dc.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=Vz.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}Jb(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},nt()),t.status(201).json({message:"ok"});}));Dc.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=jz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${Y(i)}`});return}let r=nt();if(!rr__default.existsSync(Dn__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await J3({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));Dc.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=nt(),r=Dn__default.join(o.rootDir,n);if(!rr__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}rr__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Dc.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=Bz.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gl(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=nt(),i=Dn__default.join(r.rootDir,n);if(!rr__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await je(r),a;try{a=await Zi(i,gn,s);}catch(h){t.status(400).send({error:h.message});return}let l=fc({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=Gn.parse({...a,name:o.name,id:l}),{stepsToSave:d}=await kn({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),u=Dn__default.dirname(i),p=Dn__default.join(u,`${o.name}.test.yaml`);ha({test:{fileType:xe.TEST,...c,...d},filePath:p,projectConfig:r.config,momenticFiles:s});let m={relativeFilePath:Dn__default.relative(r.rootDir,p)};Ws({type:"test_editor:test_duplicated"}),t.status(201).json(m);}));var Yne=Dc;var Jne=z$1.object({name:z$1.string().min(1).describe("Short, human-readable name for the slice you are delegating (used as a label)."),instructions:z$1.string().min(1).describe("Focused, self-contained instructions for the child: which area it should own and what to cover. The child inherits the same input you received but cannot see your conversation, so these instructions must stand alone.")});function Xne(e){return e.kind==="diff"?e.diffSummary:pt`
7489
+ `)}));}}),Ine=sr({schema:{name:oS,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$1.string(),step:z$1.string().describe(wne)}},handle:async(e,t,n,o)=>{let{sessionId:r,step:i}=t,s=hp({response:n,sessionId:r,toolName:oS});if(!s)return;s.controller.setOpen();let a;try{a=await mx({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);}}),xne=sr({schema:{name:zp,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$1.string(),startIndex:z$1.number(),deleteCount:z$1.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$1.array(z$1.string()).describe(wne),targetSection:Wp.default("main"),parentStepIdChain:z$1.array(z$1.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$1.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=hp({response:n,sessionId:t.sessionId,toolName:zp});if(!r)return;let i=await hx({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&&Ws({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);}}),_ne=sr({schema:{name:Uh,description:`${wE} Use step ids from the active session: the Test Content section returned by ${Zc}, or the inserted/deleted refs returned by ${zp}. 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$1.string(),fromStep:UE,toStep:HE.optional(),targetSection:Wp.default("main"),resetSession:z$1.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z$1.boolean().default(false).describe("Run this invocation without reading or writing step caches.")}},handle:async(e,t,n,o)=>{let r=hp({response:n,sessionId:t.sessionId,toolName:Uh});if(!r)return;r.controller.setOpen(),t.resetSession&&await lx({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,apiKey:Us(),baseUrl:Fr(),controller:r.controller,testContext:r.context,supportsFileOutput:e.supportsFileOutput});let i=Rne(o,e.logger,n,()=>{Ks.touchSession(r.sessionId);}),s=await gx({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});Ws({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);}}),Pne=[G$e,B$e,U$e,H$e];var One=[Sne,bne,Tne,Ane,Ine,_ne,xne];async function V$e({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 cs({logger:t,orgId:r,project:n}),d=await uc({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 yx({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=Wn();Gl(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await V$e({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:d,startIndex:u,endIndex:p}=_ee({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(R=>R.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:iJ}),{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 y={...m,type:"RESOLVED_MODULE",id:randomUUID(),steps:m.steps,inputs:f},T=cloneDeep(c.baseState);T.steps.splice(u,p-u,y),i&&(i.stepLists=T);let{environment:A,stepCacheStorage:E,testId:v}=c.cacheSaveContext,w=e.config.fileFormat==="v2",{cachesToSave:P,snapshotCachesToSave:x}=await kn({stepLists:T,useSnapshotIdentityCache:w,cacheCreationParams:{orgId:a,testId:v,environment:A}});return w&&await E.saveSnapshotCacheEntries({logger:n,entries:x}),await E.saveStepCacheEntries({logger:n,entries:P}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:T,schemaVersion:at}),{module:m}}var Mne=sr({schema:{name:o$,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$1.string().describe(nm),description:z$1.string(),enabled:z$1.boolean().default(true),parameters:z$1.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z$1.record(z$1.string(),z$1.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$1.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z$1.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z$1.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z$1.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=S8({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await yx({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(Y(s));}}});var Qf=[...Pne,...px,...One,Mne,l7,f7,A7,u7];var Nne=Qf.map(e=>e.tool),Sx=new Map(Nne.map(e=>[e.schema.name,e]));async function Lne(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath;await cx(e);let{context:c}=dx({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await Aee({adapter:{getTool:d=>{let u=Sx.get(d);if(!u)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(Sx.keys()).join(", ")}`);return {name:u.schema.name,execute:async({input:p,extra:m})=>await See({context:c,tool:u,input:p,extra:m})}}},sessionManager:Ks,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:DB(e)*2,onShutdown:()=>{Hd();}});}async function GB(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 pee({workerType:"momentic-web-mcp",configPath:p,apiKey:o,serverUrl:r,cliVersion:i,logger:n,buildDaemonArgs:({entryScript:m})=>q$e({entryScript:m,serverUrl:r,configPath:p,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:d,sessionIdleTimeoutMinutes:u})})}async function kne(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e;Bd(r),await GB(e);let{info:i,mcpLogger:s}=kB({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return kI({context:{logger:s},info:i,tools:bee({tools:Nne,resolveDaemonStateForCall:()=>GB(e),logger:s})})}var W$e=30*6e4;async function $B({options:e,toolName:t,input:n,timeoutMs:o=W$e}){Bd(e.serverUrl);let r=Sx.get(t);if(!r)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(Sx.keys()).join(", ")}`);let i=r.schema.inputSchema.parse(n),s=await GB(e);return uB({state:s,toolName:t,input:i,timeoutMs:o})}function q$e({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 jB=async(e,t)=>{try{let{killed:n,failed:o}=await Ks.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 VB(e){let{daemon:t,logger:n}=e,o=uee.safeParse(process.env);if(t&&o.success&&o.data[NI]==="momentic-web-mcp")return Lne({...e,daemonPort:o.data[OI],daemonToken:o.data[MI],daemonSessionId:o.data[LI]});if(Iu(n,true),t)return await kne(e);await cx(e);let{context:r,info:i}=dx(e);return kI({context:r,info:i,tools:Qf,shutdownHandlers:[jB,Hd,async()=>{await ix();}]})}var lA="3.7.3",gn=Rg({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:lA});(async()=>{try{let e=await ya(gn);e.gitBranchName&&gn.addBinding("branch",e.gitBranchName);}catch{}})();var fp=Router();async function Tx(e){return (await of(e,gn)).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)}fp.get("/",mt(async(e,t)=>{let n=nt(),o=await Ns(n),r=await Tx(o);t.status(200).json(r);}));fp.post("/",mt(async(e,t)=>{let n;try{n=Hz.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Gl(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=nt(),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=Dn__default.join(o.rootDir,n.folderPath??Dn__default.dirname(n.testFilePath));if(!rr__default.existsSync(s)||!rr__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await Pv({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));fp.get("/:moduleId/tests",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=nt(),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))j3(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);}));fp.get("/:moduleId",mt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await Ns(nt()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Sc({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));fp.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=Uz.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gl(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=nt(),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=Dn__default.join(o.rootDir,Dn__default.dirname(i.relativePath));if(!rr__default.existsSync(a)||!rr__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=bn(n.name),c=Dn__default.join(a,`${l}.module.yaml`),d=fc({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:u}=await kn({stepLists:{steps:s.steps},createNewCacheIds:true}),p={fileType:xe.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};ma({module:p,filePath:c,projectConfig:o.config,momenticFiles:r});let m={relativeFilePath:Dn__default.relative(o.rootDir,c)};t.status(201).json(m);}));fp.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=$z.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${Y(i)}`});return}let o=nt();if(!(await Ns(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await K3({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));fp.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=Gz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=nt(),r=await Ns(o);await Y3({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var Dne=fp;var cA=Router();cA.get("/",mt(async(e,t)=>{let n=nt(),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 Tx(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));cA.get("/folders",mt(async(e,t)=>{let n=nt(),o=await k3(n);t.status(200).json(o);}));cA.get("/labels",mt(async(e,t)=>{let n=nt(),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);}));cA.post("/in-folder",mt(async(e,t)=>{let n=Lz.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=nt(),[i,s]=await Promise.all([L3(r,o),Ns(r)]),a=Object.values(i.tests),l=await Tx(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 Fne=cA;var zB=Router();zB.get("/",mt((e,t)=>{let n=kv(nt(),gn);t.status(200).json(n);}));zB.get("/names",mt((e,t)=>{let o=nt().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var Bne=zB;var Une=Router();Une.get("/",mt((e,t)=>{let n={userId:Ec(),orgId:Wn(),email:Af(),name:w5(),pylonEmailHash:I5(),cliVersion:lA};t.status(200).json(n);}));var Hne=Une;var WB="mcp-session-id",Gne="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",Ax=Router();function nje(){let e=process.env[Gne];if(!e)return Jd*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(gn.warn({envVar:Gne,rawValue:e,fallback:Jd},"Invalid MCP session idle timeout env var; falling back to default"),Jd*60*1e3):t*60*1e3}function oje(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:lA},r=nt(),i=Us(),s=Fr(),a=gn.child({orgId:Wn(),userId:Ec(),...o}),l=new Ot({baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),c=GS(process.env.MOMENTIC_HEADFUL_BROWSER),d=new or(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),u=Wn(),p=new Ys(l,u,r);return {context:{project:r,orgId:u,logger:a,generator:d,apiClient:l,storage:p,serverId:o.serverId,extractBaseDir:$s(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:qt,knowledgeCitations:[],sessionIdleTimeoutMs:nje(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Vi},info:o}}var Xd={};Ax.post("/",async(e,t)=>{let n=String(e.headers[WB]??"");try{if(n&&Xd[n]){await Xd[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=oje(),i=pB(o,r,Qf),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{Xd[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&Xd[a]&&delete Xd[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});}});Ax.get("/",async(e,t)=>{let n=String(e.headers[WB]??"");if(!n||!Xd[n]){t.status(400).send("Invalid or missing session ID");return}await Xd[n].handleRequest(e,t);});Ax.delete("/",async(e,t)=>{let n=String(e.headers[WB]??"");if(!n||!Xd[n]){t.status(400).send("Invalid or missing session ID");return}let o=Xd[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var jne=Ax;var Vne=Router();Vne.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){gn.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var zne=Vne;var Ex=Router();Ex.get("/",mt(async(e,t)=>{let n=new Map;for(let i of await uk())n.set(i.configFilePath,i);let o=nt();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);}));Ex.get("/current",mt((e,t)=>{let n=nt();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);}));Ex.post("/set",mt(async(e,t)=>{let n;try{n=zz.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}gn.info("Setting local project");try{let o=await nn({configFilePath:n.configFilePath}),r=Vo();if(!r)throw new Error("API client is not initialized.");await Cf({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var Wne=Ex;var qne=Router();qne.get("/",mt((e,t)=>{let n=nt(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var Kne=qne;var Dc=Router();Dc.post("/",mt(async(e,t)=>{let n;try{n=Fz.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=nt(),r=await sA({project:o,input:n});Ws({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}}));Dc.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=nt(),r=await Ns(o),i;try{i=await Zi(Dn__default.join(o.rootDir,n),gn,r),await(await cs({logger:gn,orgId:Wn(),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:gn,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await Lv({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:at,momenticFiles:r,project:o});}catch(s){gn.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));Dc.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=nt(),r=Dn__default.join(o.rootDir,n);if(!rr__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=rr__default.statSync(r),s=await ya(gn),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));Dc.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=Dz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:Jb(e.params.testPath,n,nt()).newRelativeTestPath};t.status(200).json(r);}));Dc.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=kz.parse(e.body);}catch(m){gn.warn({err:m},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${m}`});return}gn.info({testPath:n},"Save received");let r=nt(),i=await Ns(r),s;try{s=Ed(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 kn({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:Wn(),testId:s.id,environment:s.envs?.find(m=>m.default)?.name}}),p=await cs({logger:gn,orgId:Wn(),project:r});a&&await p.saveSnapshotCacheEntries({logger:gn,entries:u}),await p.saveStepCacheEntries({logger:gn,entries:d}),ak({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Dc.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=Vz.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}Jb(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},nt()),t.status(201).json({message:"ok"});}));Dc.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=jz.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${Y(i)}`});return}let r=nt();if(!rr__default.existsSync(Dn__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await J3({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));Dc.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=nt(),r=Dn__default.join(o.rootDir,n);if(!rr__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}rr__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Dc.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=Bz.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gl(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=nt(),i=Dn__default.join(r.rootDir,n);if(!rr__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await je(r),a;try{a=await Zi(i,gn,s);}catch(h){t.status(400).send({error:h.message});return}let l=fc({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=Gn.parse({...a,name:o.name,id:l}),{stepsToSave:d}=await kn({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),u=Dn__default.dirname(i),p=Dn__default.join(u,`${o.name}.test.yaml`);ha({test:{fileType:xe.TEST,...c,...d},filePath:p,projectConfig:r.config,momenticFiles:s});let m={relativeFilePath:Dn__default.relative(r.rootDir,p)};Ws({type:"test_editor:test_duplicated"}),t.status(201).json(m);}));var Yne=Dc;var Jne=z$1.object({name:z$1.string().min(1).describe("Short, human-readable name for the slice you are delegating (used as a label)."),instructions:z$1.string().min(1).describe("Focused, self-contained instructions for the child: which area it should own and what to cover. The child inherits the same input you received but cannot see your conversation, so these instructions must stand alone.")});function Xne(e){return e.kind==="diff"?e.diffSummary:pt`
7490
7490
  You are seeding end-to-end test coverage for this entire application from scratch. There is no diff and no single assigned surface — the whole product is in scope.
7491
7491
 
7492
7492
  Map the application's user-facing surfaces from the codebase, then cover them. Whenever you identify a self-contained area that warrants its own focused pass, delegate it to a child explorer with ${Wl} as described in your instructions, and explore the rest yourself. Fold the children's findings into your final submission so it reflects the whole app.
@@ -8845,7 +8845,7 @@ ${i.length===0?"(none)":l}
8845
8845
  `);for(let l of e){let c=l.files.map(h=>t.get(h)).filter(h=>h!==void 0),d=l.files.map(h=>n.get(h)).filter(h=>h!==void 0),u=vA({bfsSummaries:d}),p=s_({fileSummaries:c,bfsSummaries:u,candidateTestsBlock:a,tokenBudget:r});if(!sse({estimatedTokens:p.estimatedTokens,tokenBudget:r,fileCount:l.files.length})){s.push(l);continue}i.debug({folder:l.folder,files:l.files.length},"Splitting oversized folder group");let m=Math.ceil(l.files.length/2);s.push({folder:`${l.folder} (1/2)`,files:l.files.slice(0,m)},{folder:`${l.folder} (2/2)`,files:l.files.slice(m)});}return s}async function sKe({apiClient:e,groups:t,repository:n,logger:o,insightStore:r}){let i=new Set,s=new Map;for(let p of t){let m=p.folder.split("/").filter(g=>g.length>0),h=[p.folder];for(let g=m.length-1;g>0;g--)h.push(m.slice(0,g).join("/"));s.set(p.folder,h);for(let g of h)i.add(g);}let a=[...i];if(a.length===0)return new Map;let l=50,c=[];try{for(let p=0;p<a.length;p+=l){let m=a.slice(p,p+l),h=r?await r.getInsightsForFolders(m):await e.getCodeInsights({repository:n,folderPaths:m});c.push(...h);}}catch(p){return o.warn({err:p},"Code insights prefetch failed, continuing without KB context"),new Map}o.info({folderCount:a.length,insightCount:c.length},"Code insights prefetch complete");let d=new Map;for(let p of c){let m=d.get(p.folderPath)??[];m.push(p),d.set(p.folderPath,m);}let u=new Map;for(let p of t){let m=s.get(p.folder)??[p.folder],h=[];for(let g of m){let f=d.get(g);f&&h.push(...f);}u.set(p.folder,h);}return u}function aKe(e,t){e?.write(`${t}
8846
8846
  `);}var Vc="/v1/app-graph",d_=class{constructor(t,n){this.apiClient=t;this.logger=n;}async claim(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return F$.parse(n)}async getPlan(t){let n=new URLSearchParams({repository:t.repository,headSha:t.headSha}),o=await this.apiClient.sendRequest(`${Vc}/ai-select/plan?${n.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return U$.parse(o)}async finalize(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return B$.parse(n)}async release(t){await this.apiClient.sendRequest(`${Vc}/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(`${Vc}/ai-select/search/observed-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rO.parse(n)}async searchSegments(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/search/segments`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return rO.parse(n)}async getObservedTest(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/observed-tests/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return H$.parse(n)}async getSegment(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/segments/${encodeURIComponent(t)}`,{method:"GET",retries:2,requestTimeoutMs:1e4});return G$.parse(n)}async listObservedTestsForSegment(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{method:"GET",retries:2,requestTimeoutMs:1e4});return $$.parse(n)}async getCodeInsights(t){let n=await this.apiClient.sendRequest(`${Vc}/ai-select/code-insights`,{method:"POST",body:{repository:t.repository,folderPaths:t.folderPaths},retries:1,requestTimeoutMs:1e4});return j$.parse(n).insights}},lKe=2e3,Ise=12e4;async function xse(e){let t=Date.now()+(e.timeoutMs??Ise),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??Ise}ms`);e.logger.info({attempt:n,claimedBy:o.claimedBy},"ai-select plan computing on another shard; polling"),await Ze(o.retryAfterMs??lKe);}}async function dKe(e){try{return await t_({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return k0({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function iU(e){return De({name:"ai_select.resolve_plan",root:true,attributes:{"momentic.repository":e.repository},fn:()=>uKe(e)})}async function uKe(e){let t=new d_(e.apiClient,e.logger),n=e.agentOutputStream?St(e.agentOutputStream):St();e.agentOutputStream!==void 0&&!!e.agentOutputStream.isTTY&&e.agentOutputStream.write(`Selecting tests to run with AI:
8847
8847
  `);let r;try{r=await De({name:"ai_select.assemble_diff",attributes:{"momentic.explicit_base":e.explicitBase??"auto"},fn:()=>go({text:"Analyzing code changes...",screen:n},()=>t_({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger}))});}catch(p){let m=p instanceof ah?p.message:`Could not assemble diff against base ref: ${Y(p)}.`,h=kie({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),g=h?await k0({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:h,logger:e.logger}):null;if(g)r=g;else {let f=e.config?.onBaseUnavailable??"use-head";switch(f){case "fail":throw new ah(`AI selection base unavailable and ai.select.onBaseUnavailable is "fail": ${m}`);case "run-all":return {kind:"run-all",reason:m,diff:null};case "use-head":{let y=await dKe(e);if(y===null)return {kind:"run-all",reason:`Could not assemble diff against the HEAD commit's parent: ${m}`,diff:null};r=y;break}default:return Je(f)}}}if(e.logger.info({changedFiles:r.changedFiles.length},"Diff assembled"),r.changedFiles.length===0)return {kind:"run-none",reason:"No source-code changes detected between base and head.",diff:r};let i=createHash("sha256").update(e.candidateTests.map(p=>p.testPath).sort().join(`
8848
- `)).digest("hex").slice(0,12),s=`${r.headSha}:${i}`,a=r.repoRoot,l=Dn__default.relative(a,e.repoRoot),c=l?e.candidateTests.map(p=>({...p,testPath:Dn__default.posix.join(l.split(Dn__default.sep).join("/"),p.testPath)})):e.candidateTests;if(e.dryRun){let p=await oU({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:r,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:r_(a),agentOutputStream:e.agentOutputStream});return p.fallbackToRunAll?{kind:"run-all",reason:p.userSummary,diff:r}:{kind:"ready",plan:{version:2,userSummary:p.userSummary,toolCallCount:p.toolCallCount,selectedTests:p.selectedTests,anchorSegmentIds:p.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap??null},generatedAt:new Date().toISOString()},planId:`dry-run-${s}`,mode:"SELECTED",diff:r}}let d=await xse({client:t,claim:{repository:e.repository,headSha:s,baseRef:r.baseRef,changedFiles:r.changedFiles.map(p=>p.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(d.kind==="ready")return e.logger.info({planId:d.planId,planSize:d.plan.selectedTests.length,suiteHash:i},"ai-select: reusing cached plan from server"),{kind:"ready",plan:d.plan,planId:d.planId,mode:"SELECTED",diff:r};let u=await oU({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:r,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:r_(a),agentOutputStream:e.agentOutputStream});if(u.fallbackToRunAll)return await t.release(d.selectionPlanKey),{kind:"run-all",reason:u.userSummary,diff:r};try{e.logger.info({selectedCount:u.selectedTests.length,durationMs:u.totalDurationMs,suiteHash:i},"ai-select: computed fresh plan");let p=await t.finalize({selectionPlanKey:d.selectionPlanKey,repository:e.repository,headSha:s,mode:"SELECTED",userSummary:u.userSummary,toolCallCount:u.toolCallCount,selectedTests:u.selectedTests,anchorSegmentIds:u.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap}});return {kind:"ready",plan:p.plan,planId:p.planId,mode:"SELECTED",diff:r}}catch(p){return e.logger.error({err:p},"ai-select finalize failed; falling back to run-all"),await t.release(d.selectionPlanKey),{kind:"run-all",reason:`Could not record selection plan: ${Y(p)}.`,diff:r}}}function ch(e){let t=e??gKe();return _se()&&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 gKe(){let e=_se(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var _se=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function u_(e,t=true,n=false){let o=bKe(e),r=await yKe.which(o[0],true),i=o.slice(1),s=fKe.exec(SKe(r),i,{delay:100,silent:n});if(t)return s}var Pse="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function TKe(e,{context:t}){return e instanceof zn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${Pse}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${Y(e)}`}function Ose(e){return e instanceof zn?e.rawError.includes("Resource not accessible by integration")?Pse:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":Y(e)}function Mse(e,t){C.error(TKe(e,t));}function p_(e){return Nse(e,"runs","run")}function sU(e){return Nse(e,"run-groups","run group")}function Nse(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?EKe(o,t,n):o;if(!z$1.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 EKe(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 m_(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(CKe()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Zt="3.7.2",{checkCLIVersion:Gr,getLatestCLIVersion:Lse}=u5({packageName:"momentic",currentVersion:Zt,changelogUrl:"https://github.com/momentic-ai/cli/blob/main/CHANGELOG.md",updateCommand:"npx momentic@latest upgrade"});vOe("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:Zd,setAnalyticsIdentity:h_,shutdownAnalytics:kse}=VC({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:f5});async function it(){try{await Te(Promise.all([$C(),_t.flush(),kse(),XC()]),{milliseconds:5e3});}catch{}}async function dh({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=>rr__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(!rr__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let m;try{m=rr__default.statSync(p).isDirectory();}catch(g){a.warn({err:g},`Skipping path ${p} because it cannot be read`);return}let h=Dn__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 er("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=Dn__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 Zi(d,Se,t);if(Sf.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:Dn__default.relative(n.rootDir,d)}}catch(u){a.error(`Failed to read and resolve test at '${d}': ${Y(u)}`),process.exit(1);}});return compact(await Promise.all(c))}function Fse({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 Bse({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}var Use=()=>process.exit(130),Hse=()=>process.exit(143);process.on("SIGINT",Use);process.on("SIGTERM",Hse);function wA(){process.off("SIGINT",Use),process.off("SIGTERM",Hse);}async function Gse({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 ni({orgId:e,s:l,localTools:t,logger:n,context:r});}return i}var $se=new Set;async function jse({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:y,browserTypeOverride:T,attemptedRemoteBrowserProviders:A}){let E={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:Se,mode:o.mode,runner:o.runner},{controller:v,context:w}=await eA({baseUrl:e,envName:t,test:r,variables:c,logger:d,orgId:l,localBrowserConfig:m,aiSettings:h,customHeaders:u,codeEvalTools:s,storage:i,enricher:new Pd(E,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:T,callbacks:{onNetworkPage:P=>f.onNetworkPage(P),onNetworkLogs:P=>f.onNetworkLogs(P)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:P,timestamp:x})=>{f.setActiveVideo(P,x);}}:void 0,validateBrowserType:P=>{Tb(P)||(Se.warn({browserType:P,testName:r.name},"Browser required by test does not appear to be installed"),!$se.has(P)&&($se.add(P),C.warn(`Browser ${P} does not appear to be installed. Run '${Kp(P)}' if you hit launch errors.`)));},createRemoteBrowserConnection:m.remoteBrowser?async()=>{let P=await o.createRemoteBrowserConnection({runId:y,attemptedProviders:A});return P.provider&&A?.push(P.provider),P}:void 0});try{await tx({orgId:l,test:r,testInputs:p,localTools:s,logger:d,context:w});}catch(P){try{await v.browser.cleanup();}catch(x){d.error({err:x},"Failed to clean up browser after test input resolution failed");}throw P instanceof tA&&(C.error(P.message),process.exit(1)),P}return {controller:v,context:w}}function Vse({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!am){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 zse({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,recordVideo:r,stepCallbacks:i}){let{orgId:s,userId:a,runId:l}=n,{runTracer:c,runGroupTracer:d,project:u,apiClient:p}=o,{controller:m,context:h,codeEvalTools:g,storageClient:f,logger:y,usageTracker:T,tracer:A}=t,{test:E,orgSettings:v}=e;y.info(`Running test '${E.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:m,storage:f,usageTracker:T,context:h,logger:y,codeEvalTools:g},P={orgId:s,userId:a,runId:l,testMetadata:E,steps:E.steps,beforeSteps:E.beforeSteps,afterSteps:E.afterSteps,orgSettings:v},x={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await Vse({testAdvancedSettings:E.advanced,orgSettings:v.ai,logger:y})};return Hte({fixtures:w,inputs:P,options:x,callbacks:{step:i??{},test:{onTestComplete:async _=>{await m.browser.cleanup({saveRemoteVideos:r!=="on-fail"||_?.status!=="PASSED"}),await g.dispose();}}},testParams:{attemptTracer:A},runParams:{runTracer:c,runGroupTracer:d,project:u,apiClient:p,captureEvent:Zd,abortSignal:o.abortSignal}})}async function Wse(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await OKe(e)}catch(r){Eu(r);let i="Fatal error running test";n.error({err:r},i),C.error({err:r},i);let s=Up(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 OKe(e){let{testDefinition:t,snapshot:n,project:o,apiClient:r,orgId:i,userId:s,urlOverride:a,runGroupTracer:l,logger:c,gitMetadata:d,cacheOptions:u,runId:p,testInputs:m,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=n?{...o.config,...n.metadata.config}:o.config,T=new pf(r,i),A=Nd({logger:c,orgId:i,client:r,gitMetadata:d,regenerateCache:u.regenerateCache,alwaysSaveCache:u.alwaysSaveCache,noCache:n?true:u.noCache,isolateCachesByEnvironment:o.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:u.bustOldestCachePercentage}),E,v;n?(E={envName:n.metadata.environment.envName,resolvedEnv:n.metadata.environment.resolvedEnv,environmentVariables:{...n.metadata.environment.variables},baseUrl:n.metadata.environment.baseUrl},v={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(E=mf({test:t,envNameOverride:e.envName,urlOverride:a,resolveEnv:Z=>Rd(Z,o,c)}),v=await uc({cacheStorage:A,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:E.envName,useSnapshotIdentityCache:o.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:P,environmentVariables:x,baseUrl:R}=E,_=v.steps,O=v.beforeSteps??void 0,D=v.afterSteps??void 0,U=await l.startRun({logger:c,runId:p,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:R,environmentName:w,schemaVersion:t.schemaVersion,resolvedInputs:m,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai}),G=c.child(U.loggerBindings||{});Object.entries(U.envVarBindings||{}).forEach(([Z,j])=>{x[Z]=j;});let ne=await MKe({...e,effectiveConfig:y,variables:x,envName:w,resolvedEnv:P,baseUrl:R,storageClient:T,tracer:U,runGroupTracer:l,logger:G,cacheStorage:A,stepsWithCaches:_,beforeStepsWithCaches:O,afterStepsWithCaches:D,usageTracker:f});return await U.finish({logger:c,status:ne.status,finishedAt:ne.finishedAt,failureDetails:ne.failureDetails,failureReason:ne.failureReason,isFlake:ne.isFlake,failureRecoveryDetails:ne.failureRecoveryDetails}),{runId:U.runId,...ne}}async function MKe(e){let{testDefinition:t,effectiveConfig:n,stepsWithCaches:o,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:s,regenerateGoldenFiles:a,apiClient:l,generator:c,baseUrl:d,storageClient:u,orgId:p,userId:m,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:T,resolvedEnv:A,retriesOverride:E,devicePixelRatio:v,logUpdate:w,tracer:P,runGroupTracer:x,logger:R,cacheStorage:_,gitMetadata:O,quarantined:D,quarantinedMetadata:U,usageTracker:G}=e,ne=n,Z=ne.ai?.aiFailureAnalysis??false,j=new Date,W=new sf(s,l,a),V={envName:h,urlOverride:g,customHeaders:f,testInputs:y},ee={...ne.browser||{},...A?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},oe=ee.remoteBrowser===true,H=[],Q,ce=Math.abs(E??t.retries??n.retries??1),Fe=[];R.info({...O,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Oe=0;Oe<=ce;Oe++){let Ie=randomUUID(),ot=await P.startAttempt(Ie),Dt=R.child(ot.loggerBindings||{}),ae={...t,steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Oe!==0&&w("RETRY",`attempt ${Oe+1}/${ce+1}`);let Ce=new Date,We=new Md({httpClient:new Ni({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Dt,mode:l.mode,runner:l.runner}),fakerSeed:ne.advanced?.fakerConstantSeed?$S:void 0});try{let{controller:Ve,context:Be}=await jse({tracer:ot,runId:P.runId,baseUrl:d,envName:h,apiClient:l,devicePixelRatio:v,logger:Dt,storageClient:u,codeEvalTools:We,test:ae,generator:c,orgId:p,variables:T,customHeaders:f,testInputs:y,localBrowserConfig:ee,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:H,aiSettings:{...ne.ai||{},...ae.advanced||{}},visualDiffScreenshotStorage:W});e.abortSignal&&(e.abortSignal.aborted?Ve.executeAbortController.abort():e.abortSignal.addEventListener("abort",()=>{Ve.executeAbortController.abort();},{once:!0})),Q=await zse({attemptMetadata:{attemptNumber:Oe+1,orgId:p,userId:m,runId:P.runId},attemptFixtures:{logger:Dt,storageClient:u,usageTracker:G,codeEvalTools:We,context:Be,controller:Ve,tracer:ot},attemptInputs:{test:ae,orgSettings:ne},runFixtures:{runTracer:P,runGroupTracer:x,project:s,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart}});let xr=new Date,cr={logger:R,cacheStorage:_,orgId:p,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:ae.steps,beforeSteps:ae.beforeSteps,afterSteps:ae.afterSteps}};await ym({logger:R,cacheStorage:_,orgId:p,testId:t.id,environment:h,stepLists:cr.updatedStepsWithCaches,useSnapshotIdentityCache:s.config.fileFormat==="v2"}),Q?.status==="PASSED"?await Sm(cr):Q?.status==="FAILED"&&Oe===ce&&await Hg(cr),await ot.finish({logger:Dt,result:Q}),Fe.unshift(Q.status);let $i=await Gse({orgId:p,codeEvalTools:We,logger:Dt,outputDefinitions:t.outputs??[],testContext:Be}),Js=oj(Fe),mi=Oe+1;if(Q.status!=="FAILED")return {...Q,runAttemptId:Ie,parameters:V,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:xr,attempts:mi,baseUrl:d,outputs:$i,isFlake:Js,quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe};let ji=Q.failedStepResult,Io=ji?.message||"Unknown failure",Pn=ji?.failureReason??DG(Io)??"UnknownError",hi=Dt.child({failureReason:Pn,errorMessage:Io,numAttempts:(ce+1).toString(),name:ae.name});if(Oe<ce){hi.warn(`Retrying failed execution attempt for run: ${Io}`);continue}hi.error(`Test failed after all exhausting attempts: ${Io}`);let Fo=new Error(Io),dr={errorMessage:Io,errorStack:Fo.stack},gi;if(ne.ai?.classification?.enabled===!0){let On=ji?.failureClassification;On||(e.onStepStart?.(Lp),On=await FI({runTracer:P,runGroupTracer:x,outputDir:e.outputDir,orgId:p,project:s,generator:c,apiClient:l,logger:R,testPlatform:"web",aiSettings:ne.ai,captureEvent:Zd,abortSignal:e.abortSignal,failedStepMessage:ji?.message})),On&&(gi=On.classification.category,Pn=On.classification.category,dr.classification={reason:On.classification.category,secondaryCategories:On.classification.secondaryCategories,summary:On.classification.reasoning,recoverable:On.classification.recoverable,confidence:On.classification.confidence,action:On.action,citations:On.classification.citations,source:"v2"});}else if(Z){let On;try{if(Q.results&&Q.results.length>0){e.onStepStart?.(Lp);let{classification:L,aiFailureReason:pe}=await AX({logger:Dt,browserStateStorage:ot,generator:c,fullResults:Q,failureReason:Pn,error:Fo,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});On=L,gi=pe;}}catch(L){Dt.warn({err:L},"Failed to classify test results");}On&&(dr.classification=On,Pn=gi??Pn,dr.classification.source="v1");}return {...Q,runAttemptId:Ie,parameters:V,failureDetails:dr,failureReason:Pn,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:xr,attempts:Oe+1,baseUrl:d,outputs:$i,quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe}}catch(Ve){let Be=`Encountered fatal platform error while running test '${ae.name}'`;Dt.error({err:Ve},Be),C.error({err:Ve},Be);let xr=Up(Ve);return await ot.finish({logger:Dt,result:{status:"FAILED"}}),{status:"FAILED",failureDetails:{errorMessage:xr.message,errorStack:xr.stack},failureReason:"InternalPlatformError",runAttemptId:Ie,results:[],parameters:V,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:new Date,attempts:Oe+1,baseUrl:d,outputs:{},quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe}}}throw new Error("This code should not be reachable")}var qse=3e4;async function Sy({timeoutMinutes:e,cancel:t,run:n}){let o=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");wA(),process.once("SIGINT",o),process.once("SIGTERM",r);let i;e!==void 0&&e>0&&(i=setTimeout(()=>void t(`Timeout of ${e} minute(s) reached`),e*60*1e3));try{return await n()}finally{process.off("SIGINT",o),process.off("SIGTERM",r),clearTimeout(i);}}var yy=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,n=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();n&&await Te(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:qse}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${qse}ms reached while waiting for running tests to settle.`);});let o=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||o.has(r.activeRun.runId))continue;let{activeRun:i}=r,s={results:[],beforeResults:[],afterResults:[],test:i.testDefinition,filePath:i.testDefinition.relativeFilePath,startedAt:i.startedAt,lastAttemptStartedAt:i.startedAt,finishedAt:new Date,status:"CANCELLED",attempts:0,runId:i.runId,cancellationReason:t,quarantined:i.quarantined,quarantinedMetadata:i.quarantinedMetadata,parameters:{testInputs:i.inputs,envName:this.params.envName,urlOverride:this.params.urlOverride,customHeaders:this.params.customHeaders},outputs:{}};this.cancelledRunsById.set(i.runId,s);}}resolveNext(){if(this.params.next)return this.params.next;let t=[...this.params.testsToRun??[]];return ()=>Promise.resolve(t.shift())}async run(){let t=this.resolveNext(),{parallel:n,reporter:o,runGroupTracer:r,runGroupLogger:i,logger:s,project:a,client:l,generator:c,orgId:d,userId:u,devicePixelRatio:p,outputDir:m,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:T,gitMetadata:A,cacheOptions:E,browserTypeOverride:v,remoteBrowserOverride:w,onResult:P,onFatal:x}=this.params,R=0,_=true;for(;_;){let O=Object.values(this.runQueue);if(O.length===n&&await Promise.race(O.map(Z=>Z.promise)),this.cancelled){_=false;continue}let D=await t();if(D===void 0){_=false;continue}let U=`test-${R++}`,G={...D,startedAt:new Date},ne=new AbortController;this.runQueue[U]={done:false,activeRun:G,abortController:ne,promise:(async({inputs:Z,quarantined:j,quarantinedMetadata:W,testDefinition:V,snapshot:ee,runId:oe})=>{let H=V.relativeFilePath.includes("..")?V.fullFilePath:V.relativeFilePath;o.onTestBegin(H);let Q=i.child({testId:V.id,runId:oe}),ce=new Sd({logger:Q,reporter:new _d(l),runType:"test-run",runId:oe,testMetadata:V,suiteMetadata:void 0,runner:"test-runner"});try{let Fe=await Wse({testDefinition:V,snapshot:ee,project:a,testInputs:Z,quarantined:j,quarantinedMetadata:W,orgId:d,userId:u,runId:oe,devicePixelRatio:p,apiClient:l,runGroupTracer:r,outputDir:m,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:T,logUpdate:(Oe,Ie)=>o.onTestStatus(H,Oe,Ie),...X4(o,H),logger:Q,gitMetadata:A,cacheOptions:E,usageTracker:ce,browserTypeOverride:v,remoteBrowserOverride:w,recordVideo:this.params.recordVideo,abortSignal:ne.signal});o.onTestEnd(H,Fe.status,{recovered:Fe.status==="PASSED"&&!!Fe.failureRecoveryDetails?.attempts}),this.runResults.push(Fe),P?.(Fe);}catch(Fe){let Oe=`Encountered unexpected fatal error when running test '${V.name}'`;Q.error({err:Fe},Oe),C.error({err:Fe},Oe),Eu(Fe),x?.(Fe),await this.cancel("Fatal error occurred",false);}finally{let Fe=this.runQueue[U];Fe&&(Fe.done=true),await ce.flush(s),delete this.runQueue[U];}})(G)};}return await Promise.allSettled(Object.values(this.runQueue).map(O=>O.promise)),{runResults:this.runResults,cancelledRunsById:this.cancelledRunsById,cancelled:this.cancelled,cancellationReason:this.cancellationReason}}};function cU(e){return createHash("sha1").update(e).digest("hex")}var LKe=["tab","view","mode","step"],kKe=[/^[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 DKe(e){return kKe.some(t=>t.test(e))}function Kse(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??LKe),i=n.pathname.split("/").map(c=>c.length>0&&DKe(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 FKe=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),BKe=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,UKe=[/\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],Yse=new Set(["h1","h2","h3","h4","h5","h6"]),HKe=new Set(["input","select","textarea"]);function GKe(e){let t=e;for(let n of UKe)t=t.replace(n,"{id}");return t}function Jse(e){return GKe(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function $Ke(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 jKe(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":BKe.test(t)?"@gen":Jse(t)}function Xse(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=>FKe.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=jKe(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"||Yse.has(o)?n.tokens.push(`label=${Jse(a)}`):n.tokens.push($Ke(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(HKe.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(Yse.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])Xse(l,t+1,n);}function Qse(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return Xse(e,0,t),{tokens:t.tokens,counts:t.counts}}function Zse(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 g_=128,VKe=4294967295,zKe=(()=>{let e=[];for(let t=0;t<g_;t++)e.push(Zse(`perm:${t}`,0));return e})();function eae(e){let t=new Uint32Array(g_);for(let o=0;o<g_;o++)t[o]=VKe;let n=new Set(e);for(let o of n)for(let r=0;r<g_;r++){let i=Zse(o,zKe[r]);i<t[r]&&(t[r]=i);}return t}var qKe=32;function dU(e){let t=Kse(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=Qse(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=eae(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,qKe),minhash:Array.from(i),canonicalUrl:t}}var KKe=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]),_n="\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 Ui={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function f_(e){return e>=55296&&e<=57343}function tae(e){return e>=56320&&e<=57343}function nae(e,t){return (e-55296)*1024+9216+t}function y_(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function S_(e){return e>=64976&&e<=65007||KKe.has(e)}var ie;(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";})(ie||(ie={}));var JKe=65536,b_=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=JKe,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(tae(n))return this.pos++,this._addGap(),nae(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,M.EOF;return this._err(ie.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,f_(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){y_(t)?this._err(ie.controlCharacterInInputStream):S_(t)&&this._err(ie.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var zt;(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";})(zt||(zt={}));function T_(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 QKe=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 oae(e){return e>=55296&&e<=57343||e>1114111?65533:QKe.get(e)??e}function rae(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 uU=rae("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 di;(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";})(di||(di={}));var bo;(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";})(bo||(bo={}));var iae=32;function pU(e){return e>=bo.ZERO&&e<=bo.NINE}function ZKe(e){return e>=bo.UPPER_A&&e<=bo.UPPER_F||e>=bo.LOWER_A&&e<=bo.LOWER_F}function eYe(e){return e>=bo.UPPER_A&&e<=bo.UPPER_Z||e>=bo.LOWER_A&&e<=bo.LOWER_Z||pU(e)}function tYe(e){return e===bo.EQUALS||eYe(e)}var Ir;(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";})(Ir||(Ir={}));var zc;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(zc||(zc={}));var A_=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=Ir.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=zc.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ir.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case Ir.EntityStart:return t.charCodeAt(n)===bo.NUM?(this.state=Ir.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=Ir.NamedEntity,this.stateNamedEntity(t,n));case Ir.NumericStart:return this.stateNumericStart(t,n);case Ir.NumericDecimal:return this.stateNumericDecimal(t,n);case Ir.NumericHex:return this.stateNumericHex(t,n);case Ir.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|iae)===bo.LOWER_X?(this.state=Ir.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=Ir.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(pU(o)||ZKe(o)){let r=o<=bo.NINE?o-bo.ZERO:(o|iae)-bo.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(pU(o))this.result=this.result*10+(o-bo.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===bo.SEMI)this.consumed+=1;else if(this.decodeMode===zc.Strict)return 0;return this.emitCodePoint(oae(this.result),this.consumed),this.errors&&(t!==bo.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&di.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&di.FLAG13){let a=(r&di.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&di.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&di.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===bo.SEMI&&i!==0&&r&di.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=nYe(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===zc.Attribute&&(i===0||tYe(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&di.VALUE_LENGTH)>>14,i!==0){if(s===bo.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==zc.Strict&&!(r&di.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]&di.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]&~(di.VALUE_LENGTH|di.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case Ir.NamedEntity:return this.result!==0&&(this.decodeMode!==zc.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ir.NumericDecimal:return this.emitNumericEntity(0,2);case Ir.NumericHex:return this.emitNumericEntity(0,3);case Ir.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ir.EntityStart:return 0}}};function nYe(e,t,n,o){let r=(t&di.BRANCH_LENGTH)>>7,i=t&di.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 ge;(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/";})(ge||(ge={}));var eu;(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";})(eu||(eu={}));var Hi;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Hi||(Hi={}));var X;(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";})(X||(X={}));var S;(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";})(S||(S={}));var oYe=new Map([[X.A,S.A],[X.ADDRESS,S.ADDRESS],[X.ANNOTATION_XML,S.ANNOTATION_XML],[X.APPLET,S.APPLET],[X.AREA,S.AREA],[X.ARTICLE,S.ARTICLE],[X.ASIDE,S.ASIDE],[X.B,S.B],[X.BASE,S.BASE],[X.BASEFONT,S.BASEFONT],[X.BGSOUND,S.BGSOUND],[X.BIG,S.BIG],[X.BLOCKQUOTE,S.BLOCKQUOTE],[X.BODY,S.BODY],[X.BR,S.BR],[X.BUTTON,S.BUTTON],[X.CAPTION,S.CAPTION],[X.CENTER,S.CENTER],[X.CODE,S.CODE],[X.COL,S.COL],[X.COLGROUP,S.COLGROUP],[X.DD,S.DD],[X.DESC,S.DESC],[X.DETAILS,S.DETAILS],[X.DIALOG,S.DIALOG],[X.DIR,S.DIR],[X.DIV,S.DIV],[X.DL,S.DL],[X.DT,S.DT],[X.EM,S.EM],[X.EMBED,S.EMBED],[X.FIELDSET,S.FIELDSET],[X.FIGCAPTION,S.FIGCAPTION],[X.FIGURE,S.FIGURE],[X.FONT,S.FONT],[X.FOOTER,S.FOOTER],[X.FOREIGN_OBJECT,S.FOREIGN_OBJECT],[X.FORM,S.FORM],[X.FRAME,S.FRAME],[X.FRAMESET,S.FRAMESET],[X.H1,S.H1],[X.H2,S.H2],[X.H3,S.H3],[X.H4,S.H4],[X.H5,S.H5],[X.H6,S.H6],[X.HEAD,S.HEAD],[X.HEADER,S.HEADER],[X.HGROUP,S.HGROUP],[X.HR,S.HR],[X.HTML,S.HTML],[X.I,S.I],[X.IMG,S.IMG],[X.IMAGE,S.IMAGE],[X.INPUT,S.INPUT],[X.IFRAME,S.IFRAME],[X.KEYGEN,S.KEYGEN],[X.LABEL,S.LABEL],[X.LI,S.LI],[X.LINK,S.LINK],[X.LISTING,S.LISTING],[X.MAIN,S.MAIN],[X.MALIGNMARK,S.MALIGNMARK],[X.MARQUEE,S.MARQUEE],[X.MATH,S.MATH],[X.MENU,S.MENU],[X.META,S.META],[X.MGLYPH,S.MGLYPH],[X.MI,S.MI],[X.MO,S.MO],[X.MN,S.MN],[X.MS,S.MS],[X.MTEXT,S.MTEXT],[X.NAV,S.NAV],[X.NOBR,S.NOBR],[X.NOFRAMES,S.NOFRAMES],[X.NOEMBED,S.NOEMBED],[X.NOSCRIPT,S.NOSCRIPT],[X.OBJECT,S.OBJECT],[X.OL,S.OL],[X.OPTGROUP,S.OPTGROUP],[X.OPTION,S.OPTION],[X.P,S.P],[X.PARAM,S.PARAM],[X.PLAINTEXT,S.PLAINTEXT],[X.PRE,S.PRE],[X.RB,S.RB],[X.RP,S.RP],[X.RT,S.RT],[X.RTC,S.RTC],[X.RUBY,S.RUBY],[X.S,S.S],[X.SCRIPT,S.SCRIPT],[X.SEARCH,S.SEARCH],[X.SECTION,S.SECTION],[X.SELECT,S.SELECT],[X.SOURCE,S.SOURCE],[X.SMALL,S.SMALL],[X.SPAN,S.SPAN],[X.STRIKE,S.STRIKE],[X.STRONG,S.STRONG],[X.STYLE,S.STYLE],[X.SUB,S.SUB],[X.SUMMARY,S.SUMMARY],[X.SUP,S.SUP],[X.TABLE,S.TABLE],[X.TBODY,S.TBODY],[X.TEMPLATE,S.TEMPLATE],[X.TEXTAREA,S.TEXTAREA],[X.TFOOT,S.TFOOT],[X.TD,S.TD],[X.TH,S.TH],[X.THEAD,S.THEAD],[X.TITLE,S.TITLE],[X.TR,S.TR],[X.TRACK,S.TRACK],[X.TT,S.TT],[X.U,S.U],[X.UL,S.UL],[X.SVG,S.SVG],[X.VAR,S.VAR],[X.WBR,S.WBR],[X.XMP,S.XMP]]);function uh(e){var t;return (t=oYe.get(e))!==null&&t!==void 0?t:S.UNKNOWN}var Ae=S,sae={[ge.HTML]:new Set([Ae.ADDRESS,Ae.APPLET,Ae.AREA,Ae.ARTICLE,Ae.ASIDE,Ae.BASE,Ae.BASEFONT,Ae.BGSOUND,Ae.BLOCKQUOTE,Ae.BODY,Ae.BR,Ae.BUTTON,Ae.CAPTION,Ae.CENTER,Ae.COL,Ae.COLGROUP,Ae.DD,Ae.DETAILS,Ae.DIR,Ae.DIV,Ae.DL,Ae.DT,Ae.EMBED,Ae.FIELDSET,Ae.FIGCAPTION,Ae.FIGURE,Ae.FOOTER,Ae.FORM,Ae.FRAME,Ae.FRAMESET,Ae.H1,Ae.H2,Ae.H3,Ae.H4,Ae.H5,Ae.H6,Ae.HEAD,Ae.HEADER,Ae.HGROUP,Ae.HR,Ae.HTML,Ae.IFRAME,Ae.IMG,Ae.INPUT,Ae.LI,Ae.LINK,Ae.LISTING,Ae.MAIN,Ae.MARQUEE,Ae.MENU,Ae.META,Ae.NAV,Ae.NOEMBED,Ae.NOFRAMES,Ae.NOSCRIPT,Ae.OBJECT,Ae.OL,Ae.P,Ae.PARAM,Ae.PLAINTEXT,Ae.PRE,Ae.SCRIPT,Ae.SECTION,Ae.SELECT,Ae.SOURCE,Ae.STYLE,Ae.SUMMARY,Ae.TABLE,Ae.TBODY,Ae.TD,Ae.TEMPLATE,Ae.TEXTAREA,Ae.TFOOT,Ae.TH,Ae.THEAD,Ae.TITLE,Ae.TR,Ae.TRACK,Ae.UL,Ae.WBR,Ae.XMP]),[ge.MATHML]:new Set([Ae.MI,Ae.MO,Ae.MN,Ae.MS,Ae.MTEXT,Ae.ANNOTATION_XML]),[ge.SVG]:new Set([Ae.TITLE,Ae.FOREIGN_OBJECT,Ae.DESC]),[ge.XLINK]:new Set,[ge.XML]:new Set,[ge.XMLNS]:new Set},IA=new Set([Ae.H1,Ae.H2,Ae.H3,Ae.H4,Ae.H5,Ae.H6]);new Set([X.STYLE,X.SCRIPT,X.XMP,X.IFRAME,X.NOEMBED,X.NOFRAMES,X.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 ui={DATA:k.DATA,RCDATA:k.RCDATA,RAWTEXT:k.RAWTEXT,SCRIPT_DATA:k.SCRIPT_DATA,PLAINTEXT:k.PLAINTEXT,CDATA_SECTION:k.CDATA_SECTION};function iYe(e){return e>=M.DIGIT_0&&e<=M.DIGIT_9}function xA(e){return e>=M.LATIN_CAPITAL_A&&e<=M.LATIN_CAPITAL_Z}function sYe(e){return e>=M.LATIN_SMALL_A&&e<=M.LATIN_SMALL_Z}function _p(e){return sYe(e)||xA(e)}function aae(e){return _p(e)||iYe(e)}function E_(e){return e+32}function cae(e){return e===M.SPACE||e===M.LINE_FEED||e===M.TABULATION||e===M.FORM_FEED}function lae(e){return cae(e)||e===M.SOLIDUS||e===M.GREATER_THAN_SIGN}function aYe(e){return e===M.NULL?ie.nullCharacterReference:e>1114111?ie.characterReferenceOutsideUnicodeRange:f_(e)?ie.surrogateCharacterReference:S_(e)?ie.noncharacterCharacterReference:y_(e)||e===M.CARRIAGE_RETURN?ie.controlCharacterReference:null}var _A=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 b_(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new A_(uU,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ie.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(ie.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=aYe(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:zt.START_TAG,tagName:"",tagID:S.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:zt.END_TAG,tagName:"",tagID:S.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:zt.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:zt.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(T_(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(ie.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=uh(t.tagName),t.type===zt.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ie.endTagWithAttributes),t.selfClosing&&this._err(ie.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 zt.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case zt.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case zt.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:zt.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=cae(t)?zt.WHITESPACE_CHARACTER:t===M.NULL?zt.NULL_CHARACTER:zt.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(zt.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=k.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?zc.Attribute:zc.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(ie.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(ie.unexpectedNullCharacter),this._emitChars(_n);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(ie.unexpectedNullCharacter),this._emitChars(_n);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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case M.NULL:{this._err(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(_p(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(ie.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);break}case M.EOF:{this._err(ie.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ie.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=k.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(_p(t))this._createEndTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.GREATER_THAN_SIGN:{this._err(ie.missingEndTagName),this.state=k.DATA;break}case M.EOF:{this._err(ie.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.tagName+=_n;break}case M.EOF:{this._err(ie.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(xA(t)?E_(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){_p(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){_p(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){_p(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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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:_p(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){_p(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(Ui.SCRIPT,false)&&lae(this.preprocessor.peek(Ui.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<Ui.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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(Ui.SCRIPT,false)&&lae(this.preprocessor.peek(Ui.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<Ui.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(ie.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(ie.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case M.NULL:{this._err(ie.unexpectedNullCharacter),this.currentAttr.name+=_n;break}default:this.currentAttr.name+=String.fromCodePoint(xA(t)?E_(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(ie.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(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:case M.EQUALS_SIGN:case M.GRAVE_ACCENT:{this._err(ie.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case M.EOF:{this._err(ie.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(ie.eofInTag),this._emitEOFToken();break}default:this._err(ie.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(ie.eofInTag),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.data+=_n;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(Ui.DASH_DASH,true)?(this._createCommentToken(Ui.DASH_DASH.length+1),this.state=k.COMMENT_START):this._consumeSequenceIfMatch(Ui.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(Ui.DOCTYPE.length+1),this.state=k.DOCTYPE):this._consumeSequenceIfMatch(Ui.CDATA_START,true)?this.inForeignNode?this.state=k.CDATA_SECTION:(this._err(ie.cdataInHtmlContent),this._createCommentToken(Ui.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=k.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ie.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(ie.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(ie.abruptClosingOfEmptyComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.data+=_n;break}case M.EOF:{this._err(ie.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(ie.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(ie.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(ie.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(ie.incorrectlyClosedComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ie.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(ie.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.missingWhitespaceBeforeDoctypeName),this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(xA(t))this._createDoctypeToken(String.fromCharCode(E_(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(ie.unexpectedNullCharacter),this._createDoctypeToken(_n),this.state=k.DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.name+=_n;break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(xA(t)?E_(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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(Ui.PUBLIC,false)?this.state=k.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(Ui.SYSTEM,false)?this.state=k.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ie.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(ie.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.publicId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.publicId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.systemId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.systemId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.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(ie.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()&&aae(this.preprocessor.peek(1))?k.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){aae(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===M.SEMICOLON&&this._err(ie.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var mae=new Set([S.DD,S.DT,S.LI,S.OPTGROUP,S.OPTION,S.P,S.RB,S.RP,S.RT,S.RTC]),dae=new Set([...mae,S.CAPTION,S.COLGROUP,S.TBODY,S.TD,S.TFOOT,S.TH,S.THEAD,S.TR]),C_=new Set([S.APPLET,S.CAPTION,S.HTML,S.MARQUEE,S.OBJECT,S.TABLE,S.TD,S.TEMPLATE,S.TH]),lYe=new Set([...C_,S.OL,S.UL]),cYe=new Set([...C_,S.BUTTON]),uae=new Set([S.ANNOTATION_XML,S.MI,S.MN,S.MO,S.MS,S.MTEXT]),pae=new Set([S.DESC,S.FOREIGN_OBJECT,S.TITLE]),dYe=new Set([S.TR,S.TEMPLATE,S.HTML]),uYe=new Set([S.TBODY,S.TFOOT,S.THEAD,S.TEMPLATE,S.HTML]),pYe=new Set([S.TABLE,S.TEMPLATE,S.HTML]),mYe=new Set([S.TD,S.TH]),R_=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=S.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===S.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===ge.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])!==ge.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(IA,ge.HTML);}popUntilTableCellPopped(){this.popUntilPopped(mYe,ge.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(pYe,ge.HTML);}clearBackToTableBodyContext(){this.clearBackTo(uYe,ge.HTML);}clearBackToTableRowContext(){this.clearBackTo(dYe,ge.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]===S.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]===S.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 ge.HTML:{if(r===t)return true;if(n.has(r))return false;break}case ge.SVG:{if(pae.has(r))return false;break}case ge.MATHML:{if(uae.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,C_)}hasInListItemScope(t){return this.hasInDynamicScope(t,lYe)}hasInButtonScope(t){return this.hasInDynamicScope(t,cYe)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case ge.HTML:{if(IA.has(n))return true;if(C_.has(n))return false;break}case ge.SVG:{if(pae.has(n))return false;break}case ge.MATHML:{if(uae.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===ge.HTML)switch(this.tagIDs[n]){case t:return true;case S.TABLE:case S.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===ge.HTML)switch(this.tagIDs[t]){case S.TBODY:case S.THEAD:case S.TFOOT:return true;case S.TABLE:case S.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===ge.HTML)switch(this.tagIDs[n]){case t:return true;case S.OPTION:case S.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&mae.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&dae.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&dae.has(this.currentTagId);)this.pop();}};var Cl;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cl||(Cl={}));var hae={type:Cl.Marker},v_=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===Cl.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(hae);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cl.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Cl.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(hae);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Cl.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Cl.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Cl.Element&&n.element===t)}};var Rl={createDocument(){return {nodeName:"#document",mode:Hi.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};Rl.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(Rl.isTextNode(n)){n.value+=t;return}}Rl.appendChild(e,Rl.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Rl.isTextNode(o)?o.value+=t:Rl.insertBefore(e,Rl.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 fae="html",hYe="about:legacy-compat",gYe="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",yae=["+//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//"],fYe=[...yae,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],yYe=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Sae=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],SYe=[...Sae,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function gae(e,t){return t.some(n=>e.startsWith(n))}function bae(e){return e.name===fae&&e.publicId===null&&(e.systemId===null||e.systemId===hYe)}function Tae(e){if(e.name!==fae)return Hi.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===gYe)return Hi.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),yYe.has(n))return Hi.QUIRKS;let o=t===null?fYe:yae;if(gae(n,o))return Hi.QUIRKS;if(o=t===null?Sae:SYe,gae(n,o))return Hi.LIMITED_QUIRKS}return Hi.NO_QUIRKS}var Aae={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},TYe="definitionurl",AYe="definitionURL",EYe=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])),CYe=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:ge.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:ge.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:ge.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:ge.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:ge.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:ge.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:ge.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:ge.XML}],["xml:space",{prefix:"xml",name:"space",namespace:ge.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:ge.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:ge.XMLNS}]]),RYe=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])),vYe=new Set([S.B,S.BIG,S.BLOCKQUOTE,S.BODY,S.BR,S.CENTER,S.CODE,S.DD,S.DIV,S.DL,S.DT,S.EM,S.EMBED,S.H1,S.H2,S.H3,S.H4,S.H5,S.H6,S.HEAD,S.HR,S.I,S.IMG,S.LI,S.LISTING,S.MENU,S.META,S.NOBR,S.OL,S.P,S.PRE,S.RUBY,S.S,S.SMALL,S.SPAN,S.STRONG,S.STRIKE,S.SUB,S.SUP,S.TABLE,S.TT,S.U,S.UL,S.VAR]);function Eae(e){let t=e.tagID;return t===S.FONT&&e.attrs.some(({name:o})=>o===eu.COLOR||o===eu.SIZE||o===eu.FACE)||vYe.has(t)}function mU(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===TYe){e.attrs[t].name=AYe;break}}function hU(e){for(let t=0;t<e.attrs.length;t++){let n=EYe.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function w_(e){for(let t=0;t<e.attrs.length;t++){let n=CYe.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 Cae(e){let t=RYe.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=uh(e.tagName));}function wYe(e,t){return t===ge.MATHML&&(e===S.MI||e===S.MO||e===S.MN||e===S.MS||e===S.MTEXT)}function IYe(e,t,n){if(t===ge.MATHML&&e===S.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===eu.ENCODING){let r=n[o].value.toLowerCase();return r===Aae.TEXT_HTML||r===Aae.APPLICATION_XML}}return t===ge.SVG&&(e===S.FOREIGN_OBJECT||e===S.DESC||e===S.TITLE)}function Rae(e,t,n,o){return (!o||o===ge.HTML)&&IYe(e,t,n)||(!o||o===ge.MATHML)&&wYe(e,t)}var xYe="hidden",_Ye=8,PYe=3,B;(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";})(B||(B={}));var OYe={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},_ae=new Set([S.TABLE,S.TBODY,S.TFOOT,S.THEAD,S.TR]),wae={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Rl,onParseError:null},FA=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=B.INITIAL,this.originalInsertionMode=B.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={...wae,...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 _A(this.options,this),this.activeFormattingElements=new v_(this.treeAdapter),this.fragmentContextID=o?uh(this.treeAdapter.getTagName(o)):S.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new R_(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={...wae,...n};t??(t=o.treeAdapter.createElement(X.TEMPLATE,ge.HTML,[]));let r=o.treeAdapter.createElement("documentmock",ge.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===S.TEMPLATE&&i.tmplInsertionModeStack.unshift(B.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:OYe,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)===ge.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,ge.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=B.TEXT;}switchToPlaintextParsing(){this.insertionMode=B.TEXT,this.originalInsertionMode=B.IN_BODY,this.tokenizer.state=ui.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)===X.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==ge.HTML))switch(this.fragmentContextID){case S.TITLE:case S.TEXTAREA:{this.tokenizer.state=ui.RCDATA;break}case S.STYLE:case S.XMP:case S.IFRAME:case S.NOEMBED:case S.NOFRAMES:case S.NOSCRIPT:{this.tokenizer.state=ui.RAWTEXT;break}case S.SCRIPT:{this.tokenizer.state=ui.SCRIPT_DATA;break}case S.PLAINTEXT:{this.tokenizer.state=ui.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,ge.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,ge.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(X.HTML,ge.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,S.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===zt.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===S.SVG&&this.treeAdapter.getTagName(n)===X.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===ge.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===S.MGLYPH||t.tagID===S.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,ge.HTML)}_processToken(t){switch(t.type){case zt.CHARACTER:{this.onCharacter(t);break}case zt.NULL_CHARACTER:{this.onNullCharacter(t);break}case zt.COMMENT:{this.onComment(t);break}case zt.DOCTYPE:{this.onDoctype(t);break}case zt.START_TAG:{this._processStartTag(t);break}case zt.END_TAG:{this.onEndTag(t);break}case zt.EOF:{this.onEof(t);break}case zt.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return Rae(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Cl.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=B.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(S.P),this.openElements.popUntilTagNamePopped(S.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case S.TR:{this.insertionMode=B.IN_ROW;return}case S.TBODY:case S.THEAD:case S.TFOOT:{this.insertionMode=B.IN_TABLE_BODY;return}case S.CAPTION:{this.insertionMode=B.IN_CAPTION;return}case S.COLGROUP:{this.insertionMode=B.IN_COLUMN_GROUP;return}case S.TABLE:{this.insertionMode=B.IN_TABLE;return}case S.BODY:{this.insertionMode=B.IN_BODY;return}case S.FRAMESET:{this.insertionMode=B.IN_FRAMESET;return}case S.SELECT:{this._resetInsertionModeForSelect(t);return}case S.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case S.HTML:{this.insertionMode=this.headElement?B.AFTER_HEAD:B.BEFORE_HEAD;return}case S.TD:case S.TH:{if(t>0){this.insertionMode=B.IN_CELL;return}break}case S.HEAD:{if(t>0){this.insertionMode=B.IN_HEAD;return}break}}this.insertionMode=B.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===S.TEMPLATE)break;if(o===S.TABLE){this.insertionMode=B.IN_SELECT_IN_TABLE;return}}this.insertionMode=B.IN_SELECT;}_isElementCausesFosterParenting(t){return _ae.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 S.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===ge.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case S.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 sae[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){aXe(this,t);return}switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:{Oae(this,t);break}case B.TEXT:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_TABLE_TEXT:{Fae(this,t);break}case B.IN_COLUMN_GROUP:{x_(this,t);break}case B.AFTER_BODY:{__(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){sXe(this,t);return}switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.TEXT:{this._insertCharacters(t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_COLUMN_GROUP:{x_(this,t);break}case B.AFTER_BODY:{__(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){fU(this,t);return}switch(this.insertionMode){case B.INITIAL:case B.BEFORE_HTML:case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_TEMPLATE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:{fU(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.AFTER_BODY:{BYe(this,t);break}case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{UYe(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case B.INITIAL:{HYe(this,t);break}case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:{this._err(t,ie.misplacedDoctype);break}case B.IN_TABLE_TEXT:{OA(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ie.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?lXe(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{GYe(this,t);break}case B.BEFORE_HEAD:{jYe(this,t);break}case B.IN_HEAD:{vl(this,t);break}case B.IN_HEAD_NO_SCRIPT:{WYe(this,t);break}case B.AFTER_HEAD:{KYe(this,t);break}case B.IN_BODY:{pi(this,t);break}case B.IN_TABLE:{by(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_CAPTION:{VJe(this,t);break}case B.IN_COLUMN_GROUP:{TU(this,t);break}case B.IN_TABLE_BODY:{M_(this,t);break}case B.IN_ROW:{N_(this,t);break}case B.IN_CELL:{qJe(this,t);break}case B.IN_SELECT:{Hae(this,t);break}case B.IN_SELECT_IN_TABLE:{YJe(this,t);break}case B.IN_TEMPLATE:{XJe(this,t);break}case B.AFTER_BODY:{ZJe(this,t);break}case B.IN_FRAMESET:{eXe(this,t);break}case B.AFTER_FRAMESET:{nXe(this,t);break}case B.AFTER_AFTER_BODY:{rXe(this,t);break}case B.AFTER_AFTER_FRAMESET:{iXe(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?cXe(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{$Ye(this,t);break}case B.BEFORE_HEAD:{VYe(this,t);break}case B.IN_HEAD:{zYe(this,t);break}case B.IN_HEAD_NO_SCRIPT:{qYe(this,t);break}case B.AFTER_HEAD:{YYe(this,t);break}case B.IN_BODY:{O_(this,t);break}case B.TEXT:{LJe(this,t);break}case B.IN_TABLE:{BA(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_CAPTION:{zJe(this,t);break}case B.IN_COLUMN_GROUP:{WJe(this,t);break}case B.IN_TABLE_BODY:{yU(this,t);break}case B.IN_ROW:{Uae(this,t);break}case B.IN_CELL:{KJe(this,t);break}case B.IN_SELECT:{Gae(this,t);break}case B.IN_SELECT_IN_TABLE:{JJe(this,t);break}case B.IN_TEMPLATE:{QJe(this,t);break}case B.AFTER_BODY:{jae(this,t);break}case B.IN_FRAMESET:{tXe(this,t);break}case B.AFTER_FRAMESET:{oXe(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onEof(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:{kae(this,t);break}case B.TEXT:{kJe(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_TEMPLATE:{$ae(this,t);break}case B.AFTER_BODY:case B.IN_FRAMESET:case B.AFTER_FRAMESET:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{bU(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 B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.TEXT:case B.IN_COLUMN_GROUP:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:{this._insertCharacters(t);break}case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:case B.AFTER_BODY:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{Pae(this,t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_TABLE_TEXT:{Dae(this,t);break}}}};function MYe(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):Lae(e,t),n}function NYe(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 LYe(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>=PYe;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=kYe(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function kYe(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 DYe(e,t,n){let o=e.treeAdapter.getTagName(t),r=uh(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===S.TEMPLATE&&i===ge.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function FYe(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 SU(e,t){for(let n=0;n<_Ye;n++){let o=MYe(e,t);if(!o)break;let r=NYe(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=LYe(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&DYe(e,s,i),FYe(e,r,o);}}function fU(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function BYe(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function UYe(e,t){e._appendCommentNode(t,e.document);}function bU(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 HYe(e,t){e._setDocumentType(t);let n=t.forceQuirks?Hi.QUIRKS:Tae(t);bae(t)||e._err(t,ie.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=B.BEFORE_HTML;}function PA(e,t){e._err(t,ie.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Hi.QUIRKS),e.insertionMode=B.BEFORE_HTML,e._processToken(t);}function GYe(e,t){t.tagID===S.HTML?(e._insertElement(t,ge.HTML),e.insertionMode=B.BEFORE_HEAD):MA(e,t);}function $Ye(e,t){let n=t.tagID;(n===S.HTML||n===S.HEAD||n===S.BODY||n===S.BR)&&MA(e,t);}function MA(e,t){e._insertFakeRootElement(),e.insertionMode=B.BEFORE_HEAD,e._processToken(t);}function jYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.HEAD:{e._insertElement(t,ge.HTML),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD;break}default:NA(e,t);}}function VYe(e,t){let n=t.tagID;n===S.HEAD||n===S.BODY||n===S.HTML||n===S.BR?NA(e,t):e._err(t,ie.endTagWithoutMatchingOpenElement);}function NA(e,t){e._insertFakeElement(X.HEAD,S.HEAD),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD,e._processToken(t);}function vl(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.TITLE:{e._switchToTextParsing(t,ui.RCDATA);break}case S.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,ui.RAWTEXT):(e._insertElement(t,ge.HTML),e.insertionMode=B.IN_HEAD_NO_SCRIPT);break}case S.NOFRAMES:case S.STYLE:{e._switchToTextParsing(t,ui.RAWTEXT);break}case S.SCRIPT:{e._switchToTextParsing(t,ui.SCRIPT_DATA);break}case S.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=B.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(B.IN_TEMPLATE);break}case S.HEAD:{e._err(t,ie.misplacedStartTagForHeadElement);break}default:LA(e,t);}}function zYe(e,t){switch(t.tagID){case S.HEAD:{e.openElements.pop(),e.insertionMode=B.AFTER_HEAD;break}case S.BODY:case S.BR:case S.HTML:{LA(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function ph(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==S.TEMPLATE&&e._err(t,ie.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(S.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ie.endTagWithoutMatchingOpenElement);}function LA(e,t){e.openElements.pop(),e.insertionMode=B.AFTER_HEAD,e._processToken(t);}function WYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BASEFONT:case S.BGSOUND:case S.HEAD:case S.LINK:case S.META:case S.NOFRAMES:case S.STYLE:{vl(e,t);break}case S.NOSCRIPT:{e._err(t,ie.nestedNoscriptInHead);break}default:kA(e,t);}}function qYe(e,t){switch(t.tagID){case S.NOSCRIPT:{e.openElements.pop(),e.insertionMode=B.IN_HEAD;break}case S.BR:{kA(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function kA(e,t){let n=t.type===zt.EOF?ie.openElementsLeftAfterEof:ie.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=B.IN_HEAD,e._processToken(t);}function KYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BODY:{e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=B.IN_BODY;break}case S.FRAMESET:{e._insertElement(t,ge.HTML),e.insertionMode=B.IN_FRAMESET;break}case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:case S.NOFRAMES:case S.SCRIPT:case S.STYLE:case S.TEMPLATE:case S.TITLE:{e._err(t,ie.abandonedHeadElementChild),e.openElements.push(e.headElement,S.HEAD),vl(e,t),e.openElements.remove(e.headElement);break}case S.HEAD:{e._err(t,ie.misplacedStartTagForHeadElement);break}default:DA(e,t);}}function YYe(e,t){switch(t.tagID){case S.BODY:case S.HTML:case S.BR:{DA(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function DA(e,t){e._insertFakeElement(X.BODY,S.BODY),e.insertionMode=B.IN_BODY,P_(e,t);}function P_(e,t){switch(t.type){case zt.CHARACTER:{Oae(e,t);break}case zt.WHITESPACE_CHARACTER:{Pae(e,t);break}case zt.COMMENT:{fU(e,t);break}case zt.START_TAG:{pi(e,t);break}case zt.END_TAG:{O_(e,t);break}case zt.EOF:{kae(e,t);break}}}function Pae(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function Oae(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function JYe(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function XYe(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function QYe(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_FRAMESET);}function ZYe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML);}function eJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&IA.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,ge.HTML);}function tJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function nJe(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),n||(e.formElement=e.openElements.current));}function oJe(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===S.LI&&r===S.LI||(n===S.DD||n===S.DT)&&(r===S.DD||r===S.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==S.ADDRESS&&r!==S.DIV&&r!==S.P&&e._isSpecialElement(e.openElements.items[o],r))break}e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML);}function rJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.tokenizer.state=ui.PLAINTEXT;}function iJe(e,t){e.openElements.hasInScope(S.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.framesetOk=false;}function sJe(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(X.A);n&&(SU(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function aJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function lJe(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(S.NOBR)&&(SU(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function cJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function dJe(e,t){e.treeAdapter.getDocumentMode(e.document)!==Hi.QUIRKS&&e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=B.IN_TABLE;}function Mae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,ge.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function Nae(e){let t=T_(e,eu.TYPE);return t!=null&&t.toLowerCase()===xYe}function uJe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,ge.HTML),Nae(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function pJe(e,t){e._appendElement(t,ge.HTML),t.ackSelfClosing=true;}function mJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._appendElement(t,ge.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function hJe(e,t){t.tagName=X.IMG,t.tagID=S.IMG,Mae(e,t);}function gJe(e,t){e._insertElement(t,ge.HTML),e.skipNextNewLine=true,e.tokenizer.state=ui.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=B.TEXT;}function fJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,ui.RAWTEXT);}function yJe(e,t){e.framesetOk=false,e._switchToTextParsing(t,ui.RAWTEXT);}function Iae(e,t){e._switchToTextParsing(t,ui.RAWTEXT);}function SJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===B.IN_TABLE||e.insertionMode===B.IN_CAPTION||e.insertionMode===B.IN_TABLE_BODY||e.insertionMode===B.IN_ROW||e.insertionMode===B.IN_CELL?B.IN_SELECT_IN_TABLE:B.IN_SELECT;}function bJe(e,t){e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML);}function TJe(e,t){e.openElements.hasInScope(S.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,ge.HTML);}function AJe(e,t){e.openElements.hasInScope(S.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(S.RTC),e._insertElement(t,ge.HTML);}function EJe(e,t){e._reconstructActiveFormattingElements(),mU(t),w_(t),t.selfClosing?e._appendElement(t,ge.MATHML):e._insertElement(t,ge.MATHML),t.ackSelfClosing=true;}function CJe(e,t){e._reconstructActiveFormattingElements(),hU(t),w_(t),t.selfClosing?e._appendElement(t,ge.SVG):e._insertElement(t,ge.SVG),t.ackSelfClosing=true;}function xae(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML);}function pi(e,t){switch(t.tagID){case S.I:case S.S:case S.B:case S.U:case S.EM:case S.TT:case S.BIG:case S.CODE:case S.FONT:case S.SMALL:case S.STRIKE:case S.STRONG:{aJe(e,t);break}case S.A:{sJe(e,t);break}case S.H1:case S.H2:case S.H3:case S.H4:case S.H5:case S.H6:{eJe(e,t);break}case S.P:case S.DL:case S.OL:case S.UL:case S.DIV:case S.DIR:case S.NAV:case S.MAIN:case S.MENU:case S.ASIDE:case S.CENTER:case S.FIGURE:case S.FOOTER:case S.HEADER:case S.HGROUP:case S.DIALOG:case S.DETAILS:case S.ADDRESS:case S.ARTICLE:case S.SEARCH:case S.SECTION:case S.SUMMARY:case S.FIELDSET:case S.BLOCKQUOTE:case S.FIGCAPTION:{ZYe(e,t);break}case S.LI:case S.DD:case S.DT:{oJe(e,t);break}case S.BR:case S.IMG:case S.WBR:case S.AREA:case S.EMBED:case S.KEYGEN:{Mae(e,t);break}case S.HR:{mJe(e,t);break}case S.RB:case S.RTC:{TJe(e,t);break}case S.RT:case S.RP:{AJe(e,t);break}case S.PRE:case S.LISTING:{tJe(e,t);break}case S.XMP:{fJe(e,t);break}case S.SVG:{CJe(e,t);break}case S.HTML:{JYe(e,t);break}case S.BASE:case S.LINK:case S.META:case S.STYLE:case S.TITLE:case S.SCRIPT:case S.BGSOUND:case S.BASEFONT:case S.TEMPLATE:{vl(e,t);break}case S.BODY:{XYe(e,t);break}case S.FORM:{nJe(e,t);break}case S.NOBR:{lJe(e,t);break}case S.MATH:{EJe(e,t);break}case S.TABLE:{dJe(e,t);break}case S.INPUT:{uJe(e,t);break}case S.PARAM:case S.TRACK:case S.SOURCE:{pJe(e,t);break}case S.IMAGE:{hJe(e,t);break}case S.BUTTON:{iJe(e,t);break}case S.APPLET:case S.OBJECT:case S.MARQUEE:{cJe(e,t);break}case S.IFRAME:{yJe(e,t);break}case S.SELECT:{SJe(e,t);break}case S.OPTION:case S.OPTGROUP:{bJe(e,t);break}case S.NOEMBED:case S.NOFRAMES:{Iae(e,t);break}case S.FRAMESET:{QYe(e,t);break}case S.TEXTAREA:{gJe(e,t);break}case S.NOSCRIPT:{e.options.scriptingEnabled?Iae(e,t):xae(e,t);break}case S.PLAINTEXT:{rJe(e,t);break}case S.COL:case S.TH:case S.TD:case S.TR:case S.HEAD:case S.FRAME:case S.TBODY:case S.TFOOT:case S.THEAD:case S.CAPTION:case S.COLGROUP:break;default:xae(e,t);}}function RJe(e,t){if(e.openElements.hasInScope(S.BODY)&&(e.insertionMode=B.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function vJe(e,t){e.openElements.hasInScope(S.BODY)&&(e.insertionMode=B.AFTER_BODY,jae(e,t));}function wJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function IJe(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(S.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(S.FORM):n&&e.openElements.remove(n));}function xJe(e){e.openElements.hasInButtonScope(S.P)||e._insertFakeElement(X.P,S.P),e._closePElement();}function _Je(e){e.openElements.hasInListItemScope(S.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(S.LI),e.openElements.popUntilTagNamePopped(S.LI));}function PJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function OJe(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function MJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function NJe(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(X.BR,S.BR),e.openElements.pop(),e.framesetOk=false;}function Lae(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!==S.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 O_(e,t){switch(t.tagID){case S.A:case S.B:case S.I:case S.S:case S.U:case S.EM:case S.TT:case S.BIG:case S.CODE:case S.FONT:case S.NOBR:case S.SMALL:case S.STRIKE:case S.STRONG:{SU(e,t);break}case S.P:{xJe(e);break}case S.DL:case S.UL:case S.OL:case S.DIR:case S.DIV:case S.NAV:case S.PRE:case S.MAIN:case S.MENU:case S.ASIDE:case S.BUTTON:case S.CENTER:case S.FIGURE:case S.FOOTER:case S.HEADER:case S.HGROUP:case S.DIALOG:case S.ADDRESS:case S.ARTICLE:case S.DETAILS:case S.SEARCH:case S.SECTION:case S.SUMMARY:case S.LISTING:case S.FIELDSET:case S.BLOCKQUOTE:case S.FIGCAPTION:{wJe(e,t);break}case S.LI:{_Je(e);break}case S.DD:case S.DT:{PJe(e,t);break}case S.H1:case S.H2:case S.H3:case S.H4:case S.H5:case S.H6:{OJe(e);break}case S.BR:{NJe(e);break}case S.BODY:{RJe(e,t);break}case S.HTML:{vJe(e,t);break}case S.FORM:{IJe(e);break}case S.APPLET:case S.OBJECT:case S.MARQUEE:{MJe(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:Lae(e,t);}}function kae(e,t){e.tmplInsertionModeStack.length>0?$ae(e,t):bU(e,t);}function LJe(e,t){var n;t.tagID===S.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function kJe(e,t){e._err(t,ie.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function gU(e,t){if(e.openElements.currentTagId!==void 0&&_ae.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=B.IN_TABLE_TEXT,t.type){case zt.CHARACTER:{Fae(e,t);break}case zt.WHITESPACE_CHARACTER:{Dae(e,t);break}}else UA(e,t);}function DJe(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_CAPTION;}function FJe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_COLUMN_GROUP;}function BJe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(X.COLGROUP,S.COLGROUP),e.insertionMode=B.IN_COLUMN_GROUP,TU(e,t);}function UJe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_TABLE_BODY;}function HJe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(X.TBODY,S.TBODY),e.insertionMode=B.IN_TABLE_BODY,M_(e,t);}function GJe(e,t){e.openElements.hasInTableScope(S.TABLE)&&(e.openElements.popUntilTagNamePopped(S.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function $Je(e,t){Nae(t)?e._appendElement(t,ge.HTML):UA(e,t),t.ackSelfClosing=true;}function jJe(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,ge.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function by(e,t){switch(t.tagID){case S.TD:case S.TH:case S.TR:{HJe(e,t);break}case S.STYLE:case S.SCRIPT:case S.TEMPLATE:{vl(e,t);break}case S.COL:{BJe(e,t);break}case S.FORM:{jJe(e,t);break}case S.TABLE:{GJe(e,t);break}case S.TBODY:case S.TFOOT:case S.THEAD:{UJe(e,t);break}case S.INPUT:{$Je(e,t);break}case S.CAPTION:{DJe(e,t);break}case S.COLGROUP:{FJe(e,t);break}default:UA(e,t);}}function BA(e,t){switch(t.tagID){case S.TABLE:{e.openElements.hasInTableScope(S.TABLE)&&(e.openElements.popUntilTagNamePopped(S.TABLE),e._resetInsertionMode());break}case S.TEMPLATE:{ph(e,t);break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TBODY:case S.TD:case S.TFOOT:case S.TH:case S.THEAD:case S.TR:break;default:UA(e,t);}}function UA(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,P_(e,t),e.fosterParentingEnabled=n;}function Dae(e,t){e.pendingCharacterTokens.push(t);}function Fae(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function OA(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)UA(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var Bae=new Set([S.CAPTION,S.COL,S.COLGROUP,S.TBODY,S.TD,S.TFOOT,S.TH,S.THEAD,S.TR]);function VJe(e,t){let n=t.tagID;Bae.has(n)?e.openElements.hasInTableScope(S.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_TABLE,by(e,t)):pi(e,t);}function zJe(e,t){let n=t.tagID;switch(n){case S.CAPTION:case S.TABLE:{e.openElements.hasInTableScope(S.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_TABLE,n===S.TABLE&&BA(e,t));break}case S.BODY:case S.COL:case S.COLGROUP:case S.HTML:case S.TBODY:case S.TD:case S.TFOOT:case S.TH:case S.THEAD:case S.TR:break;default:O_(e,t);}}function TU(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.COL:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.TEMPLATE:{vl(e,t);break}default:x_(e,t);}}function WJe(e,t){switch(t.tagID){case S.COLGROUP:{e.openElements.currentTagId===S.COLGROUP&&(e.openElements.pop(),e.insertionMode=B.IN_TABLE);break}case S.TEMPLATE:{ph(e,t);break}case S.COL:break;default:x_(e,t);}}function x_(e,t){e.openElements.currentTagId===S.COLGROUP&&(e.openElements.pop(),e.insertionMode=B.IN_TABLE,e._processToken(t));}function M_(e,t){switch(t.tagID){case S.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_ROW;break}case S.TH:case S.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(X.TR,S.TR),e.insertionMode=B.IN_ROW,N_(e,t);break}case S.CAPTION:case S.COL:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE,by(e,t));break}default:by(e,t);}}function yU(e,t){let n=t.tagID;switch(t.tagID){case S.TBODY:case S.TFOOT:case S.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE);break}case S.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE,BA(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TD:case S.TH:case S.TR:break;default:BA(e,t);}}function N_(e,t){switch(t.tagID){case S.TH:case S.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_CELL,e.activeFormattingElements.insertMarker();break}case S.CAPTION:case S.COL:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:case S.TR:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,M_(e,t));break}default:by(e,t);}}function Uae(e,t){switch(t.tagID){case S.TR:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY);break}case S.TABLE:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,yU(e,t));break}case S.TBODY:case S.TFOOT:case S.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(S.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,yU(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TD:case S.TH:break;default:BA(e,t);}}function qJe(e,t){let n=t.tagID;Bae.has(n)?(e.openElements.hasInTableScope(S.TD)||e.openElements.hasInTableScope(S.TH))&&(e._closeTableCell(),N_(e,t)):pi(e,t);}function KJe(e,t){let n=t.tagID;switch(n){case S.TD:case S.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_ROW);break}case S.TABLE:case S.TBODY:case S.TFOOT:case S.THEAD:case S.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Uae(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:break;default:O_(e,t);}}function Hae(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.OPTION:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e._insertElement(t,ge.HTML);break}case S.OPTGROUP:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop(),e._insertElement(t,ge.HTML);break}case S.HR:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop(),e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.INPUT:case S.KEYGEN:case S.TEXTAREA:case S.SELECT:{e.openElements.hasInSelectScope(S.SELECT)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),t.tagID!==S.SELECT&&e._processStartTag(t));break}case S.SCRIPT:case S.TEMPLATE:{vl(e,t);break}}}function Gae(e,t){switch(t.tagID){case S.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===S.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===S.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop();break}case S.OPTION:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop();break}case S.SELECT:{e.openElements.hasInSelectScope(S.SELECT)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode());break}case S.TEMPLATE:{ph(e,t);break}}}function YJe(e,t){let n=t.tagID;n===S.CAPTION||n===S.TABLE||n===S.TBODY||n===S.TFOOT||n===S.THEAD||n===S.TR||n===S.TD||n===S.TH?(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),e._processStartTag(t)):Hae(e,t);}function JJe(e,t){let n=t.tagID;n===S.CAPTION||n===S.TABLE||n===S.TBODY||n===S.TFOOT||n===S.THEAD||n===S.TR||n===S.TD||n===S.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Gae(e,t);}function XJe(e,t){switch(t.tagID){case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:case S.NOFRAMES:case S.SCRIPT:case S.STYLE:case S.TEMPLATE:case S.TITLE:{vl(e,t);break}case S.CAPTION:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:{e.tmplInsertionModeStack[0]=B.IN_TABLE,e.insertionMode=B.IN_TABLE,by(e,t);break}case S.COL:{e.tmplInsertionModeStack[0]=B.IN_COLUMN_GROUP,e.insertionMode=B.IN_COLUMN_GROUP,TU(e,t);break}case S.TR:{e.tmplInsertionModeStack[0]=B.IN_TABLE_BODY,e.insertionMode=B.IN_TABLE_BODY,M_(e,t);break}case S.TD:case S.TH:{e.tmplInsertionModeStack[0]=B.IN_ROW,e.insertionMode=B.IN_ROW,N_(e,t);break}default:e.tmplInsertionModeStack[0]=B.IN_BODY,e.insertionMode=B.IN_BODY,pi(e,t);}}function QJe(e,t){t.tagID===S.TEMPLATE&&ph(e,t);}function $ae(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(S.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):bU(e,t);}function ZJe(e,t){t.tagID===S.HTML?pi(e,t):__(e,t);}function jae(e,t){var n;if(t.tagID===S.HTML){if(e.fragmentContext||(e.insertionMode=B.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===S.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 __(e,t);}function __(e,t){e.insertionMode=B.IN_BODY,P_(e,t);}function eXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.FRAMESET:{e._insertElement(t,ge.HTML);break}case S.FRAME:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.NOFRAMES:{vl(e,t);break}}}function tXe(e,t){t.tagID===S.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==S.FRAMESET&&(e.insertionMode=B.AFTER_FRAMESET));}function nXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.NOFRAMES:{vl(e,t);break}}}function oXe(e,t){t.tagID===S.HTML&&(e.insertionMode=B.AFTER_AFTER_FRAMESET);}function rXe(e,t){t.tagID===S.HTML?pi(e,t):I_(e,t);}function I_(e,t){e.insertionMode=B.IN_BODY,P_(e,t);}function iXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.NOFRAMES:{vl(e,t);break}}}function sXe(e,t){t.chars=_n,e._insertCharacters(t);}function aXe(e,t){e._insertCharacters(t),e.framesetOk=false;}function Vae(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==ge.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function lXe(e,t){if(Eae(t))Vae(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===ge.MATHML?mU(t):o===ge.SVG&&(Cae(t),hU(t)),w_(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function cXe(e,t){if(t.tagID===S.P||t.tagID===S.BR){Vae(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)===ge.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([X.AREA,X.BASE,X.BASEFONT,X.BGSOUND,X.BR,X.COL,X.EMBED,X.FRAME,X.HR,X.IMG,X.INPUT,X.KEYGEN,X.LINK,X.META,X.PARAM,X.SOURCE,X.TRACK,X.WBR]);function zae(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=FA.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var dXe=5e3,Wae=1024;function AU(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function uXe(e){return e.nodeName==="#text"}function EU(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(uXe(l)){let c=l.value;if(c&&c.trim().length>0){let d=c.length>Wae?c.slice(0,Wae):c;i=i===void 0?d:`${i} ${d}`;}}else if(AU(l)){let c=EU(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 CU(e){let t=zae(e),n={nodesLeft:dXe};for(let i of t.childNodes)if(AU(i)&&i.tagName.toLowerCase()==="body"){let s=EU(i,n);if(s!==void 0)return s}let o=[];for(let i of t.childNodes){if(n.nodesLeft<=0)break;if(AU(i)){let s=EU(i,n);s!==void 0&&o.push(s);}}let r={tag:"body"};return o.length>0&&(r.children=o),r}var pXe=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),mh=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(`${Or}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${Or}/${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))_t.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 vU(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:fj(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function mXe(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 Je(e)}}function RU(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var vU=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 Xu(void 0,c=>this.storeTraceAsset(c)),Ju.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.jpeg`,contents:o});}attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.jpeg`,contents:o});}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.html`,contents:o});}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,url:r,logger:i}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.html`,contents:o}),this.appGraphSink&&pXe.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";_t.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.diskStorage.storeFile({name:`${Or}/${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:mXe(t.status),finishedAt:t.finishedAt}))));}recordStepDuration(t,n){if(!GC(t))return;let o=HC(t);_t.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:RU(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:bm(r.steps)})),elseSteps:t.elseSteps?bm(t.elseSteps):void 0,status:RU(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:RU(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return Je(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new mh(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var L_=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(Or),this.harPagesStream=this.diskStorage.createFileStream(`${Or}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${Or}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${Or}/resource-usage.ndjson`),this.resourceUsageSampler=Vq({keepSamples:false,onSample:l=>{this.resourceUsageStream.write(`${JSON.stringify(l)}
8848
+ `)).digest("hex").slice(0,12),s=`${r.headSha}:${i}`,a=r.repoRoot,l=Dn__default.relative(a,e.repoRoot),c=l?e.candidateTests.map(p=>({...p,testPath:Dn__default.posix.join(l.split(Dn__default.sep).join("/"),p.testPath)})):e.candidateTests;if(e.dryRun){let p=await oU({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:r,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:r_(a),agentOutputStream:e.agentOutputStream});return p.fallbackToRunAll?{kind:"run-all",reason:p.userSummary,diff:r}:{kind:"ready",plan:{version:2,userSummary:p.userSummary,toolCallCount:p.toolCallCount,selectedTests:p.selectedTests,anchorSegmentIds:p.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap??null},generatedAt:new Date().toISOString()},planId:`dry-run-${s}`,mode:"SELECTED",diff:r}}let d=await xse({client:t,claim:{repository:e.repository,headSha:s,baseRef:r.baseRef,changedFiles:r.changedFiles.map(p=>p.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(d.kind==="ready")return e.logger.info({planId:d.planId,planSize:d.plan.selectedTests.length,suiteHash:i},"ai-select: reusing cached plan from server"),{kind:"ready",plan:d.plan,planId:d.planId,mode:"SELECTED",diff:r};let u=await oU({apiClient:t,generator:e.generator,logger:e.logger,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:r,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:r_(a),agentOutputStream:e.agentOutputStream});if(u.fallbackToRunAll)return await t.release(d.selectionPlanKey),{kind:"run-all",reason:u.userSummary,diff:r};try{e.logger.info({selectedCount:u.selectedTests.length,durationMs:u.totalDurationMs,suiteHash:i},"ai-select: computed fresh plan");let p=await t.finalize({selectionPlanKey:d.selectionPlanKey,repository:e.repository,headSha:s,mode:"SELECTED",userSummary:u.userSummary,toolCallCount:u.toolCallCount,selectedTests:u.selectedTests,anchorSegmentIds:u.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap}});return {kind:"ready",plan:p.plan,planId:p.planId,mode:"SELECTED",diff:r}}catch(p){return e.logger.error({err:p},"ai-select finalize failed; falling back to run-all"),await t.release(d.selectionPlanKey),{kind:"run-all",reason:`Could not record selection plan: ${Y(p)}.`,diff:r}}}function ch(e){let t=e??gKe();return _se()&&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 gKe(){let e=_se(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var _se=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function u_(e,t=true,n=false){let o=bKe(e),r=await yKe.which(o[0],true),i=o.slice(1),s=fKe.exec(SKe(r),i,{delay:100,silent:n});if(t)return s}var Pse="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function TKe(e,{context:t}){return e instanceof zn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${Pse}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${Y(e)}`}function Ose(e){return e instanceof zn?e.rawError.includes("Resource not accessible by integration")?Pse:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":Y(e)}function Mse(e,t){C.error(TKe(e,t));}function p_(e){return Nse(e,"runs","run")}function sU(e){return Nse(e,"run-groups","run group")}function Nse(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?EKe(o,t,n):o;if(!z$1.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 EKe(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 m_(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(CKe()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Zt="3.7.3",{checkCLIVersion:Gr,getLatestCLIVersion:Lse}=u5({packageName:"momentic",currentVersion:Zt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade"});vOe("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:Zd,setAnalyticsIdentity:h_,shutdownAnalytics:kse}=VC({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:f5});async function it(){try{await Te(Promise.all([$C(),_t.flush(),kse(),XC()]),{milliseconds:5e3});}catch{}}async function dh({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=>rr__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(!rr__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let m;try{m=rr__default.statSync(p).isDirectory();}catch(g){a.warn({err:g},`Skipping path ${p} because it cannot be read`);return}let h=Dn__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 er("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=Dn__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 Zi(d,Se,t);if(Sf.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:Dn__default.relative(n.rootDir,d)}}catch(u){a.error(`Failed to read and resolve test at '${d}': ${Y(u)}`),process.exit(1);}});return compact(await Promise.all(c))}function Fse({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 Bse({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}var Use=()=>process.exit(130),Hse=()=>process.exit(143);process.on("SIGINT",Use);process.on("SIGTERM",Hse);function wA(){process.off("SIGINT",Use),process.off("SIGTERM",Hse);}async function Gse({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 ni({orgId:e,s:l,localTools:t,logger:n,context:r});}return i}var $se=new Set;async function jse({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:y,browserTypeOverride:T,attemptedRemoteBrowserProviders:A}){let E={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:Se,mode:o.mode,runner:o.runner},{controller:v,context:w}=await eA({baseUrl:e,envName:t,test:r,variables:c,logger:d,orgId:l,localBrowserConfig:m,aiSettings:h,customHeaders:u,codeEvalTools:s,storage:i,enricher:new Pd(E,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:T,callbacks:{onNetworkPage:P=>f.onNetworkPage(P),onNetworkLogs:P=>f.onNetworkLogs(P)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:P,timestamp:x})=>{f.setActiveVideo(P,x);}}:void 0,validateBrowserType:P=>{Tb(P)||(Se.warn({browserType:P,testName:r.name},"Browser required by test does not appear to be installed"),!$se.has(P)&&($se.add(P),C.warn(`Browser ${P} does not appear to be installed. Run '${Kp(P)}' if you hit launch errors.`)));},createRemoteBrowserConnection:m.remoteBrowser?async()=>{let P=await o.createRemoteBrowserConnection({runId:y,attemptedProviders:A});return P.provider&&A?.push(P.provider),P}:void 0});try{await tx({orgId:l,test:r,testInputs:p,localTools:s,logger:d,context:w});}catch(P){try{await v.browser.cleanup();}catch(x){d.error({err:x},"Failed to clean up browser after test input resolution failed");}throw P instanceof tA&&(C.error(P.message),process.exit(1)),P}return {controller:v,context:w}}function Vse({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!am){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 zse({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,recordVideo:r,stepCallbacks:i}){let{orgId:s,userId:a,runId:l}=n,{runTracer:c,runGroupTracer:d,project:u,apiClient:p}=o,{controller:m,context:h,codeEvalTools:g,storageClient:f,logger:y,usageTracker:T,tracer:A}=t,{test:E,orgSettings:v}=e;y.info(`Running test '${E.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:m,storage:f,usageTracker:T,context:h,logger:y,codeEvalTools:g},P={orgId:s,userId:a,runId:l,testMetadata:E,steps:E.steps,beforeSteps:E.beforeSteps,afterSteps:E.afterSteps,orgSettings:v},x={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await Vse({testAdvancedSettings:E.advanced,orgSettings:v.ai,logger:y})};return Hte({fixtures:w,inputs:P,options:x,callbacks:{step:i??{},test:{onTestComplete:async _=>{await m.browser.cleanup({saveRemoteVideos:r!=="on-fail"||_?.status!=="PASSED"}),await g.dispose();}}},testParams:{attemptTracer:A},runParams:{runTracer:c,runGroupTracer:d,project:u,apiClient:p,captureEvent:Zd,abortSignal:o.abortSignal}})}async function Wse(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await OKe(e)}catch(r){Eu(r);let i="Fatal error running test";n.error({err:r},i),C.error({err:r},i);let s=Up(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 OKe(e){let{testDefinition:t,snapshot:n,project:o,apiClient:r,orgId:i,userId:s,urlOverride:a,runGroupTracer:l,logger:c,gitMetadata:d,cacheOptions:u,runId:p,testInputs:m,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=n?{...o.config,...n.metadata.config}:o.config,T=new pf(r,i),A=Nd({logger:c,orgId:i,client:r,gitMetadata:d,regenerateCache:u.regenerateCache,alwaysSaveCache:u.alwaysSaveCache,noCache:n?true:u.noCache,isolateCachesByEnvironment:o.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:u.bustOldestCachePercentage}),E,v;n?(E={envName:n.metadata.environment.envName,resolvedEnv:n.metadata.environment.resolvedEnv,environmentVariables:{...n.metadata.environment.variables},baseUrl:n.metadata.environment.baseUrl},v={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(E=mf({test:t,envNameOverride:e.envName,urlOverride:a,resolveEnv:Z=>Rd(Z,o,c)}),v=await uc({cacheStorage:A,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:E.envName,useSnapshotIdentityCache:o.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:P,environmentVariables:x,baseUrl:R}=E,_=v.steps,O=v.beforeSteps??void 0,D=v.afterSteps??void 0,U=await l.startRun({logger:c,runId:p,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:R,environmentName:w,schemaVersion:t.schemaVersion,resolvedInputs:m,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai}),G=c.child(U.loggerBindings||{});Object.entries(U.envVarBindings||{}).forEach(([Z,j])=>{x[Z]=j;});let ne=await MKe({...e,effectiveConfig:y,variables:x,envName:w,resolvedEnv:P,baseUrl:R,storageClient:T,tracer:U,runGroupTracer:l,logger:G,cacheStorage:A,stepsWithCaches:_,beforeStepsWithCaches:O,afterStepsWithCaches:D,usageTracker:f});return await U.finish({logger:c,status:ne.status,finishedAt:ne.finishedAt,failureDetails:ne.failureDetails,failureReason:ne.failureReason,isFlake:ne.isFlake,failureRecoveryDetails:ne.failureRecoveryDetails}),{runId:U.runId,...ne}}async function MKe(e){let{testDefinition:t,effectiveConfig:n,stepsWithCaches:o,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:s,regenerateGoldenFiles:a,apiClient:l,generator:c,baseUrl:d,storageClient:u,orgId:p,userId:m,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:T,resolvedEnv:A,retriesOverride:E,devicePixelRatio:v,logUpdate:w,tracer:P,runGroupTracer:x,logger:R,cacheStorage:_,gitMetadata:O,quarantined:D,quarantinedMetadata:U,usageTracker:G}=e,ne=n,Z=ne.ai?.aiFailureAnalysis??false,j=new Date,W=new sf(s,l,a),V={envName:h,urlOverride:g,customHeaders:f,testInputs:y},ee={...ne.browser||{},...A?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},oe=ee.remoteBrowser===true,H=[],Q,ce=Math.abs(E??t.retries??n.retries??1),Fe=[];R.info({...O,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Oe=0;Oe<=ce;Oe++){let Ie=randomUUID(),ot=await P.startAttempt(Ie),Dt=R.child(ot.loggerBindings||{}),ae={...t,steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Oe!==0&&w("RETRY",`attempt ${Oe+1}/${ce+1}`);let Ce=new Date,We=new Md({httpClient:new Ni({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Dt,mode:l.mode,runner:l.runner}),fakerSeed:ne.advanced?.fakerConstantSeed?$S:void 0});try{let{controller:Ve,context:Be}=await jse({tracer:ot,runId:P.runId,baseUrl:d,envName:h,apiClient:l,devicePixelRatio:v,logger:Dt,storageClient:u,codeEvalTools:We,test:ae,generator:c,orgId:p,variables:T,customHeaders:f,testInputs:y,localBrowserConfig:ee,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:H,aiSettings:{...ne.ai||{},...ae.advanced||{}},visualDiffScreenshotStorage:W});e.abortSignal&&(e.abortSignal.aborted?Ve.executeAbortController.abort():e.abortSignal.addEventListener("abort",()=>{Ve.executeAbortController.abort();},{once:!0})),Q=await zse({attemptMetadata:{attemptNumber:Oe+1,orgId:p,userId:m,runId:P.runId},attemptFixtures:{logger:Dt,storageClient:u,usageTracker:G,codeEvalTools:We,context:Be,controller:Ve,tracer:ot},attemptInputs:{test:ae,orgSettings:ne},runFixtures:{runTracer:P,runGroupTracer:x,project:s,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart}});let xr=new Date,cr={logger:R,cacheStorage:_,orgId:p,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:ae.steps,beforeSteps:ae.beforeSteps,afterSteps:ae.afterSteps}};await ym({logger:R,cacheStorage:_,orgId:p,testId:t.id,environment:h,stepLists:cr.updatedStepsWithCaches,useSnapshotIdentityCache:s.config.fileFormat==="v2"}),Q?.status==="PASSED"?await Sm(cr):Q?.status==="FAILED"&&Oe===ce&&await Hg(cr),await ot.finish({logger:Dt,result:Q}),Fe.unshift(Q.status);let $i=await Gse({orgId:p,codeEvalTools:We,logger:Dt,outputDefinitions:t.outputs??[],testContext:Be}),Js=oj(Fe),mi=Oe+1;if(Q.status!=="FAILED")return {...Q,runAttemptId:Ie,parameters:V,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:xr,attempts:mi,baseUrl:d,outputs:$i,isFlake:Js,quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe};let ji=Q.failedStepResult,Io=ji?.message||"Unknown failure",Pn=ji?.failureReason??DG(Io)??"UnknownError",hi=Dt.child({failureReason:Pn,errorMessage:Io,numAttempts:(ce+1).toString(),name:ae.name});if(Oe<ce){hi.warn(`Retrying failed execution attempt for run: ${Io}`);continue}hi.error(`Test failed after all exhausting attempts: ${Io}`);let Fo=new Error(Io),dr={errorMessage:Io,errorStack:Fo.stack},gi;if(ne.ai?.classification?.enabled===!0){let On=ji?.failureClassification;On||(e.onStepStart?.(Lp),On=await FI({runTracer:P,runGroupTracer:x,outputDir:e.outputDir,orgId:p,project:s,generator:c,apiClient:l,logger:R,testPlatform:"web",aiSettings:ne.ai,captureEvent:Zd,abortSignal:e.abortSignal,failedStepMessage:ji?.message})),On&&(gi=On.classification.category,Pn=On.classification.category,dr.classification={reason:On.classification.category,secondaryCategories:On.classification.secondaryCategories,summary:On.classification.reasoning,recoverable:On.classification.recoverable,confidence:On.classification.confidence,action:On.action,citations:On.classification.citations,source:"v2"});}else if(Z){let On;try{if(Q.results&&Q.results.length>0){e.onStepStart?.(Lp);let{classification:L,aiFailureReason:pe}=await AX({logger:Dt,browserStateStorage:ot,generator:c,fullResults:Q,failureReason:Pn,error:Fo,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});On=L,gi=pe;}}catch(L){Dt.warn({err:L},"Failed to classify test results");}On&&(dr.classification=On,Pn=gi??Pn,dr.classification.source="v1");}return {...Q,runAttemptId:Ie,parameters:V,failureDetails:dr,failureReason:Pn,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:xr,attempts:Oe+1,baseUrl:d,outputs:$i,quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe}}catch(Ve){let Be=`Encountered fatal platform error while running test '${ae.name}'`;Dt.error({err:Ve},Be),C.error({err:Ve},Be);let xr=Up(Ve);return await ot.finish({logger:Dt,result:{status:"FAILED"}}),{status:"FAILED",failureDetails:{errorMessage:xr.message,errorStack:xr.stack},failureReason:"InternalPlatformError",runAttemptId:Ie,results:[],parameters:V,test:ae,filePath:ae.relativeFilePath,startedAt:j,lastAttemptStartedAt:Ce,finishedAt:new Date,attempts:Oe+1,baseUrl:d,outputs:{},quarantined:D,quarantinedMetadata:U,usedRemoteBrowser:oe}}}throw new Error("This code should not be reachable")}var qse=3e4;async function Sy({timeoutMinutes:e,cancel:t,run:n}){let o=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");wA(),process.once("SIGINT",o),process.once("SIGTERM",r);let i;e!==void 0&&e>0&&(i=setTimeout(()=>void t(`Timeout of ${e} minute(s) reached`),e*60*1e3));try{return await n()}finally{process.off("SIGINT",o),process.off("SIGTERM",r),clearTimeout(i);}}var yy=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,n=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();n&&await Te(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:qse}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${qse}ms reached while waiting for running tests to settle.`);});let o=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||o.has(r.activeRun.runId))continue;let{activeRun:i}=r,s={results:[],beforeResults:[],afterResults:[],test:i.testDefinition,filePath:i.testDefinition.relativeFilePath,startedAt:i.startedAt,lastAttemptStartedAt:i.startedAt,finishedAt:new Date,status:"CANCELLED",attempts:0,runId:i.runId,cancellationReason:t,quarantined:i.quarantined,quarantinedMetadata:i.quarantinedMetadata,parameters:{testInputs:i.inputs,envName:this.params.envName,urlOverride:this.params.urlOverride,customHeaders:this.params.customHeaders},outputs:{}};this.cancelledRunsById.set(i.runId,s);}}resolveNext(){if(this.params.next)return this.params.next;let t=[...this.params.testsToRun??[]];return ()=>Promise.resolve(t.shift())}async run(){let t=this.resolveNext(),{parallel:n,reporter:o,runGroupTracer:r,runGroupLogger:i,logger:s,project:a,client:l,generator:c,orgId:d,userId:u,devicePixelRatio:p,outputDir:m,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:T,gitMetadata:A,cacheOptions:E,browserTypeOverride:v,remoteBrowserOverride:w,onResult:P,onFatal:x}=this.params,R=0,_=true;for(;_;){let O=Object.values(this.runQueue);if(O.length===n&&await Promise.race(O.map(Z=>Z.promise)),this.cancelled){_=false;continue}let D=await t();if(D===void 0){_=false;continue}let U=`test-${R++}`,G={...D,startedAt:new Date},ne=new AbortController;this.runQueue[U]={done:false,activeRun:G,abortController:ne,promise:(async({inputs:Z,quarantined:j,quarantinedMetadata:W,testDefinition:V,snapshot:ee,runId:oe})=>{let H=V.relativeFilePath.includes("..")?V.fullFilePath:V.relativeFilePath;o.onTestBegin(H);let Q=i.child({testId:V.id,runId:oe}),ce=new Sd({logger:Q,reporter:new _d(l),runType:"test-run",runId:oe,testMetadata:V,suiteMetadata:void 0,runner:"test-runner"});try{let Fe=await Wse({testDefinition:V,snapshot:ee,project:a,testInputs:Z,quarantined:j,quarantinedMetadata:W,orgId:d,userId:u,runId:oe,devicePixelRatio:p,apiClient:l,runGroupTracer:r,outputDir:m,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:T,logUpdate:(Oe,Ie)=>o.onTestStatus(H,Oe,Ie),...X4(o,H),logger:Q,gitMetadata:A,cacheOptions:E,usageTracker:ce,browserTypeOverride:v,remoteBrowserOverride:w,recordVideo:this.params.recordVideo,abortSignal:ne.signal});o.onTestEnd(H,Fe.status,{recovered:Fe.status==="PASSED"&&!!Fe.failureRecoveryDetails?.attempts}),this.runResults.push(Fe),P?.(Fe);}catch(Fe){let Oe=`Encountered unexpected fatal error when running test '${V.name}'`;Q.error({err:Fe},Oe),C.error({err:Fe},Oe),Eu(Fe),x?.(Fe),await this.cancel("Fatal error occurred",false);}finally{let Fe=this.runQueue[U];Fe&&(Fe.done=true),await ce.flush(s),delete this.runQueue[U];}})(G)};}return await Promise.allSettled(Object.values(this.runQueue).map(O=>O.promise)),{runResults:this.runResults,cancelledRunsById:this.cancelledRunsById,cancelled:this.cancelled,cancellationReason:this.cancellationReason}}};function cU(e){return createHash("sha1").update(e).digest("hex")}var LKe=["tab","view","mode","step"],kKe=[/^[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 DKe(e){return kKe.some(t=>t.test(e))}function Kse(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??LKe),i=n.pathname.split("/").map(c=>c.length>0&&DKe(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 FKe=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),BKe=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,UKe=[/\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],Yse=new Set(["h1","h2","h3","h4","h5","h6"]),HKe=new Set(["input","select","textarea"]);function GKe(e){let t=e;for(let n of UKe)t=t.replace(n,"{id}");return t}function Jse(e){return GKe(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function $Ke(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 jKe(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":BKe.test(t)?"@gen":Jse(t)}function Xse(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=>FKe.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=jKe(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"||Yse.has(o)?n.tokens.push(`label=${Jse(a)}`):n.tokens.push($Ke(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(HKe.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(Yse.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])Xse(l,t+1,n);}function Qse(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return Xse(e,0,t),{tokens:t.tokens,counts:t.counts}}function Zse(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 g_=128,VKe=4294967295,zKe=(()=>{let e=[];for(let t=0;t<g_;t++)e.push(Zse(`perm:${t}`,0));return e})();function eae(e){let t=new Uint32Array(g_);for(let o=0;o<g_;o++)t[o]=VKe;let n=new Set(e);for(let o of n)for(let r=0;r<g_;r++){let i=Zse(o,zKe[r]);i<t[r]&&(t[r]=i);}return t}var qKe=32;function dU(e){let t=Kse(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=Qse(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=eae(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,qKe),minhash:Array.from(i),canonicalUrl:t}}var KKe=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]),_n="\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 Ui={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function f_(e){return e>=55296&&e<=57343}function tae(e){return e>=56320&&e<=57343}function nae(e,t){return (e-55296)*1024+9216+t}function y_(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function S_(e){return e>=64976&&e<=65007||KKe.has(e)}var ie;(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";})(ie||(ie={}));var JKe=65536,b_=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=JKe,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(tae(n))return this.pos++,this._addGap(),nae(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,M.EOF;return this._err(ie.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,f_(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){y_(t)?this._err(ie.controlCharacterInInputStream):S_(t)&&this._err(ie.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var zt;(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";})(zt||(zt={}));function T_(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 QKe=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 oae(e){return e>=55296&&e<=57343||e>1114111?65533:QKe.get(e)??e}function rae(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 uU=rae("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 di;(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";})(di||(di={}));var bo;(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";})(bo||(bo={}));var iae=32;function pU(e){return e>=bo.ZERO&&e<=bo.NINE}function ZKe(e){return e>=bo.UPPER_A&&e<=bo.UPPER_F||e>=bo.LOWER_A&&e<=bo.LOWER_F}function eYe(e){return e>=bo.UPPER_A&&e<=bo.UPPER_Z||e>=bo.LOWER_A&&e<=bo.LOWER_Z||pU(e)}function tYe(e){return e===bo.EQUALS||eYe(e)}var Ir;(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";})(Ir||(Ir={}));var zc;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(zc||(zc={}));var A_=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=Ir.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=zc.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ir.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case Ir.EntityStart:return t.charCodeAt(n)===bo.NUM?(this.state=Ir.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=Ir.NamedEntity,this.stateNamedEntity(t,n));case Ir.NumericStart:return this.stateNumericStart(t,n);case Ir.NumericDecimal:return this.stateNumericDecimal(t,n);case Ir.NumericHex:return this.stateNumericHex(t,n);case Ir.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|iae)===bo.LOWER_X?(this.state=Ir.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=Ir.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(pU(o)||ZKe(o)){let r=o<=bo.NINE?o-bo.ZERO:(o|iae)-bo.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(pU(o))this.result=this.result*10+(o-bo.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===bo.SEMI)this.consumed+=1;else if(this.decodeMode===zc.Strict)return 0;return this.emitCodePoint(oae(this.result),this.consumed),this.errors&&(t!==bo.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&di.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&di.FLAG13){let a=(r&di.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&di.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&di.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===bo.SEMI&&i!==0&&r&di.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=nYe(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===zc.Attribute&&(i===0||tYe(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&di.VALUE_LENGTH)>>14,i!==0){if(s===bo.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==zc.Strict&&!(r&di.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]&di.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]&~(di.VALUE_LENGTH|di.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case Ir.NamedEntity:return this.result!==0&&(this.decodeMode!==zc.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ir.NumericDecimal:return this.emitNumericEntity(0,2);case Ir.NumericHex:return this.emitNumericEntity(0,3);case Ir.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ir.EntityStart:return 0}}};function nYe(e,t,n,o){let r=(t&di.BRANCH_LENGTH)>>7,i=t&di.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 ge;(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/";})(ge||(ge={}));var eu;(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";})(eu||(eu={}));var Hi;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Hi||(Hi={}));var X;(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";})(X||(X={}));var S;(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";})(S||(S={}));var oYe=new Map([[X.A,S.A],[X.ADDRESS,S.ADDRESS],[X.ANNOTATION_XML,S.ANNOTATION_XML],[X.APPLET,S.APPLET],[X.AREA,S.AREA],[X.ARTICLE,S.ARTICLE],[X.ASIDE,S.ASIDE],[X.B,S.B],[X.BASE,S.BASE],[X.BASEFONT,S.BASEFONT],[X.BGSOUND,S.BGSOUND],[X.BIG,S.BIG],[X.BLOCKQUOTE,S.BLOCKQUOTE],[X.BODY,S.BODY],[X.BR,S.BR],[X.BUTTON,S.BUTTON],[X.CAPTION,S.CAPTION],[X.CENTER,S.CENTER],[X.CODE,S.CODE],[X.COL,S.COL],[X.COLGROUP,S.COLGROUP],[X.DD,S.DD],[X.DESC,S.DESC],[X.DETAILS,S.DETAILS],[X.DIALOG,S.DIALOG],[X.DIR,S.DIR],[X.DIV,S.DIV],[X.DL,S.DL],[X.DT,S.DT],[X.EM,S.EM],[X.EMBED,S.EMBED],[X.FIELDSET,S.FIELDSET],[X.FIGCAPTION,S.FIGCAPTION],[X.FIGURE,S.FIGURE],[X.FONT,S.FONT],[X.FOOTER,S.FOOTER],[X.FOREIGN_OBJECT,S.FOREIGN_OBJECT],[X.FORM,S.FORM],[X.FRAME,S.FRAME],[X.FRAMESET,S.FRAMESET],[X.H1,S.H1],[X.H2,S.H2],[X.H3,S.H3],[X.H4,S.H4],[X.H5,S.H5],[X.H6,S.H6],[X.HEAD,S.HEAD],[X.HEADER,S.HEADER],[X.HGROUP,S.HGROUP],[X.HR,S.HR],[X.HTML,S.HTML],[X.I,S.I],[X.IMG,S.IMG],[X.IMAGE,S.IMAGE],[X.INPUT,S.INPUT],[X.IFRAME,S.IFRAME],[X.KEYGEN,S.KEYGEN],[X.LABEL,S.LABEL],[X.LI,S.LI],[X.LINK,S.LINK],[X.LISTING,S.LISTING],[X.MAIN,S.MAIN],[X.MALIGNMARK,S.MALIGNMARK],[X.MARQUEE,S.MARQUEE],[X.MATH,S.MATH],[X.MENU,S.MENU],[X.META,S.META],[X.MGLYPH,S.MGLYPH],[X.MI,S.MI],[X.MO,S.MO],[X.MN,S.MN],[X.MS,S.MS],[X.MTEXT,S.MTEXT],[X.NAV,S.NAV],[X.NOBR,S.NOBR],[X.NOFRAMES,S.NOFRAMES],[X.NOEMBED,S.NOEMBED],[X.NOSCRIPT,S.NOSCRIPT],[X.OBJECT,S.OBJECT],[X.OL,S.OL],[X.OPTGROUP,S.OPTGROUP],[X.OPTION,S.OPTION],[X.P,S.P],[X.PARAM,S.PARAM],[X.PLAINTEXT,S.PLAINTEXT],[X.PRE,S.PRE],[X.RB,S.RB],[X.RP,S.RP],[X.RT,S.RT],[X.RTC,S.RTC],[X.RUBY,S.RUBY],[X.S,S.S],[X.SCRIPT,S.SCRIPT],[X.SEARCH,S.SEARCH],[X.SECTION,S.SECTION],[X.SELECT,S.SELECT],[X.SOURCE,S.SOURCE],[X.SMALL,S.SMALL],[X.SPAN,S.SPAN],[X.STRIKE,S.STRIKE],[X.STRONG,S.STRONG],[X.STYLE,S.STYLE],[X.SUB,S.SUB],[X.SUMMARY,S.SUMMARY],[X.SUP,S.SUP],[X.TABLE,S.TABLE],[X.TBODY,S.TBODY],[X.TEMPLATE,S.TEMPLATE],[X.TEXTAREA,S.TEXTAREA],[X.TFOOT,S.TFOOT],[X.TD,S.TD],[X.TH,S.TH],[X.THEAD,S.THEAD],[X.TITLE,S.TITLE],[X.TR,S.TR],[X.TRACK,S.TRACK],[X.TT,S.TT],[X.U,S.U],[X.UL,S.UL],[X.SVG,S.SVG],[X.VAR,S.VAR],[X.WBR,S.WBR],[X.XMP,S.XMP]]);function uh(e){var t;return (t=oYe.get(e))!==null&&t!==void 0?t:S.UNKNOWN}var Ae=S,sae={[ge.HTML]:new Set([Ae.ADDRESS,Ae.APPLET,Ae.AREA,Ae.ARTICLE,Ae.ASIDE,Ae.BASE,Ae.BASEFONT,Ae.BGSOUND,Ae.BLOCKQUOTE,Ae.BODY,Ae.BR,Ae.BUTTON,Ae.CAPTION,Ae.CENTER,Ae.COL,Ae.COLGROUP,Ae.DD,Ae.DETAILS,Ae.DIR,Ae.DIV,Ae.DL,Ae.DT,Ae.EMBED,Ae.FIELDSET,Ae.FIGCAPTION,Ae.FIGURE,Ae.FOOTER,Ae.FORM,Ae.FRAME,Ae.FRAMESET,Ae.H1,Ae.H2,Ae.H3,Ae.H4,Ae.H5,Ae.H6,Ae.HEAD,Ae.HEADER,Ae.HGROUP,Ae.HR,Ae.HTML,Ae.IFRAME,Ae.IMG,Ae.INPUT,Ae.LI,Ae.LINK,Ae.LISTING,Ae.MAIN,Ae.MARQUEE,Ae.MENU,Ae.META,Ae.NAV,Ae.NOEMBED,Ae.NOFRAMES,Ae.NOSCRIPT,Ae.OBJECT,Ae.OL,Ae.P,Ae.PARAM,Ae.PLAINTEXT,Ae.PRE,Ae.SCRIPT,Ae.SECTION,Ae.SELECT,Ae.SOURCE,Ae.STYLE,Ae.SUMMARY,Ae.TABLE,Ae.TBODY,Ae.TD,Ae.TEMPLATE,Ae.TEXTAREA,Ae.TFOOT,Ae.TH,Ae.THEAD,Ae.TITLE,Ae.TR,Ae.TRACK,Ae.UL,Ae.WBR,Ae.XMP]),[ge.MATHML]:new Set([Ae.MI,Ae.MO,Ae.MN,Ae.MS,Ae.MTEXT,Ae.ANNOTATION_XML]),[ge.SVG]:new Set([Ae.TITLE,Ae.FOREIGN_OBJECT,Ae.DESC]),[ge.XLINK]:new Set,[ge.XML]:new Set,[ge.XMLNS]:new Set},IA=new Set([Ae.H1,Ae.H2,Ae.H3,Ae.H4,Ae.H5,Ae.H6]);new Set([X.STYLE,X.SCRIPT,X.XMP,X.IFRAME,X.NOEMBED,X.NOFRAMES,X.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 ui={DATA:k.DATA,RCDATA:k.RCDATA,RAWTEXT:k.RAWTEXT,SCRIPT_DATA:k.SCRIPT_DATA,PLAINTEXT:k.PLAINTEXT,CDATA_SECTION:k.CDATA_SECTION};function iYe(e){return e>=M.DIGIT_0&&e<=M.DIGIT_9}function xA(e){return e>=M.LATIN_CAPITAL_A&&e<=M.LATIN_CAPITAL_Z}function sYe(e){return e>=M.LATIN_SMALL_A&&e<=M.LATIN_SMALL_Z}function _p(e){return sYe(e)||xA(e)}function aae(e){return _p(e)||iYe(e)}function E_(e){return e+32}function cae(e){return e===M.SPACE||e===M.LINE_FEED||e===M.TABULATION||e===M.FORM_FEED}function lae(e){return cae(e)||e===M.SOLIDUS||e===M.GREATER_THAN_SIGN}function aYe(e){return e===M.NULL?ie.nullCharacterReference:e>1114111?ie.characterReferenceOutsideUnicodeRange:f_(e)?ie.surrogateCharacterReference:S_(e)?ie.noncharacterCharacterReference:y_(e)||e===M.CARRIAGE_RETURN?ie.controlCharacterReference:null}var _A=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 b_(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new A_(uU,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ie.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(ie.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=aYe(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:zt.START_TAG,tagName:"",tagID:S.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:zt.END_TAG,tagName:"",tagID:S.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:zt.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:zt.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(T_(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(ie.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=uh(t.tagName),t.type===zt.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ie.endTagWithAttributes),t.selfClosing&&this._err(ie.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 zt.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case zt.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case zt.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:zt.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=cae(t)?zt.WHITESPACE_CHARACTER:t===M.NULL?zt.NULL_CHARACTER:zt.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(zt.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=k.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?zc.Attribute:zc.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(ie.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(ie.unexpectedNullCharacter),this._emitChars(_n);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(ie.unexpectedNullCharacter),this._emitChars(_n);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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case M.NULL:{this._err(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(_p(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(ie.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=k.BOGUS_COMMENT,this._stateBogusComment(t);break}case M.EOF:{this._err(ie.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ie.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=k.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(_p(t))this._createEndTagToken(),this.state=k.TAG_NAME,this._stateTagName(t);else switch(t){case M.GREATER_THAN_SIGN:{this._err(ie.missingEndTagName),this.state=k.DATA;break}case M.EOF:{this._err(ie.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.tagName+=_n;break}case M.EOF:{this._err(ie.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(xA(t)?E_(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){_p(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){_p(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){_p(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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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:_p(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){_p(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(Ui.SCRIPT,false)&&lae(this.preprocessor.peek(Ui.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<Ui.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(ie.unexpectedNullCharacter),this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.state=k.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(_n);break}case M.EOF:{this._err(ie.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(Ui.SCRIPT,false)&&lae(this.preprocessor.peek(Ui.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<Ui.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(ie.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(ie.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case M.NULL:{this._err(ie.unexpectedNullCharacter),this.currentAttr.name+=_n;break}default:this.currentAttr.name+=String.fromCodePoint(xA(t)?E_(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(ie.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(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),this.currentAttr.value+=_n;break}case M.QUOTATION_MARK:case M.APOSTROPHE:case M.LESS_THAN_SIGN:case M.EQUALS_SIGN:case M.GRAVE_ACCENT:{this._err(ie.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case M.EOF:{this._err(ie.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(ie.eofInTag),this._emitEOFToken();break}default:this._err(ie.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(ie.eofInTag),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.data+=_n;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(Ui.DASH_DASH,true)?(this._createCommentToken(Ui.DASH_DASH.length+1),this.state=k.COMMENT_START):this._consumeSequenceIfMatch(Ui.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(Ui.DOCTYPE.length+1),this.state=k.DOCTYPE):this._consumeSequenceIfMatch(Ui.CDATA_START,true)?this.inForeignNode?this.state=k.CDATA_SECTION:(this._err(ie.cdataInHtmlContent),this._createCommentToken(Ui.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=k.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ie.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(ie.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(ie.abruptClosingOfEmptyComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.data+=_n;break}case M.EOF:{this._err(ie.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(ie.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(ie.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(ie.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(ie.incorrectlyClosedComment),this.state=k.DATA,this.emitCurrentComment(n);break}case M.EOF:{this._err(ie.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(ie.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.missingWhitespaceBeforeDoctypeName),this.state=k.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(xA(t))this._createDoctypeToken(String.fromCharCode(E_(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(ie.unexpectedNullCharacter),this._createDoctypeToken(_n),this.state=k.DOCTYPE_NAME;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.name+=_n;break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(xA(t)?E_(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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(Ui.PUBLIC,false)?this.state=k.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(Ui.SYSTEM,false)?this.state=k.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ie.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(ie.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=k.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.publicId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.publicId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case M.APOSTROPHE:{this._err(ie.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=k.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case M.GREATER_THAN_SIGN:{this._err(ie.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=k.DATA,this.emitCurrentDoctype(n);break}case M.EOF:{this._err(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.unexpectedNullCharacter),n.systemId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.unexpectedNullCharacter),n.systemId+=_n;break}case M.GREATER_THAN_SIGN:{this._err(ie.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=k.DATA;break}case M.EOF:{this._err(ie.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(ie.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(ie.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(ie.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(ie.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()&&aae(this.preprocessor.peek(1))?k.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){aae(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===M.SEMICOLON&&this._err(ie.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var mae=new Set([S.DD,S.DT,S.LI,S.OPTGROUP,S.OPTION,S.P,S.RB,S.RP,S.RT,S.RTC]),dae=new Set([...mae,S.CAPTION,S.COLGROUP,S.TBODY,S.TD,S.TFOOT,S.TH,S.THEAD,S.TR]),C_=new Set([S.APPLET,S.CAPTION,S.HTML,S.MARQUEE,S.OBJECT,S.TABLE,S.TD,S.TEMPLATE,S.TH]),lYe=new Set([...C_,S.OL,S.UL]),cYe=new Set([...C_,S.BUTTON]),uae=new Set([S.ANNOTATION_XML,S.MI,S.MN,S.MO,S.MS,S.MTEXT]),pae=new Set([S.DESC,S.FOREIGN_OBJECT,S.TITLE]),dYe=new Set([S.TR,S.TEMPLATE,S.HTML]),uYe=new Set([S.TBODY,S.TFOOT,S.THEAD,S.TEMPLATE,S.HTML]),pYe=new Set([S.TABLE,S.TEMPLATE,S.HTML]),mYe=new Set([S.TD,S.TH]),R_=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=S.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===S.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===ge.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])!==ge.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(IA,ge.HTML);}popUntilTableCellPopped(){this.popUntilPopped(mYe,ge.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(pYe,ge.HTML);}clearBackToTableBodyContext(){this.clearBackTo(uYe,ge.HTML);}clearBackToTableRowContext(){this.clearBackTo(dYe,ge.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]===S.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]===S.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 ge.HTML:{if(r===t)return true;if(n.has(r))return false;break}case ge.SVG:{if(pae.has(r))return false;break}case ge.MATHML:{if(uae.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,C_)}hasInListItemScope(t){return this.hasInDynamicScope(t,lYe)}hasInButtonScope(t){return this.hasInDynamicScope(t,cYe)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case ge.HTML:{if(IA.has(n))return true;if(C_.has(n))return false;break}case ge.SVG:{if(pae.has(n))return false;break}case ge.MATHML:{if(uae.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===ge.HTML)switch(this.tagIDs[n]){case t:return true;case S.TABLE:case S.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===ge.HTML)switch(this.tagIDs[t]){case S.TBODY:case S.THEAD:case S.TFOOT:return true;case S.TABLE:case S.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===ge.HTML)switch(this.tagIDs[n]){case t:return true;case S.OPTION:case S.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&mae.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&dae.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&dae.has(this.currentTagId);)this.pop();}};var Cl;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cl||(Cl={}));var hae={type:Cl.Marker},v_=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===Cl.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(hae);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cl.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Cl.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(hae);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Cl.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Cl.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Cl.Element&&n.element===t)}};var Rl={createDocument(){return {nodeName:"#document",mode:Hi.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};Rl.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(Rl.isTextNode(n)){n.value+=t;return}}Rl.appendChild(e,Rl.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Rl.isTextNode(o)?o.value+=t:Rl.insertBefore(e,Rl.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 fae="html",hYe="about:legacy-compat",gYe="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",yae=["+//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//"],fYe=[...yae,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],yYe=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Sae=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],SYe=[...Sae,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function gae(e,t){return t.some(n=>e.startsWith(n))}function bae(e){return e.name===fae&&e.publicId===null&&(e.systemId===null||e.systemId===hYe)}function Tae(e){if(e.name!==fae)return Hi.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===gYe)return Hi.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),yYe.has(n))return Hi.QUIRKS;let o=t===null?fYe:yae;if(gae(n,o))return Hi.QUIRKS;if(o=t===null?Sae:SYe,gae(n,o))return Hi.LIMITED_QUIRKS}return Hi.NO_QUIRKS}var Aae={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},TYe="definitionurl",AYe="definitionURL",EYe=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])),CYe=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:ge.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:ge.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:ge.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:ge.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:ge.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:ge.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:ge.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:ge.XML}],["xml:space",{prefix:"xml",name:"space",namespace:ge.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:ge.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:ge.XMLNS}]]),RYe=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])),vYe=new Set([S.B,S.BIG,S.BLOCKQUOTE,S.BODY,S.BR,S.CENTER,S.CODE,S.DD,S.DIV,S.DL,S.DT,S.EM,S.EMBED,S.H1,S.H2,S.H3,S.H4,S.H5,S.H6,S.HEAD,S.HR,S.I,S.IMG,S.LI,S.LISTING,S.MENU,S.META,S.NOBR,S.OL,S.P,S.PRE,S.RUBY,S.S,S.SMALL,S.SPAN,S.STRONG,S.STRIKE,S.SUB,S.SUP,S.TABLE,S.TT,S.U,S.UL,S.VAR]);function Eae(e){let t=e.tagID;return t===S.FONT&&e.attrs.some(({name:o})=>o===eu.COLOR||o===eu.SIZE||o===eu.FACE)||vYe.has(t)}function mU(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===TYe){e.attrs[t].name=AYe;break}}function hU(e){for(let t=0;t<e.attrs.length;t++){let n=EYe.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function w_(e){for(let t=0;t<e.attrs.length;t++){let n=CYe.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 Cae(e){let t=RYe.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=uh(e.tagName));}function wYe(e,t){return t===ge.MATHML&&(e===S.MI||e===S.MO||e===S.MN||e===S.MS||e===S.MTEXT)}function IYe(e,t,n){if(t===ge.MATHML&&e===S.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===eu.ENCODING){let r=n[o].value.toLowerCase();return r===Aae.TEXT_HTML||r===Aae.APPLICATION_XML}}return t===ge.SVG&&(e===S.FOREIGN_OBJECT||e===S.DESC||e===S.TITLE)}function Rae(e,t,n,o){return (!o||o===ge.HTML)&&IYe(e,t,n)||(!o||o===ge.MATHML)&&wYe(e,t)}var xYe="hidden",_Ye=8,PYe=3,B;(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";})(B||(B={}));var OYe={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},_ae=new Set([S.TABLE,S.TBODY,S.TFOOT,S.THEAD,S.TR]),wae={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Rl,onParseError:null},FA=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=B.INITIAL,this.originalInsertionMode=B.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={...wae,...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 _A(this.options,this),this.activeFormattingElements=new v_(this.treeAdapter),this.fragmentContextID=o?uh(this.treeAdapter.getTagName(o)):S.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new R_(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={...wae,...n};t??(t=o.treeAdapter.createElement(X.TEMPLATE,ge.HTML,[]));let r=o.treeAdapter.createElement("documentmock",ge.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===S.TEMPLATE&&i.tmplInsertionModeStack.unshift(B.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:OYe,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)===ge.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,ge.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=B.TEXT;}switchToPlaintextParsing(){this.insertionMode=B.TEXT,this.originalInsertionMode=B.IN_BODY,this.tokenizer.state=ui.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)===X.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==ge.HTML))switch(this.fragmentContextID){case S.TITLE:case S.TEXTAREA:{this.tokenizer.state=ui.RCDATA;break}case S.STYLE:case S.XMP:case S.IFRAME:case S.NOEMBED:case S.NOFRAMES:case S.NOSCRIPT:{this.tokenizer.state=ui.RAWTEXT;break}case S.SCRIPT:{this.tokenizer.state=ui.SCRIPT_DATA;break}case S.PLAINTEXT:{this.tokenizer.state=ui.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,ge.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,ge.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(X.HTML,ge.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,S.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===zt.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===S.SVG&&this.treeAdapter.getTagName(n)===X.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===ge.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===S.MGLYPH||t.tagID===S.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,ge.HTML)}_processToken(t){switch(t.type){case zt.CHARACTER:{this.onCharacter(t);break}case zt.NULL_CHARACTER:{this.onNullCharacter(t);break}case zt.COMMENT:{this.onComment(t);break}case zt.DOCTYPE:{this.onDoctype(t);break}case zt.START_TAG:{this._processStartTag(t);break}case zt.END_TAG:{this.onEndTag(t);break}case zt.EOF:{this.onEof(t);break}case zt.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return Rae(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Cl.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=B.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(S.P),this.openElements.popUntilTagNamePopped(S.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case S.TR:{this.insertionMode=B.IN_ROW;return}case S.TBODY:case S.THEAD:case S.TFOOT:{this.insertionMode=B.IN_TABLE_BODY;return}case S.CAPTION:{this.insertionMode=B.IN_CAPTION;return}case S.COLGROUP:{this.insertionMode=B.IN_COLUMN_GROUP;return}case S.TABLE:{this.insertionMode=B.IN_TABLE;return}case S.BODY:{this.insertionMode=B.IN_BODY;return}case S.FRAMESET:{this.insertionMode=B.IN_FRAMESET;return}case S.SELECT:{this._resetInsertionModeForSelect(t);return}case S.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case S.HTML:{this.insertionMode=this.headElement?B.AFTER_HEAD:B.BEFORE_HEAD;return}case S.TD:case S.TH:{if(t>0){this.insertionMode=B.IN_CELL;return}break}case S.HEAD:{if(t>0){this.insertionMode=B.IN_HEAD;return}break}}this.insertionMode=B.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===S.TEMPLATE)break;if(o===S.TABLE){this.insertionMode=B.IN_SELECT_IN_TABLE;return}}this.insertionMode=B.IN_SELECT;}_isElementCausesFosterParenting(t){return _ae.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 S.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===ge.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case S.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 sae[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){aXe(this,t);return}switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:{Oae(this,t);break}case B.TEXT:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_TABLE_TEXT:{Fae(this,t);break}case B.IN_COLUMN_GROUP:{x_(this,t);break}case B.AFTER_BODY:{__(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){sXe(this,t);return}switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.TEXT:{this._insertCharacters(t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_COLUMN_GROUP:{x_(this,t);break}case B.AFTER_BODY:{__(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){fU(this,t);return}switch(this.insertionMode){case B.INITIAL:case B.BEFORE_HTML:case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_TEMPLATE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:{fU(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.AFTER_BODY:{BYe(this,t);break}case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{UYe(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case B.INITIAL:{HYe(this,t);break}case B.BEFORE_HEAD:case B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:{this._err(t,ie.misplacedDoctype);break}case B.IN_TABLE_TEXT:{OA(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ie.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?lXe(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{GYe(this,t);break}case B.BEFORE_HEAD:{jYe(this,t);break}case B.IN_HEAD:{vl(this,t);break}case B.IN_HEAD_NO_SCRIPT:{WYe(this,t);break}case B.AFTER_HEAD:{KYe(this,t);break}case B.IN_BODY:{pi(this,t);break}case B.IN_TABLE:{by(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_CAPTION:{VJe(this,t);break}case B.IN_COLUMN_GROUP:{TU(this,t);break}case B.IN_TABLE_BODY:{M_(this,t);break}case B.IN_ROW:{N_(this,t);break}case B.IN_CELL:{qJe(this,t);break}case B.IN_SELECT:{Hae(this,t);break}case B.IN_SELECT_IN_TABLE:{YJe(this,t);break}case B.IN_TEMPLATE:{XJe(this,t);break}case B.AFTER_BODY:{ZJe(this,t);break}case B.IN_FRAMESET:{eXe(this,t);break}case B.AFTER_FRAMESET:{nXe(this,t);break}case B.AFTER_AFTER_BODY:{rXe(this,t);break}case B.AFTER_AFTER_FRAMESET:{iXe(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?cXe(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{$Ye(this,t);break}case B.BEFORE_HEAD:{VYe(this,t);break}case B.IN_HEAD:{zYe(this,t);break}case B.IN_HEAD_NO_SCRIPT:{qYe(this,t);break}case B.AFTER_HEAD:{YYe(this,t);break}case B.IN_BODY:{O_(this,t);break}case B.TEXT:{LJe(this,t);break}case B.IN_TABLE:{BA(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_CAPTION:{zJe(this,t);break}case B.IN_COLUMN_GROUP:{WJe(this,t);break}case B.IN_TABLE_BODY:{yU(this,t);break}case B.IN_ROW:{Uae(this,t);break}case B.IN_CELL:{KJe(this,t);break}case B.IN_SELECT:{Gae(this,t);break}case B.IN_SELECT_IN_TABLE:{JJe(this,t);break}case B.IN_TEMPLATE:{QJe(this,t);break}case B.AFTER_BODY:{jae(this,t);break}case B.IN_FRAMESET:{tXe(this,t);break}case B.AFTER_FRAMESET:{oXe(this,t);break}case B.AFTER_AFTER_BODY:{I_(this,t);break}}}onEof(t){switch(this.insertionMode){case B.INITIAL:{PA(this,t);break}case B.BEFORE_HTML:{MA(this,t);break}case B.BEFORE_HEAD:{NA(this,t);break}case B.IN_HEAD:{LA(this,t);break}case B.IN_HEAD_NO_SCRIPT:{kA(this,t);break}case B.AFTER_HEAD:{DA(this,t);break}case B.IN_BODY:case B.IN_TABLE:case B.IN_CAPTION:case B.IN_COLUMN_GROUP:case B.IN_TABLE_BODY:case B.IN_ROW:case B.IN_CELL:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:{kae(this,t);break}case B.TEXT:{kJe(this,t);break}case B.IN_TABLE_TEXT:{OA(this,t);break}case B.IN_TEMPLATE:{$ae(this,t);break}case B.AFTER_BODY:case B.IN_FRAMESET:case B.AFTER_FRAMESET:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{bU(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 B.IN_HEAD:case B.IN_HEAD_NO_SCRIPT:case B.AFTER_HEAD:case B.TEXT:case B.IN_COLUMN_GROUP:case B.IN_SELECT:case B.IN_SELECT_IN_TABLE:case B.IN_FRAMESET:case B.AFTER_FRAMESET:{this._insertCharacters(t);break}case B.IN_BODY:case B.IN_CAPTION:case B.IN_CELL:case B.IN_TEMPLATE:case B.AFTER_BODY:case B.AFTER_AFTER_BODY:case B.AFTER_AFTER_FRAMESET:{Pae(this,t);break}case B.IN_TABLE:case B.IN_TABLE_BODY:case B.IN_ROW:{gU(this,t);break}case B.IN_TABLE_TEXT:{Dae(this,t);break}}}};function MYe(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):Lae(e,t),n}function NYe(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 LYe(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>=PYe;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=kYe(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function kYe(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 DYe(e,t,n){let o=e.treeAdapter.getTagName(t),r=uh(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===S.TEMPLATE&&i===ge.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function FYe(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 SU(e,t){for(let n=0;n<_Ye;n++){let o=MYe(e,t);if(!o)break;let r=NYe(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=LYe(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&DYe(e,s,i),FYe(e,r,o);}}function fU(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function BYe(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function UYe(e,t){e._appendCommentNode(t,e.document);}function bU(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 HYe(e,t){e._setDocumentType(t);let n=t.forceQuirks?Hi.QUIRKS:Tae(t);bae(t)||e._err(t,ie.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=B.BEFORE_HTML;}function PA(e,t){e._err(t,ie.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Hi.QUIRKS),e.insertionMode=B.BEFORE_HTML,e._processToken(t);}function GYe(e,t){t.tagID===S.HTML?(e._insertElement(t,ge.HTML),e.insertionMode=B.BEFORE_HEAD):MA(e,t);}function $Ye(e,t){let n=t.tagID;(n===S.HTML||n===S.HEAD||n===S.BODY||n===S.BR)&&MA(e,t);}function MA(e,t){e._insertFakeRootElement(),e.insertionMode=B.BEFORE_HEAD,e._processToken(t);}function jYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.HEAD:{e._insertElement(t,ge.HTML),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD;break}default:NA(e,t);}}function VYe(e,t){let n=t.tagID;n===S.HEAD||n===S.BODY||n===S.HTML||n===S.BR?NA(e,t):e._err(t,ie.endTagWithoutMatchingOpenElement);}function NA(e,t){e._insertFakeElement(X.HEAD,S.HEAD),e.headElement=e.openElements.current,e.insertionMode=B.IN_HEAD,e._processToken(t);}function vl(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.TITLE:{e._switchToTextParsing(t,ui.RCDATA);break}case S.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,ui.RAWTEXT):(e._insertElement(t,ge.HTML),e.insertionMode=B.IN_HEAD_NO_SCRIPT);break}case S.NOFRAMES:case S.STYLE:{e._switchToTextParsing(t,ui.RAWTEXT);break}case S.SCRIPT:{e._switchToTextParsing(t,ui.SCRIPT_DATA);break}case S.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=B.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(B.IN_TEMPLATE);break}case S.HEAD:{e._err(t,ie.misplacedStartTagForHeadElement);break}default:LA(e,t);}}function zYe(e,t){switch(t.tagID){case S.HEAD:{e.openElements.pop(),e.insertionMode=B.AFTER_HEAD;break}case S.BODY:case S.BR:case S.HTML:{LA(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function ph(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==S.TEMPLATE&&e._err(t,ie.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(S.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ie.endTagWithoutMatchingOpenElement);}function LA(e,t){e.openElements.pop(),e.insertionMode=B.AFTER_HEAD,e._processToken(t);}function WYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BASEFONT:case S.BGSOUND:case S.HEAD:case S.LINK:case S.META:case S.NOFRAMES:case S.STYLE:{vl(e,t);break}case S.NOSCRIPT:{e._err(t,ie.nestedNoscriptInHead);break}default:kA(e,t);}}function qYe(e,t){switch(t.tagID){case S.NOSCRIPT:{e.openElements.pop(),e.insertionMode=B.IN_HEAD;break}case S.BR:{kA(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function kA(e,t){let n=t.type===zt.EOF?ie.openElementsLeftAfterEof:ie.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=B.IN_HEAD,e._processToken(t);}function KYe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.BODY:{e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=B.IN_BODY;break}case S.FRAMESET:{e._insertElement(t,ge.HTML),e.insertionMode=B.IN_FRAMESET;break}case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:case S.NOFRAMES:case S.SCRIPT:case S.STYLE:case S.TEMPLATE:case S.TITLE:{e._err(t,ie.abandonedHeadElementChild),e.openElements.push(e.headElement,S.HEAD),vl(e,t),e.openElements.remove(e.headElement);break}case S.HEAD:{e._err(t,ie.misplacedStartTagForHeadElement);break}default:DA(e,t);}}function YYe(e,t){switch(t.tagID){case S.BODY:case S.HTML:case S.BR:{DA(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:e._err(t,ie.endTagWithoutMatchingOpenElement);}}function DA(e,t){e._insertFakeElement(X.BODY,S.BODY),e.insertionMode=B.IN_BODY,P_(e,t);}function P_(e,t){switch(t.type){case zt.CHARACTER:{Oae(e,t);break}case zt.WHITESPACE_CHARACTER:{Pae(e,t);break}case zt.COMMENT:{fU(e,t);break}case zt.START_TAG:{pi(e,t);break}case zt.END_TAG:{O_(e,t);break}case zt.EOF:{kae(e,t);break}}}function Pae(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function Oae(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function JYe(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function XYe(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function QYe(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_FRAMESET);}function ZYe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML);}function eJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&IA.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,ge.HTML);}function tJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function nJe(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),n||(e.formElement=e.openElements.current));}function oJe(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===S.LI&&r===S.LI||(n===S.DD||n===S.DT)&&(r===S.DD||r===S.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==S.ADDRESS&&r!==S.DIV&&r!==S.P&&e._isSpecialElement(e.openElements.items[o],r))break}e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML);}function rJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.tokenizer.state=ui.PLAINTEXT;}function iJe(e,t){e.openElements.hasInScope(S.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.framesetOk=false;}function sJe(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(X.A);n&&(SU(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function aJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function lJe(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(S.NOBR)&&(SU(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,ge.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function cJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function dJe(e,t){e.treeAdapter.getDocumentMode(e.document)!==Hi.QUIRKS&&e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=B.IN_TABLE;}function Mae(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,ge.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function Nae(e){let t=T_(e,eu.TYPE);return t!=null&&t.toLowerCase()===xYe}function uJe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,ge.HTML),Nae(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function pJe(e,t){e._appendElement(t,ge.HTML),t.ackSelfClosing=true;}function mJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._appendElement(t,ge.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function hJe(e,t){t.tagName=X.IMG,t.tagID=S.IMG,Mae(e,t);}function gJe(e,t){e._insertElement(t,ge.HTML),e.skipNextNewLine=true,e.tokenizer.state=ui.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=B.TEXT;}function fJe(e,t){e.openElements.hasInButtonScope(S.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,ui.RAWTEXT);}function yJe(e,t){e.framesetOk=false,e._switchToTextParsing(t,ui.RAWTEXT);}function Iae(e,t){e._switchToTextParsing(t,ui.RAWTEXT);}function SJe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===B.IN_TABLE||e.insertionMode===B.IN_CAPTION||e.insertionMode===B.IN_TABLE_BODY||e.insertionMode===B.IN_ROW||e.insertionMode===B.IN_CELL?B.IN_SELECT_IN_TABLE:B.IN_SELECT;}function bJe(e,t){e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML);}function TJe(e,t){e.openElements.hasInScope(S.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,ge.HTML);}function AJe(e,t){e.openElements.hasInScope(S.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(S.RTC),e._insertElement(t,ge.HTML);}function EJe(e,t){e._reconstructActiveFormattingElements(),mU(t),w_(t),t.selfClosing?e._appendElement(t,ge.MATHML):e._insertElement(t,ge.MATHML),t.ackSelfClosing=true;}function CJe(e,t){e._reconstructActiveFormattingElements(),hU(t),w_(t),t.selfClosing?e._appendElement(t,ge.SVG):e._insertElement(t,ge.SVG),t.ackSelfClosing=true;}function xae(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,ge.HTML);}function pi(e,t){switch(t.tagID){case S.I:case S.S:case S.B:case S.U:case S.EM:case S.TT:case S.BIG:case S.CODE:case S.FONT:case S.SMALL:case S.STRIKE:case S.STRONG:{aJe(e,t);break}case S.A:{sJe(e,t);break}case S.H1:case S.H2:case S.H3:case S.H4:case S.H5:case S.H6:{eJe(e,t);break}case S.P:case S.DL:case S.OL:case S.UL:case S.DIV:case S.DIR:case S.NAV:case S.MAIN:case S.MENU:case S.ASIDE:case S.CENTER:case S.FIGURE:case S.FOOTER:case S.HEADER:case S.HGROUP:case S.DIALOG:case S.DETAILS:case S.ADDRESS:case S.ARTICLE:case S.SEARCH:case S.SECTION:case S.SUMMARY:case S.FIELDSET:case S.BLOCKQUOTE:case S.FIGCAPTION:{ZYe(e,t);break}case S.LI:case S.DD:case S.DT:{oJe(e,t);break}case S.BR:case S.IMG:case S.WBR:case S.AREA:case S.EMBED:case S.KEYGEN:{Mae(e,t);break}case S.HR:{mJe(e,t);break}case S.RB:case S.RTC:{TJe(e,t);break}case S.RT:case S.RP:{AJe(e,t);break}case S.PRE:case S.LISTING:{tJe(e,t);break}case S.XMP:{fJe(e,t);break}case S.SVG:{CJe(e,t);break}case S.HTML:{JYe(e,t);break}case S.BASE:case S.LINK:case S.META:case S.STYLE:case S.TITLE:case S.SCRIPT:case S.BGSOUND:case S.BASEFONT:case S.TEMPLATE:{vl(e,t);break}case S.BODY:{XYe(e,t);break}case S.FORM:{nJe(e,t);break}case S.NOBR:{lJe(e,t);break}case S.MATH:{EJe(e,t);break}case S.TABLE:{dJe(e,t);break}case S.INPUT:{uJe(e,t);break}case S.PARAM:case S.TRACK:case S.SOURCE:{pJe(e,t);break}case S.IMAGE:{hJe(e,t);break}case S.BUTTON:{iJe(e,t);break}case S.APPLET:case S.OBJECT:case S.MARQUEE:{cJe(e,t);break}case S.IFRAME:{yJe(e,t);break}case S.SELECT:{SJe(e,t);break}case S.OPTION:case S.OPTGROUP:{bJe(e,t);break}case S.NOEMBED:case S.NOFRAMES:{Iae(e,t);break}case S.FRAMESET:{QYe(e,t);break}case S.TEXTAREA:{gJe(e,t);break}case S.NOSCRIPT:{e.options.scriptingEnabled?Iae(e,t):xae(e,t);break}case S.PLAINTEXT:{rJe(e,t);break}case S.COL:case S.TH:case S.TD:case S.TR:case S.HEAD:case S.FRAME:case S.TBODY:case S.TFOOT:case S.THEAD:case S.CAPTION:case S.COLGROUP:break;default:xae(e,t);}}function RJe(e,t){if(e.openElements.hasInScope(S.BODY)&&(e.insertionMode=B.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function vJe(e,t){e.openElements.hasInScope(S.BODY)&&(e.insertionMode=B.AFTER_BODY,jae(e,t));}function wJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function IJe(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(S.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(S.FORM):n&&e.openElements.remove(n));}function xJe(e){e.openElements.hasInButtonScope(S.P)||e._insertFakeElement(X.P,S.P),e._closePElement();}function _Je(e){e.openElements.hasInListItemScope(S.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(S.LI),e.openElements.popUntilTagNamePopped(S.LI));}function PJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function OJe(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function MJe(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function NJe(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(X.BR,S.BR),e.openElements.pop(),e.framesetOk=false;}function Lae(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!==S.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 O_(e,t){switch(t.tagID){case S.A:case S.B:case S.I:case S.S:case S.U:case S.EM:case S.TT:case S.BIG:case S.CODE:case S.FONT:case S.NOBR:case S.SMALL:case S.STRIKE:case S.STRONG:{SU(e,t);break}case S.P:{xJe(e);break}case S.DL:case S.UL:case S.OL:case S.DIR:case S.DIV:case S.NAV:case S.PRE:case S.MAIN:case S.MENU:case S.ASIDE:case S.BUTTON:case S.CENTER:case S.FIGURE:case S.FOOTER:case S.HEADER:case S.HGROUP:case S.DIALOG:case S.ADDRESS:case S.ARTICLE:case S.DETAILS:case S.SEARCH:case S.SECTION:case S.SUMMARY:case S.LISTING:case S.FIELDSET:case S.BLOCKQUOTE:case S.FIGCAPTION:{wJe(e,t);break}case S.LI:{_Je(e);break}case S.DD:case S.DT:{PJe(e,t);break}case S.H1:case S.H2:case S.H3:case S.H4:case S.H5:case S.H6:{OJe(e);break}case S.BR:{NJe(e);break}case S.BODY:{RJe(e,t);break}case S.HTML:{vJe(e,t);break}case S.FORM:{IJe(e);break}case S.APPLET:case S.OBJECT:case S.MARQUEE:{MJe(e,t);break}case S.TEMPLATE:{ph(e,t);break}default:Lae(e,t);}}function kae(e,t){e.tmplInsertionModeStack.length>0?$ae(e,t):bU(e,t);}function LJe(e,t){var n;t.tagID===S.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function kJe(e,t){e._err(t,ie.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function gU(e,t){if(e.openElements.currentTagId!==void 0&&_ae.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=B.IN_TABLE_TEXT,t.type){case zt.CHARACTER:{Fae(e,t);break}case zt.WHITESPACE_CHARACTER:{Dae(e,t);break}}else UA(e,t);}function DJe(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_CAPTION;}function FJe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_COLUMN_GROUP;}function BJe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(X.COLGROUP,S.COLGROUP),e.insertionMode=B.IN_COLUMN_GROUP,TU(e,t);}function UJe(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_TABLE_BODY;}function HJe(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(X.TBODY,S.TBODY),e.insertionMode=B.IN_TABLE_BODY,M_(e,t);}function GJe(e,t){e.openElements.hasInTableScope(S.TABLE)&&(e.openElements.popUntilTagNamePopped(S.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function $Je(e,t){Nae(t)?e._appendElement(t,ge.HTML):UA(e,t),t.ackSelfClosing=true;}function jJe(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,ge.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function by(e,t){switch(t.tagID){case S.TD:case S.TH:case S.TR:{HJe(e,t);break}case S.STYLE:case S.SCRIPT:case S.TEMPLATE:{vl(e,t);break}case S.COL:{BJe(e,t);break}case S.FORM:{jJe(e,t);break}case S.TABLE:{GJe(e,t);break}case S.TBODY:case S.TFOOT:case S.THEAD:{UJe(e,t);break}case S.INPUT:{$Je(e,t);break}case S.CAPTION:{DJe(e,t);break}case S.COLGROUP:{FJe(e,t);break}default:UA(e,t);}}function BA(e,t){switch(t.tagID){case S.TABLE:{e.openElements.hasInTableScope(S.TABLE)&&(e.openElements.popUntilTagNamePopped(S.TABLE),e._resetInsertionMode());break}case S.TEMPLATE:{ph(e,t);break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TBODY:case S.TD:case S.TFOOT:case S.TH:case S.THEAD:case S.TR:break;default:UA(e,t);}}function UA(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,P_(e,t),e.fosterParentingEnabled=n;}function Dae(e,t){e.pendingCharacterTokens.push(t);}function Fae(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function OA(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)UA(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var Bae=new Set([S.CAPTION,S.COL,S.COLGROUP,S.TBODY,S.TD,S.TFOOT,S.TH,S.THEAD,S.TR]);function VJe(e,t){let n=t.tagID;Bae.has(n)?e.openElements.hasInTableScope(S.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_TABLE,by(e,t)):pi(e,t);}function zJe(e,t){let n=t.tagID;switch(n){case S.CAPTION:case S.TABLE:{e.openElements.hasInTableScope(S.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(S.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_TABLE,n===S.TABLE&&BA(e,t));break}case S.BODY:case S.COL:case S.COLGROUP:case S.HTML:case S.TBODY:case S.TD:case S.TFOOT:case S.TH:case S.THEAD:case S.TR:break;default:O_(e,t);}}function TU(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.COL:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.TEMPLATE:{vl(e,t);break}default:x_(e,t);}}function WJe(e,t){switch(t.tagID){case S.COLGROUP:{e.openElements.currentTagId===S.COLGROUP&&(e.openElements.pop(),e.insertionMode=B.IN_TABLE);break}case S.TEMPLATE:{ph(e,t);break}case S.COL:break;default:x_(e,t);}}function x_(e,t){e.openElements.currentTagId===S.COLGROUP&&(e.openElements.pop(),e.insertionMode=B.IN_TABLE,e._processToken(t));}function M_(e,t){switch(t.tagID){case S.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_ROW;break}case S.TH:case S.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(X.TR,S.TR),e.insertionMode=B.IN_ROW,N_(e,t);break}case S.CAPTION:case S.COL:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE,by(e,t));break}default:by(e,t);}}function yU(e,t){let n=t.tagID;switch(t.tagID){case S.TBODY:case S.TFOOT:case S.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE);break}case S.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE,BA(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TD:case S.TH:case S.TR:break;default:BA(e,t);}}function N_(e,t){switch(t.tagID){case S.TH:case S.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,ge.HTML),e.insertionMode=B.IN_CELL,e.activeFormattingElements.insertMarker();break}case S.CAPTION:case S.COL:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:case S.TR:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,M_(e,t));break}default:by(e,t);}}function Uae(e,t){switch(t.tagID){case S.TR:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY);break}case S.TABLE:{e.openElements.hasInTableScope(S.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,yU(e,t));break}case S.TBODY:case S.TFOOT:case S.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(S.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=B.IN_TABLE_BODY,yU(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:case S.TD:case S.TH:break;default:BA(e,t);}}function qJe(e,t){let n=t.tagID;Bae.has(n)?(e.openElements.hasInTableScope(S.TD)||e.openElements.hasInTableScope(S.TH))&&(e._closeTableCell(),N_(e,t)):pi(e,t);}function KJe(e,t){let n=t.tagID;switch(n){case S.TD:case S.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=B.IN_ROW);break}case S.TABLE:case S.TBODY:case S.TFOOT:case S.THEAD:case S.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Uae(e,t));break}case S.BODY:case S.CAPTION:case S.COL:case S.COLGROUP:case S.HTML:break;default:O_(e,t);}}function Hae(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.OPTION:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e._insertElement(t,ge.HTML);break}case S.OPTGROUP:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop(),e._insertElement(t,ge.HTML);break}case S.HR:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop(),e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.INPUT:case S.KEYGEN:case S.TEXTAREA:case S.SELECT:{e.openElements.hasInSelectScope(S.SELECT)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),t.tagID!==S.SELECT&&e._processStartTag(t));break}case S.SCRIPT:case S.TEMPLATE:{vl(e,t);break}}}function Gae(e,t){switch(t.tagID){case S.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===S.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===S.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===S.OPTGROUP&&e.openElements.pop();break}case S.OPTION:{e.openElements.currentTagId===S.OPTION&&e.openElements.pop();break}case S.SELECT:{e.openElements.hasInSelectScope(S.SELECT)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode());break}case S.TEMPLATE:{ph(e,t);break}}}function YJe(e,t){let n=t.tagID;n===S.CAPTION||n===S.TABLE||n===S.TBODY||n===S.TFOOT||n===S.THEAD||n===S.TR||n===S.TD||n===S.TH?(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),e._processStartTag(t)):Hae(e,t);}function JJe(e,t){let n=t.tagID;n===S.CAPTION||n===S.TABLE||n===S.TBODY||n===S.TFOOT||n===S.THEAD||n===S.TR||n===S.TD||n===S.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(S.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Gae(e,t);}function XJe(e,t){switch(t.tagID){case S.BASE:case S.BASEFONT:case S.BGSOUND:case S.LINK:case S.META:case S.NOFRAMES:case S.SCRIPT:case S.STYLE:case S.TEMPLATE:case S.TITLE:{vl(e,t);break}case S.CAPTION:case S.COLGROUP:case S.TBODY:case S.TFOOT:case S.THEAD:{e.tmplInsertionModeStack[0]=B.IN_TABLE,e.insertionMode=B.IN_TABLE,by(e,t);break}case S.COL:{e.tmplInsertionModeStack[0]=B.IN_COLUMN_GROUP,e.insertionMode=B.IN_COLUMN_GROUP,TU(e,t);break}case S.TR:{e.tmplInsertionModeStack[0]=B.IN_TABLE_BODY,e.insertionMode=B.IN_TABLE_BODY,M_(e,t);break}case S.TD:case S.TH:{e.tmplInsertionModeStack[0]=B.IN_ROW,e.insertionMode=B.IN_ROW,N_(e,t);break}default:e.tmplInsertionModeStack[0]=B.IN_BODY,e.insertionMode=B.IN_BODY,pi(e,t);}}function QJe(e,t){t.tagID===S.TEMPLATE&&ph(e,t);}function $ae(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(S.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):bU(e,t);}function ZJe(e,t){t.tagID===S.HTML?pi(e,t):__(e,t);}function jae(e,t){var n;if(t.tagID===S.HTML){if(e.fragmentContext||(e.insertionMode=B.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===S.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 __(e,t);}function __(e,t){e.insertionMode=B.IN_BODY,P_(e,t);}function eXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.FRAMESET:{e._insertElement(t,ge.HTML);break}case S.FRAME:{e._appendElement(t,ge.HTML),t.ackSelfClosing=true;break}case S.NOFRAMES:{vl(e,t);break}}}function tXe(e,t){t.tagID===S.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==S.FRAMESET&&(e.insertionMode=B.AFTER_FRAMESET));}function nXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.NOFRAMES:{vl(e,t);break}}}function oXe(e,t){t.tagID===S.HTML&&(e.insertionMode=B.AFTER_AFTER_FRAMESET);}function rXe(e,t){t.tagID===S.HTML?pi(e,t):I_(e,t);}function I_(e,t){e.insertionMode=B.IN_BODY,P_(e,t);}function iXe(e,t){switch(t.tagID){case S.HTML:{pi(e,t);break}case S.NOFRAMES:{vl(e,t);break}}}function sXe(e,t){t.chars=_n,e._insertCharacters(t);}function aXe(e,t){e._insertCharacters(t),e.framesetOk=false;}function Vae(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==ge.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function lXe(e,t){if(Eae(t))Vae(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===ge.MATHML?mU(t):o===ge.SVG&&(Cae(t),hU(t)),w_(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function cXe(e,t){if(t.tagID===S.P||t.tagID===S.BR){Vae(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)===ge.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([X.AREA,X.BASE,X.BASEFONT,X.BGSOUND,X.BR,X.COL,X.EMBED,X.FRAME,X.HR,X.IMG,X.INPUT,X.KEYGEN,X.LINK,X.META,X.PARAM,X.SOURCE,X.TRACK,X.WBR]);function zae(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=FA.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var dXe=5e3,Wae=1024;function AU(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function uXe(e){return e.nodeName==="#text"}function EU(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(uXe(l)){let c=l.value;if(c&&c.trim().length>0){let d=c.length>Wae?c.slice(0,Wae):c;i=i===void 0?d:`${i} ${d}`;}}else if(AU(l)){let c=EU(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 CU(e){let t=zae(e),n={nodesLeft:dXe};for(let i of t.childNodes)if(AU(i)&&i.tagName.toLowerCase()==="body"){let s=EU(i,n);if(s!==void 0)return s}let o=[];for(let i of t.childNodes){if(n.nodesLeft<=0)break;if(AU(i)){let s=EU(i,n);s!==void 0&&o.push(s);}}let r={tag:"body"};return o.length>0&&(r.children=o),r}var pXe=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),mh=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(`${Or}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${Or}/${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))_t.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 vU(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:fj(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function mXe(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 Je(e)}}function RU(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var vU=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 Xu(void 0,c=>this.storeTraceAsset(c)),Ju.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.jpeg`,contents:o});}attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.jpeg`,contents:o});}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.html`,contents:o});}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,url:r,logger:i}=t;this.metadata.afterSnapshotId=n,this.diskStorage.storeFile({name:`${Or}/${n}.html`,contents:o}),this.appGraphSink&&pXe.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";_t.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.diskStorage.storeFile({name:`${Or}/${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:mXe(t.status),finishedAt:t.finishedAt}))));}recordStepDuration(t,n){if(!GC(t))return;let o=HC(t);_t.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:RU(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:bm(r.steps)})),elseSteps:t.elseSteps?bm(t.elseSteps):void 0,status:RU(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:RU(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return Je(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new mh(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var L_=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(Or),this.harPagesStream=this.diskStorage.createFileStream(`${Or}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${Or}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${Or}/resource-usage.ndjson`),this.resourceUsageSampler=Vq({keepSamples:false,onSample:l=>{this.resourceUsageStream.write(`${JSON.stringify(l)}
8849
8849
  `),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 Dn__default.resolve(this.diskStorage.cwd(),Or)}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)}
8850
8850
  `);}appendUiState(t){this.finished||(this.uiStatesStream||(this.uiStatesStream=this.diskStorage.createFileStream(HV)),this.uiStatesStream.write(`${JSON.stringify(t)}
8851
8851
  `));}buildAppGraphSink(){return ({html:t,url:n,stepId:o,parentStepIdChain:r,logger:i})=>{let s=cU(t),a=s===this.previousHtmlByteHash?this.previousFingerprint:void 0;if(!a){try{a=dU({url:n,dom:CU(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)}
@@ -8917,4 +8917,4 @@ Entering interactive mode. Ask follow-up questions about run ${U.context.runId??
8917
8917
  `),D&&!D.timedOut&&(Se.error({sessionId:t,reason:D.reason},"AI explore run failed; emitted partial results"),C.error(`AI explore failed before completing: ${D.reason}. Partial results above reflect work done before the failure.`),await it(),process.exit(1)),D?.timedOut&&(Se.warn({sessionId:t,reason:D.reason,timeoutMinutes:w},"AI explore hit its timeout; emitted partial results"),C.warn(`AI explore stopped at the ${w}-minute timeout. Partial results above reflect work completed before the deadline.`));let U;if(e.build){let{pullRequestUrl:G,authors:ne}=await Sce({behavior:NU({configured:g.onSuccess,patch:e.patch??!1}),apiClient:l,generator:h,gitMetadata:y,repoRoot:x,project:m,explorerResult:P,writtenPaths:R,logger:u,baseSha:_,headSha:O}),Z=Tce({explorerResult:P,gitMetadata:y,pullRequestUrl:G,authors:ne&&ne.length>0?ne:Ace({repoRoot:x,baseSha:_,headSha:O,logger:u}),baseSha:_,headSha:O});Z&&(U=l.sendExploreSlackNotification(Z).catch(j=>{u.error({err:j},"Failed to send explore Slack notification");}));}await Promise.all([it(),U]),process.exit(D?.timedOut?1:0);}catch(a){o.signal.aborted&&(Se.warn({err:a,sessionId:t},"AI explore command cancelled by signal"),C.warn("AI explore cancelled."),await it(),process.exit(130));let l=fH(a);Se.error({err:l,sessionId:t},"AI explore command failed"),C.error({err:l},"AI explore command failed"),await it(),process.exit(1);}finally{Hd(),process.off("SIGINT",i),process.off("SIGTERM",s);}});AH.command("triage").alias("heal").description("Group failed test results by shared test fixes. Alias: heal. Pass --dry-run to print the bucketing plan without healing.").addArgument(new Argument("[results]","Path to the results archive. Omit when using --run-group-id, --run-id, or --git-commit.").argOptional()).addOption(JU).addOption(XU).addOption(QU).addOption(vn).addOption(En).addOption(ln).addOption(lr).addOption(ja).addOption(zA).addOption(Z_).addOption(Cy).addOption(Ry).addOption(fh).addOption(Ey).addOption(Ay).addOption(eH).addOption(ZU).addOption(Q_).addOption(new Option("--start <start>","Arbitrary setup command that will run before Momentic steps begin.")).addOption(new Option("--wait-on <waitOn>","URL to wait to become accessible before Momentic tests begin.")).addOption(new Option("--wait-on-proxy <waitOnProxy>","HTTP proxy to use with the --wait-on command. Specify as https://username:pass@domain.com:2345")).addOption(new Option("--wait-on-timeout <waitOnTimeout>","Max time in seconds to wait for the --wait-on URL to become accessible.").default(60).argParser(Gi)).addOption(tP).addOption(new Option("--limit <limit>","Abort if the number of healable failed runs exceeds this threshold.").argParser(Ty)).addOption(iH).addOption(aH).addOption(J_).addOption(VU).addOption(Y_).option("--dry-run","Print the failure bucketing plan that would be dispatched to healing subagents, then exit without healing any tests.").option("--json","Suppress progress output and print the triage result as JSON.").option("--no-upload","Do not automatically upload the local results archive.").addOption(zU).addOption(jle).addOption(Vle).addOption(zle).action(async(e,t)=>{let n=t.json??false;n&&C.setMinLevel(50);let o=t.runGroupId?sU(t.runGroupId):void 0,r=Array.from(new Set((t.runId??[]).map(p_))),i=t.gitCommit,s=t.dryRun??false,a=Lg(t),l=VA(t.customHeaders),c=await nn({configFilePath:t.config,nameFilter:t.filter}),d=new Ot({baseUrl:t.server,apiKey:t.apiKey,logger:Se,mode:"runner",runner:"result-classification"});await Gr(Se,{announcementsClient:n?void 0:d});let{orgId:u,userId:p,email:m,selfServe:h}=await Pm({client:d,skipPrompts:t.yes});h_({userId:p,orgId:u,email:m,selfServe:h});let g=await ks({project:c,apiClient:d}),f=g.config.ai?.triage,y=f?.remoteBrowser??g.config.browser?.remoteBrowser??false,{parallel:T,autoParallel:A}=EH({options:t,project:g});A||iY({parallel:T,remoteBrowser:y});let E;t.inputCsv&&(E=await m_(t.inputCsv));let v=ch(t.pixelRatio),w=t.headfulBrowser??false,P=ZA.parse({onFail:t.onHealFail??f?.onHealFail,onSuccess:f?.onHealSuccess}),x={...P,onSuccess:NU({configured:P.onSuccess,patch:t.patch??false,explicitOverride:t.onHealSuccess})},R=await ei(Se,d,g),_=ble({resultsDir:e,runGroupId:o,runIds:r,gitCommitSha:i});if(!_){MU({output:void 0,dryRun:s,jsonOutput:n});return}let O=Se.child({cliVersion:Zt,orgId:u,userId:p,serverId:_.serverId});O.info({gitMetadata:R,config:g.config,nodeVersion:process.versions.node},"Got local metadata");let D=new or(g.config.ai?.agentConfig,{baseUrl:t.server,apiKey:t.apiKey,logger:O,mode:"runner",runner:"heal"}),U=new AbortController,G=new AbortController,ne=new Tl({sessionGuard:{maxConcurrentSessions:T,mode:"queue"}});Iu(O),gd(async Q=>{U.abort(),G.abort(),await ne.killAllSessions(Q);});let Z={limit:t.limit,project:g,apiClient:d,generator:D,logger:O,gitMetadata:R,parallel:T,orgId:u,serverId:_.serverId,apiKey:t.apiKey,start:t.start,waitOn:t.waitOn,waitOnProxy:t.waitOnProxy,waitOnTimeout:t.waitOnTimeout,alwaysSaveCache:a.alwaysSaveCache,noCache:a.noCache,regenerateHeal:t.regenerateHeal??false,excludePatterns:t.exclude,skipQuarantined:t.skipQuarantined,sessionOptions:{envName:t.env,urlOverride:t.urlOverride,customHeaders:l,devicePixelRatio:v,testInputs:E&&E.length===1?E[0]:void 0,browserTypeOverride:t.browser,remoteBrowserOverride:y,headfulOverride:w},timeoutMinutes:t.timeoutMinutes,sessionManager:ne,agentOutputStream:t.quiet||n?void 0:process.stdout,dryRun:s,jsonOutput:n,abortController:U};await Au({serviceName:"heal",enabled:t.shareDiagnostics===true});let j=0,W;try{W=await De({name:"heal.run",root:!0,attributes:{"momentic.org_id":u,"momentic.server_id":_.serverId,"momentic.parallel":T,"momentic.dry_run":s},fn:async()=>{switch(_.kind){case "run-group":return tle({...Z,runGroupId:_.runGroupId});case "results":return ele({...Z,resultsDir:_.resultsDir});case "run":return nle({...Z,runIds:_.runIds});case "commit":return ole({...Z,gitCommitSha:_.gitCommitSha});default:return Je(_)}}});}catch(Q){W={heals:[],bucketingIterations:[],healPatches:[],failure:{err:Q,message:Y(Q)}};}if(G.signal.aborted)return;let V=W;if(!s&&!W?.failure)try{let Q=await hle({output:W,resultsDir:_.kind==="results"?_.resultsDir:void 0,resultsUrl:Sle({target:_,appUrl:d.getAppUrl()}),healingConfig:x,gitMetadata:R,project:g,apiClient:d,generator:D,logger:O,suppressOutput:n});V=Q.output,j=Q.exitCode;}catch(Q){V={...W??{heals:[],bucketingIterations:[],healPatches:[]},failure:{err:Q,message:Y(Q)}};}if(MU({output:V,dryRun:s,jsonOutput:n}),G.signal.aborted)return;let ee=_.kind==="results"||_.kind==="run-group"?_:void 0,oe=ee?await rle({output:V,generator:D,logger:O,serverId:ee.runGroupId,dryRun:s,categoryDefinitions:g.config.ai?.classification?.categories??Vi,healingConfig:x,abortSignal:G.signal}):void 0;if(G.signal.aborted)return;let H=false;if(t.upload&&(_.kind==="run-group"||_.kind==="run"||_.kind==="commit"))C.warn("Skipping automatic results upload: this triage source does not provide a local results archive to upload.");else if(t.upload&&_.kind==="results"){oe&&ile({resultsDir:_.resultsDir,summary:oe});let Q=St(),ce=()=>De({name:"file-storage.upload_test_outputs",serviceName:"file-storage",fn:()=>sT({client:d,resultsPath:_.resultsDir})}),Fe=n?await ce():await go({text:"Uploading results to Momentic\u2026",screen:Q},ce);H=Fe.success,Fe.success?(C.success("Uploaded results to Momentic."),C.dimmed(` ${hd(Fe.runGroupUrl,Q)}`)):C.error(`Results upload failed: ${Fe.error}.`);}if(ee&&oe&&!H)try{await d.updateGithubPRHealRiskSummary(ee.runGroupId,{summary:oe});}catch(Q){O.warn({err:Q},"Failed to submit GitHub PR heal risk summary update");}if(V?.failure)throw V.failure.err;await it(),process.exit(j);});Kt.command("upgrade").description("Upgrade your configuration to the latest recommended settings").addOption(ln).addOption(lr).addOption(En).addOption(vn).option("--dry-run","Preview the upgrade without writing any files or pushing snapshots.").action(async e=>{let t=await nn({configFilePath:e.config,nameFilter:e.filter}),n=e.dryRun??false;n||await Uce();let o=new Ot({baseUrl:e.server,apiKey:e.apiKey,logger:Se,mode:"runner",runner:"test-runner"}),{orgId:r}=await o.getAuthInfo(),i=await ei(Se,o,t),s=await h5({project:t,dryRun:n,migrate:()=>nP({project:t,apiClient:o,gitMetadata:i,orgId:r,dryRun:n})});dD({summary:s.migration,fileFormatChanged:s.fileFormatChanged,aiSettings:s.aiSettings,dryRun:n}),s.fileFormatChanged||lD(s.aiSettings)?n?C.success("Dry run complete. Rerun without --dry-run to apply."):(C.success("Upgraded project to latest recommended settings."),C.dimmed(" Optional: rerun tests with --regenerate-cache to rebuild caches from scratch (slower).")):C.success("Project is already up to date."),await it(),process.exit(0);});async function IQe(e){if(e.prompt!==void 0)return e.prompt;if(e.promptFile!==void 0){let t=Dn__default.resolve(process.cwd(),e.promptFile);return rr__default.promises.readFile(t,"utf-8")}}function EH({options:e,project:t}){let n=e.parallel??t.config.parallel??1;if(n!=="auto")return {parallel:n,autoParallel:false};let o=e.remoteBrowsers??t.config.browser?.remoteBrowser??false,r=cpus().length;return {parallel:o?Math.max(1,r*4-2):Math.max(1,Math.floor(r/2)),autoParallel:true}}async function CH(e){let t=e.config.fileFormat==="v2",{totalErrors:n,parsingErrors:o,parsingErrorDetails:r,failedTestFilePaths:i,failedModuleFilePaths:s}=t?await BU({project:e}):await FU({project:e,fix:false});o>0&&(Dg({parsingErrors:o,parsingErrorDetails:r,failedTestFilePaths:i,failedModuleFilePaths:s,rootDir:e.rootDir}),process.exit(1)),n>0&&(C.error(`Found ${n} ${t?"lint ":""}errors`),C.warn(t?"Run 'npx momentic lint' for details":"To fix these errors automatically, run the duplicate-ids check with the --fix flag and then commit the resulting changes"),process.exit(1));}async function xQe(){jce("Main program started");try{await Kt.parseAsync(process.argv),await it();}catch(e){let t={};try{t.playwrightVersion=execSync("npx playwright --version").toString();}catch(o){Se.error({err:o},"Error fetching debug information");}let n=TE(e,_e);n?(Se.error({err:e,debugInfo:t},"User-facing error in CLI"),C.error(n.message)):(Se.error({err:e,debugInfo:t},"Uncaught error in CLI"),C.error({err:e},"Momentic CLI exited unexpectedly")),await it(),process.exit(1);}}w1e.setMaxListeners(25);process.on("warning",e=>{Se.warn({err:e},`Node warning received on CLI: ${e.message}`);});jce("CLI parsing setup complete");xQe();
8918
8918
  //# sourceMappingURL=out.js.map
8919
8919
  //# sourceMappingURL=cli.js.map
8920
- //# debugId=2e88a24b-08c7-5e86-9c68-a5d5a8a16886
8920
+ //# debugId=08d001ae-f8af-52dd-8294-2143e7a037b9