momentic 3.58.0 → 3.58.1
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 +12 -12
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/run-viewer-static/assets/{chart-DrYFmgOo.js → chart-DIO69Y9V.js} +1 -1
- package/run-viewer-static/assets/{index-ChbL7Lax.js → index-tSyu32oO.js} +4 -4
- package/run-viewer-static/assets/{run-group-timeline-CJWWLOv8.js → run-group-timeline-DQ16nPRI.js} +1 -1
- package/run-viewer-static/assets/{step-resource-usage-CO1Y71YS.js → step-resource-usage-DOPTupkV.js} +1 -1
- package/run-viewer-static/index.html +1 -1
- package/static/assets/{index-C6VRmUxW.js → index-KGDmEQt_.js} +4 -4
- package/static/assets/{test-9AuH7ZAf.js → test-BQbf2Esv.js} +3 -3
- package/static/index.html +1 -1
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]="
|
|
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]="56b007c6-ebb7-5dfa-b4ed-de4afd3ae4d3")}catch(e){}}();
|
|
4
4
|
import * as nn from 'fs';
|
|
5
5
|
import nn__default, { statSync, mkdirSync, readFileSync, existsSync, readdir, readdirSync, createReadStream, writeFileSync, appendFileSync, rmSync, unlinkSync, renameSync } from 'fs';
|
|
6
6
|
import * as mn from 'path';
|
|
@@ -177,17 +177,17 @@ What the agent did: ${n}`:t}var _E=_s.extend({type:z.literal("AI_ACTION_DYNAMIC"
|
|
|
177
177
|
`)}logWithLevelHelper(t,o,...n){if(t<this.minLogLevel)return;let r=this.forcedStream??(t>=40?"stderr":"stdout"),i=(...u)=>{let d=e.redactedValues.length===0?u:u.map(m=>typeof m=="string"?e.redact(m):m);return r==="stderr"?console.error(...d):console.log(...d)},a;Array.isArray(n[0])?(a=n[0],n=n.slice(1)):typeof n[0]=="object"&&!(n[0]instanceof Error)&&Object.entries(n[0]).length&&(a={...n[0],...this.logBindings},n=n.slice(1));let s=Jl.level===0,l=s&&t===50?"Error:":s&&t===40?"Warning:":"",c=[];if(l&&c.push(l),c.push(...n),i(o(...c)),a&&!Array.isArray(a)){let u=Object.entries(a);for(let[d,m]of u){let p=m;if(m instanceof Error){p=m.message,i(o(` ${d}:`,p)),i(o(" stack:",m.stack));let g=Object.entries(m).filter(([f])=>f!=="message"&&f!=="stack");for(let[f,y]of g){if(y instanceof Error){i(o(` ${d}.${f}:`,y.message)),y.stack&&i(o(` ${d}.${f}.stack:`,y.stack));continue}if(typeof y=="object"&&y!==null){let b=this.indentMultiline(Gc(y,void 0,2)," ");i(o(` ${d}.${f}:`,b));continue}i(o(` ${d}.${f}:`,y));}}else typeof m=="object"?(p=Gc(m,void 0,2),p=this.indentMultiline(p),i(o(` ${d}:`,p))):i(o(` ${d}:`,p));}}else if(a)for(let u of a){let d=u;typeof u=="object"&&(d=Gc(u,void 0,2),d=d.split(`
|
|
178
178
|
`).map((m,p)=>p>0?` ${m}`:m).join(`
|
|
179
179
|
`)),i(" ",o(d));}}setMinLevel(t){typeof t=="string"?this.minLogLevel=aw[t]:this.minLogLevel=t;}setOutputStream(t){this.forcedStream=t;}log(...t){this.logWithLevel(30,Jl.reset,...t);}info(...t){this.logWithLevel(30,Jl.white,...t);}debug(...t){this.logWithLevel(20,Jl.dim,...t);}warn(...t){this.logWithLevel(40,Jl.yellow,...t);}error(...t){this.logWithLevel(50,Jl.red,...t);}success(...t){this.logWithLevel(30,Jl.green,...t);}dimmed(...t){this.logWithLevel(30,Jl.dim,...t);}underline(...t){this.logWithLevel(30,Jl.underline,...t);}bold(...t){this.logWithLevel(30,Jl.bold,...t);}grey(...t){this.logWithLevel(30,Jl.grey,...t);}child(t){let o=new e(this.minLogLevel,{...this.logBindings,...t});return o.forcedStream=this.forcedStream,o}async flush(){}bindings(){return this.logBindings}},oj=class{debug=()=>{};info=()=>{};warn=()=>{};error=()=>{};success=()=>{};dimmed=()=>{};underline=()=>{};bold=()=>{};grey=()=>{};child=()=>this;flush=async()=>{};bindings=()=>({})},ba=new oj,C=tj._internalSingleton(),J_={},nj=({logger:e,logKey:t,maxCount:o,intervalMs:n},r,i,...a)=>{let s=J_[t];s?clearTimeout(s.timer):(s={count:0,totalCount:0},J_[t]=s),s.totalCount++,s.count<o&&(s.count++,e.debug(r,i,...a)),s.timer=setTimeout(()=>{let l=J_[t];l?.totalCount!==l?.count&&e.debug({logKey:t,totalCount:l?.totalCount,count:l?.count},`Debug logs were rate-limited for ${t}`),delete J_[t];},n);};var rX=1e4;var pS=Hc.extend({browserType:z.enum(jc).optional(),slowMoMs:z.number().optional().refine(e=>e===void 0||e<=rX&&e>=-1,{message:`Slow motion must be between 0 and ${rX} milliseconds`}),basicAuthorization:z.object({username:z.string().optional(),password:z.string().optional()}).optional(),geolocation:z.object({latitude:z.number().refine(e=>e>=-90&&e<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:z.number().refine(e=>e>=-180&&e<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),disableJavaScript:z.boolean().optional(),locale:z.string().optional(),timezone:z.enum(P_).optional(),colorScheme:z.enum(["light","dark"]).optional()}),iX=["extraHeaders","basicAuthorization","localChromeExtensionPaths","proxy"],rj=z.object({useMemory:z.boolean().optional(),failureRecovery:z.boolean().optional().describe("undefined means inherit org settings")}),ij=rj.extend({disableAICaching:z.boolean().optional()}),aBe=z.object({viewport:Rm.optional()}),Ya=aBe.extend(ij.shape).extend(pS.shape),X_=z.object({cron:z.string().refine(e=>isValidCron(e),{error:"Invalid cron expression."}).default("0 0 */1 * *"),enabled:z.boolean().default(false),env:z.string().optional(),timeZone:z.string().default("America/Los_Angeles"),jobKey:z.string().optional()}),Q_=z.object({onSuccess:z.boolean().default(false),failureMessage:z.string().optional(),onFailure:z.boolean().default(true),successMessage:z.string().optional()}),sBe=z.object({name:z.string(),required:z.boolean().optional(),defaultValue:z.string().describe("this is not optional because we need a value when the editor is first loaded")}),aX=sBe.array(),lBe=z.object({name:z.string(),value:z.string()}),Z_=lBe.array(),sX=z.object({name:z.string(),default:z.boolean().optional(),fixtures:$6.array().optional()});var Ds=rj.extend({agentConfig:z.record(z.string(),z.string()).optional(),aiFailureAnalysis:z.boolean().optional(),classification:E5.optional(),healing:xb.optional(),explore:Xx.optional(),select:WJ.optional()}),cBe=z.object({cliOnly:z.boolean().optional(),moDefault:z.boolean().optional(),neverShowUsageBanner:z.boolean().optional(),hideInternalTraceInfo:z.boolean().optional(),bypassUsageLimits:z.boolean().optional()}),sw=z.object({aiActionShorthand:z.boolean().optional().describe("Serialize eligible multi-word AI action V3 goals as bare strings in simplified YAML."),fakerConstantSeed:z.boolean().optional(),isolateCachesByEnvironment:z.boolean().optional(),saveCacheOnCancel:z.boolean().optional()}),uBe=z.enum(["flaky_tests","low_test_coverage","frequent_bugs","fix_flaky_tests","migrate_tests","increase_test_coverage","catch_more_bugs"]),dBe=z.enum(["ios","android","web"]),mBe=z.enum(["selenium","playwright","cypress","puppeteer","maestro","appium","detox","manual_qa","nothing_yet","other"]),sj=z.enum(["advertisement","ai_search","google_search","hacker_news","linkedin","reddit","referral_from_customer","twitter_x","word_of_mouth","youtube","teammate_or_manager","investor_or_accelerator","agent_directory","newsletter","podcast","conference_or_event","billboard","other"]),pBe=z.object({helpIntents:z.array(uBe).optional(),helpIntentOtherText:z.string().optional(),deviceTypeIntent:dBe.optional(),currentTestingTool:mBe.optional(),heardAboutSource:sj.optional(),heardAboutSourceOtherText:z.string().max(200).optional()}),hBe=z.object({discovery:pBe.optional(),needsToCompleteOnboarding:z.boolean().optional(),needsWorkspaceName:z.boolean().optional(),wizardCompletedAt:z.iso.datetime().optional()}),hS=z.object({ai:Ds.optional(),githubAppInstallationId:z.number().nullish(),githubAppSummaryMessageEnabled:z.boolean().nullish(),githubReleaseAppInstallationId:z.number().nullish(),gitlabAppAccessToken:z.string().nullish(),gitlabAppBaseUrl:z.string().nullish(),browser:Az.optional(),internal:cBe.optional(),advanced:sw.optional(),onboarding:hBe.optional()}),gBe=5;function lX(e){let t=e,o=[];for(let n=0;n<gBe;n++){let r=hS.safeParse(t);if(r.success)return o.length>0&&C.warn(`Ignoring cloud settings this version of the CLI does not support: ${o.join(", ")}. Please upgrade. Everything else was applied.`),r.data;let i=fBe(r.error.issues.map(l=>[...l.path]).filter(l=>l.length>0));if(i.length===0)break;let a=structuredClone(t),s=[...i].sort(yBe);for(let l of s)aj(a,l);if(JSON.stringify(a)===JSON.stringify(t)){for(let l of s)l.length>1&&aj(a,l.slice(0,-1));if(JSON.stringify(a)===JSON.stringify(t))break}o.push(...i.map(l=>l.join("."))),t=a;}return C.warn("Cloud settings could not be read by this version of the CLI. Please upgrade. Falling back to defaults."),hS.parse({})}function fBe(e){return [...new Map(e.map(o=>[o.join("\0"),o])).values()]}function yBe(e,t){if(e.length!==t.length)return t.length-e.length;for(let o=e.length-1;o>=0;o--){let n=e[o],r=t[o];if(typeof n=="number"&&typeof r=="number"&&n!==r)return r-n}return 0}function aj(e,t){let[o,...n]=t;if(!(o===void 0||typeof e!="object"||e===null)){if(n.length===0){Array.isArray(e)&&typeof o=="number"?e.splice(o,1):delete e[o];return}aj(e[o],n);}}z.object({globalOverrides:z.record(z.string(),z.string()).optional(),agentConfig:z.record(z.string(),z.string()).optional()});z.record(z.string(),z.string()).nullish();var cX="Evaluating run assertions",eP=z.string();function lw(e){return (e.runAssertions?.length??0)>0}var bBe=z.object({videoName:z.string(),startSeconds:z.number(),endSeconds:z.number().optional()}),lj=z.discriminatedUnion("type",[z.object({type:z.literal("videoMoment"),moment:bBe})]),cj=(r=>(r.PASSED="passed",r.FAILED="failed",r.SKIPPED="skipped",r.INCONCLUSIVE="inconclusive",r))(cj||{}),SBe=z.nativeEnum(cj),TBe=z.array(z.unknown()).default([]).transform(e=>e.flatMap(t=>{let o=lj.safeParse(t);return o.success?[o.data]:[]})),vBe=z.object({description:z.string(),status:SBe,reasoning:z.string(),evidence:TBe}),ABe=z.object({attemptNumber:z.number(),evaluations:vBe.array(),durationMs:z.number()});function uX(e){let t=e.filter(o=>o.status==="failed");if(t.length!==0)return `Run assertion(s) not met: ${t.map(o=>o.description).join("; ")}`}var dX=z.object({attempts:ABe.array()}),EBe=/\[\[e(\d+)\]\]/g;function mX(e){return [...e.matchAll(EBe)].map(t=>Number(t[1]))}var hl={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},zt=(s=>(s.PENDING="PENDING",s.RUNNING="RUNNING",s.PASSED="PASSED",s.FAILED="FAILED",s.CANCELLED="CANCELLED",s.RETRYING="RETRYING",s.WAITING_FOR_USER="WAITING_FOR_USER",s))(zt||{});var gS=(a=>(a.NOT_ATTEMPTED="NOT_ATTEMPTED",a.PERM_HEAL_SUCCEEDED="PERM_HEAL_SUCCEEDED",a.PERM_HEAL_FAILED="PERM_HEAL_FAILED",a.PERM_HEAL_UNATTEMPTED="PERM_HEAL_UNATTEMPTED",a.PERM_HEAL_ON_SUCCESS_FAILED="PERM_HEAL_ON_SUCCESS_FAILED",a.PERM_HEAL_NOT_NEEDED="PERM_HEAL_NOT_NEEDED",a))(gS||{});var vf=z.enum(gS).default("NOT_ATTEMPTED"),tP=(o=>(o.BEFORE_ALL="BEFORE_ALL",o.AFTER_ALL="AFTER_ALL",o))(tP||{});var wBe=z.object({attempts:z.int().nonnegative()}),Fn=z.string().pipe(z.coerce.date()).or(z.date()),Ja=z.object({id:z.string(),runKey:z.string(),organizationId:z.string(),executionType:dh.optional().default("WEB"),createdAt:Fn,createdBy:z.string(),flake:z.boolean().nullish(),scheduledAt:Fn.or(z.null()),startedAt:Fn.or(z.null()),updatedAt:Fn.nullish(),finishedAt:Fn.or(z.null()),resolvedBaseUrl:z.string().nullish(),environmentName:z.string().nullish(),gitBranchName:z.string().nullish(),gitMainBranch:z.string().nullish(),githubRepository:z.string().nullish(),gitlabProjectPath:z.string().nullish(),labels:z.array(z.string()).optional(),gitOriginUrl:z.string().nullish(),gitCommitSha:z.string().nullish(),gitCommitShaShort:z.string().nullish(),gitCommitAuthorName:z.string().nullish(),gitCommitTimestamp:Fn.nullish(),gitCommitMessage:z.string().nullish(),schemaVersion:z.string().nullish(),cliVersion:z.string().nullish(),section:z.enum(tP).nullish(),status:z.enum(zt),healStatus:vf,healDetails:Z6.nullish(),trigger:z.enum(hl),attempts:z.number(),runAttempts:z.array(z.object({id:z.string(),status:z.enum(zt),startedAt:Fn.or(z.null()),finishedAt:Fn.or(z.null())})).optional(),videos:z.array(z.string()).optional(),failureReason:z.string().nullish(),failureDetails:L5.nullish(),failureRecoveryDetails:wBe.nullish(),pipelineId:z.string().nullish(),resolvedInputs:z.record(z.string(),z.string()).nullish(),quarantined:z.boolean().nullish().default(false),quarantinedReason:z.string().nullish(),localTestId:z.string().nullish(),testId:z.string().nullish(),testName:z.string().nullish(),description:z.string().nullish(),directory:z.string().nullish(),test:z.object({name:z.string(),id:z.string()}).nullish().default(null),suiteId:z.string().nullish(),aiSettings:Ds.nullish(),stepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),beforeStepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),afterStepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),runAssertionResults:dX.nullish()}),RBe={id:true,status:true,healStatus:true,healDetails:true,testName:true,localTestId:true,testId:true,test:{select:{name:true,id:true}},finishedAt:true,failureReason:true,failureDetails:true},oP=Ja.pick({...RBe,test:true}),pX=Ja.omit({failureReason:true,failureDetails:true,test:true}),uj=Ja.extend({stepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),beforeStepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),afterStepsSnapshot:z.array(z.record(z.string(),z.unknown().optional())).nullish(),resolvedInputs:z.record(z.string(),z.string()).nullish(),test:z.object({name:z.string(),id:z.string(),description:z.string().nullish(),baseUrl:z.string().nullish(),advanced:Ya.nullish()}).nullish()}).extend(qz.shape),hX=e=>e.includes("PASSED")&&e.includes("FAILED");var CBe=z.object({region:z.enum(["US","EU"]).optional().describe("New Relic data center region. Defaults to US."),accountId:z.string().describe("New Relic account ID to send events to. Supports ${ENV_VAR} interpolation."),licenseKey:z.string().optional().describe("New Relic ingest license key. Supports ${ENV_VAR} interpolation. Defaults to the NEW_RELIC_LICENSE_KEY environment variable."),attributes:z.record(z.string(),z.string()).optional().describe("Static attributes (e.g. service, team) added to every event sent to New Relic. Values support ${ENV_VAR} interpolation.")}),gX=z.object({newrelic:CBe.optional()}),IBe=z.object({category:z.string(),reasoning:z.string(),citations:z.array(hn).optional()}),xBe=z.object({testInputs:z.record(z.string(),z.string()).optional(),envName:z.string().optional(),urlOverride:z.string().optional()}),_Be=z.object({reason:z.string().optional(),message:z.string().optional()}),PBe=z.object({runId:z.string().optional(),testId:z.string(),testName:z.string(),filePath:z.string(),labels:z.array(z.string()).optional(),status:z.enum(zt),startedAt:z.string(),finishedAt:z.string(),durationMs:z.number(),attempts:z.number(),quarantined:z.boolean(),recovered:z.boolean(),parameters:xBe.optional(),failure:_Be.nullable(),classification:IBe.nullable()}),OBe=z.object({testId:z.string(),testName:z.string(),filePath:z.string(),labels:z.array(z.string()).optional(),quarantined:z.boolean()}),kBe=z.object({total:z.number(),executed:z.number(),skipped:z.number(),passed:z.number(),failed:z.number(),cancelled:z.number(),quarantined:z.number(),recovered:z.number()}),fX=z.object({version:z.literal(1),runGroup:z.object({startedAt:z.string(),finishedAt:z.string(),durationMs:z.number()}),summary:kBe,runs:z.array(PBe),skipped:z.array(OBe)});var yX=z.enum(["error","warning","passing"]);var bX=z.enum(["safe_to_merge","confirm_intended_change","investigate_regression","fix_test","resolve_infra","review_coverage"]),LBe=bX.exclude(["review_coverage"]);var NBe="One very short, punchy sentence (ideally under 70 characters) summarizing the run group result. Factual, specific, no trailing period, no category prefix. When referencing test names, wrap each in backticks (e.g. `my-test`). No other markdown. Do not capitalize the first word unless it is a proper noun, since a category prefix is prepended before it. Describe the outcome only \u2014 never name the process or mode (no 'dry run', 'auto-heal', 'triage', 'pending'); those are shown separately.";var SX=z.object({kind:bX,detail:z.string().min(1).max(280)}),Af=z.object({riskLevel:z.string(),headline:z.string().min(1).max(200).describe("One-sentence summary of what happened in this run. Plain text, no markdown."),overview:z.string().min(1).max(280).optional().describe("One plain-text sentence giving the bottom line of the run. No markdown."),summaryMarkdown:z.string().min(1).max(4e3).describe("Markdown body. Several short paragraphs or a tight list. No emojis, no top-level heading. Max 5 sentences."),recommendedAction:SX.optional()}),TX=Af.extend({riskLevel:yX.describe("Traffic-light validation signal. Use passing when validation is trustworthy with no real concern, warning when review or follow-up is needed, and error when the evidence shows the PR may hide or cause a product regression or another material concern that requires review."),headline:z.string().min(1).max(120).describe(NBe),overview:z.string().min(1).max(280).describe("The bottom-line verdict in one plain sentence: what the Momentic validation means for user-visible behavior and how trustworthy the signal is. This is the conclusion only, not the evidence. No markdown, headings, lists, or emojis. Do not prescribe a merge decision (use recommendedAction)."),summaryMarkdown:z.string().min(1).max(1e3).describe("The supporting evidence behind the overview, in GitHub-flavored markdown: a few short sentences or a tight list with the specific tests, errors, and signals that justify the verdict. Must carry information the overview does not - never paraphrase or restate the overview. Do not prescribe a merge decision or restate repair mechanics. Max 4 sentences. No emojis or top-level heading."),recommendedAction:SX.extend({kind:LBe.describe("The kind of action a reviewer should take. safe_to_merge = signal is trustworthy and can be merged as-is; confirm_intended_change = a product or UI change was detected (or a heal relaxed an expectation) and a human must confirm it is intentional; investigate_regression = evidence points to a real product bug or regression to investigate before merging; fix_test = a broken or stale test or test setup needs repair; resolve_infra = an infrastructure or environment problem needs resolving and a re-run."),detail:z.string().min(1).max(280).describe("One plain-text sentence naming the specific next step (e.g. 'Confirm the new success-indicator color is an intended design change'). No markdown.")}).describe("The single most important next step a reviewer should take. Omit entirely when the signal is clean and there is genuinely nothing to do.").optional()});var BBe=z.enum(["SELECTED","RUN_ALL","RUN_NONE","SHADOW"]),cw=z.object({mode:BBe,baseRef:z.string().nullable(),headSha:z.string(),planId:z.string().nullable(),totalCandidates:z.number().int().nonnegative(),selectedCount:z.number().int().nonnegative(),anchorSegmentIds:z.array(z.string()),userSummary:z.string(),toolCallCount:z.number().int().nonnegative(),selectedTests:z.array(Y_),forcedTests:z.array(z.object({name:z.string(),testPath:z.string(),status:z.enum(["A","M","R","C","T"])})).optional().default([]),runAllReason:z.string().nullable()});function vX(e){return uniqWith([...e],isEqual)}var AX=z.object({id:z.string(),status:z.enum(zt),trigger:z.enum(hl),createdAt:Fn,startedAt:Fn.nullish(),finishedAt:Fn.nullish(),gitCommitSha:z.string().nullish(),gitCommitShaShort:z.string().nullish(),gitCommitTimestamp:Fn.nullish(),gitBranchName:z.string().nullish(),gitOriginUrl:z.string().nullish(),gitCommitMessage:z.string().nullish(),gitCommitAuthorName:z.string().nullish(),projectName:z.string().nullish(),relativeProjectDir:z.string().nullish(),githubRepository:z.string().nullish(),gitlabProjectPath:z.string().nullish(),pipelineId:z.string().nullish(),ciProvider:z.string().nullish(),cliVersion:z.string().nullish(),labels:z.string().array().optional(),healRiskSummary:Af.optional(),aiSelect:cw.array().optional(),environments:z.string().array().optional(),executionTypes:dh.array().optional(),localSuiteName:z.string().optional(),suite:z.object({id:z.string(),name:z.string()}).nullish(),runs:z.object({status:z.enum(zt)}).array()}),EX=AX.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true,localSuiteName:true}).extend({runs:oP.array()}),nP=AX.extend({runs:Ja.array()});var UBe=z.object({type:z.literal("TARGETING"),name:z.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:FJ.array(),pageState:z.string().optional(),targetSource:z.enum(Nu).optional(),targetUpdateTime:z.string().optional()}),zBe=z.object({type:z.literal("AI_LOCATION"),matched:z.boolean(),pageState:z.string().optional(),ragUsed:z.boolean().optional(),thoughts:z.string().optional()}),jBe=z.object({type:z.literal("ASSERTION"),relevantElementsSerialized:z.string().array().optional(),pageState:z.string().optional(),ragUsed:z.boolean().optional()}),rP=z.discriminatedUnion("type",[UBe,zBe,jBe]);var HBe=z.object({id:z.string(),name:z.string()});HBe.extend(z.object({createdAt:Fn,createdBy:z.string(),schedule:X_,notification:Q_,environment:z.object({name:z.string()}).nullish(),beforeTests:z.object({id:z.string()}).array().nullish(),afterTests:z.object({id:z.string()}).array().nullish()}).shape);var wX=z.object({id:z.guid(),orgId:z.string(),createdAt:Fn,startedAt:Fn.or(z.null()),finishedAt:Fn.or(z.null()),status:z.enum(zt),trigger:z.enum(hl),suite:z.object({id:z.string(),name:z.string()}).nullish(),runs:Ja.array()});wX.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true});var RX=wX.extend({runs:oP.array()});function CX({beforeStatus:e,mainStatus:t,afterStatus:o}){return e==="FAILED"?"FAILED":e==="CANCELLED"?"CANCELLED":o==="FAILED"?"FAILED":o==="CANCELLED"?"CANCELLED":t==="FAILED"?"FAILED":t==="CANCELLED"?"CANCELLED":"PASSED"}function iP(e,t){return e.some(r=>t?.onlyQuarantined?r.status==="FAILED":!r.quarantined&&r.status==="FAILED")?"FAILED":e.some(r=>r.status==="CANCELLED")?"CANCELLED":"PASSED"}function IX(e){switch(e){case "PASSED":return "SUCCESS";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":case "PENDING":case "RETRYING":case "WAITING_FOR_USER":return "RUNNING"}}var dj=z.object({content:z.string(),ids:z.string().array(),tokenLength:z.number()}),$Be=z.object({chunks:dj.array()});z.object({ids:z.string().array(),score:z.number(),tokenLength:z.number()});$Be.extend({description:z.string().describe("Input to pass to RAG engine"),tokenLimit:z.number()});var xX=z.object({ids:z.number().array()}),_X=z.object({indices:z.number().array()});var Vc=(o=>(o.Interactive="interactive",o.Runner="runner",o))(Vc||{}),GBe=z.enum(Vc),Gr=z.object({disableCache:z.boolean().optional(),useMemory:z.boolean().optional(),clientMode:GBe.optional(),loggerTags:z.record(z.string(),z.string()).optional(),langfuseSessionId:z.string().optional(),agentConfigVersion:z.string().optional(),effort:ht.optional(),cacheBustReason:z.enum(gE).optional()});Gr.extend({chunks:dj.array(),description:z.string().describe("Input to pass to AI"),type:z.union([z.literal("locator"),z.literal("assertion"),z.literal("ai-action")]),softTokenLimit:z.number(),mediumTokenLimit:z.number().optional(),hardTokenLimit:z.number(),callId:z.string().optional()});var VBe=z.object({screenshotBase64AfterCommand:z.string(),urlAfterCommand:z.string(),serializedCommand:z.string(),elementInteracted:z.string().optional(),thoughts:z.string().optional()}),PX=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string(),source:NJ.optional().catch(void 0),markIneligibleElementsInChecks:z.boolean().optional(),isTieBreakerCall:z.boolean().optional(),memory:z.discriminatedUnion("type",[Dc,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional(),firstPassModelResults:H_.array().optional(),knowledgeBaseSection:z.string().optional()}),OX=z.object({target:z.string().or(z.number()),browserState:z.string().optional(),screenshot:z.string().optional(),boundingBox:z.object({x:z.number(),y:z.number(),height:z.number(),width:z.number()}).optional()}),kX=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string().optional(),returnSchema:z.string().optional()}),MX=z.object({goal:z.string(),emulatorState:z.string(),screenshot:z.string().optional(),returnSchema:z.string().optional()}),mj=z.union([z.literal("NEGATED_CHECK"),z.literal("CONDITIONAL_CHECK")]),LX=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string(),url:z.string(),contextChoice:hf.optional(),memory:z.discriminatedUnion("type",[df,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional(),source:mj.optional(),recoveryHint:z.string().optional(),knowledgeBaseSection:z.string().optional()}),NX=z.object({command:Zp}),pj=z.object({goal:z.string(),browserState:z.string(),startingScreenshot:z.string().optional(),screenshot:z.string(),url:z.string(),history:VBe.array(),actionHint:z.string().optional(),lastError:z.string().optional()}),DX=z.object({results:L_.array(),errorMessage:z.string(),errorStack:z.string().optional()}),FX=z.object({results:L_.array(),goal:z.string(),errorMessage:z.string()}),BX=z.object({failedResults:L_.array(),nextStepsSerialized:z.string().array(),currentUrl:z.string(),currentPageState:z.string(),currentScreenshot:z.string(),testDescription:z.string().optional()});z.object({description:z.string(),type:z.union([z.literal("locator"),z.literal("assertion"),z.literal("ai-action")]),excerpt:z.string()});var UX=z.object({type:z.string(),browserContext:z.string(),currentStep:z.string(),screenshot:z.string()}),zX=z.object({description:z.string(),browserState:z.string().optional(),screenshot:z.string()}),jX=z.object({description:z.string().optional(),screenshot:z.string(),platform:UJ}),WBe=z.enum(["locator","assertion"]);z.object({completionType:WBe,currentGoal:z.string(),pastGoal:z.string().optional(),currentScreenshot:z.string(),pastScreenshot:z.string(),pastResult:z.union([z.boolean(),z.number()])});z.object({goal:z.string()});var HX=z.object({keywords:z.array(z.string())});var Wc=x__default.object({id:x__default.guid(),envKey:x__default.string().optional(),skipped:x__default.boolean().optional(),retries:x__default.number().optional()});var qc=(i=>(i.PRESET="MOBILE_PRESET_STEP",i.MODULE="MOBILE_MODULE_STEP",i.AI_ACTION="MOBILE_AI_ACTION_STEP",i.CONDITIONAL="MOBILE_CONDITIONAL_STEP",i.WHILE_LOOP="MOBILE_WHILE_LOOP_STEP",i))(qc||{});var ph=Wc.extend({type:x__default.literal("MOBILE_CONDITIONAL_STEP")});var Sa=z.object({id:z.string(),name:S_,baseUrl:T_,description:z.string().optional().nullish(),schemaVersion:z.string(),advanced:Ya,retries:z.number().optional().nullish(),envs:z.array(sX).nullish(),parameters:aX.nullish(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional().catch([]),runAssertions:eP.array().nullish()}),hj=z.enum(["INHERIT","ENABLED","DISABLED"]);var KBe=Ya.shape.geolocation.unwrap().partial().superRefine(({latitude:e,longitude:t},o)=>{e!==void 0&&t===void 0&&o.addIssue({code:"custom",message:"Longitude is required when latitude is provided",path:["longitude"]}),t!==void 0&&e===void 0&&o.addIssue({code:"custom",message:"Latitude is required when longitude is provided",path:["latitude"]});}),YBe=Ya.shape.proxy.unwrap().partial().superRefine(({server:e,username:t,password:o},n)=>{!e&&(t||o)&&n.addIssue({code:"custom",message:"Proxy host is required when credentials are provided",path:["server"]});}),JBe=Ya.extend({failureRecovery:hj.optional(),geolocation:KBe.optional(),proxy:YBe.optional(),turbo:hj.optional(),useMemory:hj.optional()});Sa.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,parameters:true,runAssertions:true}).extend({advanced:JBe});Sa.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,advanced:true,parameters:true,runAssertions:true});var XBe=z.object({labels:z.array(z.string()).optional(),outputs:Z_.nullish()}),Wn=Sa.extend(XBe.shape),QBe=z.object({createdAt:z.coerce.date(),updatedAt:z.coerce.date(),updatedBy:z.string().nullable(),schedule:X_,notification:Q_,createdBy:z.string(),organizationId:z.string(),folderId:z.string().nullable().optional()}),ZBe=Sa.extend(QBe.shape);ZBe.extend(dl.shape);var gj=Sa.extend(dl.shape);Sa.extend(bm.shape);var eUe="test",tUe="module",oUe="mobile-test",nUe="mobile-module",rUe="test/v2",iUe="module/v2",aUe="mobile-test/v2",sUe="mobile-module/v2";var De=(l=>(l.TEST=`momentic/${eUe}`,l.MODULE=`momentic/${tUe}`,l.TEST_V2=`momentic/${rUe}`,l.MODULE_V2=`momentic/${iUe}`,l.MOBILE_TEST=`momentic/${oUe}`,l.MOBILE_MODULE=`momentic/${nUe}`,l.MOBILE_TEST_V2=`momentic/${aUe}`,l.MOBILE_MODULE_V2=`momentic/${sUe}`,l))(De||{});Sa.merge(bm);var lUe=Jn.extend({steps:z.array(z.record(z.string(),z.unknown().optional())),schemaVersion:z.string()}),mw=lUe.extend({fileType:z.literal(De.MODULE)});z.object({test:z.string().describe("YAML for the test, including metadata and steps"),modules:z.record(z.string(),z.string()).describe("Map of module name to YAML for the module")});function aP(e){if(e===void 0)return "__undefined__";if(e===null)return null;if(typeof e!="object")return e;if(Array.isArray(e))return e.map(aP);let t={};for(let[o,n]of Object.entries(e))t[o]=aP(n);return t}var cUe=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,$X=36,Qn=z.union([z.guid().max($X,"V2 IDs must be 36 characters or fewer"),z.string().max($X,"V2 IDs must be 36 characters or fewer").regex(cUe,"V2 IDs must be lowercase kebab-case, e.g. checkout-flow")],{error:"ID must be a UUID or lowercase kebab-case, e.g. checkout-flow (36 characters max)"});var sP=x.discriminatedUnion("type",[x.object({type:x.literal("SCREEN")}),x.object({type:x.literal("OPEN_APP")}),x.object({type:x.literal("OPEN_WEBVIEW")})]),Im=x.object({type:x.literal("description"),description:x.string()}),yj=x.object({type:x.literal("CUSTOM_COORDINATES"),startX:x.number().describe("Starting X coordinate in pixels"),startY:x.number().describe("Starting Y coordinate in pixels"),deltaPixels:x.number().describe("Number of pixels to scroll in the specified direction")}),lP=x.discriminatedUnion("type",[...sP.options,x.object({type:x.literal("CUSTOM"),target:Im}),yj]);function uUe(e){return e.toLowerCase().replaceAll("_"," ")}function bj(e){switch(e.type){case "CUSTOM":return e.target.description;case "CUSTOM_COORDINATES":return `custom coordinates (x: ${Math.round(e.startX)}, y: ${Math.round(e.startY)}, delta: ${Math.round(e.deltaPixels)}px)`;case "SCREEN":case "OPEN_APP":case "OPEN_WEBVIEW":return uUe(e.type);default:{throw new Error("Unreachable")}}}var dUe=x.object({type:x.literal("coordinates"),xPercent:x.number(),yPercent:x.number()}),mUe=x.object({type:x.literal("absolute_percent"),x:x.number(),y:x.number()}),fS=x.discriminatedUnion("type",[Im,dUe,mUe]);var pUe=x.object({x1:x.number(),y1:x.number(),x2:x.number(),y2:x.number(),tolerance:x.nativeEnum(xs),preciseTolerance:x.boolean().optional()}),hUe=x.object({width:x.number(),height:x.number(),tolerance:x.nativeEnum(xs),preciseTolerance:x.boolean().optional()}),Sj=x.object({requiredText:x.string().optional(),requiredAttributes:x.record(x.string(),x.string()).optional(),requiredBounds:x.boolean().optional(),position:pUe.optional(),shape:hUe.optional()}),GX=x.object({xPath:x.string(),requirements:Sj.optional()}),gUe=x.object({type:x.literal("CUSTOM"),target:Im,cache:x.lazy(()=>VX).optional()}),fUe=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([sP,gUe,yj]),direction:x.enum(["up","down"])}),VX=x.object({type:x.literal("NATIVE"),bounds:x.number().array().optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:fUe.optional(),requirements:Sj.optional(),requiredRelatedElements:GX.array().optional(),memory:Dc.optional()}),yUe=x.object({type:x.literal("WEBVIEW"),resolvedDescription:x.string().optional(),xPath:x.string().optional(),browserCache:Du.optional(),memory:Dc.optional()}),cP=x.union([VX,yUe]);var bUe=x.object({left:x.number(),top:x.number(),right:x.number(),bottom:x.number()});x.object({newViewportBounds:bUe});var SUe=x.object({type:x.literal("CUSTOM"),target:Im,cache:x.lazy(()=>YX).optional()}),WX=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([sP,SUe,yj]),direction:x.enum(["up","down"])}),qX=(o=>(o.Native="native",o.Appium="appium",o))(qX||{}),Tj=x.tuple([x.number(),x.number(),x.number(),x.number()]),KX=GX.extend({bounds:Tj.optional(),browserCache:Du.optional()}),YX=x.object({type:x.literal("NATIVE"),bounds:Tj.optional(),resolvedDescription:x.string().optional(),sourceTree:x.nativeEnum(qX).optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:WX.optional(),requirements:Sj.optional(),requiredRelatedElements:KX.array().optional(),memory:Dc.optional()}),TUe=x.object({type:x.literal("WEBVIEW"),bounds:Tj.optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),scrollDetails:WX.optional(),browserCache:Du.optional(),requiredRelatedElements:KX.array().optional(),memory:Dc.optional()}),uP=x.discriminatedUnion("type",[YX,TUe]);var yo=(M=>(M.AI_CHECK="AI_CHECK",M.AI_EXTRACT="AI_EXTRACT",M.TAP="TAP",M.TYPE="TYPE",M.PRESS="PRESS",M.PRESS_KEYBOARD="PRESS_KEYBOARD",M.OPEN_APP="OPEN_APP",M.KILL_APP="KILL_APP",M.OPEN_NOTIFICATION_DRAWER="OPEN_NOTIFICATION_DRAWER",M.SWIPE="SWIPE",M.SCROLL_TO="SCROLL_TO",M.SCREEN_CHECK="SCREEN_CHECK",M.ELEMENT_CHECK="ELEMENT_CHECK",M.VISUAL_DIFF="VISUAL_DIFF",M.DRAG_AND_DROP="DRAG_AND_DROP",M.JAVASCRIPT="JAVASCRIPT",M.REQUEST="REQUEST",M.WAIT="WAIT",M.ADD_FILE="ADD_FILE",M.INSTALL_APP="INSTALL_APP",M.UNINSTALL_APP="UNINSTALL_APP",M.TOGGLE_SETTINGS="TOGGLE_SETTINGS",M.ROTATE_ORIENTATION="ROTATE_ORIENTATION",M.ADB_COMMAND="ADB_COMMAND",M.APPIUM_EXECUTE="APPIUM_EXECUTE",M.SET_CAMERA="SET_CAMERA",M.CLEAR_CAMERA="CLEAR_CAMERA",M.SET_MICROPHONE="SET_MICROPHONE",M.CLEAR_MICROPHONE="CLEAR_MICROPHONE",M.STATE="STATE",M))(yo||{});var rt=x__default.object({id:x__default.guid(),disableCache:x__default.boolean().optional()}),yS=x__default.object({updatedAt:x__default.coerce.date().optional(),updatedAtLoggerTags:x__default.record(x__default.string(),x__default.string()).optional()}),Ql=yS.extend({target:cP}),dP=yS.extend({fromTarget:cP,toTarget:cP}),Zu=yS.extend({target:uP}),JX=yS.extend({fromTarget:uP,toTarget:uP}),xm=e=>{switch(e.type){case "description":return e.description;case "coordinates":return `${Math.round(e.xPercent*100)}%, ${Math.round(e.yPercent*100)}%`;case "absolute_percent":return `${Math.round(e.x)}%, ${Math.round(e.y)}%`}};var XX=rt.extend({type:x__default.literal("ADB_COMMAND"),command:x__default.string(),jsonArgs:x__default.string().optional()});var QX=rt.extend({type:x__default.literal("OPEN_NOTIFICATION_DRAWER")});var pw=(r=>(r.AIRPLANE_MODE="AIRPLANE_MODE",r.DATA="DATA",r.WIFI="WIFI",r.LOCATION="LOCATION",r))(pw||{}),eQ=rt.extend({type:x__default.literal("TOGGLE_SETTINGS"),settingsType:x__default.nativeEnum(pw)});var oQ=rt.extend({type:x__default.literal("UNINSTALL_APP"),packageName:x__default.string()});var mP=rt.extend({type:x__default.literal("APPIUM_EXECUTE"),command:x__default.string(),jsonArgs:x__default.string().optional()});var nQ=rt.extend({type:x__default.literal("ADD_FILE"),file:x__default.string(),storageLocation:x__default.string()});var _m=rt.extend({type:x__default.literal("AI_CHECK"),assertion:x__default.string(),timeoutSecs:x__default.number().optional(),contextChoice:hf.optional(),cache:yS.extend({memory:df.optional()}).optional()});var rQ=rt.extend({type:x__default.literal("AI_EXTRACT"),goal:x__default.string(),schema:x__default.string().optional()});var aQ=rt.extend({type:x__default.literal("INSTALL_APP"),uri:x__default.string().trim()});var bS=rt.extend({type:x__default.literal("JAVASCRIPT"),code:x__default.string(),timeout:x__default.number().int().max(600).optional().describe("Max seconds for the code to complete")});var sQ=rt.extend({type:x__default.literal("KILL_APP")});var gw=(o=>(o.HOME="HOME",o.POWER="POWER",o))(gw||{}),pP=(a=>(a.BACK="BACK",a.APP_SWITCHER="APP_SWITCHER",a.SEARCH="SEARCH",a.VOLUME_UP="VOLUME_UP",a.VOLUME_DOWN="VOLUME_DOWN",a.VOLUME_MUTE="VOLUME_MUTE",a))(pP||{}),hP=rt.extend({type:x__default.literal("PRESS"),key:x__default.nativeEnum(gw),longPress:x__default.boolean().optional()}),lQ=hP.extend({key:x__default.nativeEnum(pP).or(x__default.nativeEnum(gw))}),cQ=hP;var uQ=rt.extend({type:x__default.literal("REQUEST")}).merge(bE);var Ij=(o=>(o.PORTRAIT="PORTRAIT",o.LANDSCAPE="LANDSCAPE",o))(Ij||{}),mQ=rt.extend({type:x__default.literal("ROTATE_ORIENTATION"),orientation:x__default.nativeEnum(Ij)});var wUe=x__default.object({type:x__default.literal("CONTENT"),negated:x__default.boolean().optional(),value:x__default.string()}),TS=rt.extend({type:x__default.literal("SCREEN_CHECK"),assertion:wUe,timeout:x__default.number().int().min(0).max(Hu).optional().describe("max seconds to wait for the assertion to be true")});var pQ=rt.extend({type:x__default.literal("STATE")});var hQ=rt.extend({type:x__default.literal("VISUAL_DIFF"),path:x__default.string().describe("path to the golden screenshot to compare against"),threshold:x__default.number().min(0).max(1).optional().describe("max allowed fraction of differing pixels before the diff fails (default 0.1)")});x__default.object({created:x__default.boolean(),goldenPath:x__default.string(),threshold:x__default.number(),goldenScreenshotBase64:x__default.string().optional(),currentScreenshotBase64:x__default.string().optional(),diffScreenshotBase64:x__default.string().optional(),goldenScreenshotSnapshotId:x__default.string().optional(),currentScreenshotSnapshotId:x__default.string().optional(),diffScreenshotSnapshotId:x__default.string().optional(),diffPercent:x__default.number().optional(),pass:x__default.boolean().optional(),dimensionMismatch:x__default.boolean().optional()});var fQ=rt.extend({type:x__default.literal("WAIT"),timeoutSecs:x__default.number()});var fw=x__default.discriminatedUnion("type",[pQ,_m,rQ,bS,fQ,uQ,mQ,TS,hQ,nQ,aQ,sQ]);x__default.discriminatedUnion("type",[...fw.options,hP]);var _j=rt.extend({type:x__default.literal("DRAG_AND_DROP"),fromTarget:Im,toTarget:Im,hoverDuration:x__default.number().optional(),dragDuration:x__default.number().optional()}),yw=_j.extend({cache:dP.optional()}),bw=_j.extend({cache:JX.optional()});var Pj=rt.extend({type:x__default.literal("ELEMENT_CHECK"),target:fS,assertion:u_,timeout:x__default.number().int().min(0).max(Hu).optional().describe("max seconds to wait for the assertion to be true")}),Ef=Pj.extend({cache:Ql.optional()}),wf=Pj.extend({cache:Zu.optional()});var Sw=(o=>(o.ENTER="ENTER",o.BACKSPACE="BACKSPACE",o))(Sw||{}),gP=(t=>(t.CLOSE_KEYBOARD="CLOSE_KEYBOARD",t))(gP||{}),SQ={repeat:x__default.number().int().min(1).optional(),keyPressDelayMs:x__default.number().min(0).optional()},TQ=rt.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(Sw),...SQ}),vQ=rt.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(gP).or(x__default.nativeEnum(Sw)),...SQ});var AQ=rt.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),activityName:x__default.string().optional(),intentExtras:x__default.string().optional()}),EQ=rt.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),intentExtras:x__default.string().optional()});var Oj=rt.extend({type:x__default.literal("SCROLL_TO"),target:Im,direction:x__default.enum(["down","up"]),scrollableElement:lP,scrollStepPercent:x__default.number().min(.1).max(1).optional().describe("How much of the container height to scroll at each step (0.1 to 1.0). Default is 0.9 (90%)."),maxScrollAttempts:x__default.number().int().min(1).max(50).optional().describe("Maximum number of scroll attempts before giving up. Default is 20.")}),Tw=Oj.extend({cache:Ql.optional()}),vw=Oj.extend({cache:Zu.optional()});var kj=rt.extend({type:x__default.literal("SWIPE"),direction:x__default.enum(["up","down","left","right"]),scrollableElement:lP,viewportPercent:x__default.number().optional(),durationMs:x__default.number().optional(),relativePosition:l_.optional()}),Aw=kj.extend({cache:Ql.optional()}),Ew=kj.extend({cache:Zu.optional()});var Mj=rt.extend({type:x__default.literal("TAP"),target:fS,longPress:x__default.boolean().optional(),longPressDurationMs:x__default.number().optional(),iterations:x__default.number().optional(),tapDelayMs:x__default.number().optional(),relativePosition:l_.optional(),doubleTap:x__default.boolean().optional(),doubleTapDelayMs:x__default.number().optional()}),ww=Mj.extend({cache:Ql.optional()}),Rw=Mj.extend({cache:Zu.optional()});var Cw=(r=>(r.AUTO="auto",r.PROGRAMMATIC="programmatic",r.LONG_PRESS="long-press",r.BACKSPACE="backspace",r))(Cw||{});var Lj=rt.extend({type:x__default.literal("TYPE"),target:fS.optional(),keyPressDelayMs:x__default.number().optional(),waitForKeyboardSettle:x__default.boolean().optional(),text:x__default.string(),clearContent:x__default.boolean().optional(),forceClearContent:x__default.boolean().optional(),replaceStrategy:x__default.nativeEnum(Cw).optional()});var Iw=Lj.extend({cache:Ql.optional()}),xw=Lj.extend({cache:Zu.optional()});var _w=x__default.discriminatedUnion("type",[...fw.options,ww,Iw,lQ,vQ,oQ,XX,mP,yw,QX,Tw,Aw,eQ,Ef,AQ]);var RQ=rt.extend({type:x__default.literal("SET_CAMERA"),file:x__default.string(),loop:x__default.boolean().optional(),playAudio:x__default.boolean().optional()}),CQ=rt.extend({type:x__default.literal("CLEAR_CAMERA")});var IQ=rt.extend({type:x__default.literal("SET_MICROPHONE"),file:x__default.string(),once:x__default.boolean().optional()}),xQ=rt.extend({type:x__default.literal("CLEAR_MICROPHONE")});var Ow=x__default.discriminatedUnion("type",[...fw.options,Rw,xw,cQ,TQ,EQ,Ew,bw,vw,wf,mP,RQ,CQ,IQ,xQ]);var Pm=Wc.extend({type:x__default.literal("MOBILE_WHILE_LOOP_STEP"),maxIterations:x__default.number().int().positive().optional()});var OQ=x__default.union([x__default.string(),x__default.record(x__default.string(),x__default.unknown().optional())]),SP=Wc.extend({type:x__default.literal("MOBILE_PRESET_STEP"),keyPressDelayMs:x__default.number().optional()}),vS=SP.extend({command:_w}),AS=SP.extend({command:Ow}),ES=x__default.object({moduleId:x__default.string(),inputs:x__default.record(x__default.string(),x__default.string()).optional()}),Lw=Wc.merge(ES.extend({type:x__default.literal("MOBILE_MODULE_STEP")}));ES.extend({steps:x__default.lazy(()=>Yc.array())});ES.extend({steps:x__default.lazy(()=>ed.array())});var Nj=(o=>(o.V2="2",o.V3="3",o))(Nj||{});var kQ="3",Dj=x__default.nativeEnum(Nj),Nw=x__default.object({status:x__default.literal("SUCCESS"),message:x__default.string().optional(),results:x__default.object({description:x__default.string(),status:x__default.enum(Ft),message:x__default.string().optional()}).array(),finalScreenshot:sl.optional()}),kw=x__default.lazy(()=>x__default.discriminatedUnion("type",[vS,DUe])),Mw=x__default.lazy(()=>x__default.discriminatedUnion("type",[AS,FUe]));var _Ue=Lu.extend({platform:x__default.literal("ANDROID"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>kw.array()),lastSuccessfulRun:Nw.optional()}),PUe=Lu.extend({platform:x__default.literal("IOS"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>Mw.array()),lastSuccessfulRun:Nw.optional()}),Fj=x__default.discriminatedUnion("platform",[_Ue,PUe]),gh=Wc.extend({type:x__default.literal("MOBILE_AI_ACTION_STEP"),text:x__default.string(),version:Dj.optional(),cache:Fj.optional(),disableCache:x__default.boolean().optional(),precondition:x__default.string().optional(),postcondition:x__default.string().optional()});var kUe=x__default.discriminatedUnion("type",[_m,TS,Ef,bS]),fh=SP.extend({command:kUe}),MUe=x__default.discriminatedUnion("type",[_m,TS,wf,bS]),yh=SP.extend({command:MUe}),LUe=x__default.object({assertion:fh,steps:x__default.lazy(()=>Yc.array())}),NUe=x__default.object({assertion:yh,steps:x__default.lazy(()=>ed.array())}),DUe=ph.extend({blocks:x__default.lazy(()=>x__default.object({assertion:fh,steps:kw.array()}).array()),elseSteps:x__default.lazy(()=>kw.array()).optional()}),FUe=ph.extend({blocks:x__default.lazy(()=>x__default.object({assertion:yh,steps:Mw.array()}).array()),elseSteps:x__default.lazy(()=>Mw.array()).optional()}),BUe=ph.extend({blocks:x__default.lazy(()=>LUe.array()),elseSteps:x__default.lazy(()=>Yc.array()).optional()}),UUe=ph.extend({blocks:x__default.lazy(()=>NUe.array()),elseSteps:x__default.lazy(()=>ed.array()).optional()}),zUe=Pm.extend({condition:fh.optional(),steps:x__default.lazy(()=>Yc.array())}),jUe=Pm.extend({condition:yh.optional(),steps:x__default.lazy(()=>ed.array())}),Yc=x__default.discriminatedUnion("type",[vS,Lw,gh,BUe,zUe]),ed=x__default.discriminatedUnion("type",[AS,Lw,gh,UUe,jUe]);x__default.union([Yc.array(),ed.array()]);var Bj=x__default.object({parameterNames:x__default.string().array(),defaultParameters:x__default.record(x__default.string(),x__default.string()).optional(),parameterEnums:x__default.record(x__default.string(),x__default.string().array()).optional()}),TP=x__default.object({moduleId:Qn,name:x__default.string(),description:x__default.string().nullish(),platform:x__default.nativeEnum(Yl).optional().default("ANDROID"),parameters:Bj.optional(),enabled:x__default.boolean().nullish(),schemaVersion:x__default.string()}),Uj=TP.omit({name:true}),HUe=Uj.extend({steps:OQ.array()});x__default.object({fileType:x__default.literal(De.MOBILE_MODULE)}).merge(HUe);var MQ=TP.omit({platform:true,schemaVersion:true});({ANDROID:MQ.extend({platform:x__default.literal("ANDROID"),steps:Yc.array()}),IOS:MQ.extend({platform:x__default.literal("IOS"),steps:ed.array()})});var _f=(t=>(t.MODULE="RESOLVED_MOBILE_MODULE",t))(_f||{}),LQ=x__default.object({description:x__default.string().optional(),name:x__default.string().describe("name of the module"),parameters:Bj.optional()}),NQ=ES.merge(LQ).extend({platform:x__default.literal("ANDROID"),get steps(){return Zl.array()}}),DQ=ES.merge(LQ).extend({platform:x__default.literal("IOS"),get steps(){return ec.array()}});x__default.discriminatedUnion("platform",[NQ,DQ]);var zj=Wc.merge(NQ).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")}),jj=Wc.merge(DQ).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")});x__default.discriminatedUnion("platform",[zj,jj]);var $Ue=x__default.object({assertion:fh,get steps(){return Zl.array()}}),Hj=ph.extend({get blocks(){return $Ue.array()},get elseSteps(){return Zl.array().optional()}}),GUe=x__default.object({assertion:yh,get steps(){return ec.array()}}),$j=ph.extend({get blocks(){return GUe.array()},get elseSteps(){return ec.array().optional()}}),VUe=Pm.extend({condition:fh.optional(),get steps(){return Zl.array()}}),WUe=Pm.extend({condition:yh.optional(),get steps(){return ec.array()}}),Zl=x__default.discriminatedUnion("type",[zj,vS,gh,Hj,VUe]),ec=x__default.discriminatedUnion("type",[jj,AS,gh,$j,WUe]);function FQ(e){return Object.values(_f).includes(e)||Object.values(qc).includes(e)}var BQ=(a=>(a.PRECONDITION="PRECONDITION",a.REPLAY="REPLAY",a.GENERATE="GENERATE",a.AUTOHEAL="AUTOHEAL",a.POSTCONDITION="POSTCONDITION",a.GOAL_CHECK="GOAL_CHECK",a))(BQ||{}),UQ=z.enum(["pending","running","success","failed"]),zQ=z.object({type:z.literal("THOUGHT"),text:z.string(),blockId:z.string().optional()}),jQ=z.object({type:z.literal("TOOL_CALL"),toolName:z.string()}),HQ=z.object({type:z.literal("PHASE"),phase:z.nativeEnum(BQ),failureMessage:z.string().optional()}),qUe=z.object({type:z.literal("STEP_UPDATE"),stepIndex:z.number(),step:Zl,status:UQ,conditionMet:z.boolean().optional(),message:z.string().optional(),afterSnapshotId:z.string().optional()}),KUe=z.object({type:z.literal("STEP_UPDATE"),stepIndex:z.number(),step:ec,status:UQ,conditionMet:z.boolean().optional(),message:z.string().optional(),afterSnapshotId:z.string().optional()}),$Q=z.object({type:z.literal("SCREENSHOT"),stepIndex:z.number(),screenshotId:z.string()}),GQ=z.object({type:z.literal("POSTCONDITION_AUTOGENERATED"),postcondition:z.string()}),VQ=z.object({type:z.literal("POSTCONDITION_REVISED"),postcondition:z.string(),previousPostcondition:z.string()}),WQ=z.object({type:z.literal("GOAL_CHECK"),achieved:z.boolean(),reasoning:z.string(),violatedUserRule:z.boolean().default(false)}),YUe=z.object({type:z.literal("CACHED_STEPS_GENERATED"),cachedSteps:kw.array(),resolvedGoal:z.string(),lastSuccessfulRun:Nw.optional()}),JUe=z.object({type:z.literal("CACHED_STEPS_GENERATED"),cachedSteps:Mw.array(),resolvedGoal:z.string(),lastSuccessfulRun:Nw.optional()}),XUe=z.discriminatedUnion("type",[zQ,jQ,HQ,qUe,$Q,YUe,GQ,VQ,WQ]),QUe=z.discriminatedUnion("type",[zQ,jQ,HQ,KUe,$Q,JUe,GQ,VQ,WQ]);function qQ(e){let t=z.object({version:z.literal(1),events:e.array(),spans:Cz.array().optional()});return z.union([t,e.array()]).transform(o=>Array.isArray(o)?{version:1,events:o}:o)}var KQ=qQ(XUe),YQ=qQ(QUe);var tc=x__default.object({message:x__default.string().optional(),startTime:x__default.number(),endTime:x__default.number(),status:x__default.nativeEnum(Ft),trace:x__default.unknown().optional().optional(),beforeSnapshot:x__default.string().optional(),afterSnapshot:x__default.string().optional(),data:x__default.unknown().optional().optional().describe("output data from the step"),aiSuggested:x__default.boolean().optional(),beforeTestContext:sS.optional(),afterTestContext:sS.optional()}),JQ=tc.merge(vS).extend({previousAttempts:x__default.lazy(()=>Qa.array()).optional()}),ZUe=tc.merge(Lw).extend({steps:x__default.lazy(()=>Qa.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>Qa.array()).optional()}),eze=tc.merge(gh).extend({steps:x__default.lazy(()=>Qa.array()),previousAttempts:x__default.lazy(()=>Qa.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:KQ.optional()}),tze=tc.merge(Hj).extend({assertionResult:JQ.optional(),steps:x__default.lazy(()=>Qa.array()),previousAttempts:x__default.lazy(()=>Qa.array()).optional()}),oze=tc.merge(Pm).extend({condition:fh.optional(),steps:x__default.lazy(()=>Qa.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>Qa.array()).optional()}),Qa=x__default.discriminatedUnion("type",[JQ,ZUe,eze,tze,oze]),XQ=tc.merge(AS).extend({previousAttempts:x__default.lazy(()=>Za.array()).optional()}),nze=tc.merge(Lw).extend({steps:x__default.lazy(()=>Za.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>Za.array()).optional()}),rze=tc.merge(gh).extend({steps:x__default.lazy(()=>Za.array()),previousAttempts:x__default.lazy(()=>Za.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:YQ.optional()}),ize=tc.merge($j).extend({assertionResult:XQ.optional(),steps:x__default.lazy(()=>Za.array()),previousAttempts:x__default.lazy(()=>Za.array()).optional()}),aze=tc.merge(Pm).extend({condition:yh.optional(),steps:x__default.lazy(()=>Za.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>Za.array()).optional()}),Za=x__default.discriminatedUnion("type",[XQ,nze,rze,ize,aze]);var sze=tc.extend({index:x__default.number().optional(),userFacingStepReference:x__default.string().optional(),description:x__default.string()}),QQ=sze.extend({beforeScreenshot:x__default.string().optional(),afterScreenshot:x__default.string().optional()});var ZQ=z.object({attributesRequired:z.array(z.string()).optional(),textRequired:z.boolean().optional(),boundsRequired:z.boolean().optional(),positionSpecificity:z.enum(xs).optional(),shapeSpecificity:z.enum(xs).optional()}),lze=z.object({id:z.number(),requirements:ZQ}).array();z.object({thoughts:z.string(),id:z.number(),updatedMemory:pE.optional(),inWebview:z.boolean().optional(),requirements:ZQ.optional(),additionalElements:lze.optional()});var cze=z.literal("SCROLL_TO"),e8=z.object({description:z.string(),screenXml:z.string(),screenshot:z.string(),source:cze.optional(),memory:z.discriminatedUnion("type",[Dc,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional()}),t8=z.object({assertion:z.string(),screenXml:z.string(),screenshot:z.string(),contextChoice:hf.optional(),knowledgeBaseSection:z.string().optional(),memory:z.discriminatedUnion("type",[df,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional()});z.object({thoughts:z.string(),result:z.boolean(),relevantElements:z.array(z.number()).optional(),updatedMemory:hE.optional(),citations:hn.array().optional()});var o8=z.object({failedResults:QQ.array(),nextStepsSerialized:z.string().array(),currentScreenXml:z.string(),currentScreenshot:z.string(),testDescription:z.string()}),n8=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))(n8||{});z.object({thoughts:z.string(),scenario:z.enum(n8),instructions:z.string().nullish(),reasonSummary:z.string().nullish()});z.looseObject({type:z.literal("response.create")});var r8=z.union([z.looseObject({response:z.looseObject({id:z.string()}),sequence_number:z.number(),type:z.literal("response.completed")}),z.looseObject({code:z.string().nullable(),message:z.string(),sequence_number:z.number(),type:z.literal("error")})]);var Pf="1",i8=z.enum(["GENERATED","CACHE"]),Gj=i8.enum,a8=z.enum(["PULL_REQUEST","DIRECT_COMMIT","PATCH","LOCAL_CHANGES","OWNER_PULL_REQUEST","ALREADY_FIXED_ELSEWHERE"]),Om=a8.enum,uze=z.object({patchId:z.uuid(),sourceRunId:z.string().min(1).optional(),testId:z.string().min(1),testPath:z.string().min(1),writtenPaths:z.array(z.string().min(1)).min(1).optional(),environment:z.string().min(1).optional()}),dze=z.object({applicationId:z.uuid(),patchId:z.uuid(),sourceRunId:z.string().min(1).optional(),source:i8,delivery:a8,environment:z.string().min(1).optional(),repository:z.string().min(1).optional(),baseBranch:z.string().min(1).optional(),headBranch:z.string().min(1).optional(),prNumber:z.int().positive().optional(),commitSha:z.string().min(1).optional(),appliedAt:z.iso.datetime().optional(),patchedTestBundleHash:z.string().min(1).optional(),baseTestBundleHash:z.string().min(1).optional()});z.object({patches:z.array(uze).max(1e3),applications:z.array(dze).max(1e3)});var mze=200,pze=50,hze=z.object({testId:z.string().min(1),patchIds:z.array(z.string().min(1)).max(pze).min(1)});z.object({repository:z.string().min(1),baseBranch:z.string().min(1),excludeHeadBranch:z.string().min(1).optional(),failures:z.array(hze).min(1).max(mze)});var s8=z.object({existingFixes:z.array(jU)});var l8="ui_states.jsonl";z.object({stepId:z.string(),parentStepIdChain:z.array(z.string()),fingerprintHash:z.string(),minhash:z.array(z.number().int()),canonicalUrl:z.string(),capturedAt:z.number().describe("Unix timestamp in milliseconds"),archivalFingerprintHash:z.string().optional(),archivalMinhash:z.array(z.number().int()).optional()});var gze=z.object({testId:z.string(),name:z.string(),relativeFilePath:z.string(),coverage:z.string(),note:z.string().optional()}),fze=z.object({name:z.string(),summary:z.string(),status:z.string().optional(),existingCoverage:z.array(gze).default([])}),yze=z.object({name:z.string(),summary:z.string(),importance:z.string().optional(),relatedJourney:z.string().optional(),mode:z.string().optional(),preconditions:z.array(z.string()).default([]),outline:z.array(z.string()).default([]),acceptanceCriteria:z.array(z.string()).default([]),existingTestId:z.string().optional(),existingTestPath:z.string().optional(),customAttributes:z.record(z.string(),z.unknown()).optional()}),bze=z.object({testPlanName:z.string(),status:z.string(),testPath:z.string().optional(),summary:z.string(),notes:z.array(z.string()).optional()}),Sze=z.object({status:z.string(),builtTests:z.array(bze).default([]),summary:z.string().optional(),notes:z.string().optional()}),Tze=z.object({control:z.string(),status:z.string(),result:z.string()}),vze=z.object({testPlanName:z.string(),status:z.string(),summary:z.string(),verified:z.array(z.string()).default([]),gaps:z.array(z.string()).default([]),reportedBugs:z.array(z.string()).default([]),controls:z.array(Tze).default([]),customAttributes:z.record(z.string(),z.unknown()).optional()}),Aze=z.object({status:z.string(),planReports:z.array(vze).default([]),summary:z.string().optional(),notes:z.string().optional()});z.object({summary:z.string().optional(),changedJourneys:z.array(fze).default([]),testPlans:z.array(yze).default([]),buildSummary:Sze.optional(),bugbashSummary:Aze.optional()});var Eze=z.object({agentId:z.string().optional(),video:z.string().optional(),startedAt:z.number().optional(),finishedAt:z.number().optional(),videoStartMs:z.number().optional(),videoEndMs:z.number().optional()});z.object({name:z.string(),summary:z.string(),expected:z.string(),actual:z.string(),severity:z.string().optional(),reproSteps:z.array(z.string()).default([]),recording:Eze.optional()});function c8(e){return [...new Map(e.map(t=>[t.name,t])).values()]}var Of=(d=>(d.TestRun="test-run",d.MobileTestRun="mobile-test-run",d.CreditsUsed="credits-used",d.CreditsUsedV2="credits-used-v2",d.StepsExecuted="steps-executed",d.LLMTokensUsed="llm-tokens-used",d.AIAgentInvocation="ai-agent-invocation",d.AITriageTestResult="ai-triage-test-result",d.SandboxRuntimeSecondsUsed="sandbox-runtime-seconds-used",d.HostedBrowserSecondsUsed="hosted-browser-seconds-used",d.LimrunEmulatorSessionMinutesUsed="limrun-emulator-session-minutes-used",d))(Of||{}),bh=(r=>(r.Select="select",r.Classify="classify",r.Triage="triage",r.Mo="mo",r))(bh||{}),wS=(r=>(r.Fixed="fixed",r.CannotFix="cannot-fix",r.NoFixNeeded="no-fix-needed",r.Error="error",r))(wS||{}),va=(d=>(d.TestRunner="test-runner",d.Editor="editor",d.Mcp="mcp",d.Mo="mo",d.Select="ai-select",d.Explore="explore",d.Heal="heal",d.ResultClassification="result-classification",d.GithubPrSummary="github-pr-summary",d.AppGraph="app-graph",d.RunViewer="run-viewer",d))(va||{}),u8="sessionId";var wze=3;function Rze(e){return e==="MODULE"||e==="CONDITIONAL"||e==="WHILE_LOOP"||e==="SECTION"||e==="RESOLVED_MODULE"}function d8(e){if(!Rze(e))switch(e){case "PRESET_ACTION":return 0;case "AI_ACTION":return 3;case "AI_ACTION_DYNAMIC":return 5;default:(o=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})();}}function vP(e){switch(e.type){case "AI_EXTRACT":case "AI_ASSERTION":return wze;case "CAPTCHA":return 3;case "CLICK":case "TYPE":case "SELECT_OPTION":case "HOVER":case "ELEMENT_CHECK":case "FOCUS":case "BLUR":case "SCROLL_DOWN":case "SCROLL_LEFT":case "SCROLL_RIGHT":case "SCROLL_UP":case "MOUSE_DRAG":return e.useSelector||!e.target||e.target.type!=="description"?0:1;case "DRAG":return e.useSelector?0:1;case "VISUAL_DIFF":case "TAB":case "JAVASCRIPT":case "NAVIGATE":case "WAIT":case "SUCCESS":case "AUTH_LOAD":case "AUTH_SAVE":case "COOKIE":case "DIALOG":case "FILE_UPLOAD":case "GO_BACK":case "GO_FORWARD":case "LOCAL_STORAGE":case "NEW_TAB":case "CLOSE_TAB":case "PAGE_CHECK":case "PRESS":case "KEY_DOWN":case "KEY_UP":case "COPY":case "PASTE":case "REFRESH":case "REQUEST":case "GRAPHQL_REQUEST":case "WAIT_FOR_URL":case "REGISTER_REQUEST_LISTENER":case "AWAIT_LISTENER":case "RECORD_REQUESTS":case "GET_RECORDED_REQUESTS":case "SET_HEADER":case "MOCK_ROUTE":case "REMOVE_ROUTE_MOCK":case "OFFLINE_MODE":return 0;default:(o=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})();}}var Vj=z.object({name:z.string(),value:z.string(),url:z.string().optional(),domain:z.string().optional(),path:z.string().optional(),expires:z.number().default(Date.now()/1e3+60*60*24*365),httpOnly:z.boolean().optional(),secure:z.boolean().default(true),sameSite:z.union([z.literal("Strict"),z.literal("Lax"),z.literal("None")]).default("None")});function AP(e,t){let o=[],n=splitCookiesString(e);for(let r of n){let i=parseString(r,{decodeValues:false});if(!i.name)throw new Error("Name missing from cookie");if(!i.value)continue;let a;if(i.sameSite){let u=i.sameSite.trim().toLowerCase();if(u==="strict")a="Strict";else if(u==="lax")a="Lax";else if(u==="none")a="None";else throw new Error(`Invalid sameSite setting in cookie: ${u}`)}i.httpOnly===void 0&&(i.httpOnly=false),!i.path&&i.domain&&(i.path="/"),!i.domain&&t&&(i.domain=t);let s=Vj.parse({...i,expires:i.expires?i.expires.getTime()/1e3:void 0,sameSite:a});o.push(s);let l=[s.name,...Object.keys(s)].map(u=>u.toLowerCase()),c=r.match(/\b(\S+)=([^;]*)/g);if(c)for(let u of c){let[d,m]=u.split("=");if(!d||!m)throw new Error(`Invalid key-value pair in cookie: ${u}`);l.includes(d.toLowerCase())||o.push({...s,name:d,value:m});}}return o}var xze=z.object({origin:z.string(),localStorage:z.array(z.object({name:z.string(),value:z.string()})),sessionStorage:z.array(z.object({name:z.string(),value:z.string()})).optional()}),_ze=z.object({entries:z.record(z.string(),z.array(z.tuple([z.unknown().optional(),z.unknown().optional()]))),version:z.number().optional()}),EP=z.object({cookies:Vj.array().optional(),origins:xze.array().optional(),idb:z.record(z.string(),_ze).optional().describe("key is db name")});function m8(e,t){let o=[];return e.cloneSync()?.serializeSync()?.cookies.forEach(n=>{let r=Vj.safeParse({name:n.key,...n});if(!r.success)return;let i=r.data;!i.domain&&!i.url&&(i.domain=t),o.push(i);}),o}var Fs={type:true,cache:true},p8=[_m.pick(Fs),Ef.pick(Fs),ww.pick(Fs),Iw.pick(Fs),Aw.pick(Fs),Tw.pick(Fs),yw.pick(Fs)],Wj=x__default.discriminatedUnion("type",p8),h8=[_m.pick(Fs),wf.pick(Fs),Rw.pick(Fs),xw.pick(Fs),Ew.pick(Fs),bw.pick(Fs),vw.pick(Fs)],qj=x__default.discriminatedUnion("type",h8);Object.values(yo).filter(e=>p8.some(t=>t.shape.type.safeParse(e).success));Object.values(yo).filter(e=>h8.some(t=>t.shape.type.safeParse(e).success));var Kj=x__default.object({type:x__default.literal("MOBILE_AI_ACTION_STEP"),cache:Fj}),wP=x__default.union([Wj,Kj]),RP=x__default.union([qj,Kj]);var Yj=(a=>(a.US_EAST_1="us-east1",a.US_EAST_2="us-east2",a.US_WEST_1="us-west1",a.US_WEST_2="us-west2",a.EU_NORTH_1="eu-north1",a.AS_SOUTH_1="as-south1",a))(Yj||{}),CP=(n=>(n.US="us",n.EU="eu",n.AS="as",n))(CP||{}),g8=(t=>(t.LOCAL="local",t))(g8||{}),Fw=x__default.nativeEnum(CP),Jj=x__default.nativeEnum(Yj).or(x__default.nativeEnum(CP)),Xj=x__default.nativeEnum(Yj).or(x__default.nativeEnum(CP)).or(x__default.nativeEnum(g8)),Oze="closest";Xj.or(x__default.literal(Oze));var CS=(o=>(o.ANDROID_14="14",o.ANDROID_15="15",o))(CS||{});var IP=(t=>(t.IOS_26="26",t))(IP||{});var kze=["1.56.1-lim.1","1.60.0-lim.1"],f8=x__default.enum(kze);var y8=x__default.nativeEnum(CS).or(x__default.nativeEnum(IP));var Mze=x__default.object({disableMomenticAccessibilityTree:x__default.boolean().optional(),autoGrantPermissions:x__default.boolean().optional().describe("Automatically grant app permission prompts during the run. Android only."),autoAcceptAlerts:x__default.boolean().optional().describe("Automatically accept native alert dialogs. iOS only."),autoDismissAlerts:x__default.boolean().optional().describe("Automatically dismiss native alert dialogs. iOS only."),disableXmlSnapshots:x__default.boolean().optional().describe("Skip collecting XML snapshots during test runs. This can speed up test runs, but will cause the run viewer to show less information."),browserSettings:pS.optional(),locale:x__default.string().optional().describe("Device locale code (e.g. 'fr', 'en-us'). Sets the device language and region. iOS and Android.")}),Lze="avdId",Nze="iosDeviceType",Dze="iosVersion",Fze="localEmulatorStartTimeout",b8=x__default.number().int().positive(),Bze=x__default.object({downloadKbps:b8.optional().describe("Maximum download bandwidth in kilobits per second."),uploadKbps:b8.optional().describe("Maximum upload bandwidth in kilobits per second.")}),Qj=Mze.extend({enableLogcatCapture:x__default.boolean().optional().describe("Enable Android emulator logcat capture. This is disabled by default to reduce log streaming overhead and emulator lag."),enableSyslogCapture:x__default.boolean().optional().describe("Enable iOS simulator syslog capture. This is disabled by default to reduce log streaming overhead and simulator lag."),region:Xj.optional().describe('Where the emulator runs: "local" for an emulator on your machine, or a region for hosted emulators. Defaults to hosted emulators.'),jurisdiction:Fw.optional().describe('Pin hosted emulators to a single jurisdiction: "us", "eu", or "as". Emulators may run in any data center within that jurisdiction, but never outside it: unlike region, this is a hard constraint, and emulator creation fails instead of falling back to another jurisdiction.'),smartWaitingTimeoutMs:x__default.number().optional().refine(e=>e===void 0||e>=0,{message:"Smart waiting timeout must not be negative"}).describe("Budget for every wait and retry on an interaction: settling the screen, the readiness check before an AI locate, and retrying a cached target. In milliseconds. Defaults to 5000."),remoteEmulatorSettings:x__default.object({androidVersion:x__default.nativeEnum(CS).optional()}).optional(),localEmulatorSettings:x__default.object({[Lze]:mS,[Nze]:mS,[Dze]:mS}).optional(),[Fze]:x__default.number().positive().optional().describe("How long to wait for a local emulator or simulator to finish starting, in milliseconds. Defaults to 300000. Raise this on slow machines such as hosted CI runners."),geolocation:x__default.object({latitude:x__default.number().refine(e=>e>=-90&&e<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:x__default.number().refine(e=>e>=-180&&e<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),networkConditions:Bze.optional().describe("Limit the emulator's Wi-Fi bandwidth for the whole run, in kilobits per second. Hosted Android emulators only."),waitForStability:x__default.boolean().optional().describe("Wait for the screen to settle after every step that can change it. Off by default. Does not affect the waits before targeting: an AI locate always waits for a ready screen, and a cached target is retried until the smart-waiting timeout either way."),elementCheckTimeoutSeconds:x__default.number().int().min(0).max(Hu).optional().describe("Default max seconds to wait for element check assertions to be true. Element check steps with an explicit timeout are unaffected."),keyPressDelayMs:x__default.number().min(0).max(1e3).optional().describe("Default delay in milliseconds between key presses for type steps. Steps with an explicit key press delay are unaffected.")});var Bw=x__default.object({retries:x__default.number().optional().describe("number of retries to run"),defaultChannel:x__default.string().optional().describe("Default app release channel to use when installing from managed mobile artifacts."),defaultTag:x__default.string().optional().describe("Default app artifact tag or alias to use. If not set, the latest available tag is used."),defaultEnv:x__default.string().optional().describe("Default mobile environment name to load variables from at runtime."),defaultApkFilePath:mS.describe("APK to install when using the emulator in the local region."),defaultAppFilePath:mS.describe("App file (e.g. .app or .ipa) to install when using the emulator in the local region."),emulator:Qj.optional().describe("Emulator configuration for local or remote mobile execution, including region and local emulator overrides."),ai:ij.optional().describe("AI behavior overrides for this mobile test, such as memory and failure recovery settings.")}),S8=x__default.object({id:Qn,description:x__default.string(),schemaVersion:x__default.string(),settings:Bw.optional(),disabled:x__default.boolean().optional(),labels:x__default.array(x__default.string()).optional()}),IS=S8.extend({platform:x__default.literal("ANDROID").optional().default("ANDROID")}),xS=S8.extend({platform:x__default.literal("IOS")}),T8=x__default.discriminatedUnion("platform",[IS,xS]),v8=x__default.object({fileType:x__default.literal(De.MOBILE_TEST)}),A8=v8.merge(IS),E8=v8.merge(xS);x__default.discriminatedUnion("platform",[A8,E8]);var w8=IS.merge(x__default.object({steps:x__default.array(Yc)})),R8=xS.merge(x__default.object({steps:x__default.array(ed)}));x__default.discriminatedUnion("platform",[w8,R8]);var Uze=A8.merge(w8),zze=E8.merge(R8);x__default.discriminatedUnion("platform",[Uze,zze]);x__default.object({name:x__default.string(),steps:x__default.array(Yc).optional(),settings:Bw.optional()});var C8=IS.extend({steps:Zl.array(),beforeSteps:Zl.array().optional(),afterSteps:Zl.array().optional()}),I8=xS.extend({steps:ec.array(),beforeSteps:ec.array().optional(),afterSteps:ec.array().optional()});x__default.discriminatedUnion("platform",[C8,I8]);var jze=C8.extend({name:x__default.string()}),Hze=I8.extend({name:x__default.string()});x__default.discriminatedUnion("platform",[jze,Hze]);var Ii=x__default.object({startTime:x__default.number(),endTime:x__default.number().optional(),durationMs:x__default.number().optional(),error:x__default.string().optional(),result:x__default.unknown().optional().optional(),attributes:x__default.record(x__default.string(),x__default.unknown().optional()),subSpans:x__default.lazy(()=>aje.array())});var Uw=Ii.extend({type:x__default.literal("SECTION"),name:x__default.string()}),$ze=Ii.extend({type:x__default.literal("GET_PAGE_STATE")}),Gze=Ii.extend({type:x__default.literal("GET_PAGE_SCREENSHOT")}),Vze=Ii.extend({type:x__default.literal("SMART_WAITING")}),Wze=Ii.extend({type:x__default.literal("SCROLL_ELEMENT_INTO_VIEW")}),qze=Ii.extend({type:x__default.literal("AI_LOCATOR_CALL"),screenshotSnapshotId:x__default.string().optional(),result:x__default.object({id:x__default.number(),thoughts:x__default.string(),citations:hn.array().optional()}).optional()}),Kze=Ii.extend({type:x__default.literal("AI_ASSERTION_CALL"),screenshotSnapshotId:x__default.string().optional(),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({thoughts:x__default.string(),result:x__default.boolean(),citations:hn.array().optional()}).optional()}),Yze=Ii.extend({type:x__default.literal("AI_EXTRACTION_CALL"),screenshotSnapshotId:x__default.string().optional(),browserStateSnapshotId:x__default.string().optional(),result:x__default.object({thoughts:x__default.string().optional(),result:x__default.unknown().optional().optional()}).optional()}),Jze=Ii.extend({type:x__default.literal("ELEMENT_ASSERTION"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()}),Xze=Ii.extend({type:x__default.literal("BROWSER_INTERACTION"),name:x__default.string(),coordinates:x__default.object({x:x__default.number(),y:x__default.number()}).optional(),value:x__default.string().optional(),selector:x__default.string().optional()}),Qze=Ii.extend({type:x__default.literal("CACHE_RESOLUTION"),resolutionMethod:x__default.string().optional(),cacheMissReason:x__default.nativeEnum(Mb).optional(),targetSource:x__default.string().optional(),elementScreenshotSnapshotId:x__default.string().optional(),evaluationDurationMs:x__default.number().optional(),resolutionAttempts:x__default.number().optional(),result:x__default.object({serializedElement:x__default.string()}).optional()}),Zze=Ii.extend({type:x__default.literal("TARGET_RESOLUTION"),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({serializedElement:x__default.string()}).optional()}),eje=Ii.extend({type:x__default.literal("LOCATOR_REDIRECT"),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({outcome:x__default.string(),logs:x__default.string().array().optional(),serializedElement:x__default.string().optional(),relativeClickPoint:x__default.object({x:x__default.number(),y:x__default.number()}).optional(),force:x__default.boolean().optional()}).optional()}),tje=Ii.extend({type:x__default.literal("WAIT_FOR_STABILITY")}),oje=Ii.extend({type:x__default.literal("GENERIC"),name:x__default.string()}),nje=Ii.extend({type:x__default.literal("PAGE_ASSERTION"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()}),rje=Ii.extend({type:x__default.literal("AUTO_FOLLOW_NEW_TABS"),result:x__default.object({followed:x__default.boolean()}).optional()}),ije=Ii.extend({type:x__default.literal("VISUAL_DIFF"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()});function x8(e){return e.type==="CACHE_RESOLUTION"||e.type==="TARGET_RESOLUTION"}var aje=x__default.discriminatedUnion("type",[Uw,$ze,Gze,Vze,Wze,qze,Kze,Yze,Jze,Xze,Zze,Qze,eje,tje,nje,ije,oje,rje]);z.object({testId:z.string(),sessionId:z.string()});var _8=z.object({uploadUrl:z.string(),id:z.string()});new Set(Object.values(Tn));var Vo={AI_ACTION_DYNAMIC:"Ask AI achieve a specific goal. Fully dynamic and does not save the steps for reuse. Our most capable AI agent.",CONDITIONAL:"Execute steps based on the outcome of a conditional check",RESOLVED_MODULE:"A list of steps that can be reused in multiple tests.",AI_ASSERTION:"Ask AI to verify whether something is true on the page.",CLICK:"Click on an element on the page.",DIALOG:"Specify how native browser dialogs should be handled.",AI_EXTRACT:"Ask AI to extract data from the page.",BLUR:"Remove focus from an element on the page.",TYPE:"Type the specified text into an element.",PRESS:"Press the specified keys using the keyboard. (e.g. Control+A)",NAVIGATE:"Navigate to the specified URL.",GO_BACK:"Go back in browser history.",GO_FORWARD:"Go forward in browser history.",REFRESH:"Refresh the page. This will not clear cookies or session data.",TAB:"Switch to different tab in the browser.",NEW_TAB:"Create and switch to a new tab in the browser.",CLOSE_TAB:"Close a specified open tab or current tab if none specified.",COOKIE:"Set a cookie that will persist throughout the browser session.",LOCAL_STORAGE:"Set a localStorage value that will persist throughout the browser session",REQUEST:"Make an API request to a URL.",GRAPHQL_REQUEST:"Make a GraphQL request to a URL.",JAVASCRIPT:"Run JavaScript code in the browser or a Node.js environment.",DRAG:"Click and drag an element to another location.",AUTH_LOAD:"Load or clear session state using a JavaScript object including cookies, localStorage, and IndexDB entries.",AUTH_SAVE:"Save authentication state (cookies, localStorage) into a JavaScript object.",WAIT_FOR_URL:"Wait for the active page's URL to match a target value or pattern.",COPY:"Copy the specified value to the browser clipboard.",PASTE:"Paste the browser clipboard contents.",SET_HEADER:"Set a header.",MOCK_ROUTE:"Mock network requests to a specific URL.",REMOVE_ROUTE_MOCK:"Remove a previously set route mock."};var sje=z.string().refine(e=>lp.valid(e),{error:"must be a valid semver string"});function Zj(e){return lp.parse(e)||void 0}function zw(e){if(e!==void 0)return e===true||e==="true"||e==="1"}function O8(e){if(e!=="true"&&e!=="false")throw new ue(`Expected true or false, got "${e}".`);return e==="true"}var k8="on-fail";function eH(e){return e==="on-fail"?"on-fail":e==="false"?false:!!e}var M8=(o=>(o.CLI="cli",o.MobileCLI="mobile-cli",o))(M8||{}),lje=z.nativeEnum(M8),L8=(n=>(n.Error="error",n.Warn="warn",n.Info="info",n))(L8||{}),cje=z.nativeEnum(L8),uje=z.object({id:z.string(),level:cje,versionRange:z.string(),announcement:z.string()});z.object({cliType:lje,version:sje});var N8=z.object({announcements:z.array(uje)});var jw=55555,xP="momentic-code-eval.js";z.object({body:z.string(),to:z.string(),from:z.string()});z.object({from:z.string().optional(),to:z.string(),timeout:z.number().optional(),beforeDate:z.string().pipe(z.coerce.date()).or(z.date()).optional(),afterDate:z.string().pipe(z.coerce.date()).or(z.date()).optional()});z.object({timeoutMs:z.number().nonnegative().optional()}).optional();z.object({phoneNumber:z.string(),leaseToken:z.string()});var dje=z.union([z.string(),z.date()]).transform(e=>e instanceof Date?e:new Date(e)),D8=z.object({phoneNumber:z.string(),expiresAt:dje,leaseToken:z.string()});z.object({to:z.email(),from:z.string(),subject:z.string(),body:z.string(),html:z.string().optional()});z.object({inbox:z.string().transform(e=>e.toLowerCase()),afterDate:z.string().pipe(z.coerce.date()).or(z.date()).optional(),timeout:z.number().optional(),trimWhitespace:z.boolean().optional()});z.object({inbox:z.string(),limit:z.number().optional(),afterDate:z.string().pipe(z.coerce.date()).or(z.date()).optional(),trimWhitespace:z.boolean().optional()});var F8=z.object({email:z.string(),prefix:z.string(),expiresAt:z.coerce.date()}),_P=(o=>(o.RAW="RAW",o.RESPONSE="RESPONSE",o))(_P||{}),B8=z.object({body:z.string().nullish(),status:z.number().optional(),headers:z.array(z.tuple([z.string(),z.string()])).optional()}),mje=z.object({url:z.string(),options:z.object({method:z.string(),body:z.string().nullish(),headers:z.array(z.tuple([z.string(),z.string()])).optional()}).optional()}).optional(),pje=z.object({body:z.string().nullish(),options:z.object({status:z.number(),statusText:z.string().optional(),headers:z.array(z.tuple([z.string(),z.string()])).optional()}).optional()}).optional(),U8=z.object({result:z.unknown().optional(),variableUpdates:z.record(z.string(),z.unknown().optional()).optional(),persistentVariableUpdates:z.record(z.string(),z.unknown().optional()).optional(),error:z.string().optional(),success:z.boolean()});z.object({id:z.string().optional(),orgId:z.string(),momenticLambdaAuthHash:z.string(),momenticLambdaAuthTimestamp:z.number(),code:z.string(),fragment:z.boolean(),state:z.object({env:z.record(z.string(),z.unknown().optional()),request:mje,response:pje,additionalBindings:z.record(z.string(),z.unknown().optional()).optional()}),timeoutMs:z.number().optional(),disallowVariableUpdates:z.boolean().optional(),responseSerialization:z.enum(_P).optional()});var Sh=9e4;function z8({orgId:e,timestamp:t}){return `${e}:${t}`}var hje=x.object({url:x.string(),lineNumber:x.number(),columnNumber:x.number()}),j8=x.object({timestamp:x.number(),text:x.string(),type:x.string(),tabIndex:x.number(),args:x.unknown().optional().array().optional(),url:x.string().optional(),location:hje.optional()}),H8=j8.array(),Hw=H8.array();var $w=class{async getConsoleLogsForRunAttempt(t,o,n){}async getNetworkLogsForRunAttempt(t,o,n){}async getHtmlSnapshot(t,o){}async getA11yTreeSnapshot(t,o){}async getScreenshot(t,o){}async storeConsoleLogsForRunAttempt(t,o,n,r){}async storeNetworkLogsForRunAttempt(t,o,n,r){}listVideoAssetPaths(){return []}close(){}async storeScreenshot(t,o,n){}async storeOnDemandScreenshotById(t,o,n,r){}async storeHtmlSnapshot(t,o,n){}};var gje=z.object({name:z.string(),version:z.string(),comment:z.string().optional()}),fje=z.object({name:z.string(),version:z.string(),comment:z.string().optional()}),yje=z.object({onContentLoad:z.number().optional(),onLoad:z.number().optional(),comment:z.string().optional()}),Gw=z.object({startedDateTime:z.string(),id:z.string(),title:z.string().optional(),pageTimings:yje,comment:z.string().optional()}),bje=z.array(Gw),Sje=z.object({name:z.string(),value:z.string(),path:z.string().optional(),domain:z.string().optional(),expires:z.string().optional(),httpOnly:z.boolean().optional(),secure:z.boolean().optional(),comment:z.string().optional()}),G8=z.array(Sje),Tje=z.object({name:z.string(),value:z.string(),comment:z.string().optional()}),V8=z.array(Tje),vje=z.object({name:z.string(),value:z.string(),comment:z.string().optional()}),Aje=z.array(vje),Eje=z.object({name:z.string(),value:z.string().optional(),fileName:z.string().optional(),contentType:z.string().optional(),comment:z.string().optional()}),wje=z.array(Eje),Rje=z.object({mimeType:z.string(),params:wje,text:z.string(),comment:z.string().optional(),_redactedReason:z.string().optional()}),Cje=z.object({method:z.string(),url:z.string(),httpVersion:z.string().optional(),cookies:G8,headers:V8,queryString:Aje,postData:Rje.optional(),headersSize:z.number().optional(),bodySize:z.number().optional(),comment:z.string().optional()}),Ije=z.object({size:z.number().optional(),compression:z.number().optional(),mimeType:z.string().optional(),text:z.string().optional(),encoding:z.string().optional(),comment:z.string().optional(),_redactedReason:z.string().optional()}),xje=z.object({status:z.number(),statusText:z.string(),httpVersion:z.string().optional(),cookies:G8,headers:V8,content:Ije,redirectURL:z.string().optional(),headersSize:z.number().optional(),bodySize:z.number().optional(),comment:z.string().optional(),_mocked:z.boolean().optional()}),$8=z.object({expires:z.string().optional(),lastAccess:z.string(),eTag:z.string(),hitCount:z.number(),comment:z.string().optional()}),_je=z.object({beforeRequest:$8.optional(),afterRequest:$8.optional(),comment:z.string().optional()}),Pje=z.object({blocked:z.number().optional(),dns:z.number().optional(),connect:z.number().optional(),send:z.number(),wait:z.number(),receive:z.number(),ssl:z.number().optional(),comment:z.string().optional()}),km=z.object({pageref:z.string().optional(),startedDateTime:z.string(),time:z.number().optional(),request:Cje,response:xje.optional(),cache:_je.optional(),timings:Pje,serverIPAddress:z.string().optional(),connection:z.string().optional(),comment:z.string().optional(),_resourceType:z.string().optional(),_responseState:z.enum(["pending","received","finished","failed"]).optional()});function tH(e){return e._responseState?e._responseState==="finished"||e._responseState==="failed":!!e.response}var Oje=z.array(km),kje=z.object({version:z.string().default("1.1"),creator:gje.optional(),browser:fje.optional(),pages:bje.optional(),entries:Oje,comment:z.string().optional()}),oH=z.object({log:kje});z.record(z.string(),Gw);z.record(z.string(),km);function nH(e,t){return {log:{version:"1.2",creator:{name:"Momentic, Inc.",version:"1.0.0"},pages:Object.values(e).sort((o,n)=>new Date(o.startedDateTime).getTime()-new Date(n.startedDateTime).getTime()),entries:Object.values(t).sort((o,n)=>new Date(o.startedDateTime).getTime()-new Date(n.startedDateTime).getTime())}}}var W8=3,q8=z.object({failureCount:z.number().int().nonnegative(),lastSuccess:z.object({actionSummary:z.string().min(1),recordedAt:z.coerce.date()}).optional()});lf.extend({succeeded:z.boolean(),actionSummary:z.string().min(1).optional()});var PP=(J=>(J.DisableClickhouseCaches="disable_clickhouse_caches",J.ShowZeroOpacityElements="show_zero_opacity_elements",J.VisualActions="visual_actions",J.RagV2="rag_v2",J.DisableSecondaryCacheResolution="disable_secondary_cache_resolution",J.GlobalLocatorRedirect="global_locator_redirect",J.FakerConstantSeed="faker_constant_seed",J.AutoExpandIframes="auto_expand_iframes",J.MobileNewAiActionStepsUseV3="mobile_new_ai_action_steps_use_v3",J.PerformanceInsights="performance_insights",J.ShowKnowledgeBase="show_knowledge_base",J.AppGraphBackend="app_graph_backend",J.AppGraphUI="app_graph_ui",J.ClassificationUI="classification_ui",J.HealingUI="healing_ui",J.ExploreUI="explore_ui",J.SlackNotifications="slack_notifications",J.SlackNotificationDms="slack_notification_dms",J.NotificationFailedTestTable="notification_failed_test_table",J.HealTraceUI="heal_trace_ui",J.ExploreTraceUI="explore_trace_ui",J.LinearIntegration="linear_integration",J.AtlassianIntegration="atlassian_integration",J.PosthogIntegration="posthog_integration",J.QaseIntegration="qase_integration",J.HostingIntegrations="hosting_integrations",J.TestinyIntegration="testiny_integration",J.TestRailIntegration="testrail_integration",J.RunAssertions="run_assertions",J.Mo="mo",J.MoWorkspace="mo_workspace",J.MoMobile="mo_mobile",J))(PP||{});var Th=z.union([z.string(),z.number(),z.boolean(),z.null(),z.record(z.string(),z.lazy(()=>Th)),z.array(z.lazy(()=>Th))]),Mf=class{flags;payloads;constructor(t,o){this.flags=t,this.payloads=o;}isBooleanFlagEnabled(t){return process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${t.toUpperCase()}`]==="true"?true:process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${t.toUpperCase()}`]==="false"?false:this.flags[t]===true}getAllFlags(){let t=cloneDeep(this.flags);return Object.entries(t).forEach(([o,n])=>{typeof n=="boolean"&&Object.values(PP).includes(o)&&(t[o]=this.isBooleanFlagEnabled(o));}),t}getAllFlagPayloads(){return cloneDeep(this.payloads)}getFlagPayload(t){let o=this.payloads[t];if(o!==void 0){if(typeof o=="string")try{return JSON.parse(o)}catch{return o}return o}}refresh(){throw new Error("Not implemented")}};var Vw={".123":"application/vnd.lotus-1-2-3",".3dml":"text/vnd.in3d.3dml",".3g2":"video/3gpp2",".3gp":"video/3gpp",".a":"application/octet-stream",".aab":"application/x-authorware-bin",".aac":"audio/x-aac",".aam":"application/x-authorware-map",".aas":"application/x-authorware-seg",".abw":"application/x-abiword",".acc":"application/vnd.americandynamics.acc",".ace":"application/x-ace-compressed",".acu":"application/vnd.acucobol",".acutc":"application/vnd.acucorp",".adp":"audio/adpcm",".aep":"application/vnd.audiograph",".afm":"application/x-font-type1",".afp":"application/vnd.ibm.modcap",".ai":"application/postscript",".aif":"audio/x-aiff",".aifc":"audio/x-aiff",".aiff":"audio/x-aiff",".air":"application/vnd.adobe.air-application-installer-package+zip",".ami":"application/vnd.amiga.ami",".apk":"application/vnd.android.package-archive",".application":"application/x-ms-application",".apr":"application/vnd.lotus-approach",".asc":"application/pgp-signature",".asf":"video/x-ms-asf",".asm":"text/x-asm",".aso":"application/vnd.accpac.simply.aso",".asx":"video/x-ms-asf",".atc":"application/vnd.acucorp",".atom":"application/atom+xml",".atomcat":"application/atomcat+xml",".atomsvc":"application/atomsvc+xml",".atx":"application/vnd.antix.game-component",".au":"audio/basic",".avi":"video/x-msvideo",".aw":"application/applixware",".azf":"application/vnd.airzip.filesecure.azf",".azs":"application/vnd.airzip.filesecure.azs",".azw":"application/vnd.amazon.ebook",".bat":"application/x-msdownload",".bcpio":"application/x-bcpio",".bdf":"application/x-font-bdf",".bdm":"application/vnd.syncml.dm+wbxml",".bh2":"application/vnd.fujitsu.oasysprs",".bin":"application/octet-stream",".bmi":"application/vnd.bmi",".bmp":"image/bmp",".book":"application/vnd.framemaker",".box":"application/vnd.previewsystems.box",".boz":"application/x-bzip2",".bpk":"application/octet-stream",".btif":"image/prs.btif",".bz":"application/x-bzip",".bz2":"application/x-bzip2",".c":"text/x-c",".c4d":"application/vnd.clonk.c4group",".c4f":"application/vnd.clonk.c4group",".c4g":"application/vnd.clonk.c4group",".c4p":"application/vnd.clonk.c4group",".c4u":"application/vnd.clonk.c4group",".cab":"application/vnd.ms-cab-compressed",".caf":"audio/x-caf",".car":"application/vnd.curl.car",".cat":"application/vnd.ms-pki.seccat",".cc":"text/x-c",".cct":"application/x-director",".ccxml":"application/ccxml+xml",".cdbcmsg":"application/vnd.contact.cmsg",".cdf":"application/x-netcdf",".cdkey":"application/vnd.mediastation.cdkey",".cdx":"chemical/x-cdx",".cdxml":"application/vnd.chemdraw+xml",".cdy":"application/vnd.cinderella",".cer":"application/pkix-cert",".cgm":"image/cgm",".chat":"application/x-chat",".chm":"application/vnd.ms-htmlhelp",".chrt":"application/vnd.kde.kchart",".cif":"chemical/x-cif",".cii":"application/vnd.anser-web-certificate-issue-initiation",".cil":"application/vnd.ms-artgalry",".cla":"application/vnd.claymore",".class":"application/java-vm",".clkk":"application/vnd.crick.clicker.keyboard",".clkp":"application/vnd.crick.clicker.palette",".clkt":"application/vnd.crick.clicker.template",".clkw":"application/vnd.crick.clicker.wordbank",".clkx":"application/vnd.crick.clicker",".clp":"application/x-msclip",".cmc":"application/vnd.cosmocaller",".cmdf":"chemical/x-cmdf",".cml":"chemical/x-cml",".cmp":"application/vnd.yellowriver-custom-menu",".cmx":"image/x-cmx",".cod":"application/vnd.rim.cod",".com":"application/x-msdownload",".conf":"text/plain",".cpio":"application/x-cpio",".cpp":"text/x-c",".cpt":"application/mac-compactpro",".crd":"application/x-mscardfile",".crl":"application/pkix-crl",".crt":"application/x-x509-ca-cert",".csh":"application/x-csh",".csml":"chemical/x-csml",".csp":"application/vnd.commonspace",".css":"text/css",".cst":"application/x-director",".csv":"text/csv",".cu":"application/cu-seeme",".curl":"text/vnd.curl",".cww":"application/prs.cww",".cxt":"application/x-director",".cxx":"text/x-c",".daf":"application/vnd.mobius.daf",".dataless":"application/vnd.fdsn.seed",".davmount":"application/davmount+xml",".dcr":"application/x-director",".dcurl":"text/vnd.curl.dcurl",".dd2":"application/vnd.oma.dd2+xml",".ddd":"application/vnd.fujixerox.ddd",".deb":"application/x-debian-package",".def":"text/plain",".deploy":"application/octet-stream",".der":"application/x-x509-ca-cert",".dfac":"application/vnd.dreamfactory",".dic":"text/x-c",".diff":"text/plain",".dir":"application/x-director",".dis":"application/vnd.mobius.dis",".dist":"application/octet-stream",".distz":"application/octet-stream",".djv":"image/vnd.djvu",".djvu":"image/vnd.djvu",".dll":"application/x-msdownload",".dmg":"application/octet-stream",".dms":"application/octet-stream",".dna":"application/vnd.dna",".doc":"application/msword",".docm":"application/vnd.ms-word.document.macroenabled.12",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".dot":"application/msword",".dotm":"application/vnd.ms-word.template.macroenabled.12",".dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template",".dp":"application/vnd.osgi.dp",".dpg":"application/vnd.dpgraph",".dsc":"text/prs.lines.tag",".dtb":"application/x-dtbook+xml",".dtd":"application/xml-dtd",".dts":"audio/vnd.dts",".dtshd":"audio/vnd.dts.hd",".dump":"application/octet-stream",".dvi":"application/x-dvi",".dwf":"model/vnd.dwf",".dwg":"image/vnd.dwg",".dxf":"image/vnd.dxf",".dxp":"application/vnd.spotfire.dxp",".dxr":"application/x-director",".ecelp4800":"audio/vnd.nuera.ecelp4800",".ecelp7470":"audio/vnd.nuera.ecelp7470",".ecelp9600":"audio/vnd.nuera.ecelp9600",".ecma":"application/ecmascript",".edm":"application/vnd.novadigm.edm",".edx":"application/vnd.novadigm.edx",".efif":"application/vnd.picsel",".ei6":"application/vnd.pg.osasli",".elc":"application/octet-stream",".eml":"message/rfc822",".emma":"application/emma+xml",".eol":"audio/vnd.digital-winds",".eot":"application/vnd.ms-fontobject",".eps":"application/postscript",".epub":"application/epub+zip",".es3":"application/vnd.eszigno3+xml",".esf":"application/vnd.epson.esf",".et3":"application/vnd.eszigno3+xml",".etx":"text/x-setext",".exe":"application/x-msdownload",".ext":"application/vnd.novadigm.ext",".ez":"application/andrew-inset",".ez2":"application/vnd.ezpix-album",".ez3":"application/vnd.ezpix-package",".f":"text/x-fortran",".f4v":"video/x-f4v",".f77":"text/x-fortran",".f90":"text/x-fortran",".fbs":"image/vnd.fastbidsheet",".fdf":"application/vnd.fdf",".fe_launch":"application/vnd.denovo.fcselayout-link",".fg5":"application/vnd.fujitsu.oasysgp",".fgd":"application/x-director",".fh":"image/x-freehand",".fh4":"image/x-freehand",".fh5":"image/x-freehand",".fh7":"image/x-freehand",".fhc":"image/x-freehand",".fig":"application/x-xfig",".fli":"video/x-fli",".flo":"application/vnd.micrografx.flo",".flv":"video/x-flv",".flw":"application/vnd.kde.kivio",".flx":"text/vnd.fmi.flexstor",".fly":"text/vnd.fly",".fm":"application/vnd.framemaker",".fnc":"application/vnd.frogans.fnc",".for":"text/x-fortran",".fpx":"image/vnd.fpx",".frame":"application/vnd.framemaker",".fsc":"application/vnd.fsc.weblaunch",".fst":"image/vnd.fst",".ftc":"application/vnd.fluxtime.clip",".fti":"application/vnd.anser-web-funds-transfer-initiation",".fvt":"video/vnd.fvt",".fzs":"application/vnd.fuzzysheet",".g3":"image/g3fax",".gac":"application/vnd.groove-account",".gdl":"model/vnd.gdl",".geo":"application/vnd.dynageo",".gex":"application/vnd.geometry-explorer",".ggb":"application/vnd.geogebra.file",".ggt":"application/vnd.geogebra.tool",".ghf":"application/vnd.groove-help",".gif":"image/gif",".gim":"application/vnd.groove-identity-message",".gmx":"application/vnd.gmx",".gnumeric":"application/x-gnumeric",".gph":"application/vnd.flographit",".gqf":"application/vnd.grafeq",".gqs":"application/vnd.grafeq",".gram":"application/srgs",".gre":"application/vnd.geometry-explorer",".grv":"application/vnd.groove-injector",".grxml":"application/srgs+xml",".gsf":"application/x-font-ghostscript",".gtar":"application/x-gtar",".gtm":"application/vnd.groove-tool-message",".gtw":"model/vnd.gtw",".gv":"text/vnd.graphviz",".gz":"application/x-gzip",".h":"text/x-c",".h261":"video/h261",".h263":"video/h263",".h264":"video/h264",".hbci":"application/vnd.hbci",".hdf":"application/x-hdf",".hh":"text/x-c",".hlp":"application/winhlp",".hpgl":"application/vnd.hp-hpgl",".hpid":"application/vnd.hp-hpid",".hps":"application/vnd.hp-hps",".hqx":"application/mac-binhex40",".htke":"application/vnd.kenameaapp",".htm":"text/html",".html":"text/html",".hvd":"application/vnd.yamaha.hv-dic",".hvp":"application/vnd.yamaha.hv-voice",".hvs":"application/vnd.yamaha.hv-script",".icc":"application/vnd.iccprofile",".ice":"x-conference/x-cooltalk",".icm":"application/vnd.iccprofile",".ico":"image/x-icon",".ics":"text/calendar",".ief":"image/ief",".ifb":"text/calendar",".ifm":"application/vnd.shana.informed.formdata",".iges":"model/iges",".igl":"application/vnd.igloader",".igs":"model/iges",".igx":"application/vnd.micrografx.igx",".iif":"application/vnd.shana.informed.interchange",".imp":"application/vnd.accpac.simply.imp",".ims":"application/vnd.ms-ims",".in":"text/plain",".ipk":"application/vnd.shana.informed.package",".irm":"application/vnd.ibm.rights-management",".irp":"application/vnd.irepository.package+xml",".iso":"application/octet-stream",".itp":"application/vnd.shana.informed.formtemplate",".ivp":"application/vnd.immervision-ivp",".ivu":"application/vnd.immervision-ivu",".jad":"text/vnd.sun.j2me.app-descriptor",".jam":"application/vnd.jam",".jar":"application/java-archive",".java":"text/x-java-source",".jisp":"application/vnd.jisp",".jlt":"application/vnd.hp-jlyt",".jnlp":"application/x-java-jnlp-file",".joda":"application/vnd.joost.joda-archive",".jpe":"image/jpeg",".jpeg":"image/jpeg",".jpg":"image/jpeg",".jpgm":"video/jpm",".jpgv":"video/jpeg",".jpm":"video/jpm",".js":"application/javascript",".json":"application/json",".kar":"audio/midi",".karbon":"application/vnd.kde.karbon",".kfo":"application/vnd.kde.kformula",".kia":"application/vnd.kidspiration",".kil":"application/x-killustrator",".kml":"application/vnd.google-earth.kml+xml",".kmz":"application/vnd.google-earth.kmz",".kne":"application/vnd.kinar",".knp":"application/vnd.kinar",".kon":"application/vnd.kde.kontour",".kpr":"application/vnd.kde.kpresenter",".kpt":"application/vnd.kde.kpresenter",".ksh":"text/plain",".ksp":"application/vnd.kde.kspread",".ktr":"application/vnd.kahootz",".ktz":"application/vnd.kahootz",".kwd":"application/vnd.kde.kword",".kwt":"application/vnd.kde.kword",".latex":"application/x-latex",".lbd":"application/vnd.llamagraphics.life-balance.desktop",".lbe":"application/vnd.llamagraphics.life-balance.exchange+xml",".les":"application/vnd.hhe.lesson-player",".lha":"application/octet-stream",".link66":"application/vnd.route66.link66+xml",".list":"text/plain",".list3820":"application/vnd.ibm.modcap",".listafp":"application/vnd.ibm.modcap",".log":"text/plain",".lostxml":"application/lost+xml",".lrf":"application/octet-stream",".lrm":"application/vnd.ms-lrm",".ltf":"application/vnd.frogans.ltf",".lvp":"audio/vnd.lucent.voice",".lwp":"application/vnd.lotus-wordpro",".lzh":"application/octet-stream",".m13":"application/x-msmediaview",".m14":"application/x-msmediaview",".m1v":"video/mpeg",".m2a":"audio/mpeg",".m2v":"video/mpeg",".m3a":"audio/mpeg",".m3u":"audio/x-mpegurl",".m4a":"audio/mp4",".m4u":"video/vnd.mpegurl",".m4v":"video/x-m4v",".ma":"application/mathematica",".mag":"application/vnd.ecowin.chart",".maker":"application/vnd.framemaker",".man":"text/troff",".mathml":"application/mathml+xml",".mb":"application/mathematica",".mbk":"application/vnd.mobius.mbk",".mbox":"application/mbox",".mc1":"application/vnd.medcalcdata",".mcd":"application/vnd.mcd",".mcurl":"text/vnd.curl.mcurl",".mdb":"application/x-msaccess",".mdi":"image/vnd.ms-modi",".me":"text/troff",".mesh":"model/mesh",".mfm":"application/vnd.mfmp",".mgz":"application/vnd.proteus.magazine",".mht":"message/rfc822",".mhtml":"message/rfc822",".mid":"audio/midi",".midi":"audio/midi",".mif":"application/vnd.mif",".mime":"message/rfc822",".mj2":"video/mj2",".mjp2":"video/mj2",".mkv":"video/x-matroska",".mlp":"application/vnd.dolby.mlp",".mmd":"application/vnd.chipnuts.karaoke-mmd",".mmf":"application/vnd.smaf",".mmr":"image/vnd.fujixerox.edmics-mmr",".mny":"application/x-msmoney",".mobi":"application/x-mobipocket-ebook",".mov":"video/quicktime",".movie":"video/x-sgi-movie",".mp2":"audio/mpeg",".mp2a":"audio/mpeg",".mp3":"audio/mpeg",".mp4":"video/mp4",".mp4a":"audio/mp4",".mp4s":"application/mp4",".mp4v":"video/mp4",".mpa":"video/mpeg",".mpc":"application/vnd.mophun.certificate",".mpe":"video/mpeg",".mpeg":"video/mpeg",".mpg":"video/mpeg",".mpg4":"video/mp4",".mpga":"audio/mpeg",".mpkg":"application/vnd.apple.installer+xml",".mpm":"application/vnd.blueice.multipass",".mpn":"application/vnd.mophun.application",".mpp":"application/vnd.ms-project",".mpt":"application/vnd.ms-project",".mpy":"application/vnd.ibm.minipay",".mqy":"application/vnd.mobius.mqy",".mrc":"application/marc",".ms":"text/troff",".mscml":"application/mediaservercontrol+xml",".mseed":"application/vnd.fdsn.mseed",".mseq":"application/vnd.mseq",".msf":"application/vnd.epson.msf",".msh":"model/mesh",".msi":"application/x-msdownload",".msl":"application/vnd.mobius.msl",".msty":"application/vnd.muvee.style",".mts":"model/vnd.mts",".mus":"application/vnd.musician",".musicxml":"application/vnd.recordare.musicxml+xml",".mvb":"application/x-msmediaview",".mwf":"application/vnd.mfer",".mxf":"application/mxf",".mxl":"application/vnd.recordare.musicxml",".mxml":"application/xv+xml",".mxs":"application/vnd.triscape.mxs",".mxu":"video/vnd.mpegurl",".n-gage":"application/vnd.nokia.n-gage.symbian.install",".nb":"application/mathematica",".nc":"application/x-netcdf",".ncx":"application/x-dtbncx+xml",".ngdat":"application/vnd.nokia.n-gage.data",".nlu":"application/vnd.neurolanguage.nlu",".nml":"application/vnd.enliven",".nnd":"application/vnd.noblenet-directory",".nns":"application/vnd.noblenet-sealer",".nnw":"application/vnd.noblenet-web",".npx":"image/vnd.net-fpx",".nsf":"application/vnd.lotus-notes",".nws":"message/rfc822",".o":"application/octet-stream",".oa2":"application/vnd.fujitsu.oasys2",".oa3":"application/vnd.fujitsu.oasys3",".oas":"application/vnd.fujitsu.oasys",".obd":"application/x-msbinder",".obj":"application/octet-stream",".oda":"application/oda",".odb":"application/vnd.oasis.opendocument.database",".odc":"application/vnd.oasis.opendocument.chart",".odf":"application/vnd.oasis.opendocument.formula",".odft":"application/vnd.oasis.opendocument.formula-template",".odg":"application/vnd.oasis.opendocument.graphics",".odi":"application/vnd.oasis.opendocument.image",".odp":"application/vnd.oasis.opendocument.presentation",".ods":"application/vnd.oasis.opendocument.spreadsheet",".odt":"application/vnd.oasis.opendocument.text",".oga":"audio/ogg",".ogg":"audio/ogg",".ogv":"video/ogg",".ogx":"application/ogg",".onepkg":"application/onenote",".onetmp":"application/onenote",".onetoc":"application/onenote",".onetoc2":"application/onenote",".opf":"application/oebps-package+xml",".oprc":"application/vnd.palm",".org":"application/vnd.lotus-organizer",".osf":"application/vnd.yamaha.openscoreformat",".osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml",".otc":"application/vnd.oasis.opendocument.chart-template",".otf":"application/x-font-otf",".otg":"application/vnd.oasis.opendocument.graphics-template",".oth":"application/vnd.oasis.opendocument.text-web",".oti":"application/vnd.oasis.opendocument.image-template",".otm":"application/vnd.oasis.opendocument.text-master",".otp":"application/vnd.oasis.opendocument.presentation-template",".ots":"application/vnd.oasis.opendocument.spreadsheet-template",".ott":"application/vnd.oasis.opendocument.text-template",".oxt":"application/vnd.openofficeorg.extension",".p":"text/x-pascal",".p10":"application/pkcs10",".p12":"application/x-pkcs12",".p7b":"application/x-pkcs7-certificates",".p7c":"application/pkcs7-mime",".p7m":"application/pkcs7-mime",".p7r":"application/x-pkcs7-certreqresp",".p7s":"application/pkcs7-signature",".pas":"text/x-pascal",".pbd":"application/vnd.powerbuilder6",".pbm":"image/x-portable-bitmap",".pcf":"application/x-font-pcf",".pcl":"application/vnd.hp-pcl",".pclxl":"application/vnd.hp-pclxl",".pct":"image/x-pict",".pcurl":"application/vnd.curl.pcurl",".pcx":"image/x-pcx",".pdb":"application/vnd.palm",".pdf":"application/pdf",".pfa":"application/x-font-type1",".pfb":"application/x-font-type1",".pfm":"application/x-font-type1",".pfr":"application/font-tdpfr",".pfx":"application/x-pkcs12",".pgm":"image/x-portable-graymap",".pgn":"application/x-chess-pgn",".pgp":"application/pgp-encrypted",".pic":"image/x-pict",".pkg":"application/octet-stream",".pki":"application/pkixcmp",".pkipath":"application/pkix-pkipath",".pl":"text/plain",".plb":"application/vnd.3gpp.pic-bw-large",".plc":"application/vnd.mobius.plc",".plf":"application/vnd.pocketlearn",".pls":"application/pls+xml",".pml":"application/vnd.ctc-posml",".png":"image/png",".pnm":"image/x-portable-anymap",".portpkg":"application/vnd.macports.portpkg",".pot":"application/vnd.ms-powerpoint",".potm":"application/vnd.ms-powerpoint.template.macroenabled.12",".potx":"application/vnd.openxmlformats-officedocument.presentationml.template",".ppa":"application/vnd.ms-powerpoint",".ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12",".ppd":"application/vnd.cups-ppd",".ppm":"image/x-portable-pixmap",".pps":"application/vnd.ms-powerpoint",".ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12",".ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow",".ppt":"application/vnd.ms-powerpoint",".pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".pqa":"application/vnd.palm",".prc":"application/x-mobipocket-ebook",".pre":"application/vnd.lotus-freelance",".prf":"application/pics-rules",".ps":"application/postscript",".psb":"application/vnd.3gpp.pic-bw-small",".psd":"image/vnd.adobe.photoshop",".psf":"application/x-font-linux-psf",".ptid":"application/vnd.pvi.ptid1",".pub":"application/x-mspublisher",".pvb":"application/vnd.3gpp.pic-bw-var",".pwn":"application/vnd.3m.post-it-notes",".pwz":"application/vnd.ms-powerpoint",".py":"text/x-python",".pya":"audio/vnd.ms-playready.media.pya",".pyc":"application/x-python-code",".pyo":"application/x-python-code",".pyv":"video/vnd.ms-playready.media.pyv",".qam":"application/vnd.epson.quickanime",".qbo":"application/vnd.intu.qbo",".qfx":"application/vnd.intu.qfx",".qps":"application/vnd.publishare-delta-tree",".qt":"video/quicktime",".qwd":"application/vnd.quark.quarkxpress",".qwt":"application/vnd.quark.quarkxpress",".qxb":"application/vnd.quark.quarkxpress",".qxd":"application/vnd.quark.quarkxpress",".qxl":"application/vnd.quark.quarkxpress",".qxt":"application/vnd.quark.quarkxpress",".ra":"audio/x-pn-realaudio",".ram":"audio/x-pn-realaudio",".rar":"application/x-rar-compressed",".ras":"image/x-cmu-raster",".rcprofile":"application/vnd.ipunplugged.rcprofile",".rdf":"application/rdf+xml",".rdz":"application/vnd.data-vision.rdz",".rep":"application/vnd.businessobjects",".res":"application/x-dtbresource+xml",".rgb":"image/x-rgb",".rif":"application/reginfo+xml",".rl":"application/resource-lists+xml",".rlc":"image/vnd.fujixerox.edmics-rlc",".rld":"application/resource-lists-diff+xml",".rm":"application/vnd.rn-realmedia",".rmi":"audio/midi",".rmp":"audio/x-pn-realaudio-plugin",".rms":"application/vnd.jcp.javame.midlet-rms",".rnc":"application/relax-ng-compact-syntax",".roff":"text/troff",".rpm":"application/x-rpm",".rpss":"application/vnd.nokia.radio-presets",".rpst":"application/vnd.nokia.radio-preset",".rq":"application/sparql-query",".rs":"application/rls-services+xml",".rsd":"application/rsd+xml",".rss":"application/rss+xml",".rtf":"application/rtf",".rtx":"text/richtext",".s":"text/x-asm",".saf":"application/vnd.yamaha.smaf-audio",".sbml":"application/sbml+xml",".sc":"application/vnd.ibm.secure-container",".scd":"application/x-msschedule",".scm":"application/vnd.lotus-screencam",".scq":"application/scvp-cv-request",".scs":"application/scvp-cv-response",".scurl":"text/vnd.curl.scurl",".sda":"application/vnd.stardivision.draw",".sdc":"application/vnd.stardivision.calc",".sdd":"application/vnd.stardivision.impress",".sdkd":"application/vnd.solent.sdkm+xml",".sdkm":"application/vnd.solent.sdkm+xml",".sdp":"application/sdp",".sdw":"application/vnd.stardivision.writer",".see":"application/vnd.seemail",".seed":"application/vnd.fdsn.seed",".sema":"application/vnd.sema",".semd":"application/vnd.semd",".semf":"application/vnd.semf",".ser":"application/java-serialized-object",".setpay":"application/set-payment-initiation",".setreg":"application/set-registration-initiation",".sfd-hdstx":"application/vnd.hydrostatix.sof-data",".sfs":"application/vnd.spotfire.sfs",".sgl":"application/vnd.stardivision.writer-global",".sgm":"text/sgml",".sgml":"text/sgml",".sh":"application/x-sh",".shar":"application/x-shar",".shf":"application/shf+xml",".si":"text/vnd.wap.si",".sic":"application/vnd.wap.sic",".sig":"application/pgp-signature",".silo":"model/mesh",".sis":"application/vnd.symbian.install",".sisx":"application/vnd.symbian.install",".sit":"application/x-stuffit",".sitx":"application/x-stuffitx",".skd":"application/vnd.koan",".skm":"application/vnd.koan",".skp":"application/vnd.koan",".skt":"application/vnd.koan",".sl":"text/vnd.wap.sl",".slc":"application/vnd.wap.slc",".sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12",".sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide",".slt":"application/vnd.epson.salt",".smf":"application/vnd.stardivision.math",".smi":"application/smil+xml",".smil":"application/smil+xml",".snd":"audio/basic",".snf":"application/x-font-snf",".so":"application/octet-stream",".spc":"application/x-pkcs7-certificates",".spf":"application/vnd.yamaha.smaf-phrase",".spl":"application/x-futuresplash",".spot":"text/vnd.in3d.spot",".spp":"application/scvp-vp-response",".spq":"application/scvp-vp-request",".spx":"audio/ogg",".src":"application/x-wais-source",".srx":"application/sparql-results+xml",".sse":"application/vnd.kodak-descriptor",".ssf":"application/vnd.epson.ssf",".ssml":"application/ssml+xml",".stc":"application/vnd.sun.xml.calc.template",".std":"application/vnd.sun.xml.draw.template",".stf":"application/vnd.wt.stf",".sti":"application/vnd.sun.xml.impress.template",".stk":"application/hyperstudio",".stl":"application/vnd.ms-pki.stl",".str":"application/vnd.pg.format",".stw":"application/vnd.sun.xml.writer.template",".sus":"application/vnd.sus-calendar",".susp":"application/vnd.sus-calendar",".sv4cpio":"application/x-sv4cpio",".sv4crc":"application/x-sv4crc",".svd":"application/vnd.svd",".svg":"image/svg+xml",".svgz":"image/svg+xml",".swa":"application/x-director",".swf":"application/x-shockwave-flash",".swi":"application/vnd.arastra.swi",".sxc":"application/vnd.sun.xml.calc",".sxd":"application/vnd.sun.xml.draw",".sxg":"application/vnd.sun.xml.writer.global",".sxi":"application/vnd.sun.xml.impress",".sxm":"application/vnd.sun.xml.math",".sxw":"application/vnd.sun.xml.writer",".t":"text/troff",".tao":"application/vnd.tao.intent-module-archive",".tar":"application/x-tar",".tcap":"application/vnd.3gpp2.tcap",".tcl":"application/x-tcl",".teacher":"application/vnd.smart.teacher",".tex":"application/x-tex",".texi":"application/x-texinfo",".texinfo":"application/x-texinfo",".text":"text/plain",".tfm":"application/x-tex-tfm",".tgz":"application/x-gzip",".tif":"image/tiff",".tiff":"image/tiff",".tmo":"application/vnd.tmobile-livetv",".torrent":"application/x-bittorrent",".tpl":"application/vnd.groove-tool-template",".tpt":"application/vnd.trid.tpt",".tr":"text/troff",".tra":"application/vnd.trueapp",".trm":"application/x-msterminal",".tsv":"text/tab-separated-values",".ttc":"application/x-font-ttf",".ttf":"application/x-font-ttf",".twd":"application/vnd.simtech-mindmapper",".twds":"application/vnd.simtech-mindmapper",".txd":"application/vnd.genomatix.tuxedo",".txf":"application/vnd.mobius.txf",".txt":"text/plain",".u32":"application/x-authorware-bin",".udeb":"application/x-debian-package",".ufd":"application/vnd.ufdl",".ufdl":"application/vnd.ufdl",".umj":"application/vnd.umajin",".unityweb":"application/vnd.unity",".uoml":"application/vnd.uoml+xml",".uri":"text/uri-list",".uris":"text/uri-list",".urls":"text/uri-list",".ustar":"application/x-ustar",".utz":"application/vnd.uiq.theme",".uu":"text/x-uuencode",".vcd":"application/x-cdlink",".vcf":"text/x-vcard",".vcg":"application/vnd.groove-vcard",".vcs":"text/x-vcalendar",".vcx":"application/vnd.vcx",".vis":"application/vnd.visionary",".viv":"video/vnd.vivo",".vor":"application/vnd.stardivision.writer",".vox":"application/x-authorware-bin",".vrml":"model/vrml",".vsd":"application/vnd.visio",".vsf":"application/vnd.vsf",".vss":"application/vnd.visio",".vst":"application/vnd.visio",".vsw":"application/vnd.visio",".vtu":"model/vnd.vtu",".vxml":"application/voicexml+xml",".w3d":"application/x-director",".webm":"video/webm",".wad":"application/x-doom",".wav":"audio/x-wav",".wax":"audio/x-ms-wax",".wbmp":"image/vnd.wap.wbmp",".wbs":"application/vnd.criticaltools.wbs+xml",".wbxml":"application/vnd.wap.wbxml",".wcm":"application/vnd.ms-works",".wdb":"application/vnd.ms-works",".wiz":"application/msword",".wks":"application/vnd.ms-works",".wm":"video/x-ms-wm",".wma":"audio/x-ms-wma",".wmd":"application/x-ms-wmd",".wmf":"application/x-msmetafile",".wml":"text/vnd.wap.wml",".wmlc":"application/vnd.wap.wmlc",".wmls":"text/vnd.wap.wmlscript",".wmlsc":"application/vnd.wap.wmlscriptc",".wmv":"video/x-ms-wmv",".wmx":"video/x-ms-wmx",".wmz":"application/x-ms-wmz",".wpd":"application/vnd.wordperfect",".wpl":"application/vnd.ms-wpl",".wps":"application/vnd.ms-works",".wqd":"application/vnd.wqd",".wri":"application/x-mswrite",".wrl":"model/vrml",".wsdl":"application/wsdl+xml",".wspolicy":"application/wspolicy+xml",".wtb":"application/vnd.webturbo",".wvx":"video/x-ms-wvx",".x32":"application/x-authorware-bin",".x3d":"application/vnd.hzn-3d-crossword",".xap":"application/x-silverlight-app",".xar":"application/vnd.xara",".xbap":"application/x-ms-xbap",".xbd":"application/vnd.fujixerox.docuworks.binder",".xbm":"image/x-xbitmap",".xdm":"application/vnd.syncml.dm+xml",".xdp":"application/vnd.adobe.xdp+xml",".xdw":"application/vnd.fujixerox.docuworks",".xenc":"application/xenc+xml",".xer":"application/patch-ops-error+xml",".xfdf":"application/vnd.adobe.xfdf",".xfdl":"application/vnd.xfdl",".xht":"application/xhtml+xml",".xhtml":"application/xhtml+xml",".xhvml":"application/xv+xml",".xif":"image/vnd.xiff",".xla":"application/vnd.ms-excel",".xlam":"application/vnd.ms-excel.addin.macroenabled.12",".xlb":"application/vnd.ms-excel",".xlc":"application/vnd.ms-excel",".xlm":"application/vnd.ms-excel",".xls":"application/vnd.ms-excel",".xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12",".xlsm":"application/vnd.ms-excel.sheet.macroenabled.12",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".xlt":"application/vnd.ms-excel",".xltm":"application/vnd.ms-excel.template.macroenabled.12",".xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template",".xlw":"application/vnd.ms-excel",".xml":"application/xml",".xo":"application/vnd.olpc-sugar",".xop":"application/xop+xml",".xpdl":"application/xml",".xpi":"application/x-xpinstall",".xpm":"image/x-xpixmap",".xpr":"application/vnd.is-xpr",".xps":"application/vnd.ms-xpsdocument",".xpw":"application/vnd.intercon.formnet",".xpx":"application/vnd.intercon.formnet",".xsl":"application/xml",".xslt":"application/xslt+xml",".xsm":"application/vnd.syncml+xml",".xspf":"application/xspf+xml",".xul":"application/vnd.mozilla.xul+xml",".xvm":"application/xv+xml",".xvml":"application/xv+xml",".xwd":"image/x-xwindowdump",".xyz":"chemical/x-xyz",".zaz":"application/vnd.zzazz.deck+xml",".zip":"application/zip",".zir":"application/vnd.zul",".zirz":"application/vnd.zul",".zmm":"application/vnd.handheld-entertainment+xml"},Y8=[".sh",".exe",".app",".bat",".cmd",".msi",".apk",".jar",".py",".js",".cron",".php",".asp"];var X8=z.discriminatedUnion("operation",[z.object({operation:z.literal("upsert"),path:z.string().min(1),content:z.string()}),z.object({operation:z.literal("delete"),path:z.string().min(1)})]),Mje=z.object({baseSha:z.string().min(1),headSha:z.string().min(1)}),Lje=z.object({baseBranch:z.string().min(1).max(255),baseCommitSha:z.string().min(1),expectedHeadSha:z.string().min(1).nullable().optional(),expectedBaseSha:z.string().min(1).optional(),headBranch:z.string().min(1).max(255).optional(),branchPrefix:z.string().min(1).max(255).optional(),idempotencyKey:z.string().min(1).optional()}),Nje=5,Dje=z.object({commitMessage:z.string().min(1),title:z.string().min(1),body:z.string(),reviewers:z.array(z.string().min(1)).optional(),teamReviewers:z.array(z.string().min(1)).optional(),fallbackReviewers:z.array(z.string().min(1)).max(Nje).optional(),draft:z.boolean().optional()});Lje.extend(Dje.shape).extend({changes:z.array(X8).min(1),coAuthorRange:Mje.optional(),requestCommitAuthorsAsReviewers:z.boolean().optional(),assignCommitAuthorsAsAssignees:z.boolean().optional(),assignees:z.array(z.string().min(1)).optional(),omitBaseCommitCoAuthors:z.boolean().optional()}).superRefine((e,t)=>{e.headBranch||(!e.branchPrefix||!e.idempotencyKey)&&t.addIssue({code:"custom",message:"branchPrefix and idempotencyKey are required when headBranch is omitted",path:["idempotencyKey"]});});var Q8=z.object({pullRequestUrl:z.url(),pullRequestNumber:z.number(),headBranch:z.string(),commitSha:z.string(),created:z.boolean(),authors:z.array(oE).optional(),assignees:z.array(z.string()).optional(),reviewers:z.array(z.string()).optional()});z.object({branch:z.string().min(1).max(255),expectedHeadSha:z.string().min(1).optional(),commitMessage:z.string().min(1),changes:z.array(X8).min(1)});var Z8=z.object({branch:z.string(),commitSha:z.string(),committed:z.boolean()});z.object({usernames:z.array(z.string().min(1)).min(1).max(50)});var e9=z.object({usernamesWithMergeAccess:z.array(z.string())}),t9=z.object({shas:z.array(z.string().min(1)).min(1).max(20)}),o9=z.object({authorsBySha:z.record(z.string(),z.array(oE)),filesBySha:z.record(z.string(),z.array(z.string())).optional(),candidatesBySha:z.record(z.string(),z.array(z.object({githubLogin:z.string(),via:z.string(),isApp:z.boolean().optional()}))).optional(),touchedPaths:z.array(z.string())});z.object({query:z.string().min(1).max(256)});var iH=z.object({number:z.number(),title:z.string(),state:z.enum(["open","merged","closed"]),authorLogin:z.string().optional(),updatedAt:z.string().optional(),htmlUrl:z.string().optional(),body:z.string().optional(),changedPaths:z.array(z.string()).optional()}),n9=z.object({pullRequests:z.array(iH),scanned:z.number(),truncated:z.boolean()}),r9=z.object({authorLogin:z.string().min(1).optional(),authorIsBot:z.boolean().optional(),humanAssigneeLogins:z.array(z.string().min(1)).optional()}),i9=r9.extend({issueNumber:z.number(),htmlUrl:z.url(),headBranch:z.string().min(1),baseBranch:z.string().min(1),latestCommitSha:z.string().min(1),mergeCommitSha:z.string().min(1).optional(),draft:z.boolean().optional(),title:z.string().optional(),body:z.string().optional()});function a9(e){return e.authorLogin&&e.authorIsBot===false?e.authorLogin:e.humanAssigneeLogins?.[0]}r9.extend({number:z.number(),htmlUrl:z.url()});var aH=100;z.object({path:z.string().min(1),ref:z.string().min(1),limit:z.coerce.number().int().min(1).max(aH)});var Fje=z.object({path:z.string().min(1),status:z.string().min(1),additions:z.number(),deletions:z.number(),previousPath:z.string().optional(),patch:z.string().optional()}),s9=z.object({sha:z.string().min(1),author:z.string().optional(),email:z.string().optional(),date:z.string().optional(),message:z.string()}),l9=z.object({mergeBaseSha:z.string().min(1),totalCommits:z.number(),commits:z.array(s9),files:z.array(Fje)}),c9=z.object({commits:z.array(s9)}),u9=z.object({content:z.string().nullable()}),d9=z.object({name:z.string().min(1),protected:z.boolean()}),m9=z.object({iid:z.number(),webUrl:z.url(),sourceBranch:z.string().min(1),targetBranch:z.string().min(1),latestCommitSha:z.string().min(1),description:z.string().optional()}),Bje=z.object({name:z.string(),path:z.string(),body:z.string()}),h9=z.object({template:Bje});function kP({githubRepository:e,gitlabProjectPath:t,gitOriginUrl:o}){let n=Uje(o);return e?rH(n?.host??"github.com",e):t?rH(n?.host??"gitlab.com",t):n?rH(n.host,n.repositoryPath):void 0}function Ww(e){let t=e?.trim();if(!t)return;let o="refs/heads/";return t.startsWith(o)?t.slice(o.length):t}function Uje(e){let t=e?.trim();if(!t)return;if(t.includes("://"))try{let a=new URL(t);return ["git:","http:","https:","ssh:"].includes(a.protocol)?{host:a.host,repositoryPath:a.pathname}:void 0}catch{return}let o=t.indexOf(":");if(o<=0)return;let n=t.slice(0,o),r=t.slice(o+1),i=n.slice(n.lastIndexOf("@")+1);return i&&r?{host:i,repositoryPath:r}:void 0}function Zn(e){let[t,o,...n]=e.split("/");if(!(!t||!o||n.length>0))return {owner:t,repo:o}}function rH(e,t){let o=e.trim().toLowerCase(),n=t.trim().split("/").filter(i=>i.length>0);if(!o||n.length===0)return;if(o===`ssh.${OP}`)o=OP,n[0]?.toLowerCase()==="v3"&&(n=n.slice(1));else if(o.endsWith(J8)){let i=o.slice(0,-J8.length);if(!i)return;o=OP,n=[i,...n];}o===OP&&(n=n.filter(i=>i.toLowerCase()!=="_git"));let r=n.at(-1);if(r?.toLowerCase().endsWith(".git")){let i=r.slice(0,-4);if(!i)return;n[n.length-1]=i;}return `${o}/${n.join("/")}`.toLowerCase()}function g9(e){let t=Zn(e);if(t)return t;throw new $t(`Invalid GitHub repository string: ${e}. Expected format "owner/repo".`)}var OP="dev.azure.com",J8=".visualstudio.com",zje=/^co-authored-by:\s*.*?<([^>]+)>\s*$/gim,jje=/^(?:\d+\+)?([^@]+)@users\.noreply\.github\.com$/i;function sH(e){return e.match(jje)?.[1]}function Hje(e){let t=[];for(let o of e.matchAll(zje)){let n=o[1]?.trim();n&&t.push({email:n,githubLogin:sH(n)});}return t}function f9(e){let t=[];for(let o of e.split("\0")){let n=o.trim();if(!n)continue;let r=n.indexOf(`
|
|
180
|
-
`),i=r===-1?n:n.slice(0,r),a=r===-1?"":n.slice(r+1),s=[];i&&s.push({email:i,githubLogin:sH(i)}),s.push(...Hje(a)),t.push(s);}return t}function $je(e){return (e.githubLogin??(e.email?sH(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function y9(e){return e.filter(t=>!$je(t))}var b9="https://static.momentic.ai";function qw(e,t){return {light:`${b9}/${e}.svg`,dark:`${b9}/${e}-dark.svg`,alt:t}}var Kw={runGroup:qw("run-group-button","View run group"),basePr:qw("view-base-pr-button","View base PR"),branch:qw("view-branch-button","View branch"),commit:qw("view-commit-button","View commit")};function Yw({href:e,button:t}){return `<a href="${e}"><picture><source media="(prefers-color-scheme: dark)" srcset="${t.dark}" /><img src="${t.light}" alt="${t.alt}" /></picture></a>`}var vh=z.object({limit:z.number().min(1).max(100).optional(),page:z.number().min(1).optional()}),lH=z.object({page:z.number(),pageSize:z.number(),pageCount:z.number()});var cH=x__default.object({platformSep:x__default.string(),fullPathSegments:x__default.string().array(),relativePathSegments:x__default.string().array(),relativePath:x__default.string().describe("path relative to the root test directory, i.e. my-folder/my-test.yaml"),fileName:x__default.string().describe("base name of the file including the extension, e.g. my-module.module.yaml"),lastModified:x__default.coerce.date(),createdAt:x__default.coerce.date()});var Gje=z.array(cH.extend({id:z.string(),name:z.string(),description:z.string().optional(),labels:z.string().array().optional()})),Vje=cH.extend({id:z.string(),name:z.string(),description:z.string().optional(),content:b_}),Wje=z.array(Vje);z.object({tests:Gje,modules:Wje,labels:z.string().array()});z.string().array();var S9=z.object({pathSegments:z.string().array()});gj.merge(Wn);var T9=z.object({schemaVersion:z.string(),stepLists:dl}),v9=Wn.partial().merge(Sa.pick({id:true})),Nf="1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID.",uH={name:z.string().min(1).max(255).describe(Nf),description:z.string().optional(),baseUrl:z.url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:z.string().optional().describe("For LLM: Do not include the variable unless the user explicitly asks for it and use the environment lookup tool to get the correct one before passing here."),browserType:z.enum(jc).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:Rm.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:z.string().array().optional().describe("For LLM: Only use if explicitly called for by the user. Used to create the test in the correct folder. Paths are relative to the project root.")},A9=z.object(uH);gj.extend(z.object({relativeFilePath:z.string().describe("relative to project root")}).shape);var E9=z.object({name:z.string()});z.object({relativeFilePath:z.string()});var w9=z.object({name:z.string(),sourceModuleContent:b_});z.object({relativeFilePath:z.string()});var R9=z.object({name:z.string(),description:z.string(),enabled:z.boolean(),steps:z.lazy(()=>lo.array()),testFilePath:z.string().describe("relative to the project root"),folderPath:z.string().optional().describe("user selected folder path")}),C9=z.object({name:z.string(),description:z.string(),enabled:z.boolean()}).partial(),I9=z.object({folderPath:z.string()}),x9=z.object({folderPath:z.string()});z.array(KE);var _9=z.object({defaultEnv:z.string().optional().describe("name of the default env, or undefined to unset")}),P9=z.object({configFilePath:z.string().describe("full path on disk")});z.object({hasEntities:z.boolean()});z.string().array();z.object({message:z.string(),newRelativeTestPath:z.string().optional()});var dH=z.object({name:z.string(),absolutePath:z.string(),relativePath:z.string(),pathSegments:z.array(z.string()),isDirectory:z.boolean(),size:z.number(),createdAt:z.coerce.date(),modifiedAt:z.coerce.date(),accessedAt:z.coerce.date()}),O9=z.object({pathSegments:z.array(z.string()),directoriesOnly:z.boolean().optional()});z.object({absolutePath:z.string(),pathSegments:z.array(z.string()),contents:z.array(dH)});var k9=z.object({sourceDirectoryPath:z.string().optional(),value:z.string(),allowedExtensions:z.array(z.string()).optional()}),qje=z.object({name:z.string(),value:z.string(),isDirectory:z.boolean()});z.object({suggestions:z.array(qje)});var M9=z.object({pathSegments:z.array(z.string())}),L9=z.object({pathSegments:z.array(z.string()),newPathSegments:z.array(z.string())}),N9=z.object({pathSegments:z.array(z.string()),recursive:z.boolean().optional()});z.object({success:z.boolean(),message:z.string(),pathSegments:z.array(z.string()).optional()});z.object({gitBranch:z.string(),fileMtime:z.coerce.date(),gitCommitSha:z.string()});var D9=typeof process<"u"&&true&&true,MP=58889,PS=24*60*60*1e3;var F9=z.record(z.string(),z.string()),Kje=z.object({type:z.literal("stdio").optional(),command:z.string().min(1),args:z.array(z.string()).optional(),env:F9.optional(),cwd:z.string().optional()}),Yje=z.object({type:z.enum(["http","sse"]).optional(),url:z.string().min(1),headers:F9.optional()}),Jje=z.union([Kje,Yje]),B9=z.record(z.string().min(1),Jje);var U9=z.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z.object({source:z.string().trim().min(1).max(500).refine(e=>U9.safeParse(e.split("/").at(-1)).success)});var z9=z.object({filename:U9,downloadUrl:z.url()});z.object({filename:z.string().trim().min(1),destination:z.string().trim().min(1).optional()});var j9=z.object({destination:z.string(),uploadUrl:z.url()});var Xw=(n=>(n.DARWIN="darwin",n.LINUX="linux",n.WINDOWS="win32",n))(Xw||{}),H9=z.enum(Xw),Qw=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(Qw||{}),LP=z.enum(Qw);z.object({azureRegion:z.string().optional(),azureWorkspaceId:z.string().optional()});z.object({});z.object({});var Xje=z.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z.object({region:Xje.optional()});var mH=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(mH||{});var Qje=z.object({type:z.literal("DESCRIPTION_UPDATE"),thoughts:z.string()}),NP=z.discriminatedUnion("type",[Qje]),Zje=z.object({testId:z.string(),name:z.string(),orgId:z.string(),runId:z.string(),steps:lo.array(),purpose:z.enum(mH),details:NP.or(NP.array()).optional()});Zje.pick({name:true,orgId:true});var eHe=z.object({id:z.string(),name:z.string().nullish(),createdAt:z.string().pipe(z.coerce.date()).or(z.date()),organizationId:z.string(),schemaVersion:z.string(),runId:z.string().nullish(),purpose:z.enum(mH),details:NP.or(NP.array()).optional(),applied:z.boolean().nullish(),appliedAt:z.coerce.date().nullish()}),$9=eHe.extend({steps:lo.array()});var G9=z.enum(["v1","v2"]);var oHe=z.enum(["element","content","attribute","tag_name","style"]),DP=z.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...H5,...j5].forEach(e=>{if(!DP.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var pH={element:{aliasPrefix:"",assertionType:"ELEMENT_EXISTENCE",requiresName:false},content:{aliasPrefix:"Content",assertionType:"ELEMENT_CONTENT",requiresName:false},attribute:{aliasPrefix:"Attribute",assertionType:"ELEMENT_ATTRIBUTE",requiresName:true},tag_name:{aliasPrefix:"Name",assertionType:"ELEMENT_NAME",requiresName:false},style:{aliasPrefix:"Style",assertionType:"ELEMENT_STYLE",requiresName:true}},q9={exists:{positiveAliasSuffix:"Exists",negativeAliasSuffix:"DoesNotExist",elementCondition:"EXISTS",contentOperation:"EXISTS"},visible:{positiveAliasSuffix:"Visible",negativeAliasSuffix:"NotVisible",elementCondition:"VISIBLE"},enabled:{positiveAliasSuffix:"Enabled",negativeAliasSuffix:"NotEnabled",elementCondition:"ENABLED"},editable:{positiveAliasSuffix:"Editable",negativeAliasSuffix:"NotEditable",elementCondition:"EDITABLE"},focused:{positiveAliasSuffix:"Focused",negativeAliasSuffix:"NotFocused",elementCondition:"FOCUSED"},contains:{positiveAliasSuffix:"Contains",negativeAliasSuffix:"DoesNotContain",contentOperation:"CONTAINS"},equals:{positiveAliasSuffix:"Equals",negativeAliasSuffix:"DoesNotEqual",contentOperation:"EQUALS"},starts_with:{positiveAliasSuffix:"StartsWith",negativeAliasSuffix:"DoesNotStartWith",contentOperation:"STARTS_WITH"}},K9={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function V9(e){return {alias:hH(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:pH[e.subject].assertionType,requiresName:pH[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function hH(e){let t=pH[e.subject],o=q9[e.condition];if(!Y9(e.subject,e.condition))throw new Error(`Unsupported element check alias for subject '${e.subject}' and condition '${e.condition}'.`);let n=e.negated?o.negativeAliasSuffix:o.positiveAliasSuffix;return `checkElement${t.aliasPrefix}${n}`}function Y9(e,t){let o=q9[t],n=o.elementCondition,r=o.contentOperation;return e==="element"?n!==void 0:r!==void 0}var nHe=oHe.options.flatMap(e=>DP.options.flatMap(t=>Y9(e,t)?[V9({subject:e,condition:t,negated:false}),V9({subject:e,condition:t,negated:true})]:[])),FP=new Map(nHe.map(e=>[e.alias,e]));var rHe=z.enum(zu),iHe=z.enum(ll);function ns(e){return FP.get(e)}function X9(e){let t=K9[e.type],o=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return hH({subject:t,condition:aHe(o),negated:e.negated})}function Q9(e){return rHe.parse(e.toUpperCase())}function Zw(e){return iHe.parse(e.toUpperCase())}function aHe(e){return DP.parse(e.toLowerCase())}var kS=z.string().regex(/\S+\s+\S+/,"Bare AI action goals must contain multiple words.").describe("Multi-word natural-language goal for an AI action V3 step."),St={saveAs:z.string().optional(),retries:z.number().optional(),skipped:z.boolean().optional(),comment:z.string().optional()};z.object(St);var MS=Object.keys(St);function nt(e){return z.union([z.strictObject({[e.key]:e.simplified}),z.strictObject({[e.key]:e.detailed})])}function Mn(e){return z.strictObject({[e.key]:e.detailed})}function sHe(e,t){let o=Array.from({length:t.length+1},(n,r)=>r);for(let n=1;n<=e.length;n+=1){let r=[n],i=e.charAt(n-1);for(let a=1;a<=t.length;a+=1)r.push(i===t.charAt(a-1)?o[a-1]??0:Math.min((o[a-1]??0)+1,(o[a]??0)+1,(r[a-1]??0)+1));o.splice(0,o.length,...r);}return o[t.length]??0}function Z9(e,t){let o=e.toLowerCase(),n,r=.5;for(let i of t){let a=i.toLowerCase(),s=Math.max(o.length,a.length),l=s===0?1:1-sHe(o,a)/s;l>r&&(r=l,n=i);}return n}var eZ='Coordinates must be "x, y" pixel values, e.g. "100, 200"',LS=z.union([Fu,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,eZ)],{error:eZ});z.union([z.string(),Fu]);var Bs={css:z.string().optional(),coords:LS.optional(),x:z.union([z.number(),z.string()]).optional(),y:z.union([z.number(),z.string()]).optional()},fH={on:z.string().optional(),...Bs},yl={...St,effort:ht.optional(),useSelector:z.boolean().optional(),force:z.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional()},DS={...yl,offset:LS.optional()};function Aa({schema:e,descriptionKey:t,required:o=true}){return e.superRefine((n,r)=>{let a=[t in n?Object.entries(n).find(([s])=>s===t)?.[1]:void 0,"css"in n?n.css:void 0,"coords"in n?n.coords:void 0,"x"in n||"y"in n?true:void 0].filter(s=>s!==void 0).length;o&&a!==1&&r.addIssue({code:"custom",message:`Use exactly one target: ${t}, css, coords, or x/y.`}),!o&&a>1&&r.addIssue({code:"custom",message:`Use at most one target: ${t}, css, coords, or x/y.`}),("x"in n||"y"in n)&&(!("x"in n)||n.x===void 0||!("y"in n)||n.y===void 0)&&r.addIssue({code:"custom",message:"x and y must be provided together."});})}var lHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,times:z.int().min(1).optional(),rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),cHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),uHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,times:z.int().min(1).optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),tZ=nt({key:"click",simplified:z.string(),detailed:lHe}),oZ=nt({key:"doubleClick",simplified:z.string(),detailed:cHe}),nZ=nt({key:"rightClick",simplified:z.string(),detailed:uHe}),dHe=Aa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Bs,...DS,pressEnter:z.boolean().optional(),clear:z.union([z.literal("inputs"),z.literal("always"),z.literal("never"),z.boolean()]).optional(),delay:z.number().optional()})}),rZ=nt({key:"type",simplified:z.string(),detailed:dHe}),mHe=Aa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Bs,...DS,pressEnter:z.boolean().optional()})}),iZ=nt({key:"fill",simplified:z.string(),detailed:mHe}),aZ=Mn({key:"select",detailed:Aa({descriptionKey:"from",schema:z.strictObject({from:z.string().optional(),...Bs,label:z.string().optional(),value:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),...yl})}).superRefine((e,t)=>{[e.label,e.value,e.index].filter(n=>n!==void 0).length!==1&&t.addIssue({code:"custom",message:"select requires exactly one of label, value, or index"});})}),sZ=nt({key:"hover",simplified:z.string(),detailed:Aa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Bs,...DS})})}),lZ=Mn({key:"blur",detailed:Aa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Bs,...yl})})}),cZ=nt({key:"focus",simplified:z.string(),detailed:Aa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Bs,...yl})})}),uZ=Mn({key:"dragAndDrop",detailed:z.strictObject({from:z.string().optional(),to:z.string().optional(),fromCss:z.string().optional(),toCss:z.string().optional(),fromCoords:LS.optional(),toCoords:LS.optional(),fromX:z.union([z.number(),z.string()]).optional(),fromY:z.union([z.number(),z.string()]).optional(),toX:z.union([z.number(),z.string()]).optional(),toY:z.union([z.number(),z.string()]).optional(),steps:z.number().optional(),hover:z.number().optional(),...yl}).superRefine((e,t)=>{let o=[e.from,e.fromCss,e.fromCoords,e.fromX!==void 0||e.fromY!==void 0?true:void 0].filter(r=>r!==void 0).length,n=[e.to,e.toCss,e.toCoords,e.toX!==void 0||e.toY!==void 0?true:void 0].filter(r=>r!==void 0).length;o!==1&&t.addIssue({code:"custom",message:"Use exactly one from target."}),n!==1&&t.addIssue({code:"custom",message:"Use exactly one to target."}),(e.fromX!==void 0||e.fromY!==void 0)&&(e.fromX===void 0||e.fromY===void 0)&&t.addIssue({code:"custom",message:"fromX and fromY must be provided together."}),(e.toX!==void 0||e.toY!==void 0)&&(e.toX===void 0||e.toY===void 0)&&t.addIssue({code:"custom",message:"toX and toY must be provided together."});})}),dZ=z.union([z.strictObject({mouseDrag:LS}),z.strictObject({mouseDrag:Aa({descriptionKey:"from",required:false,schema:z.strictObject({from:z.string().optional(),...Bs,delta:LS,steps:z.number().optional(),...yl})})})]),mZ=nt({key:"press",simplified:z.string(),detailed:z.strictObject({key:z.string(),repeat:z.number().optional(),delay:z.number().optional(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),pZ=nt({key:"keyDown",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),hZ=nt({key:"keyUp",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),NS=z.number().int().min(0).max(6e4).multipleOf(1e3),gZ=nt({key:"navigate",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:NS.optional(),...St,effort:ht.optional()})}),fZ=nt({key:"newTab",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:NS.optional(),...St,effort:ht.optional()})}),yZ=nt({key:"switchTab",simplified:z.union([z.number(),z.string()]),detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:NS.optional(),loadTimeout:NS.optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(n=>n!==void 0).length!==1&&t.addIssue({code:"custom",message:"switchTab requires exactly one of substring, regex, or index"});})}),bZ=Mn({key:"closeTab",detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:NS.optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(n=>n!==void 0).length<=1||t.addIssue({code:"custom",message:"closeTab accepts at most one of substring, regex, or index"});})}),SZ=Mn({key:"goBack",detailed:z.strictObject({...St,effort:ht.optional()})}),TZ=Mn({key:"goForward",detailed:z.strictObject({...St,effort:ht.optional()})}),vZ=Mn({key:"refresh",detailed:z.strictObject({timeout:NS.optional(),...St,effort:ht.optional()})}),Df=z.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),AZ=nt({key:"scrollUp",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),EZ=nt({key:"scrollDown",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),wZ=nt({key:"scrollLeft",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),RZ=nt({key:"scrollRight",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),CZ=nt({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...St,effort:ht.optional()})}),pHe=nt({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),source:z.string().optional(),...St,effort:ht.optional()})}),hHe=nt({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),source:z.string().optional(),...St,effort:ht.optional()})}),BP=pHe,UP=hHe,IZ=nt({key:"checkPageContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),xZ=nt({key:"checkPageDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),yH=z.union([IZ,xZ]),gHe=z.record(z.string(),z.unknown().optional()),zP=gHe.superRefine((e,t)=>{let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=ns(n);if(r===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}if(typeof e[r.alias]=="string")return;let i=Aa({descriptionKey:"element",schema:z.looseObject({element:z.string().optional(),...Bs,...yl,timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional()})}).safeParse(e[r.alias]);if(!i.success){t.addIssue({code:"custom",message:`element check alias '${r.alias}' must be a string target or detailed object`,path:[r.alias]});return}r.requiresName&&i.data.name===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a name`,path:[r.alias,"name"]}),r.requiresValue&&i.data.value===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a value`,path:[r.alias,"value"]});}),_Z=nt({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Th.optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),PZ=nt({key:"cookie",simplified:z.string(),detailed:z.strictObject({value:z.string(),...St,effort:ht.optional()})}),OZ=Mn({key:"localStorage",detailed:z.strictObject({key:z.string(),value:z.string(),...St,effort:ht.optional()})}),kZ=nt({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:gm.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:Th.optional(),contentType:z.enum(ju).optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),MZ=Mn({key:"graphqlRequest",detailed:z.strictObject({url:z.string(),query:z.string(),variables:Th.optional(),headers:z.record(z.string(),z.string()).optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),jP=nt({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),environment:z.enum(["node","browser","NODE","BROWSER"]).optional(),fragment:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),FS={substring:z.string().optional(),glob:z.string().optional(),regex:z.string().optional(),domain:z.string().optional()};function fHe(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function BS(e){let t=fHe(e.payload);if(e.required&&t!==1||!e.required&&t>1){e.ctx.addIssue({code:"custom",message:e.required?"requires exactly one of substring, glob, regex, or domain":"requires at most one of substring, glob, regex, or domain"});return}!e.required&&t===0&&e.payload.method&&e.ctx.addIssue({code:"custom",message:"method requires a URL matcher"});}var LZ=Mn({key:"header",detailed:z.strictObject({name:z.string(),value:z.string(),...FS,method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:false});})}),NZ=Mn({key:"mock",detailed:z.strictObject({...FS,method:z.string().optional(),responseGenerator:z.string(),fetchOriginalResponse:z.boolean().optional(),key:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),DZ=nt({key:"removeRouteMock",simplified:z.string(),detailed:z.strictObject({key:z.string().optional(),...St,effort:ht.optional()})}),FZ=nt({key:"waitForUrl",simplified:z.string(),detailed:z.strictObject({...FS,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),BZ=nt({key:"waitForUrlNotToMatch",simplified:z.string(),detailed:z.strictObject({...FS,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),yHe=z.union([FZ,BZ]),UZ=nt({key:"dialog",simplified:z.enum(["ACCEPT","DISMISS"]),detailed:z.strictObject({action:z.enum(["ACCEPT","DISMISS"]),...St,effort:ht.optional()})}),zZ=nt({key:"fileUpload",simplified:z.string(),detailed:z.strictObject({path:z.string(),name:z.string().optional(),...St,effort:ht.optional()})}),jZ=nt({key:"copy",simplified:z.union([z.string(),z.boolean(),z.null()]),detailed:z.strictObject({value:z.union([z.string(),z.boolean(),z.null()]),...St,effort:ht.optional()})}),HZ=Mn({key:"paste",detailed:z.strictObject({...St,effort:ht.optional()})}),$Z=Mn({key:"captcha",detailed:z.strictObject({...yl})}),bHe=z.strictObject({data:z.union([z.string(),sl]),width:z.number(),height:z.number()}),GZ=nt({key:"visualDiff",simplified:z.string(),detailed:Aa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Bs,threshold:z.number().optional(),screenshot:bHe.optional(),...yl})})}),VZ=Mn({key:"offline",detailed:z.strictObject({...St,effort:ht.optional()})}),WZ=Mn({key:"online",detailed:z.strictObject({...St,effort:ht.optional()})}),qZ=Mn({key:"registerRequestListener",detailed:z.strictObject({...FS,key:z.string(),method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),KZ=nt({key:"awaitListener",simplified:z.string(),detailed:z.strictObject({key:z.string(),timeout:z.number().optional(),...St,effort:ht.optional()})}),YZ=Mn({key:"recordRequests",detailed:z.strictObject({...FS,key:z.string(),method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),JZ=nt({key:"getRecordedRequests",simplified:z.string(),detailed:z.strictObject({key:z.string(),...St,effort:ht.optional()})}),XZ=nt({key:"authLoad",simplified:z.string(),detailed:z.strictObject({path:z.string(),...St,effort:ht.optional()})}),QZ=nt({key:"authSave",simplified:z.string(),detailed:z.strictObject({path:z.string().optional(),...St,effort:ht.optional()})});z.union([tZ,oZ,nZ,yZ,bZ,rZ,iZ,aZ,sZ,lZ,cZ,uZ,dZ,mZ,pZ,hZ,gZ,fZ,SZ,TZ,vZ,AZ,EZ,wZ,RZ,CZ,BP,UP,yH,_Z,PZ,OZ,kZ,MZ,jP,LZ,NZ,DZ,yHe,UZ,zZ,jZ,HZ,$Z,GZ,VZ,WZ,qZ,KZ,YZ,JZ,XZ,QZ,zP]);var ZZ=new Map([["click",tZ],["doubleClick",oZ],["rightClick",nZ],["switchTab",yZ],["closeTab",bZ],["type",rZ],["fill",iZ],["select",aZ],["hover",sZ],["blur",lZ],["focus",cZ],["dragAndDrop",uZ],["mouseDrag",dZ],["press",mZ],["keyDown",pZ],["keyUp",hZ],["navigate",gZ],["newTab",fZ],["goBack",SZ],["goForward",TZ],["refresh",vZ],["scrollUp",AZ],["scrollDown",EZ],["scrollLeft",wZ],["scrollRight",RZ],["wait",CZ],["assert",BP],["assertVisually",UP],["checkPageContains",IZ],["checkPageDoesNotContain",xZ],["extract",_Z],["cookie",PZ],["localStorage",OZ],["request",kZ],["graphqlRequest",MZ],["javascript",jP],["header",LZ],["mock",NZ],["removeRouteMock",DZ],["waitForUrl",FZ],["waitForUrlNotToMatch",BZ],["dialog",UZ],["fileUpload",zZ],["copy",jZ],["paste",HZ],["captcha",$Z],["visualDiff",GZ],["offline",VZ],["online",WZ],["registerRequestListener",qZ],["awaitListener",KZ],["recordRequests",YZ],["getRecordedRequests",JZ],["authLoad",XZ],["authSave",QZ]]),bH=Object.freeze([...ZZ.keys()]),SHe=[...bH,...FP.keys()],id=z.custom().superRefine((e,t)=>{if(typeof e!="object"||e===null){t.addIssue({code:"custom",message:"Steps must be objects with exactly one action key."});return}let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"Steps must have exactly one action key."});return}let r=ZZ.get(n)??(ns(n)?zP:void 0);if(!r){let a=Z9(n,SHe);t.addIssue({code:"custom",message:`Unsupported step type '${n}'.${a?` Did you mean '${a}'?`:""} See https://momentic.ai/docs/reference/commands for every step type.`});return}let i=r.safeParse(e);if(!i.success){let a=THe(i.error.issues,n);a.length>0&&e7(t,a);}});function THe(e,t){return vHe(e).filter(o=>!AHe(o,t))}function e7(e,t){for(let o of t){if(o.code==="invalid_union"){e7(e,SH(o));continue}e.addIssue({...o});}}function vHe(e){let t=[];for(let o of e){if(o.code==="invalid_union"){t.push(...SH(o));continue}t.push(o);}return t}function AHe(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function SH(e){let t=e.errors[0]??[],o=gH(t);for(let n of e.errors.slice(1)){let r=gH(n);r>o&&(t=n,o=r);}return t}function gH(e){return e.reduce((t,o)=>{let n=o.code==="invalid_union"?gH(SH(o)):0;return t+o.path.length+n},0)}var t7=z.strictObject({string:z.string()}),EHe=z.strictObject({javascript:z.string()}),o7=z.union([t7,EHe]),wHe=z.union([z.strictObject({name:z.string(),required:z.boolean().optional(),default:t7.optional()}),z.strictObject({name:z.string(),required:z.boolean().optional(),defaultValue:z.string()})]),n7=wHe.array(),RHe=z.strictObject({name:z.string(),default:o7.optional(),enum:z.array(z.string()).optional()}),r7=RHe.array(),eR=z.union([o7,z.string()]),i7=z.record(z.string(),eR);var CHe=z.preprocess(e=>typeof e=="number"?String(e):e,oz),HP=z.looseObject({goal:z.string(),version:CHe.optional(),cache:z.literal(false).optional(),...St}),IHe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:HP})]),TH=z.looseObject({path:z.string(),inputs:z.record(z.string(),eR).optional(),...St}),xHe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:TH})]),Lm=z.union([BP,UP,yH,jP,zP]),_He=new Set(["then","effort",...MS]),PHe=z.looseObject({then:z.lazy(()=>Jc.array()),effort:ht.optional(),...St}).superRefine((e,t)=>{Object.entries(e).filter(([n,r])=>!_He.has(n)&&Lm.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),OHe=z.strictObject({if:PHe}),kHe=new Set(["do","maxIterations","effort",...MS]),MHe=z.looseObject({do:z.lazy(()=>Jc.array()),maxIterations:z.number().int().positive().optional(),effort:ht.optional(),...St}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!kHe.has(n)&&Lm.safeParse({[n]:r}).success).length;if(o>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}o===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),LHe=z.strictObject({while:MHe}),Jc=z.lazy(()=>z.union([Df,kS,IHe,xHe,OHe,LHe,id]));z.object({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()});var NHe=z.union([Rm,z.string().refine(e=>{let t=e.match(/^\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*$/);if(!t)return false;let[,o,n]=t;return Rm.safeParse({width:Number(o),height:Number(n)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),DHe=Ya.omit({viewport:true}).extend({viewport:NHe.optional()}),vH=z.object({id:Qn,version:z.string().optional(),url:T_.optional(),description:z.string().optional(),retries:z.number().optional(),defaultEnv:z.string().optional(),parameters:n7.optional(),outputs:Z_.optional(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional(),runAssertions:eP.array().optional()}).extend(DHe.shape),FHe=z.looseObject({fileType:z.literal(De.TEST_V2)}).extend(vH.shape).extend({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()}),Eh=FHe.superRefine(UHe),BHe={beforeSteps:"before",afterSteps:"after"};function UHe(e,t){for(let[o,n]of Object.entries(BHe))o in e&&t.addIssue({code:"custom",message:`v2 tests must use ${n}, not ${o}`,path:[o]});}var zHe=z.array(z.string()),jHe=z.union([z.string(),z.record(z.string(),z.unknown().optional())]),$P=Jn.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:Qn,version:z.string().optional(),name:z.string().optional(),parameters:z.union([r7,zHe]).optional(),defaultParameters:z.record(z.string(),z.string()).optional(),parameterEnums:z.record(z.string(),z.array(z.string())).optional()}),GP=z.looseObject($P.extend({fileType:z.literal(De.MODULE_V2),steps:jHe.array().optional()}).shape).superRefine(s7),VP=z.looseObject($P.extend({fileType:z.literal(De.MODULE_V2),steps:Jc.array().optional()}).shape).superRefine(s7);function a7(e){return e.steps??[]}function s7(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var AH=(o=>(o.TEST="TEST",o.MODULE="MODULE",o))(AH||{}),HHe=z.enum(AH),l7=z.object({orgId:z.string(),entityType:HHe,entityId:z.string()}),EH=l7.extend({entityType:z.literal("TEST"),stepLists:zc}),wH=l7.extend({entityType:z.literal("MODULE"),steps:so.array()});z.discriminatedUnion("entityType",[EH,wH]);var c7=(n=>(n.WEB="web",n.ANDROID="android",n.IOS="ios",n))(c7||{}),RH=z.nativeEnum(c7);var u7=z.object({entity_type:z.string(),value:z.string(),schema_version:z.string().optional()}),d7=QE(u7),m7=u7.extend({cache_key:z.string()});function tR({entityType:e,entityId:t}){return `${e}:${t}`}var Bf=z.string();var p7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',y7=z.union([Fu,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,p7)],{error:p7}),h7='Percent must be a number or a percent string, e.g. 90 or "90%"',b7=z.union([z.number(),z.string().regex(/^-?\d+(?:\.\d+)?%$/,h7)],{error:h7}).transform(e=>typeof e=="number"?e:Number(e.slice(0,-1))).pipe(z.number().min(0,{message:"Percent must be >= 0"}).max(100,{message:"Percent must be <= 100"})),$He=z.strictObject({x:z.number(),y:z.number(),delta:z.number()}),S7=z.union([z.string(),$He]),Wo={...St,DANGEROUS_FORCE_DYNAMIC:z.boolean().optional()},GHe=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],VHe=["enter","backspace","close_keyboard"],g7=["airplane_mode","data","wifi","location"],f7=["portrait","landscape"],WHe=z.strictObject({on:Bf.optional(),longPress:z.boolean().optional(),longPressDuration:z.number().optional(),iterations:z.number().optional(),tapDelay:z.number().optional(),offset:y7.optional(),...Wo}),T7=nt({key:"tap",simplified:Bf,detailed:WHe}),qHe=z.strictObject({text:z.string(),into:Bf.optional(),clearContent:z.boolean().optional(),forceClearContent:z.boolean().optional(),delay:z.number().optional(),waitForKeyboardSettle:z.boolean().optional(),replaceStrategy:z.nativeEnum(Cw).optional(),keyPressDelay:z.number().optional(),...Wo}),v7=nt({key:"type",simplified:z.string(),detailed:qHe}),A7=z.enum(GHe),KHe=z.strictObject({key:A7,longPress:z.boolean().optional(),...Wo}),E7=nt({key:"press",simplified:A7,detailed:KHe}),w7=z.enum(VHe),YHe=z.strictObject({key:w7,repeat:z.number().optional(),delay:z.number().optional(),keyPressDelay:z.number().optional(),...Wo}),R7=nt({key:"pressKey",simplified:w7,detailed:YHe}),JHe=z.strictObject({package:z.string(),activity:z.string().optional(),intentExtras:z.string().optional(),...Wo}),C7=nt({key:"openApp",simplified:z.string(),detailed:JHe}),I7=Mn({key:"killApp",detailed:z.strictObject(Wo)}),x7=Mn({key:"openNotifications",detailed:z.strictObject(Wo)}),_7=z.enum(["up","down","left","right"]),XHe=z.strictObject({direction:_7,in:S7.optional(),viewportPercent:b7.optional(),duration:z.number().optional(),offset:y7.optional(),...Wo}),P7=nt({key:"swipe",simplified:_7,detailed:XHe}),QHe=z.enum(["up","down"]),ZHe=z.strictObject({on:Bf,direction:QHe.optional(),in:S7.optional(),scrollStepPercent:b7.optional(),maxScrollAttempts:z.number().optional(),...Wo}),O7=nt({key:"scrollTo",simplified:z.string(),detailed:ZHe}),CH=nt({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Wo})}),IH=nt({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Wo})}),k7=nt({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Th.optional(),...Wo})}),M7=nt({key:"checkScreenContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Wo})}),L7=nt({key:"checkScreenDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Wo})}),N7=z.union([M7,L7]),e$e=z.record(z.string(),z.unknown().optional()),xH=e$e.superRefine((e,t)=>{let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=ns(n);if(r===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}if(typeof e[r.alias]=="string")return;let i=z.looseObject({on:Bf.optional(),timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional(),...Wo}).safeParse(e[r.alias]);if(!i.success){t.addIssue({code:"custom",message:`element check alias '${r.alias}' must be a string target or detailed object`,path:[r.alias]});return}i.data.on===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a target via 'on'`,path:[r.alias,"on"]}),r.requiresName&&i.data.name===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a name`,path:[r.alias,"name"]}),r.requiresValue&&i.data.value===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a value`,path:[r.alias,"value"]});}),t$e=z.strictObject({from:Bf,to:Bf,hoverDuration:z.number().optional(),dragDuration:z.number().optional(),...Wo}),D7=Mn({key:"dragAndDrop",detailed:t$e}),_H=nt({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),timeout:z.number().optional(),...Wo})}),F7=nt({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:gm.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:z.string().optional(),bodyType:z.nativeEnum(ju).optional(),timeout:z.number().optional(),...Wo})}),B7=nt({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...Wo})}),U7=nt({key:"visualDiff",simplified:z.string(),detailed:z.strictObject({path:z.string(),threshold:z.number().min(0).max(1).optional(),...Wo})}),z7=Mn({key:"addFile",detailed:z.strictObject({path:z.string(),location:z.string(),...Wo})}),j7=nt({key:"setCamera",simplified:z.string(),detailed:z.strictObject({path:z.string(),loop:z.boolean().optional(),playAudio:z.boolean().optional(),...Wo})}),H7=Mn({key:"clearCamera",detailed:z.strictObject(Wo)}),$7=nt({key:"setMicrophone",simplified:z.string(),detailed:z.strictObject({path:z.string(),once:z.boolean().optional(),...Wo})}),G7=Mn({key:"clearMicrophone",detailed:z.strictObject(Wo)}),V7=nt({key:"installApp",simplified:z.string(),detailed:z.strictObject({path:z.string(),...Wo})}),W7=nt({key:"uninstallApp",simplified:z.string(),detailed:z.strictObject({package:z.string(),...Wo})}),q7=nt({key:"toggleSettings",simplified:z.enum(g7),detailed:z.strictObject({setting:z.enum(g7),...Wo})}),K7=nt({key:"rotate",simplified:z.enum(f7),detailed:z.strictObject({orientation:z.enum(f7),...Wo})}),Y7=nt({key:"adb",simplified:z.string(),detailed:z.strictObject({command:z.string(),args:z.string().optional(),...Wo})}),J7=Mn({key:"appium",detailed:z.strictObject({script:z.string(),args:z.string().optional(),...Wo})}),X7=Mn({key:"debugState",detailed:z.strictObject(Wo)}),Q7=z.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z.union([T7,v7,E7,R7,C7,I7,x7,P7,O7,CH,IH,k7,N7,D7,_H,F7,B7,U7,z7,j7,H7,$7,G7,V7,W7,q7,K7,Y7,J7,X7,xH]);var Z7=new Map([["tap",T7],["type",v7],["press",E7],["pressKey",R7],["openApp",C7],["killApp",I7],["openNotifications",x7],["swipe",P7],["scrollTo",O7],["assert",CH],["assertVisually",IH],["extract",k7],["checkScreenContains",M7],["checkScreenDoesNotContain",L7],["dragAndDrop",D7],["javascript",_H],["request",F7],["wait",B7],["visualDiff",U7],["addFile",z7],["setCamera",j7],["clearCamera",H7],["setMicrophone",$7],["clearMicrophone",G7],["installApp",V7],["uninstallApp",W7],["toggleSettings",q7],["rotate",K7],["adb",Y7],["appium",J7],["debugState",X7]]);Object.freeze([...Z7.keys()]);var eee=z.custom().superRefine((e,t)=>{if(typeof e!="object"||e===null){t.addIssue({code:"custom",message:"v2 mobile commands must be objects with exactly one action key."});return}let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"v2 mobile commands must have exactly one action key."});return}let r=Z7.get(n)??(ns(n)?xH:void 0);if(!r){t.addIssue({code:"custom",message:`Unsupported v2 mobile command '${n}'.`});return}let i=r.safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue({...a});}),PH=z.union([CH,IH,N7,_H,xH]);var o$e=z.preprocess(e=>typeof e=="number"?String(e):e,Dj),n$e=z.looseObject({goal:z.string(),version:o$e.optional(),cache:z.literal(false).optional(),precondition:z.string().optional(),postcondition:z.string().optional(),...St}),r$e=z.union([z.strictObject({act:z.string()}),z.strictObject({act:n$e})]),i$e=z.looseObject({path:z.string(),inputs:z.record(z.string(),eR).optional(),...St}),a$e=z.union([z.strictObject({module:z.string()}),z.strictObject({module:i$e})]),s$e=new Set(["then",...MS]),l$e=z.looseObject({then:z.lazy(()=>Xc.array()),...St}).superRefine((e,t)=>{if("else"in e){t.addIssue({code:"custom",message:"v2 mobile conditionals do not support 'else'. Use a separate step instead.",path:["else"]});return}Object.entries(e).filter(([n,r])=>!s$e.has(n)&&PH.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),c$e=z.strictObject({if:l$e}),u$e=new Set(["do","maxIterations",...MS]),d$e=z.looseObject({do:z.lazy(()=>Xc.array()),maxIterations:z.number().int().positive().optional(),...St}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!u$e.has(n)&&PH.safeParse({[n]:r}).success).length;if(o>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}o===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),m$e=z.strictObject({while:d$e}),Xc=z.lazy(()=>z.union([Q7,kS,r$e,a$e,c$e,m$e,eee]));z.object({before:Xc.array().optional(),steps:Xc.array(),after:Xc.array().optional()});var p$e=z.literal("android"),h$e=z.literal("ios");function WP(e){if(typeof e!="object"||e===null)return e;let t=e;if(typeof t.platform!="string")return e;let o=t.platform.toLowerCase();return o===t.platform?e:{...t,platform:o}}var tee=IS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:p$e,...Bw.shape}),oee=xS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:h$e,...Bw.shape}),g$e=z.discriminatedUnion("platform",[tee,oee]),nee=z.preprocess(WP,g$e),ree={before:Xc.array().optional(),steps:Xc.array(),after:Xc.array().optional()},iee=z.looseObject({fileType:z.literal(De.MOBILE_TEST_V2)}).extend(tee.shape).extend(ree);z.preprocess(WP,iee);var aee=z.looseObject({fileType:z.literal(De.MOBILE_TEST_V2)}).extend(oee.shape).extend(ree);z.preprocess(WP,aee);var f$e=z.discriminatedUnion("platform",[iee,aee]);z.preprocess(WP,f$e);var y$e=z.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z.enum(G_).optional().default("android")),qP=TP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:Qn,name:z.string().optional(),version:z.string().optional(),platform:y$e});z.looseObject(qP.extend({fileType:z.literal(De.MOBILE_MODULE_V2),steps:z.array(z.record(z.string(),z.unknown().optional())).optional()}).shape);z.looseObject(qP.extend({fileType:z.literal(De.MOBILE_MODULE_V2),steps:Xc.array().optional()}).shape);var KP="x-momentic-cli-version",lee="x-momentic-client-mode",YP="x-momentic-runner",cee="x-momentic-cli-type",JP="x-momentic-logger-tags",OH="x-momentic-effective-ai-effort",b$e="x-momentic-main-branch-name",S$e="x-momentic-branch-name",T$e="x-momentic-commit-timestamp",v$e="x-momentic-last-commit-on-main",A$e="x-momentic-last-commit-on-main-timestamp",E$e="x-momentic-merged-branch-name",uee="x-momentic-session-id",dee=529,mee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});Gr.merge(pj);var pee=h_;Gr.merge(pj);Gr.merge(LX).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var kH=z5;Gr.merge(NX);var hee=CJ;Gr.merge(PX);var gee=H_;Gr.merge(rJ);Gr.merge(OX);var fee=EJ;Gr.merge(kX);Gr.merge(MX);Gr.merge(UX);Gr.merge(zX);Gr.merge(jX);x.object({testPaths:x.string().array().describe("can be either hyphenated, lowercase test names or UUIDs"),env:x.string().optional(),all:x.boolean().optional(),urlOverride:x.string().optional(),customHeaders:x.record(x.string(),x.string()).optional(),testInputMatrix:x.record(x.string(),x.string()).array().optional()});var yee=x.object({queuedTests:x.unknown().optional().array(),runIds:x.guid().array(),runGroupId:x.string().optional()});x.string().array();x.union([x.object({paths:x.string().array().describe("Export specific test paths or folder paths (e.g. todo-test, auth/onboarding)"),all:x.boolean().describe("run all tests").optional()}),x.object({path:x.string().describe("deprecated; present for backcompat")})]);var w$e=x.object({tests:x.record(x.string().describe("Test name (keys correspond to entries in `tests`)"),x.string().describe("Slash-separated folder name path that the test lives in (e.g. 'Auth/Login'). Top-level entities are omitted.")),modules:x.record(x.string().describe("Module name (keys correspond to entries in `modules`)"),x.string().describe("Slash-separated folder name path that the module lives in."))}),bee=x.object({tests:x.record(x.string().describe("Test name"),x.string().describe("Test YAML")),modules:x.record(x.string().describe("Module name"),x.string().describe("Module YAML")),folderPaths:w$e.optional().describe("Optional map from exported entity name to its slash-separated cloud folder path. Used by the CLI to recreate folder structure on disk.")}),R$e=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});R$e.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(bm);function XP(e){let{gitMainBranch:t,gitBranchName:o,gitCommitTimestamp:n,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,a={};return t&&(a[b$e]=encodeURIComponent(t)),o&&(a[S$e]=encodeURIComponent(o)),n&&(a[T$e]=n.toISOString()),r&&(a[v$e]=encodeURIComponent(r)),i&&(a[A$e]=i.toISOString()),e.mergedGitBranchName&&(a[E$e]=encodeURIComponent(e.mergedGitBranchName)),a}x.object({entries:x.array(lJ)});x.object({platform:RH.optional(),entries:x.array(d7)});x.object({testId:x.string(),environment:x.string().optional(),platform:RH.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function See(e){return x.record(x.string(),x.unknown().optional()).transform(t=>{let o={};for(let[n,r]of Object.entries(t)){let i=e.safeParse(r);i.success&&(o[n]=i.data);}return o})}var Tee=See(cJ),vee=m7.array();function see(e){return See(ZE(e))}var Aee={ANDROID:e=>see(wP).parse(e),IOS:e=>see(RP).parse(e)},C$e=x.object({id:x.string(),completionType:x.string(),description:x.string().optional(),thoughts:x.string(),result:x.string(),sessionType:x.string(),timeCreated:x.string().optional(),citations:x.array(hn).optional()}),I$e=x.object({id:x.string(),assertion:x.string().optional(),result:x.string(),thoughts:x.string(),sessionType:x.string(),timeCreated:x.string().optional(),citations:x.array(hn).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var MH=x.union([C$e,I$e]).array(),Eee=x.object({trigger:x.nativeEnum(hl),status:x.nativeEnum(zt),startedAt:x.coerce.date().optional(),gitCommitSha:x.string().optional(),gitCommitShaShort:x.string().optional(),gitCommitTimestamp:x.coerce.date().optional(),gitBranchName:x.string().optional(),gitOriginUrl:x.string().optional(),gitCommitMessage:x.string().optional(),gitCommitAuthorName:x.string().optional(),projectName:x.string().optional(),relativeProjectDir:x.string().optional(),githubRepository:x.string().optional(),gitlabProjectPath:x.string().optional(),pipelineId:x.string().optional(),cliVersion:x.string().optional()});x.object({id:x.string()});var wee=x.object({status:x.nativeEnum(zt),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Af,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var x$e=x.object({runId:x.string(),healStatus:vf,healDetails:uh.optional()});x.object({updates:x$e.array()});var Ree=x.object({stepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),beforeStepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),afterStepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),runGroupId:x.string().optional(),testId:x.string(),testName:x.string(),resolvedBaseUrl:x.string().optional(),environmentName:x.string().optional(),labels:x.array(x.string()).optional(),cliVersion:x.string().optional(),trigger:x.nativeEnum(hl),schemaVersion:x.string().optional(),section:x.nativeEnum(tP).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Ds.optional()});x.object({id:x.string()});var _$e=uj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),Cee=_$e.array(),Iee=uj.pick({startedAt:true,finishedAt:true,updatedAt:true,results:true,beforeResults:true,afterResults:true,status:true,healStatus:true,healDetails:true,failureDetails:true,failureReason:true,failureRecoveryDetails:true,resolvedBaseUrl:true,environmentName:true,labels:true,cliVersion:true,resolvedInputs:true,attempts:true,flake:true,aiSettings:true,runAssertionResults:true}).partial();x.object({id:x.string()});var QP=x.object({run:Ja.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),xee=x.object({status:x.nativeEnum(zt),finishedAt:x.coerce.date().optional(),schemaVersion:x.string().optional().default("1.0.19"),results:x.record(x.string(),x.unknown().optional()).array().optional(),beforeResults:x.record(x.string(),x.unknown().optional()).array().optional(),afterResults:x.record(x.string(),x.unknown().optional()).array().optional()});x.object({screenshot:x.string(),contentType:x.enum(["image/jpeg","image/png"]).optional()});x.object({id:x.string(),screenshot:x.string(),contentType:x.enum(["image/jpeg","image/png"])});var _ee=x.object({key:x.string()}),Pee=x.object({orgId:x.string(),userId:x.string(),email:x.string().optional(),name:x.string().optional(),pylonEmailHash:x.string().optional(),selfServe:x.boolean().optional(),heardAboutAnswered:x.boolean().optional(),needsWorkspaceName:x.boolean().optional(),orgName:x.string().optional()}),Oee=x.object({blocked:x.boolean()}),kee=x.array(G6),Mee=x.record(x.string(),x.union([x.string(),x.boolean()]));x.object({workosAccessToken:x.string().min(1),organizationId:x.string().optional(),clientName:x.string().min(1).max(80).optional()});var Lee=x.object({apiKey:x.string(),apiKeyName:x.string(),organizationId:x.string(),user:x.object({id:x.string(),email:x.string().optional()}),selfServe:x.boolean().optional()}),Nee=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),P$e=80,O$e=x.string().trim().min(1).max(P$e);x.object({name:O$e});var k$e=["web","ios","android"];x.object({platforms:x.array(x.enum(k$e)),packageManager:x.enum(["npm","pnpm","yarn","bun"]),wizardVersion:x.string().min(1).max(40),cliVersions:x.object({momentic:x.string().max(40).optional(),momenticMobile:x.string().max(40).optional()}).optional(),firstRunIds:x.array(x.guid()).max(10).optional(),heardAboutSource:sj.optional(),heardAboutSourceOtherText:x.string().max(200).optional()});x.object({ok:x.literal(true)});x.object({paths:x.string().array(),env:x.string().optional(),urlOverride:x.string().optional(),customHeaders:x.record(x.string(),x.string()).optional()});var Dee=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});RX.array();x.object({runGroupIds:x.string().array()});var ZP=x.object({uploadUrl:x.string()});Gr.merge(DX);Gr.merge(BX);Gr.merge(FX);var eO=x.object({runId:x.string().optional().default(""),runGroupId:x.string().optional().default(""),envName:x.string().optional().default(""),platform:x.string().optional().default(""),testId:x.string().optional().default(""),testName:x.string().optional().default(""),suiteId:x.string().optional().default(""),suiteName:x.string().optional().default(""),isInteractive:x.boolean().optional().default(false),runner:x.nativeEnum(va).optional(),aiFeature:x.nativeEnum(bh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(wS).optional(),hasFixedTest:x.boolean().optional(),hasCannotFixTest:x.boolean().optional(),hasNoFixNeededTest:x.boolean().optional(),result:x.enum(["success","failure"]).optional(),creditsUsed:x.number().optional(),stepsExecuted:x.number().optional(),tokensUsed:x.number().optional(),aiCostUsd:x.number().nonnegative().optional(),[u8]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),hostedBrowserSecondsUsed:x.number().optional(),sessionMinutesUsed:x.number().nonnegative().optional(),labels:x.array(x.string()).optional()});x.object({orgId:x.string(),runId:x.string().optional(),testId:x.string().optional(),isInteractive:x.boolean().optional(),runner:x.nativeEnum(va).optional()});var M$e=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(Of),properties:eO});M$e.array();var Fee=$9.omit({steps:true}).extend({steps:x.array(x.record(x.string(),x.unknown().optional())).describe("unparsed ResolvedStep[]")});x.object({limit:x.number().min(1).max(10).optional(),page:x.number().min(1).optional(),start:Fn.optional(),end:Fn.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum(zt).optional()});var Bee=pX.array(),Uee=Ja.array(),tO=vh.extend({testId:Qn.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum(zt).optional(),label:x.string().array().optional(),start:Fn.optional(),end:Fn.optional(),quarantined:x.boolean().optional(),recovered:x.boolean().optional(),failureCategory:x.string().min(1).array().min(1).optional().describe("Effective built-in or custom failure category IDs. Manual classifications override automated classifications."),minAttempts:x.number().int().min(2).optional().describe("Minimum total attempt count, including the first attempt."),includeFailureDetails:x.boolean().optional(),skipRetentionFilter:x.boolean().optional()});tO.extend({orgId:x.string().optional(),testId:ui(Qn),status:ui(x.nativeEnum(zt)),gitBranchName:ui(x.string()),label:ui(x.string()),testName:x.string().optional(),trigger:ui(x.nativeEnum(hl)),executionType:ui(dh),cliVersion:ui(x.string()),githubRepository:ui(x.string()),gitlabProjectPath:ui(x.string()),environment:ui(x.string()),directory:ui(x.string()),failureCategory:ui(x.string()),exclude:ui(x.string()),healed:x.boolean().optional()});var L$e=Ja.omit({test:true}),zee=lH.extend({runs:L$e.array()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var jee=ZP.extend({id:x.string()}),N$e=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),D$e=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[N$e,D$e]);var Hee=x.object({runGroupId:x.guid()}),F$e=x.object({status:vf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),$ee=x.object({quarantined:x.object({testId:Qn,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:F$e.nullish().default(null)}).array()}),LH=vh.extend({limit:vh.shape.limit.describe("Max number of quarantined tests to return per page."),page:vh.shape.page.describe("Page number for pagination (1-based)."),quarantinedAtStart:x.string().pipe(x.coerce.date()).optional().describe("Include tests quarantined at or after this timestamp."),quarantinedAtEnd:x.string().pipe(x.coerce.date()).optional().describe("Include tests quarantined before this timestamp.")}),B$e=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Fn,finishedAt:Fn,failureReason:x.string().nullish(),healStatus:vf,healDetails:uh.nullish()}),Gee=lH.extend({quarantinedTests:x.array(x.object({testId:Qn,testName:x.string().nullish(),quarantinedAt:Fn,quarantineReason:x.string(),latestFailedRun:B$e.nullable()}))}),Vee=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:Qn,testName:x.string().optional(),reason:x.string()}).merge(Vee);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Vee);Gr.merge(e8);Gr.merge(t8);Gr.merge(o8);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Jj.optional(),jurisdiction:Fw.optional(),osVersion:x.nativeEnum(CS).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:f8.optional()});var Wee=x.object({name:x.string(),apiUrl:x.string(),webRtcUrl:x.string(),adbUrl:x.string(),token:x.string(),apkDownloadUrl:x.string().optional(),playwrightServerUrl:x.string().optional(),region:x.string().optional(),resolvedTag:x.string().optional(),sessionExpiresAt:x.number().optional()});x.object({appToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Jj.optional(),jurisdiction:Fw.optional(),osVersion:x.nativeEnum(IP).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var qee=x.object({id:x.string(),apiUrl:x.string(),webRtcUrl:x.string(),wdaUrl:x.string(),token:x.string(),appDownloadUrl:x.string().optional(),appMd5:x.string().optional(),region:x.string().optional(),resolvedTag:x.string().optional(),sessionExpiresAt:x.number().optional()});x.object({channel:x.string().trim().min(1,"channel must be a non-empty string"),tag:x.string().trim().min(1,"tag must be a non-empty string").refine(e=>e.toLowerCase()!==tw,{message:`"${tw}" is a reserved tag and cannot be used when uploading an asset.`}).optional(),alias:x.string().trim().min(1,"alias must be a non-empty string").refine(e=>e.toLowerCase()!==tw,{message:`"${tw}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Kee=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),U$e=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),z$e=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),tag:x.string()}),Yee=x.object({assets:x.array(U$e),aliases:x.array(z$e).default([])}),Jee=x.object({downloadUrl:x.string()}),oO=(o=>(o.PLAYWRIGHT="PLAYWRIGHT",o.CDP="CDP",o))(oO||{}),j$e=x.nativeEnum(oO),Xee=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:Xee.optional(),envName:x.string().optional(),moSessionId:x.string().min(1).max(128).optional(),runAttemptId:x.guid().optional(),runGroupId:x.guid().optional(),testId:x.string().optional(),testName:x.string().optional(),runId:x.guid().optional(),attemptedProviders:x.array(LP).optional(),localhostTunnel:x.boolean().optional()});var H$e=x.object({access:Xee.optional(),allocationRequestId:x.guid(),envName:x.string().optional(),runAttemptId:x.guid(),runGroupId:x.guid().optional(),runId:x.guid(),testId:x.string().min(1).max(128),testName:x.string().optional()});H$e.extend({attemptedProviders:x.array(LP).max(Object.values(Qw).length).default([])}).strict();var $$e=x.discriminatedUnion("mode",[x.object({mode:x.literal("playwright")}).strict(),x.object({mode:x.literal("private-service"),connectorId:x.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),serviceIds:x.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).optional()}).strict()]),Qee=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),G$e=Qee.extend({network:$$e}).strict(),Zee=x.union([G$e,Qee.strict()]),V$e=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),ete=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:j$e.optional(),provider:LP.optional(),operatingSystem:H9.optional(),tunnel:V$e.optional()});var W$e=200,q$e=2e3,oR=z.string().trim().min(1).max(W$e),wh=z.string().trim().min(1).max(q$e),zS=z.array(wh),K$e=z.enum(["verified","issues_found","blocked"]),nO=z.object({name:oR,summary:wh,preconditions:zS,outline:zS,acceptanceCriteria:zS}),Y$e=z.object({startedAt:z.number(),finishedAt:z.number(),agentId:z.string().optional(),windowId:z.string().optional(),artifactId:z.string().optional()}),rO=z.object({name:oR,summary:wh,expected:wh,actual:wh,reproSteps:zS,recording:Y$e.nullish()}),ote=z.object({name:oR.describe("The name of the bug to retract."),reason:z.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),NH=z.enum(["checked","failed","partial","out_of_scope"]),DH=z.object({control:oR,status:NH,result:wh}),FH=z.object({status:K$e,summary:wh,verified:zS,gaps:zS});z.object({entry:nO});z.object({entry:rO});z.object({entry:DH});z.object({report:FH});z.object({entries:z.array(nO)});z.object({entries:z.array(rO)});z.object({entries:z.array(DH)});z.object({report:FH.nullable()});var BH=z.object({agent:z.string().nullable(),conversationId:z.string().nullable(),createdAt:z.iso.datetime(),updatedAt:z.iso.datetime()}),J$e=nO.extend({...BH.shape,blockedReason:z.string().nullable()}),X$e=rO.extend({...BH.shape,investigatorAgent:z.string().nullable(),investigatorConversationId:z.string().nullable(),reviewedAt:z.iso.datetime().nullable()});DH.extend({agent:z.string(),conversationId:z.string()});var Q$e=FH.extend({testCaseName:z.string().nullable(),...BH.shape}),UH=z.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z.object({bugName:z.string(),status:UH,knowledgeItemId:z.string().nullable(),updatedByUserId:z.string().nullable(),updatedAt:z.iso.datetime()});z.object({chatId:z.string().min(1),bugName:oR,status:UH,reviewedKnowledgeItemIds:z.array(z.string().min(1)).optional(),reviewedKnowledgeItemStatus:zJ.optional(),linkedKnowledgeItemId:z.string().min(1).nullable().optional()});z.object({entries:z.array(J$e)});z.object({entries:z.array(X$e)});z.object({entries:z.array(Q$e)});var tte=z.object({testCases:z.number(),issuesFound:z.number(),blocked:z.number(),bugs:z.number(),bugsByTriage:z.record(UH,z.number())});z.union([tte.extend({passed:z.number()}),tte.extend({verified:z.number()}).transform(({verified:e,...t})=>({...t,passed:e}))]);z.object({entry:nO});z.object({retracted:z.boolean(),conflict:z.string().optional()});z.object({entry:rO});z.object({reason:wh});var nte=z.object({id:z.string(),createdAt:z.coerce.date(),createdBy:z.string(),organizationId:z.string(),name:z.string(),description:z.string().nullish(),enabled:z.boolean(),schemaVersion:z.string().describe("Schema version for steps"),parameters:z.string().array().nullish().describe("Parameter list"),parameterEnums:z.record(z.string(),z.string().array()).nullish(),defaultParameters:z.record(z.string(),z.string()).nullish(),defaultCacheKey:z.string().nullish(),defaultCacheTtl:z.number().nullish(),defaultCacheAllInvocations:z.boolean().nullish(),autoAuth:z.boolean().nullish(),defaultRetries:z.int().min(0).nullish(),advanced:az.nullish()});nte.extend({steps:z.lazy(()=>so.array())});var rte=5*60*1e3,nR=Jn.extend(nte.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var Z$e="org_01HMJTX4GT1KG94KZRCT8MZ6YB",e1e="org_01HMSCJQBCCG51M2ZF65YC5B8W",t1e="org_01JPR6MGFQSHF3W234R3XJDPMB",o1e=[Z$e,e1e,t1e];function zH(e){return o1e.includes(e)}var ite=z.object({id:z.string(),title:z.string(),body:z.string(),imageUrl:z.string().nullable(),videoUrl:z.string().nullable(),ctaUrl:z.string().nullable(),publishedAt:z.string()});z.object({update:ite.nullable()});var ate=z.object({updates:ite.array()});z.object({repositoriesIndexed:z.boolean(),indexingInProgress:z.boolean(),indexesOutdated:z.boolean()});var ste=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(ste||{}),lte=(s=>(s.Success="success",s.Failure="failure",s.Neutral="neutral",s.Cancelled="cancelled",s.Skipped="skipped",s.TimedOut="timed_out",s.ActionRequired="action_required",s))(lte||{});z.object({name:z.string(),status:z.enum(ste),conclusion:z.enum(lte).nullable()});var rR=z.object({sha:z.string(),parentShas:z.array(z.string()).optional(),message:z.string(),author:z.object({name:z.string().optional(),email:z.string().optional(),date:z.coerce.date().optional()}),committer:z.object({name:z.string().optional(),email:z.string().optional(),date:z.coerce.date().optional()})}),jH=z.object({mergedBranch:z.string().optional()});var cte=z.object({orgId:z.string(),cacheKeys:z.string().array()});z.object({keyParams:cte,clientMetadata:z.string(),lockAcquisitionTimeoutMs:z.number().optional()});var ute=z.object({acquired:z.boolean(),acquiredByMetadata:z.string(),keyPrefix:z.string()});z.object({keyPrefix:z.string(),result:z.string(),ttlMs:z.number()});z.union([z.object({keyPrefix:z.string()}),cte]);var n1e=z.object({remainingTtlMs:z.number(),value:z.string().nullish()});z.object({results:z.record(z.string(),n1e),activeLocks:z.string().array()});var dte=0,mte=5*60*1e3;var pte=z.object({cacheEntryId:z.string().uuid(),category:z.string().min(1)}),hte=lf.extend({cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),testId:z.string().min(1),executionFailureReason:z.string().min(1).optional(),classification:BU,healDetails:eJ.optional()}),gte=hte.extend({isManualOverride:z.boolean().optional(),overriddenBy:pte.optional(),manualOverrideOf:pte.optional(),createdAt:z.coerce.date(),updatedAt:z.coerce.date()});function HH(e){return !e.branchName&&rE(e.classification.category)}lf.extend({mainBranchName:z.string().min(1).optional()});var fte=gte.array();z.object({entries:hte.array()});lf.extend({runId:z.string().min(1),cacheEntryId:z.string().uuid(),category:z.string().min(1)});z.object({status:z.enum(["evicted","not_found","run_mismatch"]),entry:gte.optional()});z.object({runId:z.string().min(1),environment:z.string().min(1).optional(),status:z.enum(["PASSED","FAILED"])});z.object({environment:z.string().min(1).optional()});var iO=z.object({skip:z.boolean(),failed:z.number(),total:z.number()}),r1e=.8;function yte({failed:e,completed:t,minCompletedRuns:o}){return t>=o&&e/t>=r1e}function jS(e){if(e.startsWith("https://api"))return e.replace("https://api","https://app");if(e.startsWith("http://localhost:8000"))return e.replace("http://localhost:8000","http://localhost:3000");throw new Error(`Unknown Momentic app server URL pattern: ${e}`)}var i1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()),hash:z.string()}),bte=z.record(z.string(),z.unknown().optional());z.object({newSvgs:z.array(i1e),metadata:bte.optional()});var a1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()).nullish(),hash:z.string(),description:z.string().nullish(),metadata:bte.nullish()}),Ste=z.record(z.string().describe("icon hash"),a1e);var $H="metadata.json",GH="test.yaml",Tte=".snapshot.zip",VH=Wn.extend(dl.shape),s1e=z.object({envName:z.string().optional(),baseUrl:z.string(),variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:KE.optional()}),vte=z.object({browser:Hc.optional(),ai:Ds.optional(),advanced:sw.optional(),retries:z.number().optional()});z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:s1e,config:vte});var Ate=z.object({variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:KE.optional()}),l1e=z.object({envName:z.string().optional(),baseUrl:z.string(),encryptedSecrets:z.string()}),Ete=z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:l1e,config:vte});var c1e=z.looseObject({type:z.number(),data:z.record(z.string(),z.unknown()),timestamp:z.number()}),wte=z.custom(e=>c1e.safeParse(e).success);z.discriminatedUnion("kind",[z.object({kind:z.literal("agent-action"),tool:z.string(),toolCallId:z.string().optional(),detail:z.string().optional(),input:z.unknown().optional()}),z.object({kind:z.literal("step"),phase:z.enum(["start","pass","fail"]),name:z.string()}),z.object({kind:z.literal("window"),phase:z.enum(["start","stop"]),windowId:z.string()}),z.object({kind:z.literal("bug-marker"),title:z.string()}),z.object({kind:z.literal("control"),control:z.string(),status:NH}),z.object({kind:z.literal("network-error"),method:z.string(),url:z.string(),status:z.number()})]);z.looseObject({level:z.string(),payload:z.array(z.string()),trace:z.array(z.string()).optional()});function Rte(e){let t;try{t=JSON.parse(e);}catch(o){return `The schema is not valid JSON. ${o}`}try{validator(t);}catch(o){return `The schema is not a valid JSON schema. ${o}`}}var Cte=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,o])=>t.trim()&&o.trim())));};var aO=class{async prepareGoldenScreenshotForComparison(t,o,n){return n}};var sO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function d1e(e){return e.map(t=>({...t,environment:void 0}))}function WH(e,t){return t?e:d1e(e)}var KH="browser-crash-dump.zip",qH=class{loggerBindings;attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}storeTraceAsset(){}async finish(){}async startSubSteps(){return new iR}},iR=class{async getScreenshot(){}async getHtmlSnapshot(){}async startStep(){return new qH}flushResults(t){}};var mt="metadata.json",rs="assets",Rn="runs",YH=z.object({type:z.literal("explore"),id:z.string(),cliVersion:z.string().optional(),startedAt:z.string(),finishedAt:z.string(),baseSha:z.string(),headSha:z.string(),ciProvider:z.string().optional(),pipelineId:z.string().optional(),gitMainBranch:z.string().optional(),gitCommitSha:z.string().optional(),gitCommitShaShort:z.string().optional(),gitBranchName:z.string().optional(),gitOriginUrl:z.string().optional(),gitCommitMessage:z.string().optional(),gitCommitAuthorName:z.string().optional(),githubRepository:z.string().optional(),gitlabProjectPath:z.string().optional(),pullRequestUrl:z.string().optional(),result:z.unknown(),bugs:z.array(z.unknown()),uxNits:z.array(z.unknown()).default([]),writtenPaths:z.array(z.string()),videos:z.array(z.string()),failure:z.unknown().optional()});z.object({exploreRunId:z.guid(),metadata:YH,videoAssets:z.string().array().optional()});var Ite=z.object({uploadUrl:z.string(),videoUploadUrls:z.record(z.string(),z.string()).optional()}),m1e=z.object({step:lo,status:z.enum(Ft),startedAt:z.coerce.date(),finishedAt:z.coerce.date().optional(),healMetadata:z.object({healType:z.enum(ew).or(z.literal("AI")),healedAt:z.coerce.date()}).optional(),beforeSnapshotId:z.guid().optional(),afterSnapshotId:z.guid().optional(),message:z.string().optional()}),p1e=m1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});p1e.extend({step:z.unknown().optional()});var JH=z.object({avdId:z.string().optional(),channel:z.string().optional(),tag:z.string().optional(),region:z.string().optional(),osVersion:y8.optional()}),xte="1.0.0",_te=xee.extend({id:z.guid().optional(),startedAt:z.coerce.date(),runAttemptSchemaVersion:z.string().optional(),schemaVersion:z.string().optional().default("1.0.19"),results:z.record(z.string(),z.unknown().optional()).array().optional(),beforeResults:z.record(z.string(),z.unknown().optional()).array().optional(),afterResults:z.record(z.string(),z.unknown().optional()).array().optional(),assetDetails:JH.optional(),viewport:Rm.optional(),activeVideos:z.array(z.object({videoName:z.string(),timestamp:z.coerce.date()})).optional()}),aR=_te.extend({assetDetails:JH.optional(),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});_te.extend(Kz.shape);var Pte=aR.extend(Kz.shape),h1e=z.object({results:z.array(Qa),beforeResults:z.array(Qa).optional(),afterResults:z.array(Qa).optional()});aR.extend(h1e.shape);var g1e=z.object({results:z.array(Za),beforeResults:z.array(Za).optional(),afterResults:z.array(Za).optional()});aR.extend(g1e.shape);var Ote=Iee.merge(Ree).extend({executionType:dh.optional().default("WEB"),testId:Qn,testDescription:z.string().optional(),directory:z.string().optional(),runGroupId:z.guid(),status:z.enum(zt),healStatus:vf,testBundleHash:z.string().optional(),startedAt:z.coerce.date(),schemaVersion:z.string().nullish(),attempts:z.number(),failureRecoveryDetails:z.object({attempts:z.number()}).optional(),aiSettings:Ds.optional(),avgCpuUsage:z.number().optional(),avgMemoryUsage:z.number().optional()}),f1e=Ote.extend(JH.shape),Rh=Ote.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});f1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var lO=1e4,y1e=Eee.merge(wee).extend({id:z.guid().optional(),startedAt:z.coerce.date(),cliVersion:z.string(),labels:z.string().array().optional().default([]),suiteName:z.string().optional(),ciProvider:z.string().optional(),gitMainBranch:z.string().optional(),ai:Ds.optional(),browser:Hc.optional(),sourceRunGroupIds:z.array(z.guid()).max(lO).optional(),mergedAt:z.coerce.date().optional(),aiSelect:z.union([cw.transform(e=>[e]),z.array(cw)]).optional()}),ic=y1e.extend({healRiskSummary:Af.optional(),updatedAt:z.coerce.date().optional().transform(e=>e??new Date),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var b1e=new Set(["AWAIT_LISTENER","REGISTER_REQUEST_LISTENER","GET_RECORDED_REQUESTS","MOCK_ROUTE","REMOVE_ROUTE_MOCK","SCROLL_DOWN","SCROLL_UP","SCROLL_LEFT","SCROLL_RIGHT","VISUAL_DIFF","WAIT","SET_HEADER","OFFLINE_MODE"]),S1e=new Set(["MODULE","RESOLVED_MODULE"]);function kte(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Mte(e){return S1e.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!b1e.has(e.command.type)}var Lte="progress.json",Nte="1.0.0",T1e=z.object({runId:z.string(),testId:z.string().optional(),testName:z.string().optional(),directory:z.string().optional(),status:z.nativeEnum(zt),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date()});z.object({schemaVersion:z.string(),runGroupId:z.string(),status:z.nativeEnum(zt),totalRuns:z.number(),completedRuns:z.number(),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date(),runs:T1e.array()});function Dte(e,t){let o=mn__default.relative(t,e);return o!==""&&o!==".."&&!o.startsWith(`..${mn__default.sep}`)&&!mn__default.isAbsolute(o)}function Fte(e){try{return existsSync(e)&&statSync(e).isDirectory()}catch(t){return C.error({err:t},`Error reading path ${e} during directory existence check.`),false}}var Bte="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",HS="https://us-west.metrics.momentic.ai",$S="c60c6a0f-60da-41a7-a61b-07969a0aa303",is=!!process.env.CI||!!process.env.GITHUB_ACTIONS||!!process.env.GITHUB_RUN_ID||!!process.env.GITLAB_CI||!!process.env.CI_COMMIT_SHA||!!process.env.JENKINS_URL||!!process.env.BUILD_NUMBER||!!process.env.JENKINS_HOME||!!process.env.CIRCLECI||!!process.env.CIRCLE_BUILD_NUM||!!process.env.TRAVIS||!!process.env.TRAVIS_BUILD_NUMBER||!!process.env.BITBUCKET_BUILD_NUMBER||!!process.env.BITBUCKET_COMMIT||!!process.env.CODEBUILD_BUILD_ID||!!process.env.TF_BUILD||!!process.env.BUILD_BUILDID||!!process.env.AGENT_ID||!!process.env.BUILDER_SA_EMAIL||!!process.env.HEROKU_TEST_RUN_ID||!!process.env.CI_NODE_INDEX||!!process.env.TEAMCITY_VERSION||!!process.env.BUILD_VCS_NUMBER||!!process.env.BUILDKITE||!!process.env.BUILDKITE_BUILD_NUMBER||!!process.env.APPVEYOR||!!process.env.APPVEYOR_BUILD_NUMBER||!!process.env.DRONE||!!process.env.DRONE_BUILD_NUMBER||!!process.env.SHIPPABLE||!!process.env.BUILD_URL||!!process.env.SEMAPHORE||!!process.env.SEMAPHORE_EXECUTABLE_UUID||!!process.env.WOODPECKER||!!process.env.CI_BUILD_NUMBER||!!process.env.WERCKER_MAIN_PIPELINE_STARTED||!!process.env.BUDDY_EXECUTION_ID;var x1e=new Set(["exit","quit"]),jte=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),_1e=is||jte||!process.stdin.isTTY;async function Kr(e){if(is||jte)return true;if(!process.stdin.isTTY)throw new Error(`Cannot ask for confirmation: "${e}" No interactive terminal is available. Re-run with --yes or in a TTY.`);return await C.flush(),await new Promise(o=>setTimeout(o,100)),await confirm({message:e})}async function QH(e){let t=dirname(e);return Fte(t)?existsSync(e)?Kr(`File '${Ute(e)}' already exists. Overwrite existing content?`):true:await Kr(`Directory '${Ute(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function Ute(e){return e.replace(/(\s+)/g,"\\$1")}async function Hte(e,t){return _1e?t:(await input({message:e,default:t})).trim()||t}async function ZH(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!x1e.has(e.toLowerCase()))return e}var GS=new Map,Gte="Log throttle exceeded",j1e=100,H1e=5e3,$1e=2e4,G1e=N1e(global.fetch,{retries:2,retryOn:function(e,t,o){return !!(t!==null||o&&o.status>=500)},retryDelay:function(e){return Math.pow(2,e)*500}});function V1e({app:e,hostname:t,environment:o,serviceVersion:n}){return {host:t,env:o,[ATTR_SERVICE_NAME]:e,...n?{[ATTR_SERVICE_VERSION]:n}:{}}}var W1e=`${HS}/logs/json`,e$=class{constructor(t,o){this.flushIntervalMs=t;this.maxBatchSize=o;}records=[];flushTimer;flushRequested=false;flushPromise;push(t){if(this.records.push(t),this.records.length>=this.maxBatchSize){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.flush();return}this.scheduleFlush();}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flush();},this.flushIntervalMs));}async flush(){this.flushRequested=true,this.flushPromise??=Promise.resolve().then(async()=>{try{for(;this.flushRequested;){this.flushRequested=!1;let t=this.records;this.records=[];for(let o=0;o<t.length;o+=this.maxBatchSize)await this.sendBatch(t.slice(o,o+this.maxBatchSize));}}finally{this.flushPromise=void 0;}}),await this.flushPromise;}async sendBatch(t){try{let o=await G1e(W1e,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Bte,"x-momentic-metrics-api-key":$S},body:Gc(t),signal:AbortSignal.timeout($1e)});if(!o.ok)throw new Error(`Got error status (${o.statusText}) from SigNoz`)}catch{}}},t$=class e{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=false;lastWindowStart=Date.now();flushIntervalMs;maxBatchSize;buffer;constructor({bindings:t,hostname:o,disableConsoleLogs:n,flushIntervalMs:r,maxBatchSize:i,buffer:a}){this.hostname=o??Nm.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=a??new e$(this.flushIntervalMs,this.maxBatchSize);let s={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=$te(s);}child(t){return new e({bindings:{...this.bindingAttributes,...t},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize,buffer:this.buffer})}async flush(){await this.buffer.flush(),this.disableConsoleLogs||this.consoleLogger.flush();}shouldAllowLog(t){if(t===Gte)return true;let o=Date.now();return o-this.lastWindowStart>H1e&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,Gte),this.droppedLogsInWindow=false,this.lastWindowStart=o),this.logsInCurrentWindow<j1e?(this.logsInCurrentWindow++,true):(this.droppedLogsInWindow=true,false)}log(t,o,n,...r){try{this.logHelper(t,o,n,...r);}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`);}}logHelper(t,o,n,...r){if(aw[t]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof o=="string"&&!n&&(o={message:o}),typeof o=="object"&&o&&"err"in o&&o.err instanceof Error&&(o.err=U1e.err(o.err));let i={...this.bindingAttributes,...o&&typeof o=="object"?o:{},...r.length>0?{args:r}:{}},a=V1e({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.58.0"}),s=q1e();this.disableConsoleLogs||this.consoleLogger[t]({...i,...s??{}},n,...r);let l={timestamp:Math.round(Date.now()*1e6),...s??{},severity_text:t.toUpperCase(),resources:a,attributes:{},body:oX({message:n||"",...i})};this.buffer.push(l);}setApp(t){let o=this.bindingAttributes.app;this.bindingAttributes.app=t,GS.set("app",this),GS.delete(o);}debug(t,o,...n){this.log("debug",t,o,...n);}info(t,o,...n){this.log("info",t,o,...n);}warn(t,o,...n){this.log("warn",t,o,...n);}error(t,o,...n){this.log("error",t,o,...n);}bindings(){return this.bindingAttributes}addBinding(t,o){this.bindingAttributes[t]=o;}setMinLevel(t){typeof t=="number"?(this.minLevelValue=t,this.consoleLogger.level=nX[t]):(this.minLevelValue=aw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},VS=({app:e,hostname:t,disableConsoleLogs:o})=>(GS.has(e)||GS.set(e,new t$({bindings:{app:e},hostname:t,disableConsoleLogs:o})),GS.get(e));function q1e(){let e=trace.getSpan(context.active());if(!e)return;let t=e.spanContext();if(isSpanContextValid(t))return {trace_id:t.traceId,span_id:t.spanId,trace_flags:t.traceFlags}}async function cO(){await Promise.all([...GS.values()].map(e=>e.flush()));}var zs=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Wte=e=>{let t=e.reason===void 0?new DOMException("This operation was aborted.","AbortError"):e.reason;return t instanceof Error?t:new DOMException(t,"AbortError")};function ge(e,t){let{milliseconds:o,fallback:n,message:r,customTimers:i={setTimeout,clearTimeout}}=t,a;if(typeof o!="number"||Math.sign(o)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${o}\``);let s=new Error().stack;return new Promise((l,c)=>{let u,d=()=>{i.clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",u);};if(t.signal){let{signal:p}=t;if(p.aborted)return Promise.resolve(e).catch(()=>{}),c(Wte(p));u=()=>{d(),c(Wte(p));},p.addEventListener("abort",u,{once:true});}let m=()=>{if(t.signal&&t.signal.removeEventListener("abort",u),n)try{l(n());}catch(p){c(p);}else {if(typeof e.cancel=="function"&&Promise.resolve().then(()=>e.cancel()).catch(()=>{}),r instanceof Error){c(r);return}let p=new zs(r??`Promise timed out after ${o}ms`);p.callSiteStack=s,c(p);}};o<1/0&&(a=i.setTimeout(m,o)),Promise.resolve(e).then(p=>{d(),l(p);}).catch(p=>{d(),c(p);});})}function ac({signal:e,timeoutMs:t}){let o=AbortSignal.timeout(t);return e?AbortSignal.any([e,o]):o}var uO="organization";function dO(e){let t=new PostHog(e.writeKey,{host:e.host,...e.flushImmediately?{flushAt:1,flushInterval:0}:{}}),o=e.platform,n=(l,c,u)=>{let{type:d,...m}=l;t.capture({distinctId:c??u??randomUUID(),event:d,...u&&{groups:{[uO]:u}},properties:{platform:o,user_id:c??void 0,org_id:u??void 0,...m,organizationId:u??void 0,...c==null&&u==null&&{$process_person_profile:false}}});},r=({orgId:l,properties:c})=>{t.groupIdentify({groupType:uO,groupKey:l,properties:c});},i=({userId:l,properties:c})=>{Object.values(c).some(d=>d!=null&&d!=="")&&t.identify({distinctId:l,properties:c});},a=()=>t.shutdown();if(e.identity==="stashed"){let l=null;return {shutdownAnalytics:a,groupIdentifyOrg:r,setAnalyticsIdentity:u=>{l=u,e.onIdentify?.(u),i({userId:u.userId,properties:{email:u.email,...u.selfServe!==void 0?{self_serve:u.selfServe}:{}}});},captureEvent:u=>n(u,l?.userId??null,l?.orgId??null)}}return {shutdownAnalytics:a,groupIdentifyOrg:r,identifyUser:i,captureEvent:(l,{userId:c,orgId:u})=>n(l,c,u),captureBillingEvent:(l,{userId:c,orgId:u})=>n(l,c,u)}}async function qte(e,t,o){let n,r=0,i=3,a,s;for(;r<i;)try{let l=await ge(e.getAllFlagsAndPayloads(o??t,{personProperties:{organizationId:t},groups:{[uO]:t}}),{milliseconds:5e3});a=l.featureFlags||{},s=l.featureFlagPayloads||{};break}catch(l){n=l,r++,await new Promise(c=>setTimeout(c,100*r));}if(a&&s)return {flags:a,payloads:s};throw n}var mO=class e extends Mf{constructor(o,n,r,i,a){super(i,a);this.client=o;this.orgId=n;this.userId=r;}static createClient(){return new PostHog("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://p.momentic.ai"})}static async init(o,n){let r=e.createClient(),{flags:i,payloads:a}=await qte(r,o,n);return new e(r,o,n,i,a)}static fromCached(o,n,r,i){return new e(e.createClient(),o,n,r,i)}async refresh(){let{flags:o,payloads:n}=await qte(this.client,this.orgId,this.userId);this.flags=o,this.payloads=n;}};var pO="/proc",Kte="/sys/fs/cgroup",Q1e="/sys/fs/cgroup/memory",Yte=8,Z1e=1024;function gO(){let e;return ()=>{if(process.platform!=="linux")return;let t=rGe();if(!t)return;let o=iGe({current:t,previous:e});return e=t,o}}function Jte(){if(process.platform!=="linux")return;let e=o$(`${Kte}/memory.stat`);if(e){let o=o$(`${Kte}/memory.events`);return {anonymousBytes:e.anon,fileCacheBytes:e.file,kernelBytes:e.kernel,slabBytes:e.slab,sharedMemoryBytes:e.shmem,pageTablesBytes:e.pagetables,activeAnonymousBytes:e.active_anon,inactiveAnonymousBytes:e.inactive_anon,activeFileBytes:e.active_file,inactiveFileBytes:e.inactive_file,events:o?{low:o.low,high:o.high,max:o.max,oom:o.oom,oomKill:o.oom_kill,oomGroupKill:o.oom_group_kill}:void 0}}let t=o$(`${Q1e}/memory.stat`);if(t)return {anonymousBytes:t.total_rss??t.rss,fileCacheBytes:t.total_cache??t.cache,slabBytes:t.total_slab??t.slab,sharedMemoryBytes:t.total_shmem??t.shmem,pageTablesBytes:t.total_pagetables??t.pagetables,activeAnonymousBytes:t.total_active_anon??t.active_anon,inactiveAnonymousBytes:t.total_inactive_anon??t.inactive_anon,activeFileBytes:t.total_active_file??t.active_file,inactiveFileBytes:t.total_inactive_file??t.inactive_file}}function eGe(e){let t={};for(let o of e.split(`
|
|
180
|
+
`),i=r===-1?n:n.slice(0,r),a=r===-1?"":n.slice(r+1),s=[];i&&s.push({email:i,githubLogin:sH(i)}),s.push(...Hje(a)),t.push(s);}return t}function $je(e){return (e.githubLogin??(e.email?sH(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function y9(e){return e.filter(t=>!$je(t))}var b9="https://static.momentic.ai";function qw(e,t){return {light:`${b9}/${e}.svg`,dark:`${b9}/${e}-dark.svg`,alt:t}}var Kw={runGroup:qw("run-group-button","View run group"),basePr:qw("view-base-pr-button","View base PR"),branch:qw("view-branch-button","View branch"),commit:qw("view-commit-button","View commit")};function Yw({href:e,button:t}){return `<a href="${e}"><picture><source media="(prefers-color-scheme: dark)" srcset="${t.dark}" /><img src="${t.light}" alt="${t.alt}" /></picture></a>`}var vh=z.object({limit:z.number().min(1).max(100).optional(),page:z.number().min(1).optional()}),lH=z.object({page:z.number(),pageSize:z.number(),pageCount:z.number()});var cH=x__default.object({platformSep:x__default.string(),fullPathSegments:x__default.string().array(),relativePathSegments:x__default.string().array(),relativePath:x__default.string().describe("path relative to the root test directory, i.e. my-folder/my-test.yaml"),fileName:x__default.string().describe("base name of the file including the extension, e.g. my-module.module.yaml"),lastModified:x__default.coerce.date(),createdAt:x__default.coerce.date()});var Gje=z.array(cH.extend({id:z.string(),name:z.string(),description:z.string().optional(),labels:z.string().array().optional()})),Vje=cH.extend({id:z.string(),name:z.string(),description:z.string().optional(),content:b_}),Wje=z.array(Vje);z.object({tests:Gje,modules:Wje,labels:z.string().array()});z.string().array();var S9=z.object({pathSegments:z.string().array()});gj.merge(Wn);var T9=z.object({schemaVersion:z.string(),stepLists:dl}),v9=Wn.partial().merge(Sa.pick({id:true})),Nf="1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID.",uH={name:z.string().min(1).max(255).describe(Nf),description:z.string().optional(),baseUrl:z.url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:z.string().optional().describe("For LLM: Do not include the variable unless the user explicitly asks for it and use the environment lookup tool to get the correct one before passing here."),browserType:z.enum(jc).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:Rm.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:z.string().array().optional().describe("For LLM: Only use if explicitly called for by the user. Used to create the test in the correct folder. Paths are relative to the project root.")},A9=z.object(uH);gj.extend(z.object({relativeFilePath:z.string().describe("relative to project root")}).shape);var E9=z.object({name:z.string()});z.object({relativeFilePath:z.string()});var w9=z.object({name:z.string(),sourceModuleContent:b_});z.object({relativeFilePath:z.string()});var R9=z.object({name:z.string(),description:z.string(),enabled:z.boolean(),steps:z.lazy(()=>lo.array()),testFilePath:z.string().describe("relative to the project root"),folderPath:z.string().optional().describe("user selected folder path")}),C9=z.object({name:z.string(),description:z.string(),enabled:z.boolean()}).partial(),I9=z.object({folderPath:z.string()}),x9=z.object({folderPath:z.string()});z.array(KE);var _9=z.object({defaultEnv:z.string().optional().describe("name of the default env, or undefined to unset")}),P9=z.object({configFilePath:z.string().describe("full path on disk")});z.object({hasEntities:z.boolean()});z.string().array();z.object({message:z.string(),newRelativeTestPath:z.string().optional()});var dH=z.object({name:z.string(),absolutePath:z.string(),relativePath:z.string(),pathSegments:z.array(z.string()),isDirectory:z.boolean(),size:z.number(),createdAt:z.coerce.date(),modifiedAt:z.coerce.date(),accessedAt:z.coerce.date()}),O9=z.object({pathSegments:z.array(z.string()),directoriesOnly:z.boolean().optional()});z.object({absolutePath:z.string(),pathSegments:z.array(z.string()),contents:z.array(dH)});var k9=z.object({sourceDirectoryPath:z.string().optional(),value:z.string(),allowedExtensions:z.array(z.string()).optional()}),qje=z.object({name:z.string(),value:z.string(),isDirectory:z.boolean()});z.object({suggestions:z.array(qje)});var M9=z.object({pathSegments:z.array(z.string())}),L9=z.object({pathSegments:z.array(z.string()),newPathSegments:z.array(z.string())}),N9=z.object({pathSegments:z.array(z.string()),recursive:z.boolean().optional()});z.object({success:z.boolean(),message:z.string(),pathSegments:z.array(z.string()).optional()});z.object({gitBranch:z.string(),fileMtime:z.coerce.date(),gitCommitSha:z.string()});var D9=typeof process<"u"&&true&&true,MP=58889,PS=24*60*60*1e3;var F9=z.record(z.string(),z.string()),Kje=z.object({type:z.literal("stdio").optional(),command:z.string().min(1),args:z.array(z.string()).optional(),env:F9.optional(),cwd:z.string().optional()}),Yje=z.object({type:z.enum(["http","sse"]).optional(),url:z.string().min(1),headers:F9.optional()}),Jje=z.union([Kje,Yje]),B9=z.record(z.string().min(1),Jje);var U9=z.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z.object({source:z.string().trim().min(1).max(500).refine(e=>U9.safeParse(e.split("/").at(-1)).success)});var z9=z.object({filename:U9,downloadUrl:z.url()});z.object({filename:z.string().trim().min(1),destination:z.string().trim().min(1).optional()});var j9=z.object({destination:z.string(),uploadUrl:z.url()});var Xw=(n=>(n.DARWIN="darwin",n.LINUX="linux",n.WINDOWS="win32",n))(Xw||{}),H9=z.enum(Xw),Qw=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(Qw||{}),LP=z.enum(Qw);z.object({azureRegion:z.string().optional(),azureWorkspaceId:z.string().optional()});z.object({});z.object({});var Xje=z.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z.object({region:Xje.optional()});var mH=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(mH||{});var Qje=z.object({type:z.literal("DESCRIPTION_UPDATE"),thoughts:z.string()}),NP=z.discriminatedUnion("type",[Qje]),Zje=z.object({testId:z.string(),name:z.string(),orgId:z.string(),runId:z.string(),steps:lo.array(),purpose:z.enum(mH),details:NP.or(NP.array()).optional()});Zje.pick({name:true,orgId:true});var eHe=z.object({id:z.string(),name:z.string().nullish(),createdAt:z.string().pipe(z.coerce.date()).or(z.date()),organizationId:z.string(),schemaVersion:z.string(),runId:z.string().nullish(),purpose:z.enum(mH),details:NP.or(NP.array()).optional(),applied:z.boolean().nullish(),appliedAt:z.coerce.date().nullish()}),$9=eHe.extend({steps:lo.array()});var G9=z.enum(["v1","v2"]);var oHe=z.enum(["element","content","attribute","tag_name","style"]),DP=z.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...H5,...j5].forEach(e=>{if(!DP.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var pH={element:{aliasPrefix:"",assertionType:"ELEMENT_EXISTENCE",requiresName:false},content:{aliasPrefix:"Content",assertionType:"ELEMENT_CONTENT",requiresName:false},attribute:{aliasPrefix:"Attribute",assertionType:"ELEMENT_ATTRIBUTE",requiresName:true},tag_name:{aliasPrefix:"Name",assertionType:"ELEMENT_NAME",requiresName:false},style:{aliasPrefix:"Style",assertionType:"ELEMENT_STYLE",requiresName:true}},q9={exists:{positiveAliasSuffix:"Exists",negativeAliasSuffix:"DoesNotExist",elementCondition:"EXISTS",contentOperation:"EXISTS"},visible:{positiveAliasSuffix:"Visible",negativeAliasSuffix:"NotVisible",elementCondition:"VISIBLE"},enabled:{positiveAliasSuffix:"Enabled",negativeAliasSuffix:"NotEnabled",elementCondition:"ENABLED"},editable:{positiveAliasSuffix:"Editable",negativeAliasSuffix:"NotEditable",elementCondition:"EDITABLE"},focused:{positiveAliasSuffix:"Focused",negativeAliasSuffix:"NotFocused",elementCondition:"FOCUSED"},contains:{positiveAliasSuffix:"Contains",negativeAliasSuffix:"DoesNotContain",contentOperation:"CONTAINS"},equals:{positiveAliasSuffix:"Equals",negativeAliasSuffix:"DoesNotEqual",contentOperation:"EQUALS"},starts_with:{positiveAliasSuffix:"StartsWith",negativeAliasSuffix:"DoesNotStartWith",contentOperation:"STARTS_WITH"}},K9={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function V9(e){return {alias:hH(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:pH[e.subject].assertionType,requiresName:pH[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function hH(e){let t=pH[e.subject],o=q9[e.condition];if(!Y9(e.subject,e.condition))throw new Error(`Unsupported element check alias for subject '${e.subject}' and condition '${e.condition}'.`);let n=e.negated?o.negativeAliasSuffix:o.positiveAliasSuffix;return `checkElement${t.aliasPrefix}${n}`}function Y9(e,t){let o=q9[t],n=o.elementCondition,r=o.contentOperation;return e==="element"?n!==void 0:r!==void 0}var nHe=oHe.options.flatMap(e=>DP.options.flatMap(t=>Y9(e,t)?[V9({subject:e,condition:t,negated:false}),V9({subject:e,condition:t,negated:true})]:[])),FP=new Map(nHe.map(e=>[e.alias,e]));var rHe=z.enum(zu),iHe=z.enum(ll);function ns(e){return FP.get(e)}function X9(e){let t=K9[e.type],o=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return hH({subject:t,condition:aHe(o),negated:e.negated})}function Q9(e){return rHe.parse(e.toUpperCase())}function Zw(e){return iHe.parse(e.toUpperCase())}function aHe(e){return DP.parse(e.toLowerCase())}var kS=z.string().regex(/\S+\s+\S+/,"Bare AI action goals must contain multiple words.").describe("Multi-word natural-language goal for an AI action V3 step."),St={saveAs:z.string().optional(),retries:z.number().optional(),skipped:z.boolean().optional(),comment:z.string().optional()};z.object(St);var MS=Object.keys(St);function nt(e){return z.union([z.strictObject({[e.key]:e.simplified}),z.strictObject({[e.key]:e.detailed})])}function Mn(e){return z.strictObject({[e.key]:e.detailed})}function sHe(e,t){let o=Array.from({length:t.length+1},(n,r)=>r);for(let n=1;n<=e.length;n+=1){let r=[n],i=e.charAt(n-1);for(let a=1;a<=t.length;a+=1)r.push(i===t.charAt(a-1)?o[a-1]??0:Math.min((o[a-1]??0)+1,(o[a]??0)+1,(r[a-1]??0)+1));o.splice(0,o.length,...r);}return o[t.length]??0}function Z9(e,t){let o=e.toLowerCase(),n,r=.5;for(let i of t){let a=i.toLowerCase(),s=Math.max(o.length,a.length),l=s===0?1:1-sHe(o,a)/s;l>r&&(r=l,n=i);}return n}var eZ='Coordinates must be "x, y" pixel values, e.g. "100, 200"',LS=z.union([Fu,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,eZ)],{error:eZ});z.union([z.string(),Fu]);var Bs={css:z.string().optional(),coords:LS.optional(),x:z.union([z.number(),z.string()]).optional(),y:z.union([z.number(),z.string()]).optional()},fH={on:z.string().optional(),...Bs},yl={...St,effort:ht.optional(),useSelector:z.boolean().optional(),force:z.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional()},DS={...yl,offset:LS.optional()};function Aa({schema:e,descriptionKey:t,required:o=true}){return e.superRefine((n,r)=>{let a=[t in n?Object.entries(n).find(([s])=>s===t)?.[1]:void 0,"css"in n?n.css:void 0,"coords"in n?n.coords:void 0,"x"in n||"y"in n?true:void 0].filter(s=>s!==void 0).length;o&&a!==1&&r.addIssue({code:"custom",message:`Use exactly one target: ${t}, css, coords, or x/y.`}),!o&&a>1&&r.addIssue({code:"custom",message:`Use at most one target: ${t}, css, coords, or x/y.`}),("x"in n||"y"in n)&&(!("x"in n)||n.x===void 0||!("y"in n)||n.y===void 0)&&r.addIssue({code:"custom",message:"x and y must be provided together."});})}var lHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,times:z.int().min(1).optional(),rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),cHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),uHe=Aa({descriptionKey:"on",schema:z.strictObject({...fH,...DS,times:z.int().min(1).optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),tZ=nt({key:"click",simplified:z.string(),detailed:lHe}),oZ=nt({key:"doubleClick",simplified:z.string(),detailed:cHe}),nZ=nt({key:"rightClick",simplified:z.string(),detailed:uHe}),dHe=Aa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Bs,...DS,pressEnter:z.boolean().optional(),clear:z.union([z.literal("inputs"),z.literal("always"),z.literal("never"),z.boolean()]).optional(),delay:z.number().optional()})}),rZ=nt({key:"type",simplified:z.string(),detailed:dHe}),mHe=Aa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Bs,...DS,pressEnter:z.boolean().optional()})}),iZ=nt({key:"fill",simplified:z.string(),detailed:mHe}),aZ=Mn({key:"select",detailed:Aa({descriptionKey:"from",schema:z.strictObject({from:z.string().optional(),...Bs,label:z.string().optional(),value:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),...yl})}).superRefine((e,t)=>{[e.label,e.value,e.index].filter(n=>n!==void 0).length!==1&&t.addIssue({code:"custom",message:"select requires exactly one of label, value, or index"});})}),sZ=nt({key:"hover",simplified:z.string(),detailed:Aa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Bs,...DS})})}),lZ=Mn({key:"blur",detailed:Aa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Bs,...yl})})}),cZ=nt({key:"focus",simplified:z.string(),detailed:Aa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Bs,...yl})})}),uZ=Mn({key:"dragAndDrop",detailed:z.strictObject({from:z.string().optional(),to:z.string().optional(),fromCss:z.string().optional(),toCss:z.string().optional(),fromCoords:LS.optional(),toCoords:LS.optional(),fromX:z.union([z.number(),z.string()]).optional(),fromY:z.union([z.number(),z.string()]).optional(),toX:z.union([z.number(),z.string()]).optional(),toY:z.union([z.number(),z.string()]).optional(),steps:z.number().optional(),hover:z.number().optional(),...yl}).superRefine((e,t)=>{let o=[e.from,e.fromCss,e.fromCoords,e.fromX!==void 0||e.fromY!==void 0?true:void 0].filter(r=>r!==void 0).length,n=[e.to,e.toCss,e.toCoords,e.toX!==void 0||e.toY!==void 0?true:void 0].filter(r=>r!==void 0).length;o!==1&&t.addIssue({code:"custom",message:"Use exactly one from target."}),n!==1&&t.addIssue({code:"custom",message:"Use exactly one to target."}),(e.fromX!==void 0||e.fromY!==void 0)&&(e.fromX===void 0||e.fromY===void 0)&&t.addIssue({code:"custom",message:"fromX and fromY must be provided together."}),(e.toX!==void 0||e.toY!==void 0)&&(e.toX===void 0||e.toY===void 0)&&t.addIssue({code:"custom",message:"toX and toY must be provided together."});})}),dZ=z.union([z.strictObject({mouseDrag:LS}),z.strictObject({mouseDrag:Aa({descriptionKey:"from",required:false,schema:z.strictObject({from:z.string().optional(),...Bs,delta:LS,steps:z.number().optional(),...yl})})})]),mZ=nt({key:"press",simplified:z.string(),detailed:z.strictObject({key:z.string(),repeat:z.number().optional(),delay:z.number().optional(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),pZ=nt({key:"keyDown",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),hZ=nt({key:"keyUp",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...St,effort:ht.optional()})}),NS=z.number().int().min(0).max(6e4).multipleOf(1e3),gZ=nt({key:"navigate",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:NS.optional(),...St,effort:ht.optional()})}),fZ=nt({key:"newTab",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:NS.optional(),...St,effort:ht.optional()})}),yZ=nt({key:"switchTab",simplified:z.union([z.number(),z.string()]),detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:NS.optional(),loadTimeout:NS.optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(n=>n!==void 0).length!==1&&t.addIssue({code:"custom",message:"switchTab requires exactly one of substring, regex, or index"});})}),bZ=Mn({key:"closeTab",detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:NS.optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(n=>n!==void 0).length<=1||t.addIssue({code:"custom",message:"closeTab accepts at most one of substring, regex, or index"});})}),SZ=Mn({key:"goBack",detailed:z.strictObject({...St,effort:ht.optional()})}),TZ=Mn({key:"goForward",detailed:z.strictObject({...St,effort:ht.optional()})}),vZ=Mn({key:"refresh",detailed:z.strictObject({timeout:NS.optional(),...St,effort:ht.optional()})}),Df=z.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),AZ=nt({key:"scrollUp",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),EZ=nt({key:"scrollDown",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),wZ=nt({key:"scrollLeft",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),RZ=nt({key:"scrollRight",simplified:z.number().nonnegative(),detailed:Aa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Bs,...yl})})}),CZ=nt({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...St,effort:ht.optional()})}),pHe=nt({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),source:z.string().optional(),...St,effort:ht.optional()})}),hHe=nt({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),source:z.string().optional(),...St,effort:ht.optional()})}),BP=pHe,UP=hHe,IZ=nt({key:"checkPageContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),xZ=nt({key:"checkPageDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),yH=z.union([IZ,xZ]),gHe=z.record(z.string(),z.unknown().optional()),zP=gHe.superRefine((e,t)=>{let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=ns(n);if(r===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}if(typeof e[r.alias]=="string")return;let i=Aa({descriptionKey:"element",schema:z.looseObject({element:z.string().optional(),...Bs,...yl,timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional()})}).safeParse(e[r.alias]);if(!i.success){t.addIssue({code:"custom",message:`element check alias '${r.alias}' must be a string target or detailed object`,path:[r.alias]});return}r.requiresName&&i.data.name===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a name`,path:[r.alias,"name"]}),r.requiresValue&&i.data.value===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a value`,path:[r.alias,"value"]});}),_Z=nt({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Th.optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),...St,effort:ht.optional()})}),PZ=nt({key:"cookie",simplified:z.string(),detailed:z.strictObject({value:z.string(),...St,effort:ht.optional()})}),OZ=Mn({key:"localStorage",detailed:z.strictObject({key:z.string(),value:z.string(),...St,effort:ht.optional()})}),kZ=nt({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:gm.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:Th.optional(),contentType:z.enum(ju).optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),MZ=Mn({key:"graphqlRequest",detailed:z.strictObject({url:z.string(),query:z.string(),variables:Th.optional(),headers:z.record(z.string(),z.string()).optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),jP=nt({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),environment:z.enum(["node","browser","NODE","BROWSER"]).optional(),fragment:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()})}),FS={substring:z.string().optional(),glob:z.string().optional(),regex:z.string().optional(),domain:z.string().optional()};function fHe(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function BS(e){let t=fHe(e.payload);if(e.required&&t!==1||!e.required&&t>1){e.ctx.addIssue({code:"custom",message:e.required?"requires exactly one of substring, glob, regex, or domain":"requires at most one of substring, glob, regex, or domain"});return}!e.required&&t===0&&e.payload.method&&e.ctx.addIssue({code:"custom",message:"method requires a URL matcher"});}var LZ=Mn({key:"header",detailed:z.strictObject({name:z.string(),value:z.string(),...FS,method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:false});})}),NZ=Mn({key:"mock",detailed:z.strictObject({...FS,method:z.string().optional(),responseGenerator:z.string(),fetchOriginalResponse:z.boolean().optional(),key:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),DZ=nt({key:"removeRouteMock",simplified:z.string(),detailed:z.strictObject({key:z.string().optional(),...St,effort:ht.optional()})}),FZ=nt({key:"waitForUrl",simplified:z.string(),detailed:z.strictObject({...FS,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),BZ=nt({key:"waitForUrlNotToMatch",simplified:z.string(),detailed:z.strictObject({...FS,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),yHe=z.union([FZ,BZ]),UZ=nt({key:"dialog",simplified:z.enum(["ACCEPT","DISMISS"]),detailed:z.strictObject({action:z.enum(["ACCEPT","DISMISS"]),...St,effort:ht.optional()})}),zZ=nt({key:"fileUpload",simplified:z.string(),detailed:z.strictObject({path:z.string(),name:z.string().optional(),...St,effort:ht.optional()})}),jZ=nt({key:"copy",simplified:z.union([z.string(),z.boolean(),z.null()]),detailed:z.strictObject({value:z.union([z.string(),z.boolean(),z.null()]),...St,effort:ht.optional()})}),HZ=Mn({key:"paste",detailed:z.strictObject({...St,effort:ht.optional()})}),$Z=Mn({key:"captcha",detailed:z.strictObject({...yl})}),bHe=z.strictObject({data:z.union([z.string(),sl]),width:z.number(),height:z.number()}),GZ=nt({key:"visualDiff",simplified:z.string(),detailed:Aa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Bs,threshold:z.number().optional(),screenshot:bHe.optional(),...yl})})}),VZ=Mn({key:"offline",detailed:z.strictObject({...St,effort:ht.optional()})}),WZ=Mn({key:"online",detailed:z.strictObject({...St,effort:ht.optional()})}),qZ=Mn({key:"registerRequestListener",detailed:z.strictObject({...FS,key:z.string(),method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),KZ=nt({key:"awaitListener",simplified:z.string(),detailed:z.strictObject({key:z.string(),timeout:z.number().optional(),...St,effort:ht.optional()})}),YZ=Mn({key:"recordRequests",detailed:z.strictObject({...FS,key:z.string(),method:z.string().optional(),...St,effort:ht.optional()}).superRefine((e,t)=>{BS({payload:e,ctx:t,required:true});})}),JZ=nt({key:"getRecordedRequests",simplified:z.string(),detailed:z.strictObject({key:z.string(),...St,effort:ht.optional()})}),XZ=nt({key:"authLoad",simplified:z.string(),detailed:z.strictObject({path:z.string(),...St,effort:ht.optional()})}),QZ=nt({key:"authSave",simplified:z.string(),detailed:z.strictObject({path:z.string().optional(),...St,effort:ht.optional()})});z.union([tZ,oZ,nZ,yZ,bZ,rZ,iZ,aZ,sZ,lZ,cZ,uZ,dZ,mZ,pZ,hZ,gZ,fZ,SZ,TZ,vZ,AZ,EZ,wZ,RZ,CZ,BP,UP,yH,_Z,PZ,OZ,kZ,MZ,jP,LZ,NZ,DZ,yHe,UZ,zZ,jZ,HZ,$Z,GZ,VZ,WZ,qZ,KZ,YZ,JZ,XZ,QZ,zP]);var ZZ=new Map([["click",tZ],["doubleClick",oZ],["rightClick",nZ],["switchTab",yZ],["closeTab",bZ],["type",rZ],["fill",iZ],["select",aZ],["hover",sZ],["blur",lZ],["focus",cZ],["dragAndDrop",uZ],["mouseDrag",dZ],["press",mZ],["keyDown",pZ],["keyUp",hZ],["navigate",gZ],["newTab",fZ],["goBack",SZ],["goForward",TZ],["refresh",vZ],["scrollUp",AZ],["scrollDown",EZ],["scrollLeft",wZ],["scrollRight",RZ],["wait",CZ],["assert",BP],["assertVisually",UP],["checkPageContains",IZ],["checkPageDoesNotContain",xZ],["extract",_Z],["cookie",PZ],["localStorage",OZ],["request",kZ],["graphqlRequest",MZ],["javascript",jP],["header",LZ],["mock",NZ],["removeRouteMock",DZ],["waitForUrl",FZ],["waitForUrlNotToMatch",BZ],["dialog",UZ],["fileUpload",zZ],["copy",jZ],["paste",HZ],["captcha",$Z],["visualDiff",GZ],["offline",VZ],["online",WZ],["registerRequestListener",qZ],["awaitListener",KZ],["recordRequests",YZ],["getRecordedRequests",JZ],["authLoad",XZ],["authSave",QZ]]),bH=Object.freeze([...ZZ.keys()]),SHe=[...bH,...FP.keys()],id=z.custom().superRefine((e,t)=>{if(typeof e!="object"||e===null){t.addIssue({code:"custom",message:"Steps must be objects with exactly one action key."});return}let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"Steps must have exactly one action key."});return}let r=ZZ.get(n)??(ns(n)?zP:void 0);if(!r){let a=Z9(n,SHe);t.addIssue({code:"custom",message:`Unsupported step type '${n}'.${a?` Did you mean '${a}'?`:""} See https://momentic.ai/docs/reference/commands for every step type.`});return}let i=r.safeParse(e);if(!i.success){let a=THe(i.error.issues,n);a.length>0&&e7(t,a);}});function THe(e,t){return vHe(e).filter(o=>!AHe(o,t))}function e7(e,t){for(let o of t){if(o.code==="invalid_union"){e7(e,SH(o));continue}e.addIssue({...o});}}function vHe(e){let t=[];for(let o of e){if(o.code==="invalid_union"){t.push(...SH(o));continue}t.push(o);}return t}function AHe(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function SH(e){let t=e.errors[0]??[],o=gH(t);for(let n of e.errors.slice(1)){let r=gH(n);r>o&&(t=n,o=r);}return t}function gH(e){return e.reduce((t,o)=>{let n=o.code==="invalid_union"?gH(SH(o)):0;return t+o.path.length+n},0)}var t7=z.strictObject({string:z.string()}),EHe=z.strictObject({javascript:z.string()}),o7=z.union([t7,EHe]),wHe=z.union([z.strictObject({name:z.string(),required:z.boolean().optional(),default:t7.optional()}),z.strictObject({name:z.string(),required:z.boolean().optional(),defaultValue:z.string()})]),n7=wHe.array(),RHe=z.strictObject({name:z.string(),default:o7.optional(),enum:z.array(z.string()).optional()}),r7=RHe.array(),eR=z.union([o7,z.string()]),i7=z.record(z.string(),eR);var CHe=z.preprocess(e=>typeof e=="number"?String(e):e,oz),HP=z.looseObject({goal:z.string(),version:CHe.optional(),cache:z.literal(false).optional(),...St}),IHe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:HP})]),TH=z.looseObject({path:z.string(),inputs:z.record(z.string(),eR).optional(),...St}),xHe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:TH})]),Lm=z.union([BP,UP,yH,jP,zP]),_He=new Set(["then","effort",...MS]),PHe=z.looseObject({then:z.lazy(()=>Jc.array()),effort:ht.optional(),...St}).superRefine((e,t)=>{Object.entries(e).filter(([n,r])=>!_He.has(n)&&Lm.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),OHe=z.strictObject({if:PHe}),kHe=new Set(["do","maxIterations","effort",...MS]),MHe=z.looseObject({do:z.lazy(()=>Jc.array()),maxIterations:z.number().int().positive().optional(),effort:ht.optional(),...St}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!kHe.has(n)&&Lm.safeParse({[n]:r}).success).length;if(o>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}o===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),LHe=z.strictObject({while:MHe}),Jc=z.lazy(()=>z.union([Df,kS,IHe,xHe,OHe,LHe,id]));z.object({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()});var NHe=z.union([Rm,z.string().refine(e=>{let t=e.match(/^\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*$/);if(!t)return false;let[,o,n]=t;return Rm.safeParse({width:Number(o),height:Number(n)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),DHe=Ya.omit({viewport:true}).extend({viewport:NHe.optional()}),vH=z.object({id:Qn,version:z.string().optional(),url:T_.optional(),description:z.string().optional(),retries:z.number().optional(),defaultEnv:z.string().optional(),parameters:n7.optional(),outputs:Z_.optional(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional(),runAssertions:eP.array().optional()}).extend(DHe.shape),FHe=z.looseObject({fileType:z.literal(De.TEST_V2)}).extend(vH.shape).extend({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()}),Eh=FHe.superRefine(UHe),BHe={beforeSteps:"before",afterSteps:"after"};function UHe(e,t){for(let[o,n]of Object.entries(BHe))o in e&&t.addIssue({code:"custom",message:`v2 tests must use ${n}, not ${o}`,path:[o]});}var zHe=z.array(z.string()),jHe=z.union([z.string(),z.record(z.string(),z.unknown().optional())]),$P=Jn.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:Qn,version:z.string().optional(),name:z.string().optional(),parameters:z.union([r7,zHe]).optional(),defaultParameters:z.record(z.string(),z.string()).optional(),parameterEnums:z.record(z.string(),z.array(z.string())).optional()}),GP=z.looseObject($P.extend({fileType:z.literal(De.MODULE_V2),steps:jHe.array().optional()}).shape).superRefine(s7),VP=z.looseObject($P.extend({fileType:z.literal(De.MODULE_V2),steps:Jc.array().optional()}).shape).superRefine(s7);function a7(e){return e.steps??[]}function s7(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var AH=(o=>(o.TEST="TEST",o.MODULE="MODULE",o))(AH||{}),HHe=z.enum(AH),l7=z.object({orgId:z.string(),entityType:HHe,entityId:z.string()}),EH=l7.extend({entityType:z.literal("TEST"),stepLists:zc}),wH=l7.extend({entityType:z.literal("MODULE"),steps:so.array()});z.discriminatedUnion("entityType",[EH,wH]);var c7=(n=>(n.WEB="web",n.ANDROID="android",n.IOS="ios",n))(c7||{}),RH=z.nativeEnum(c7);var u7=z.object({entity_type:z.string(),value:z.string(),schema_version:z.string().optional()}),d7=QE(u7),m7=u7.extend({cache_key:z.string()});function tR({entityType:e,entityId:t}){return `${e}:${t}`}var Bf=z.string();var p7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',y7=z.union([Fu,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,p7)],{error:p7}),h7='Percent must be a number or a percent string, e.g. 90 or "90%"',b7=z.union([z.number(),z.string().regex(/^-?\d+(?:\.\d+)?%$/,h7)],{error:h7}).transform(e=>typeof e=="number"?e:Number(e.slice(0,-1))).pipe(z.number().min(0,{message:"Percent must be >= 0"}).max(100,{message:"Percent must be <= 100"})),$He=z.strictObject({x:z.number(),y:z.number(),delta:z.number()}),S7=z.union([z.string(),$He]),Wo={...St,DANGEROUS_FORCE_DYNAMIC:z.boolean().optional()},GHe=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],VHe=["enter","backspace","close_keyboard"],g7=["airplane_mode","data","wifi","location"],f7=["portrait","landscape"],WHe=z.strictObject({on:Bf.optional(),longPress:z.boolean().optional(),longPressDuration:z.number().optional(),iterations:z.number().optional(),tapDelay:z.number().optional(),offset:y7.optional(),...Wo}),T7=nt({key:"tap",simplified:Bf,detailed:WHe}),qHe=z.strictObject({text:z.string(),into:Bf.optional(),clearContent:z.boolean().optional(),forceClearContent:z.boolean().optional(),delay:z.number().optional(),waitForKeyboardSettle:z.boolean().optional(),replaceStrategy:z.nativeEnum(Cw).optional(),keyPressDelay:z.number().optional(),...Wo}),v7=nt({key:"type",simplified:z.string(),detailed:qHe}),A7=z.enum(GHe),KHe=z.strictObject({key:A7,longPress:z.boolean().optional(),...Wo}),E7=nt({key:"press",simplified:A7,detailed:KHe}),w7=z.enum(VHe),YHe=z.strictObject({key:w7,repeat:z.number().optional(),delay:z.number().optional(),keyPressDelay:z.number().optional(),...Wo}),R7=nt({key:"pressKey",simplified:w7,detailed:YHe}),JHe=z.strictObject({package:z.string(),activity:z.string().optional(),intentExtras:z.string().optional(),...Wo}),C7=nt({key:"openApp",simplified:z.string(),detailed:JHe}),I7=Mn({key:"killApp",detailed:z.strictObject(Wo)}),x7=Mn({key:"openNotifications",detailed:z.strictObject(Wo)}),_7=z.enum(["up","down","left","right"]),XHe=z.strictObject({direction:_7,in:S7.optional(),viewportPercent:b7.optional(),duration:z.number().optional(),offset:y7.optional(),...Wo}),P7=nt({key:"swipe",simplified:_7,detailed:XHe}),QHe=z.enum(["up","down"]),ZHe=z.strictObject({on:Bf,direction:QHe.optional(),in:S7.optional(),scrollStepPercent:b7.optional(),maxScrollAttempts:z.number().optional(),...Wo}),O7=nt({key:"scrollTo",simplified:z.string(),detailed:ZHe}),CH=nt({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Wo})}),IH=nt({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Wo})}),k7=nt({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Th.optional(),...Wo})}),M7=nt({key:"checkScreenContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Wo})}),L7=nt({key:"checkScreenDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Wo})}),N7=z.union([M7,L7]),e$e=z.record(z.string(),z.unknown().optional()),xH=e$e.superRefine((e,t)=>{let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=ns(n);if(r===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}if(typeof e[r.alias]=="string")return;let i=z.looseObject({on:Bf.optional(),timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional(),...Wo}).safeParse(e[r.alias]);if(!i.success){t.addIssue({code:"custom",message:`element check alias '${r.alias}' must be a string target or detailed object`,path:[r.alias]});return}i.data.on===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a target via 'on'`,path:[r.alias,"on"]}),r.requiresName&&i.data.name===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a name`,path:[r.alias,"name"]}),r.requiresValue&&i.data.value===void 0&&t.addIssue({code:"custom",message:`element check alias '${r.alias}' requires a value`,path:[r.alias,"value"]});}),t$e=z.strictObject({from:Bf,to:Bf,hoverDuration:z.number().optional(),dragDuration:z.number().optional(),...Wo}),D7=Mn({key:"dragAndDrop",detailed:t$e}),_H=nt({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),timeout:z.number().optional(),...Wo})}),F7=nt({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:gm.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:z.string().optional(),bodyType:z.nativeEnum(ju).optional(),timeout:z.number().optional(),...Wo})}),B7=nt({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...Wo})}),U7=nt({key:"visualDiff",simplified:z.string(),detailed:z.strictObject({path:z.string(),threshold:z.number().min(0).max(1).optional(),...Wo})}),z7=Mn({key:"addFile",detailed:z.strictObject({path:z.string(),location:z.string(),...Wo})}),j7=nt({key:"setCamera",simplified:z.string(),detailed:z.strictObject({path:z.string(),loop:z.boolean().optional(),playAudio:z.boolean().optional(),...Wo})}),H7=Mn({key:"clearCamera",detailed:z.strictObject(Wo)}),$7=nt({key:"setMicrophone",simplified:z.string(),detailed:z.strictObject({path:z.string(),once:z.boolean().optional(),...Wo})}),G7=Mn({key:"clearMicrophone",detailed:z.strictObject(Wo)}),V7=nt({key:"installApp",simplified:z.string(),detailed:z.strictObject({path:z.string(),...Wo})}),W7=nt({key:"uninstallApp",simplified:z.string(),detailed:z.strictObject({package:z.string(),...Wo})}),q7=nt({key:"toggleSettings",simplified:z.enum(g7),detailed:z.strictObject({setting:z.enum(g7),...Wo})}),K7=nt({key:"rotate",simplified:z.enum(f7),detailed:z.strictObject({orientation:z.enum(f7),...Wo})}),Y7=nt({key:"adb",simplified:z.string(),detailed:z.strictObject({command:z.string(),args:z.string().optional(),...Wo})}),J7=Mn({key:"appium",detailed:z.strictObject({script:z.string(),args:z.string().optional(),...Wo})}),X7=Mn({key:"debugState",detailed:z.strictObject(Wo)}),Q7=z.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z.union([T7,v7,E7,R7,C7,I7,x7,P7,O7,CH,IH,k7,N7,D7,_H,F7,B7,U7,z7,j7,H7,$7,G7,V7,W7,q7,K7,Y7,J7,X7,xH]);var Z7=new Map([["tap",T7],["type",v7],["press",E7],["pressKey",R7],["openApp",C7],["killApp",I7],["openNotifications",x7],["swipe",P7],["scrollTo",O7],["assert",CH],["assertVisually",IH],["extract",k7],["checkScreenContains",M7],["checkScreenDoesNotContain",L7],["dragAndDrop",D7],["javascript",_H],["request",F7],["wait",B7],["visualDiff",U7],["addFile",z7],["setCamera",j7],["clearCamera",H7],["setMicrophone",$7],["clearMicrophone",G7],["installApp",V7],["uninstallApp",W7],["toggleSettings",q7],["rotate",K7],["adb",Y7],["appium",J7],["debugState",X7]]);Object.freeze([...Z7.keys()]);var eee=z.custom().superRefine((e,t)=>{if(typeof e!="object"||e===null){t.addIssue({code:"custom",message:"v2 mobile commands must be objects with exactly one action key."});return}let o=Object.keys(e),n=o[0];if(o.length!==1||n===void 0){t.addIssue({code:"custom",message:"v2 mobile commands must have exactly one action key."});return}let r=Z7.get(n)??(ns(n)?xH:void 0);if(!r){t.addIssue({code:"custom",message:`Unsupported v2 mobile command '${n}'.`});return}let i=r.safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue({...a});}),PH=z.union([CH,IH,N7,_H,xH]);var o$e=z.preprocess(e=>typeof e=="number"?String(e):e,Dj),n$e=z.looseObject({goal:z.string(),version:o$e.optional(),cache:z.literal(false).optional(),precondition:z.string().optional(),postcondition:z.string().optional(),...St}),r$e=z.union([z.strictObject({act:z.string()}),z.strictObject({act:n$e})]),i$e=z.looseObject({path:z.string(),inputs:z.record(z.string(),eR).optional(),...St}),a$e=z.union([z.strictObject({module:z.string()}),z.strictObject({module:i$e})]),s$e=new Set(["then",...MS]),l$e=z.looseObject({then:z.lazy(()=>Xc.array()),...St}).superRefine((e,t)=>{if("else"in e){t.addIssue({code:"custom",message:"v2 mobile conditionals do not support 'else'. Use a separate step instead.",path:["else"]});return}Object.entries(e).filter(([n,r])=>!s$e.has(n)&&PH.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),c$e=z.strictObject({if:l$e}),u$e=new Set(["do","maxIterations",...MS]),d$e=z.looseObject({do:z.lazy(()=>Xc.array()),maxIterations:z.number().int().positive().optional(),...St}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!u$e.has(n)&&PH.safeParse({[n]:r}).success).length;if(o>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}o===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),m$e=z.strictObject({while:d$e}),Xc=z.lazy(()=>z.union([Q7,kS,r$e,a$e,c$e,m$e,eee]));z.object({before:Xc.array().optional(),steps:Xc.array(),after:Xc.array().optional()});var p$e=z.literal("android"),h$e=z.literal("ios");function WP(e){if(typeof e!="object"||e===null)return e;let t=e;if(typeof t.platform!="string")return e;let o=t.platform.toLowerCase();return o===t.platform?e:{...t,platform:o}}var tee=IS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:p$e,...Bw.shape}),oee=xS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:h$e,...Bw.shape}),g$e=z.discriminatedUnion("platform",[tee,oee]),nee=z.preprocess(WP,g$e),ree={before:Xc.array().optional(),steps:Xc.array(),after:Xc.array().optional()},iee=z.looseObject({fileType:z.literal(De.MOBILE_TEST_V2)}).extend(tee.shape).extend(ree);z.preprocess(WP,iee);var aee=z.looseObject({fileType:z.literal(De.MOBILE_TEST_V2)}).extend(oee.shape).extend(ree);z.preprocess(WP,aee);var f$e=z.discriminatedUnion("platform",[iee,aee]);z.preprocess(WP,f$e);var y$e=z.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z.enum(G_).optional().default("android")),qP=TP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:Qn,name:z.string().optional(),version:z.string().optional(),platform:y$e});z.looseObject(qP.extend({fileType:z.literal(De.MOBILE_MODULE_V2),steps:z.array(z.record(z.string(),z.unknown().optional())).optional()}).shape);z.looseObject(qP.extend({fileType:z.literal(De.MOBILE_MODULE_V2),steps:Xc.array().optional()}).shape);var KP="x-momentic-cli-version",lee="x-momentic-client-mode",YP="x-momentic-runner",cee="x-momentic-cli-type",JP="x-momentic-logger-tags",OH="x-momentic-effective-ai-effort",b$e="x-momentic-main-branch-name",S$e="x-momentic-branch-name",T$e="x-momentic-commit-timestamp",v$e="x-momentic-last-commit-on-main",A$e="x-momentic-last-commit-on-main-timestamp",E$e="x-momentic-merged-branch-name",uee="x-momentic-session-id",dee=529,mee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});Gr.merge(pj);var pee=h_;Gr.merge(pj);Gr.merge(LX).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var kH=z5;Gr.merge(NX);var hee=CJ;Gr.merge(PX);var gee=H_;Gr.merge(rJ);Gr.merge(OX);var fee=EJ;Gr.merge(kX);Gr.merge(MX);Gr.merge(UX);Gr.merge(zX);Gr.merge(jX);x.object({testPaths:x.string().array().describe("can be either hyphenated, lowercase test names or UUIDs"),env:x.string().optional(),all:x.boolean().optional(),urlOverride:x.string().optional(),customHeaders:x.record(x.string(),x.string()).optional(),testInputMatrix:x.record(x.string(),x.string()).array().optional()});var yee=x.object({queuedTests:x.unknown().optional().array(),runIds:x.guid().array(),runGroupId:x.string().optional()});x.string().array();x.union([x.object({paths:x.string().array().describe("Export specific test paths or folder paths (e.g. todo-test, auth/onboarding)"),all:x.boolean().describe("run all tests").optional()}),x.object({path:x.string().describe("deprecated; present for backcompat")})]);var w$e=x.object({tests:x.record(x.string().describe("Test name (keys correspond to entries in `tests`)"),x.string().describe("Slash-separated folder name path that the test lives in (e.g. 'Auth/Login'). Top-level entities are omitted.")),modules:x.record(x.string().describe("Module name (keys correspond to entries in `modules`)"),x.string().describe("Slash-separated folder name path that the module lives in."))}),bee=x.object({tests:x.record(x.string().describe("Test name"),x.string().describe("Test YAML")),modules:x.record(x.string().describe("Module name"),x.string().describe("Module YAML")),folderPaths:w$e.optional().describe("Optional map from exported entity name to its slash-separated cloud folder path. Used by the CLI to recreate folder structure on disk.")}),R$e=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});R$e.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(bm);function XP(e){let{gitMainBranch:t,gitBranchName:o,gitCommitTimestamp:n,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,a={};return t&&(a[b$e]=encodeURIComponent(t)),o&&(a[S$e]=encodeURIComponent(o)),n&&(a[T$e]=n.toISOString()),r&&(a[v$e]=encodeURIComponent(r)),i&&(a[A$e]=i.toISOString()),e.mergedGitBranchName&&(a[E$e]=encodeURIComponent(e.mergedGitBranchName)),a}x.object({entries:x.array(lJ)});x.object({platform:RH.optional(),entries:x.array(d7)});x.object({testId:x.string(),environment:x.string().optional(),platform:RH.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function See(e){return x.record(x.string(),x.unknown().optional()).transform(t=>{let o={};for(let[n,r]of Object.entries(t)){let i=e.safeParse(r);i.success&&(o[n]=i.data);}return o})}var Tee=See(cJ),vee=m7.array();function see(e){return See(ZE(e))}var Aee={ANDROID:e=>see(wP).parse(e),IOS:e=>see(RP).parse(e)},C$e=x.object({id:x.string(),completionType:x.string(),description:x.string().optional(),thoughts:x.string(),result:x.string(),sessionType:x.string(),timeCreated:x.string().optional(),citations:x.array(hn).optional()}),I$e=x.object({id:x.string(),assertion:x.string().optional(),result:x.string(),thoughts:x.string(),sessionType:x.string(),timeCreated:x.string().optional(),citations:x.array(hn).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var MH=x.union([C$e,I$e]).array(),Eee=x.object({trigger:x.nativeEnum(hl),status:x.nativeEnum(zt),startedAt:x.coerce.date().optional(),gitCommitSha:x.string().optional(),gitCommitShaShort:x.string().optional(),gitCommitTimestamp:x.coerce.date().optional(),gitBranchName:x.string().optional(),gitOriginUrl:x.string().optional(),gitCommitMessage:x.string().optional(),gitCommitAuthorName:x.string().optional(),projectName:x.string().optional(),relativeProjectDir:x.string().optional(),githubRepository:x.string().optional(),gitlabProjectPath:x.string().optional(),pipelineId:x.string().optional(),cliVersion:x.string().optional()});x.object({id:x.string()});var wee=x.object({status:x.nativeEnum(zt),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Af,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var x$e=x.object({runId:x.string(),healStatus:vf,healDetails:uh.optional()});x.object({updates:x$e.array()});var Ree=x.object({stepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),beforeStepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),afterStepsSnapshot:x.array(x.record(x.string(),x.unknown().optional())).optional(),runGroupId:x.string().optional(),testId:x.string(),testName:x.string(),resolvedBaseUrl:x.string().optional(),environmentName:x.string().optional(),labels:x.array(x.string()).optional(),cliVersion:x.string().optional(),trigger:x.nativeEnum(hl),schemaVersion:x.string().optional(),section:x.nativeEnum(tP).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Ds.optional()});x.object({id:x.string()});var _$e=uj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),Cee=_$e.array(),Iee=uj.pick({startedAt:true,finishedAt:true,updatedAt:true,results:true,beforeResults:true,afterResults:true,status:true,healStatus:true,healDetails:true,failureDetails:true,failureReason:true,failureRecoveryDetails:true,resolvedBaseUrl:true,environmentName:true,labels:true,cliVersion:true,resolvedInputs:true,attempts:true,flake:true,aiSettings:true,runAssertionResults:true}).partial();x.object({id:x.string()});var QP=x.object({run:Ja.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),xee=x.object({status:x.nativeEnum(zt),finishedAt:x.coerce.date().optional(),schemaVersion:x.string().optional().default("1.0.19"),results:x.record(x.string(),x.unknown().optional()).array().optional(),beforeResults:x.record(x.string(),x.unknown().optional()).array().optional(),afterResults:x.record(x.string(),x.unknown().optional()).array().optional()});x.object({screenshot:x.string(),contentType:x.enum(["image/jpeg","image/png"]).optional()});x.object({id:x.string(),screenshot:x.string(),contentType:x.enum(["image/jpeg","image/png"])});var _ee=x.object({key:x.string()}),Pee=x.object({orgId:x.string(),userId:x.string(),email:x.string().optional(),name:x.string().optional(),pylonEmailHash:x.string().optional(),selfServe:x.boolean().optional(),heardAboutAnswered:x.boolean().optional(),needsWorkspaceName:x.boolean().optional(),orgName:x.string().optional()}),Oee=x.object({blocked:x.boolean()}),kee=x.array(G6),Mee=x.record(x.string(),x.union([x.string(),x.boolean()]));x.object({workosAccessToken:x.string().min(1),organizationId:x.string().optional(),clientName:x.string().min(1).max(80).optional()});var Lee=x.object({apiKey:x.string(),apiKeyName:x.string(),organizationId:x.string(),user:x.object({id:x.string(),email:x.string().optional()}),selfServe:x.boolean().optional()}),Nee=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),P$e=80,O$e=x.string().trim().min(1).max(P$e);x.object({name:O$e});var k$e=["web","ios","android"];x.object({platforms:x.array(x.enum(k$e)),packageManager:x.enum(["npm","pnpm","yarn","bun"]),wizardVersion:x.string().min(1).max(40),cliVersions:x.object({momentic:x.string().max(40).optional(),momenticMobile:x.string().max(40).optional()}).optional(),firstRunIds:x.array(x.guid()).max(10).optional(),heardAboutSource:sj.optional(),heardAboutSourceOtherText:x.string().max(200).optional()});x.object({ok:x.literal(true)});x.object({paths:x.string().array(),env:x.string().optional(),urlOverride:x.string().optional(),customHeaders:x.record(x.string(),x.string()).optional()});var Dee=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});RX.array();x.object({runGroupIds:x.string().array()});var ZP=x.object({uploadUrl:x.string()});Gr.merge(DX);Gr.merge(BX);Gr.merge(FX);var eO=x.object({runId:x.string().optional().default(""),runGroupId:x.string().optional().default(""),envName:x.string().optional().default(""),platform:x.string().optional().default(""),testId:x.string().optional().default(""),testName:x.string().optional().default(""),suiteId:x.string().optional().default(""),suiteName:x.string().optional().default(""),isInteractive:x.boolean().optional().default(false),runner:x.nativeEnum(va).optional(),aiFeature:x.nativeEnum(bh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(wS).optional(),hasFixedTest:x.boolean().optional(),hasCannotFixTest:x.boolean().optional(),hasNoFixNeededTest:x.boolean().optional(),result:x.enum(["success","failure"]).optional(),creditsUsed:x.number().optional(),stepsExecuted:x.number().optional(),tokensUsed:x.number().optional(),aiCostUsd:x.number().nonnegative().optional(),[u8]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),hostedBrowserSecondsUsed:x.number().optional(),sessionMinutesUsed:x.number().nonnegative().optional(),labels:x.array(x.string()).optional()});x.object({orgId:x.string(),runId:x.string().optional(),testId:x.string().optional(),isInteractive:x.boolean().optional(),runner:x.nativeEnum(va).optional()});var M$e=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(Of),properties:eO});M$e.array();var Fee=$9.omit({steps:true}).extend({steps:x.array(x.record(x.string(),x.unknown().optional())).describe("unparsed ResolvedStep[]")});x.object({limit:x.number().min(1).max(10).optional(),page:x.number().min(1).optional(),start:Fn.optional(),end:Fn.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum(zt).optional()});var Bee=pX.array(),Uee=Ja.array(),tO=vh.extend({testId:Qn.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum(zt).optional(),label:x.string().array().optional(),start:Fn.optional(),end:Fn.optional(),quarantined:x.boolean().optional(),recovered:x.boolean().optional(),failureCategory:x.string().min(1).array().min(1).optional().describe("Effective built-in or custom failure category IDs. Manual classifications override automated classifications."),minAttempts:x.number().int().min(2).optional().describe("Minimum total attempt count, including the first attempt."),includeFailureDetails:x.boolean().optional(),skipRetentionFilter:x.boolean().optional()});tO.extend({orgId:x.string().optional(),testId:ui(Qn),status:ui(x.nativeEnum(zt)),gitBranchName:ui(x.string()),label:ui(x.string()),testName:x.string().optional(),trigger:ui(x.nativeEnum(hl)),executionType:ui(dh),cliVersion:ui(x.string()),githubRepository:ui(x.string()),gitlabProjectPath:ui(x.string()),environment:ui(x.string()),directory:ui(x.string()),failureCategory:ui(x.string()),exclude:ui(x.string()),healed:x.boolean().optional()});var L$e=Ja.omit({test:true}),zee=lH.extend({runs:L$e.array()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var jee=ZP.extend({id:x.string()}),N$e=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),D$e=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[N$e,D$e]);var Hee=x.object({runGroupId:x.guid()}),F$e=x.object({status:vf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),$ee=x.object({quarantined:x.object({testId:Qn,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:F$e.nullish().default(null)}).array()}),LH=vh.extend({limit:vh.shape.limit.describe("Max number of quarantined tests to return per page."),page:vh.shape.page.describe("Page number for pagination (1-based)."),quarantinedAtStart:x.string().pipe(x.coerce.date()).optional().describe("Include tests quarantined at or after this timestamp."),quarantinedAtEnd:x.string().pipe(x.coerce.date()).optional().describe("Include tests quarantined before this timestamp.")}),B$e=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Fn,finishedAt:Fn,failureReason:x.string().nullish(),healStatus:vf,healDetails:uh.nullish()}),Gee=lH.extend({quarantinedTests:x.array(x.object({testId:Qn,testName:x.string().nullish(),quarantinedAt:Fn,quarantineReason:x.string(),latestFailedRun:B$e.nullable()}))}),Vee=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:Qn,testName:x.string().optional(),reason:x.string()}).merge(Vee);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Vee);Gr.merge(e8);Gr.merge(t8);Gr.merge(o8);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Jj.optional(),jurisdiction:Fw.optional(),osVersion:x.nativeEnum(CS).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:f8.optional()});var Wee=x.object({name:x.string(),apiUrl:x.string(),webRtcUrl:x.string(),adbUrl:x.string(),token:x.string(),apkDownloadUrl:x.string().optional(),playwrightServerUrl:x.string().optional(),region:x.string().optional(),resolvedTag:x.string().optional(),sessionExpiresAt:x.number().optional()});x.object({appToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Jj.optional(),jurisdiction:Fw.optional(),osVersion:x.nativeEnum(IP).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var qee=x.object({id:x.string(),apiUrl:x.string(),webRtcUrl:x.string(),wdaUrl:x.string(),token:x.string(),appDownloadUrl:x.string().optional(),appMd5:x.string().optional(),region:x.string().optional(),resolvedTag:x.string().optional(),sessionExpiresAt:x.number().optional()});x.object({channel:x.string().trim().min(1,"channel must be a non-empty string"),tag:x.string().trim().min(1,"tag must be a non-empty string").refine(e=>e.toLowerCase()!==tw,{message:`"${tw}" is a reserved tag and cannot be used when uploading an asset.`}).optional(),alias:x.string().trim().min(1,"alias must be a non-empty string").refine(e=>e.toLowerCase()!==tw,{message:`"${tw}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Kee=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),U$e=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),z$e=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),tag:x.string()}),Yee=x.object({assets:x.array(U$e),aliases:x.array(z$e).default([])}),Jee=x.object({downloadUrl:x.string()}),oO=(o=>(o.PLAYWRIGHT="PLAYWRIGHT",o.CDP="CDP",o))(oO||{}),j$e=x.nativeEnum(oO),Xee=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:Xee.optional(),envName:x.string().optional(),moSessionId:x.string().min(1).max(128).optional(),runAttemptId:x.guid().optional(),runGroupId:x.guid().optional(),testId:x.string().optional(),testName:x.string().optional(),runId:x.guid().optional(),attemptedProviders:x.array(LP).optional(),localhostTunnel:x.boolean().optional()});var H$e=x.object({access:Xee.optional(),allocationRequestId:x.guid(),envName:x.string().optional(),runAttemptId:x.guid(),runGroupId:x.guid().optional(),runId:x.guid(),testId:x.string().min(1).max(128),testName:x.string().optional()});H$e.extend({attemptedProviders:x.array(LP).max(Object.values(Qw).length).default([])}).strict();var $$e=x.discriminatedUnion("mode",[x.object({mode:x.literal("playwright")}).strict(),x.object({mode:x.literal("private-service"),connectorId:x.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),serviceIds:x.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).optional()}).strict()]),Qee=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),G$e=Qee.extend({network:$$e}).strict(),Zee=x.union([G$e,Qee.strict()]),V$e=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),ete=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:j$e.optional(),provider:LP.optional(),operatingSystem:H9.optional(),tunnel:V$e.optional()});var W$e=200,q$e=2e3,oR=z.string().trim().min(1).max(W$e),wh=z.string().trim().min(1).max(q$e),zS=z.array(wh),K$e=z.enum(["verified","issues_found","blocked"]),nO=z.object({name:oR,summary:wh,preconditions:zS,outline:zS,acceptanceCriteria:zS}),Y$e=z.object({startedAt:z.number(),finishedAt:z.number(),agentId:z.string().optional(),windowId:z.string().optional(),artifactId:z.string().optional()}),rO=z.object({name:oR,summary:wh,expected:wh,actual:wh,reproSteps:zS,recording:Y$e.nullish()}),ote=z.object({name:oR.describe("The name of the bug to retract."),reason:z.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),NH=z.enum(["checked","failed","partial","out_of_scope"]),DH=z.object({control:oR,status:NH,result:wh}),FH=z.object({status:K$e,summary:wh,verified:zS,gaps:zS});z.object({entry:nO});z.object({entry:rO});z.object({entry:DH});z.object({report:FH});z.object({entries:z.array(nO)});z.object({entries:z.array(rO)});z.object({entries:z.array(DH)});z.object({report:FH.nullable()});var BH=z.object({agent:z.string().nullable(),conversationId:z.string().nullable(),createdAt:z.iso.datetime(),updatedAt:z.iso.datetime()}),J$e=nO.extend({...BH.shape,blockedReason:z.string().nullable()}),X$e=rO.extend({...BH.shape,investigatorAgent:z.string().nullable(),investigatorConversationId:z.string().nullable(),reviewedAt:z.iso.datetime().nullable()});DH.extend({agent:z.string(),conversationId:z.string()});var Q$e=FH.extend({testCaseName:z.string().nullable(),...BH.shape}),UH=z.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z.object({bugName:z.string(),status:UH,knowledgeItemId:z.string().nullable(),updatedByUserId:z.string().nullable(),updatedAt:z.iso.datetime()});z.object({chatId:z.string().min(1),bugName:oR,status:UH,reviewedKnowledgeItemIds:z.array(z.string().min(1)).optional(),reviewedKnowledgeItemStatus:zJ.optional(),linkedKnowledgeItemId:z.string().min(1).nullable().optional()});z.object({entries:z.array(J$e)});z.object({entries:z.array(X$e)});z.object({entries:z.array(Q$e)});var tte=z.object({testCases:z.number(),issuesFound:z.number(),blocked:z.number(),bugs:z.number(),bugsByTriage:z.record(UH,z.number())});z.union([tte.extend({passed:z.number()}),tte.extend({verified:z.number()}).transform(({verified:e,...t})=>({...t,passed:e}))]);z.object({entry:nO});z.object({retracted:z.boolean(),conflict:z.string().optional()});z.object({entry:rO});z.object({reason:wh});var nte=z.object({id:z.string(),createdAt:z.coerce.date(),createdBy:z.string(),organizationId:z.string(),name:z.string(),description:z.string().nullish(),enabled:z.boolean(),schemaVersion:z.string().describe("Schema version for steps"),parameters:z.string().array().nullish().describe("Parameter list"),parameterEnums:z.record(z.string(),z.string().array()).nullish(),defaultParameters:z.record(z.string(),z.string()).nullish(),defaultCacheKey:z.string().nullish(),defaultCacheTtl:z.number().nullish(),defaultCacheAllInvocations:z.boolean().nullish(),autoAuth:z.boolean().nullish(),defaultRetries:z.int().min(0).nullish(),advanced:az.nullish()});nte.extend({steps:z.lazy(()=>so.array())});var rte=5*60*1e3,nR=Jn.extend(nte.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var Z$e="org_01HMJTX4GT1KG94KZRCT8MZ6YB",e1e="org_01HMSCJQBCCG51M2ZF65YC5B8W",t1e="org_01JPR6MGFQSHF3W234R3XJDPMB",o1e=[Z$e,e1e,t1e];function zH(e){return o1e.includes(e)}var ite=z.object({id:z.string(),title:z.string(),body:z.string(),imageUrl:z.string().nullable(),videoUrl:z.string().nullable(),ctaUrl:z.string().nullable(),publishedAt:z.string()});z.object({update:ite.nullable()});var ate=z.object({updates:ite.array()});z.object({repositoriesIndexed:z.boolean(),indexingInProgress:z.boolean(),indexesOutdated:z.boolean()});var ste=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(ste||{}),lte=(s=>(s.Success="success",s.Failure="failure",s.Neutral="neutral",s.Cancelled="cancelled",s.Skipped="skipped",s.TimedOut="timed_out",s.ActionRequired="action_required",s))(lte||{});z.object({name:z.string(),status:z.enum(ste),conclusion:z.enum(lte).nullable()});var rR=z.object({sha:z.string(),parentShas:z.array(z.string()).optional(),message:z.string(),author:z.object({name:z.string().optional(),email:z.string().optional(),date:z.coerce.date().optional()}),committer:z.object({name:z.string().optional(),email:z.string().optional(),date:z.coerce.date().optional()})}),jH=z.object({mergedBranch:z.string().optional()});var cte=z.object({orgId:z.string(),cacheKeys:z.string().array()});z.object({keyParams:cte,clientMetadata:z.string(),lockAcquisitionTimeoutMs:z.number().optional()});var ute=z.object({acquired:z.boolean(),acquiredByMetadata:z.string(),keyPrefix:z.string()});z.object({keyPrefix:z.string(),result:z.string(),ttlMs:z.number()});z.union([z.object({keyPrefix:z.string()}),cte]);var n1e=z.object({remainingTtlMs:z.number(),value:z.string().nullish()});z.object({results:z.record(z.string(),n1e),activeLocks:z.string().array()});var dte=0,mte=5*60*1e3;var pte=z.object({cacheEntryId:z.string().uuid(),category:z.string().min(1)}),hte=lf.extend({cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),testId:z.string().min(1),executionFailureReason:z.string().min(1).optional(),classification:BU,healDetails:eJ.optional()}),gte=hte.extend({isManualOverride:z.boolean().optional(),overriddenBy:pte.optional(),manualOverrideOf:pte.optional(),createdAt:z.coerce.date(),updatedAt:z.coerce.date()});function HH(e){return !e.branchName&&rE(e.classification.category)}lf.extend({mainBranchName:z.string().min(1).optional()});var fte=gte.array();z.object({entries:hte.array()});lf.extend({runId:z.string().min(1),cacheEntryId:z.string().uuid(),category:z.string().min(1)});z.object({status:z.enum(["evicted","not_found","run_mismatch"]),entry:gte.optional()});z.object({runId:z.string().min(1),environment:z.string().min(1).optional(),status:z.enum(["PASSED","FAILED"])});z.object({environment:z.string().min(1).optional()});var iO=z.object({skip:z.boolean(),failed:z.number(),total:z.number()}),r1e=.8;function yte({failed:e,completed:t,minCompletedRuns:o}){return t>=o&&e/t>=r1e}function jS(e){if(e.startsWith("https://api"))return e.replace("https://api","https://app");if(e.startsWith("http://localhost:8000"))return e.replace("http://localhost:8000","http://localhost:3000");throw new Error(`Unknown Momentic app server URL pattern: ${e}`)}var i1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()),hash:z.string()}),bte=z.record(z.string(),z.unknown().optional());z.object({newSvgs:z.array(i1e),metadata:bte.optional()});var a1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()).nullish(),hash:z.string(),description:z.string().nullish(),metadata:bte.nullish()}),Ste=z.record(z.string().describe("icon hash"),a1e);var $H="metadata.json",GH="test.yaml",Tte=".snapshot.zip",VH=Wn.extend(dl.shape),s1e=z.object({envName:z.string().optional(),baseUrl:z.string(),variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:KE.optional()}),vte=z.object({browser:Hc.optional(),ai:Ds.optional(),advanced:sw.optional(),retries:z.number().optional()});z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:s1e,config:vte});var Ate=z.object({variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:KE.optional()}),l1e=z.object({envName:z.string().optional(),baseUrl:z.string(),encryptedSecrets:z.string()}),Ete=z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:l1e,config:vte});var c1e=z.looseObject({type:z.number(),data:z.record(z.string(),z.unknown()),timestamp:z.number()}),wte=z.custom(e=>c1e.safeParse(e).success);z.discriminatedUnion("kind",[z.object({kind:z.literal("agent-action"),tool:z.string(),toolCallId:z.string().optional(),detail:z.string().optional(),input:z.unknown().optional()}),z.object({kind:z.literal("step"),phase:z.enum(["start","pass","fail"]),name:z.string()}),z.object({kind:z.literal("window"),phase:z.enum(["start","stop"]),windowId:z.string()}),z.object({kind:z.literal("bug-marker"),title:z.string()}),z.object({kind:z.literal("control"),control:z.string(),status:NH}),z.object({kind:z.literal("network-error"),method:z.string(),url:z.string(),status:z.number()})]);z.looseObject({level:z.string(),payload:z.array(z.string()),trace:z.array(z.string()).optional()});function Rte(e){let t;try{t=JSON.parse(e);}catch(o){return `The schema is not valid JSON. ${o}`}try{validator(t);}catch(o){return `The schema is not a valid JSON schema. ${o}`}}var Cte=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,o])=>t.trim()&&o.trim())));};var aO=class{async prepareGoldenScreenshotForComparison(t,o,n){return n}};var sO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function d1e(e){return e.map(t=>({...t,environment:void 0}))}function WH(e,t){return t?e:d1e(e)}var KH="browser-crash-dump.zip",qH=class{loggerBindings;attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}storeTraceAsset(){}async finish(){}async startSubSteps(){return new iR}},iR=class{async getScreenshot(){}async getHtmlSnapshot(){}async startStep(){return new qH}flushResults(t){}};var mt="metadata.json",rs="assets",Rn="runs",YH=z.object({type:z.literal("explore"),id:z.string(),cliVersion:z.string().optional(),startedAt:z.string(),finishedAt:z.string(),baseSha:z.string(),headSha:z.string(),ciProvider:z.string().optional(),pipelineId:z.string().optional(),gitMainBranch:z.string().optional(),gitCommitSha:z.string().optional(),gitCommitShaShort:z.string().optional(),gitBranchName:z.string().optional(),gitOriginUrl:z.string().optional(),gitCommitMessage:z.string().optional(),gitCommitAuthorName:z.string().optional(),githubRepository:z.string().optional(),gitlabProjectPath:z.string().optional(),pullRequestUrl:z.string().optional(),result:z.unknown(),bugs:z.array(z.unknown()),uxNits:z.array(z.unknown()).default([]),writtenPaths:z.array(z.string()),videos:z.array(z.string()),failure:z.unknown().optional()});z.object({exploreRunId:z.guid(),metadata:YH,videoAssets:z.string().array().optional()});var Ite=z.object({uploadUrl:z.string(),videoUploadUrls:z.record(z.string(),z.string()).optional()}),m1e=z.object({step:lo,status:z.enum(Ft),startedAt:z.coerce.date(),finishedAt:z.coerce.date().optional(),healMetadata:z.object({healType:z.enum(ew).or(z.literal("AI")),healedAt:z.coerce.date()}).optional(),beforeSnapshotId:z.guid().optional(),afterSnapshotId:z.guid().optional(),message:z.string().optional()}),p1e=m1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});p1e.extend({step:z.unknown().optional()});var JH=z.object({avdId:z.string().optional(),channel:z.string().optional(),tag:z.string().optional(),region:z.string().optional(),osVersion:y8.optional()}),xte="1.0.0",_te=xee.extend({id:z.guid().optional(),startedAt:z.coerce.date(),runAttemptSchemaVersion:z.string().optional(),schemaVersion:z.string().optional().default("1.0.19"),results:z.record(z.string(),z.unknown().optional()).array().optional(),beforeResults:z.record(z.string(),z.unknown().optional()).array().optional(),afterResults:z.record(z.string(),z.unknown().optional()).array().optional(),assetDetails:JH.optional(),viewport:Rm.optional(),activeVideos:z.array(z.object({videoName:z.string(),timestamp:z.coerce.date()})).optional()}),aR=_te.extend({assetDetails:JH.optional(),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});_te.extend(Kz.shape);var Pte=aR.extend(Kz.shape),h1e=z.object({results:z.array(Qa),beforeResults:z.array(Qa).optional(),afterResults:z.array(Qa).optional()});aR.extend(h1e.shape);var g1e=z.object({results:z.array(Za),beforeResults:z.array(Za).optional(),afterResults:z.array(Za).optional()});aR.extend(g1e.shape);var Ote=Iee.merge(Ree).extend({executionType:dh.optional().default("WEB"),testId:Qn,testDescription:z.string().optional(),directory:z.string().optional(),runGroupId:z.guid(),status:z.enum(zt),healStatus:vf,testBundleHash:z.string().optional(),startedAt:z.coerce.date(),schemaVersion:z.string().nullish(),attempts:z.number(),failureRecoveryDetails:z.object({attempts:z.number()}).optional(),aiSettings:Ds.optional(),avgCpuUsage:z.number().optional(),avgMemoryUsage:z.number().optional()}),f1e=Ote.extend(JH.shape),Rh=Ote.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});f1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var lO=1e4,y1e=Eee.merge(wee).extend({id:z.guid().optional(),startedAt:z.coerce.date(),cliVersion:z.string(),labels:z.string().array().optional().default([]),suiteName:z.string().optional(),ciProvider:z.string().optional(),gitMainBranch:z.string().optional(),ai:Ds.optional(),browser:Hc.optional(),sourceRunGroupIds:z.array(z.guid()).max(lO).optional(),mergedAt:z.coerce.date().optional(),aiSelect:z.union([cw.transform(e=>[e]),z.array(cw)]).optional()}),ic=y1e.extend({healRiskSummary:Af.optional(),updatedAt:z.coerce.date().optional().transform(e=>e??new Date),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var b1e=new Set(["AWAIT_LISTENER","REGISTER_REQUEST_LISTENER","GET_RECORDED_REQUESTS","MOCK_ROUTE","REMOVE_ROUTE_MOCK","SCROLL_DOWN","SCROLL_UP","SCROLL_LEFT","SCROLL_RIGHT","VISUAL_DIFF","WAIT","SET_HEADER","OFFLINE_MODE"]),S1e=new Set(["MODULE","RESOLVED_MODULE"]);function kte(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Mte(e){return S1e.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!b1e.has(e.command.type)}var Lte="progress.json",Nte="1.0.0",T1e=z.object({runId:z.string(),testId:z.string().optional(),testName:z.string().optional(),directory:z.string().optional(),status:z.nativeEnum(zt),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date()});z.object({schemaVersion:z.string(),runGroupId:z.string(),status:z.nativeEnum(zt),totalRuns:z.number(),completedRuns:z.number(),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date(),runs:T1e.array()});function Dte(e,t){let o=mn__default.relative(t,e);return o!==""&&o!==".."&&!o.startsWith(`..${mn__default.sep}`)&&!mn__default.isAbsolute(o)}function Fte(e){try{return existsSync(e)&&statSync(e).isDirectory()}catch(t){return C.error({err:t},`Error reading path ${e} during directory existence check.`),false}}var Bte="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",HS="https://us-west.metrics.momentic.ai",$S="c60c6a0f-60da-41a7-a61b-07969a0aa303",is=!!process.env.CI||!!process.env.GITHUB_ACTIONS||!!process.env.GITHUB_RUN_ID||!!process.env.GITLAB_CI||!!process.env.CI_COMMIT_SHA||!!process.env.JENKINS_URL||!!process.env.BUILD_NUMBER||!!process.env.JENKINS_HOME||!!process.env.CIRCLECI||!!process.env.CIRCLE_BUILD_NUM||!!process.env.TRAVIS||!!process.env.TRAVIS_BUILD_NUMBER||!!process.env.BITBUCKET_BUILD_NUMBER||!!process.env.BITBUCKET_COMMIT||!!process.env.CODEBUILD_BUILD_ID||!!process.env.TF_BUILD||!!process.env.BUILD_BUILDID||!!process.env.AGENT_ID||!!process.env.BUILDER_SA_EMAIL||!!process.env.HEROKU_TEST_RUN_ID||!!process.env.CI_NODE_INDEX||!!process.env.TEAMCITY_VERSION||!!process.env.BUILD_VCS_NUMBER||!!process.env.BUILDKITE||!!process.env.BUILDKITE_BUILD_NUMBER||!!process.env.APPVEYOR||!!process.env.APPVEYOR_BUILD_NUMBER||!!process.env.DRONE||!!process.env.DRONE_BUILD_NUMBER||!!process.env.SHIPPABLE||!!process.env.BUILD_URL||!!process.env.SEMAPHORE||!!process.env.SEMAPHORE_EXECUTABLE_UUID||!!process.env.WOODPECKER||!!process.env.CI_BUILD_NUMBER||!!process.env.WERCKER_MAIN_PIPELINE_STARTED||!!process.env.BUDDY_EXECUTION_ID;var x1e=new Set(["exit","quit"]),jte=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),_1e=is||jte||!process.stdin.isTTY;async function Kr(e){if(is||jte)return true;if(!process.stdin.isTTY)throw new Error(`Cannot ask for confirmation: "${e}" No interactive terminal is available. Re-run with --yes or in a TTY.`);return await C.flush(),await new Promise(o=>setTimeout(o,100)),await confirm({message:e})}async function QH(e){let t=dirname(e);return Fte(t)?existsSync(e)?Kr(`File '${Ute(e)}' already exists. Overwrite existing content?`):true:await Kr(`Directory '${Ute(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function Ute(e){return e.replace(/(\s+)/g,"\\$1")}async function Hte(e,t){return _1e?t:(await input({message:e,default:t})).trim()||t}async function ZH(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!x1e.has(e.toLowerCase()))return e}var GS=new Map,Gte="Log throttle exceeded",j1e=100,H1e=5e3,$1e=2e4,G1e=N1e(global.fetch,{retries:2,retryOn:function(e,t,o){return !!(t!==null||o&&o.status>=500)},retryDelay:function(e){return Math.pow(2,e)*500}});function V1e({app:e,hostname:t,environment:o,serviceVersion:n}){return {host:t,env:o,[ATTR_SERVICE_NAME]:e,...n?{[ATTR_SERVICE_VERSION]:n}:{}}}var W1e=`${HS}/logs/json`,e$=class{constructor(t,o){this.flushIntervalMs=t;this.maxBatchSize=o;}records=[];flushTimer;flushRequested=false;flushPromise;push(t){if(this.records.push(t),this.records.length>=this.maxBatchSize){this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.flush();return}this.scheduleFlush();}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flush();},this.flushIntervalMs));}async flush(){this.flushRequested=true,this.flushPromise??=Promise.resolve().then(async()=>{try{for(;this.flushRequested;){this.flushRequested=!1;let t=this.records;this.records=[];for(let o=0;o<t.length;o+=this.maxBatchSize)await this.sendBatch(t.slice(o,o+this.maxBatchSize));}}finally{this.flushPromise=void 0;}}),await this.flushPromise;}async sendBatch(t){try{let o=await G1e(W1e,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Bte,"x-momentic-metrics-api-key":$S},body:Gc(t),signal:AbortSignal.timeout($1e)});if(!o.ok)throw new Error(`Got error status (${o.statusText}) from SigNoz`)}catch{}}},t$=class e{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=false;lastWindowStart=Date.now();flushIntervalMs;maxBatchSize;buffer;constructor({bindings:t,hostname:o,disableConsoleLogs:n,flushIntervalMs:r,maxBatchSize:i,buffer:a}){this.hostname=o??Nm.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=a??new e$(this.flushIntervalMs,this.maxBatchSize);let s={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=$te(s);}child(t){return new e({bindings:{...this.bindingAttributes,...t},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize,buffer:this.buffer})}async flush(){await this.buffer.flush(),this.disableConsoleLogs||this.consoleLogger.flush();}shouldAllowLog(t){if(t===Gte)return true;let o=Date.now();return o-this.lastWindowStart>H1e&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,Gte),this.droppedLogsInWindow=false,this.lastWindowStart=o),this.logsInCurrentWindow<j1e?(this.logsInCurrentWindow++,true):(this.droppedLogsInWindow=true,false)}log(t,o,n,...r){try{this.logHelper(t,o,n,...r);}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`);}}logHelper(t,o,n,...r){if(aw[t]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof o=="string"&&!n&&(o={message:o}),typeof o=="object"&&o&&"err"in o&&o.err instanceof Error&&(o.err=U1e.err(o.err));let i={...this.bindingAttributes,...o&&typeof o=="object"?o:{},...r.length>0?{args:r}:{}},a=V1e({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.58.1"}),s=q1e();this.disableConsoleLogs||this.consoleLogger[t]({...i,...s??{}},n,...r);let l={timestamp:Math.round(Date.now()*1e6),...s??{},severity_text:t.toUpperCase(),resources:a,attributes:{},body:oX({message:n||"",...i})};this.buffer.push(l);}setApp(t){let o=this.bindingAttributes.app;this.bindingAttributes.app=t,GS.set("app",this),GS.delete(o);}debug(t,o,...n){this.log("debug",t,o,...n);}info(t,o,...n){this.log("info",t,o,...n);}warn(t,o,...n){this.log("warn",t,o,...n);}error(t,o,...n){this.log("error",t,o,...n);}bindings(){return this.bindingAttributes}addBinding(t,o){this.bindingAttributes[t]=o;}setMinLevel(t){typeof t=="number"?(this.minLevelValue=t,this.consoleLogger.level=nX[t]):(this.minLevelValue=aw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},VS=({app:e,hostname:t,disableConsoleLogs:o})=>(GS.has(e)||GS.set(e,new t$({bindings:{app:e},hostname:t,disableConsoleLogs:o})),GS.get(e));function q1e(){let e=trace.getSpan(context.active());if(!e)return;let t=e.spanContext();if(isSpanContextValid(t))return {trace_id:t.traceId,span_id:t.spanId,trace_flags:t.traceFlags}}async function cO(){await Promise.all([...GS.values()].map(e=>e.flush()));}var zs=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Wte=e=>{let t=e.reason===void 0?new DOMException("This operation was aborted.","AbortError"):e.reason;return t instanceof Error?t:new DOMException(t,"AbortError")};function ge(e,t){let{milliseconds:o,fallback:n,message:r,customTimers:i={setTimeout,clearTimeout}}=t,a;if(typeof o!="number"||Math.sign(o)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${o}\``);let s=new Error().stack;return new Promise((l,c)=>{let u,d=()=>{i.clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",u);};if(t.signal){let{signal:p}=t;if(p.aborted)return Promise.resolve(e).catch(()=>{}),c(Wte(p));u=()=>{d(),c(Wte(p));},p.addEventListener("abort",u,{once:true});}let m=()=>{if(t.signal&&t.signal.removeEventListener("abort",u),n)try{l(n());}catch(p){c(p);}else {if(typeof e.cancel=="function"&&Promise.resolve().then(()=>e.cancel()).catch(()=>{}),r instanceof Error){c(r);return}let p=new zs(r??`Promise timed out after ${o}ms`);p.callSiteStack=s,c(p);}};o<1/0&&(a=i.setTimeout(m,o)),Promise.resolve(e).then(p=>{d(),l(p);}).catch(p=>{d(),c(p);});})}function ac({signal:e,timeoutMs:t}){let o=AbortSignal.timeout(t);return e?AbortSignal.any([e,o]):o}var uO="organization";function dO(e){let t=new PostHog(e.writeKey,{host:e.host,...e.flushImmediately?{flushAt:1,flushInterval:0}:{}}),o=e.platform,n=(l,c,u)=>{let{type:d,...m}=l;t.capture({distinctId:c??u??randomUUID(),event:d,...u&&{groups:{[uO]:u}},properties:{platform:o,user_id:c??void 0,org_id:u??void 0,...m,organizationId:u??void 0,...c==null&&u==null&&{$process_person_profile:false}}});},r=({orgId:l,properties:c})=>{t.groupIdentify({groupType:uO,groupKey:l,properties:c});},i=({userId:l,properties:c})=>{Object.values(c).some(d=>d!=null&&d!=="")&&t.identify({distinctId:l,properties:c});},a=()=>t.shutdown();if(e.identity==="stashed"){let l=null;return {shutdownAnalytics:a,groupIdentifyOrg:r,setAnalyticsIdentity:u=>{l=u,e.onIdentify?.(u),i({userId:u.userId,properties:{email:u.email,...u.selfServe!==void 0?{self_serve:u.selfServe}:{}}});},captureEvent:u=>n(u,l?.userId??null,l?.orgId??null)}}return {shutdownAnalytics:a,groupIdentifyOrg:r,identifyUser:i,captureEvent:(l,{userId:c,orgId:u})=>n(l,c,u),captureBillingEvent:(l,{userId:c,orgId:u})=>n(l,c,u)}}async function qte(e,t,o){let n,r=0,i=3,a,s;for(;r<i;)try{let l=await ge(e.getAllFlagsAndPayloads(o??t,{personProperties:{organizationId:t},groups:{[uO]:t}}),{milliseconds:5e3});a=l.featureFlags||{},s=l.featureFlagPayloads||{};break}catch(l){n=l,r++,await new Promise(c=>setTimeout(c,100*r));}if(a&&s)return {flags:a,payloads:s};throw n}var mO=class e extends Mf{constructor(o,n,r,i,a){super(i,a);this.client=o;this.orgId=n;this.userId=r;}static createClient(){return new PostHog("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://p.momentic.ai"})}static async init(o,n){let r=e.createClient(),{flags:i,payloads:a}=await qte(r,o,n);return new e(r,o,n,i,a)}static fromCached(o,n,r,i){return new e(e.createClient(),o,n,r,i)}async refresh(){let{flags:o,payloads:n}=await qte(this.client,this.orgId,this.userId);this.flags=o,this.payloads=n;}};var pO="/proc",Kte="/sys/fs/cgroup",Q1e="/sys/fs/cgroup/memory",Yte=8,Z1e=1024;function gO(){let e;return ()=>{if(process.platform!=="linux")return;let t=rGe();if(!t)return;let o=iGe({current:t,previous:e});return e=t,o}}function Jte(){if(process.platform!=="linux")return;let e=o$(`${Kte}/memory.stat`);if(e){let o=o$(`${Kte}/memory.events`);return {anonymousBytes:e.anon,fileCacheBytes:e.file,kernelBytes:e.kernel,slabBytes:e.slab,sharedMemoryBytes:e.shmem,pageTablesBytes:e.pagetables,activeAnonymousBytes:e.active_anon,inactiveAnonymousBytes:e.inactive_anon,activeFileBytes:e.active_file,inactiveFileBytes:e.inactive_file,events:o?{low:o.low,high:o.high,max:o.max,oom:o.oom,oomKill:o.oom_kill,oomGroupKill:o.oom_group_kill}:void 0}}let t=o$(`${Q1e}/memory.stat`);if(t)return {anonymousBytes:t.total_rss??t.rss,fileCacheBytes:t.total_cache??t.cache,slabBytes:t.total_slab??t.slab,sharedMemoryBytes:t.total_shmem??t.shmem,pageTablesBytes:t.total_pagetables??t.pagetables,activeAnonymousBytes:t.total_active_anon??t.active_anon,inactiveAnonymousBytes:t.total_inactive_anon??t.inactive_anon,activeFileBytes:t.total_active_file??t.active_file,inactiveFileBytes:t.total_inactive_file??t.inactive_file}}function eGe(e){let t={};for(let o of e.split(`
|
|
181
181
|
`)){let[n,r]=o.trim().split(/\s+/,2);if(!n||!r)continue;let i=Number.parseInt(r,10);Number.isFinite(i)&&(t[n]=i);}return t}function tGe(e,t){let o,n,r;for(let i of t.split(`
|
|
182
182
|
`)){let a=i.indexOf(":");if(a===-1)continue;let s=i.slice(0,a),l=i.slice(a+1).trim();if(s==="Name"&&(o=l),s==="PPid"&&(n=Number.parseInt(l,10)),s==="VmRSS"){let c=Number.parseInt(l,10);Number.isFinite(c)&&(r=c*Z1e);}}if(!(!o||n===void 0||r===void 0))return {pid:e,parentPid:n,name:o,rssBytes:r}}function oGe(e){let t=e.lastIndexOf(")");if(t===-1)return;let o=e.slice(t+1).trim().split(/\s+/),n=Number.parseInt(o[11]??"",10),r=Number.parseInt(o[12]??"",10);if(!(!Number.isFinite(n)||!Number.isFinite(r)))return n+r}function nGe(e){let t=e.split(`
|
|
183
|
-
`).find(n=>n.startsWith("cpu "));if(!t)return;let o=t.trim().split(/\s+/).slice(1).slice(0,8).map(n=>Number.parseInt(n,10));if(!(o.length===0||o.some(n=>!Number.isFinite(n))))return o.reduce((n,r)=>n+r,0)}function o$(e){try{return eGe(readFileSync(e,"utf8"))}catch{return}}function rGe(){let e;try{e=nGe(readFileSync(`${pO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,o;try{o=readdirSync(pO);}catch{return}for(let n of o){if(!/^\d+$/.test(n))continue;let r=Number.parseInt(n,10);try{let i=tGe(r,readFileSync(`${pO}/${n}/status`,"utf8")),a=oGe(readFileSync(`${pO}/${n}/stat`,"utf8"));if(!i||a===void 0)continue;t.set(r,{...i,cpuTicks:a});}catch{}}return {totalTicks:e,processes:t}}function iGe({current:e,previous:t}){let o=t?e.totalTicks-t.totalTicks:void 0,n=aGe(e.processes),r=new Map,i=0,a=0,s=0,l=false;for(let u of e.processes.values()){i+=u.rssBytes;let d=t?.processes.get(u.pid),m=d?u.cpuTicks-d.cpuTicks:void 0,p=m!==void 0&&m>=0&&o!==void 0&&o>0?m/o*100:void 0,h=r.get(u.name)??{name:u.name,processCount:0,rssBytes:0};h.processCount++,h.rssBytes+=u.rssBytes,p!==void 0&&(h.cpuPercentage=(h.cpuPercentage??0)+p),r.set(u.name,h),n.has(u.pid)&&(a+=u.rssBytes,p!==void 0&&(s+=p,l=true));}let c=[...r.values()];return {visibleProcessCount:e.processes.size,visibleProcessRssBytes:i,currentProcessTreeCount:n.size,currentProcessTreeRssBytes:a,currentProcessTreeCpuPercentage:l?s:void 0,topMemoryProcessGroups:[...c].sort((u,d)=>d.rssBytes-u.rssBytes).slice(0,Yte),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,Yte)}}function aGe(e){let t=new Set;if(!e.has(process.pid))return t;t.add(process.pid);let o=true;for(;o;){o=false;for(let n of e.values())t.has(n.pid)||!t.has(n.parentPid)||(t.add(n.pid),o=true);}return t}var cGe=2e3,uGe=2e4,dGe=.1,mGe=70,pGe=.8,Uf=e=>Number.parseInt(e,10),n$=e=>readFileSync(e,"utf8").trim(),WS=e=>Uf(n$(e));function eoe({summary:e,detailedSnapshots:t}){let o={"momentic.resource.samples":e.samples,"momentic.resource.low_memory_samples":e.lowMemorySamples,"momentic.resource.high_cpu_samples":e.highCpuSamples,"momentic.resource.high_heap_samples":e.highHeapSamples,"momentic.resource.min_free_memory_ratio":e.minFreeMemoryRatio,"momentic.resource.max_cpu_percentage":e.maxCpuPercentage,"momentic.resource.max_heap_usage_ratio":e.maxHeapUsageRatio,"momentic.resource.max_memory_used_bytes":e.maxMemoryUsedBytes,"momentic.resource.max_current_process_tree_rss_bytes":e.maxCurrentProcessTreeRssBytes,"momentic.resource.max_visible_process_rss_bytes":e.maxVisibleProcessRssBytes,"momentic.resource.detailed_snapshots":t};if(!t||!e.peakMemoryDetails)return o;let n=e.peakMemoryDetails.cgroupMemory,r=e.peakMemoryDetails.processes,i={"momentic.resource.peak_cgroup_anonymous_bytes":n?.anonymousBytes,"momentic.resource.peak_cgroup_file_cache_bytes":n?.fileCacheBytes,"momentic.resource.peak_cgroup_kernel_bytes":n?.kernelBytes,"momentic.resource.peak_cgroup_slab_bytes":n?.slabBytes,"momentic.resource.peak_cgroup_shared_memory_bytes":n?.sharedMemoryBytes,"momentic.resource.peak_cgroup_page_tables_bytes":n?.pageTablesBytes,"momentic.resource.peak_cgroup_oom_events":n?.events?.oom,"momentic.resource.peak_cgroup_oom_kill_events":n?.events?.oomKill,"momentic.resource.peak_cgroup_oom_group_kill_events":n?.events?.oomGroupKill};for(let[s,l]of Object.entries(i))l!==void 0&&(o[s]=l);o["momentic.resource.peak_detailed_memory_used_bytes"]=e.peakDetailedMemoryUsedBytes,r&&(o["momentic.resource.peak_memory_process_groups"]=JSON.stringify(r.topMemoryProcessGroups));let a=e.peakCpuDetails?.processes;return a&&(o["momentic.resource.peak_cpu_process_groups"]=JSON.stringify(a.topCpuProcessGroups),a.currentProcessTreeCpuPercentage!==void 0&&(o["momentic.resource.peak_current_process_tree_cpu_percentage"]=a.currentProcessTreeCpuPercentage)),o}var sR={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function toe(){return {...sR}}var fO=Nm.platform(),hGe=Nm.cpus().map(e=>({model:e.model,speed:e.speed})).reduce((e,t)=>(e[t.model]={speed:t.speed},e.totalCores=(e.totalCores??0)+1,e),{});function Xte(e=Date.now()){let t=Nm.cpus(),o={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let n of t)o.user+=n.times.user,o.nice+=n.times.nice,o.sys+=n.times.sys,o.idle+=n.times.idle,o.irq+=n.times.irq;return o.total=o.user+o.nice+o.sys+o.idle+o.irq,o}function gGe(e,t){let o={user:t.user-e.user,nice:t.nice-e.nice,sys:t.sys-e.sys,idle:t.idle-e.idle,irq:t.irq-e.irq,total:t.total-e.total};return o.total<=0?null:{measurementTime:t.measurementTime,intervalMs:t.measurementTime-e.measurementTime,user:o.user/o.total*100,nice:o.nice/o.total*100,sys:o.sys/o.total*100,idle:o.idle/o.total*100,irq:o.irq/o.total*100,total:100-o.idle/o.total*100}}function yO(){let e=Xte();return ()=>{let t=Xte(),o=gGe(e,t);return e=t,o}}function Qte(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Uf(t[1])}catch{}try{let e=WS("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function fGe(){try{let t=n$("/sys/fs/cgroup/cpu.max").split(" "),o=t[0],n=t[1];return !o||!n||o==="max"?null:Uf(o)/Uf(n)}catch{}try{let e=WS("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=WS("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function bO(){if(fO!=="linux")return null;let e=Qte();if(e===null)return null;let t=fGe()??Nm.cpus().length,o=e,n=Date.now();return ()=>{let r=Qte();if(r===null)return null;let i=Date.now(),a=i-n;if(a<=0)return null;let s=r-o,l=a*1e3,c=Math.max(0,Math.min(100,s/l/t*100));return o=r,n=i,{measurementTime:i,intervalMs:a,user:c,nice:0,sys:0,idle:Math.max(0,100-c),irq:0,total:c}}}function yGe(){let e=process.cpuUsage(),t=process.hrtime.bigint();return ()=>{let o=process.cpuUsage(),n=process.hrtime.bigint(),r=Number(n-t)/1e6,i=o.user-e.user,a=o.system-e.system;if(e=o,t=n,r<=0)return null;let s=Math.max(Nm.cpus().length,1),l=c=>Math.max(0,c/1e3/r*100/s);return {total:l(i+a),user:l(i),sys:l(a),intervalMs:r}}}function ooe({intervalMs:e=cGe,maxSamples:t=1e4,keepSamples:o=true,onSample:n}={}){let r=[],i=bO()??yO(),a=yGe(),s=()=>{let u=Date.now(),d=ioe(),m=process.memoryUsage(),p=i(),h=a(),g={timestamp:u,system:{cpu:p,memory:{total:d.totalMemory,free:d.freeMemory,freePercentage:d.freePercentage}},process:{cpu:h,memory:{rss:m.rss,heapTotal:m.heapTotal,heapUsed:m.heapUsed,external:m.external,arrayBuffers:m.arrayBuffers}}};n?.(g),o&&(r.push(g),r.length>t&&r.shift());};s();let l=setInterval(s,e),c=u=>({samples:o?[...r]:[]});return {stop:()=>(clearInterval(l),c()),getSeries:()=>c()}}var bGe=gO(),SGe=bO()??yO(),noe=e=>{r$({logger:e,processUsageTracker:bGe,cpuUsageTracker:SGe});},roe=e=>{let t=gO(),o=bO()??yO(),n=()=>r$({logger:e,processUsageTracker:t,cpuUsageTracker:o});n(),setTimeout(n,5e3);};function SO(e,t={}){let o=gO(),n=bO()??yO(),r={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0,minFreeMemoryRatio:1,maxCpuPercentage:0,maxHeapUsageRatio:0,maxMemoryUsedBytes:0,maxCurrentProcessTreeRssBytes:0,maxVisibleProcessRssBytes:0,peakDetailedMemoryUsedBytes:0},i=()=>{let a=r$({logger:e,processUsageTracker:o,cpuUsageTracker:n});if(!a)return;r.samples++,a.memoryPressure&&r.lowMemorySamples++,a.cpuPressure&&r.highCpuSamples++,a.heapPressure&&r.highHeapSamples++,r.minFreeMemoryRatio=Math.min(r.minFreeMemoryRatio,a.memory.freePercentage);let s=a.cpu?.total??0;a.details&&s>=r.maxCpuPercentage&&(r.peakCpuDetails=a.details),r.maxCpuPercentage=Math.max(r.maxCpuPercentage,s),r.maxHeapUsageRatio=Math.max(r.maxHeapUsageRatio,a.heapUsageRatio),r.maxMemoryUsedBytes=Math.max(r.maxMemoryUsedBytes,a.memory.totalMemory-a.memory.freeMemory),r.maxCurrentProcessTreeRssBytes=Math.max(r.maxCurrentProcessTreeRssBytes,a.details?.processes?.currentProcessTreeRssBytes??0),r.maxVisibleProcessRssBytes=Math.max(r.maxVisibleProcessRssBytes,a.details?.processes?.visibleProcessRssBytes??0);let l=a.memory.totalMemory-a.memory.freeMemory;a.details&&l>=r.peakDetailedMemoryUsedBytes&&(r.peakDetailedMemoryUsedBytes=l,r.peakMemoryDetails=a.details);};return i(),{interval:setInterval(i,t.intervalMs??uGe),cpuMetadata:hGe,platform:fO,getSummary:()=>({...r})}}function r$({logger:e,processUsageTracker:t,cpuUsageTracker:o}){try{let n={},r=ioe(),i=o();sR.samples++;let a=r.freePercentage<.05;a&&(Object.assign(n,process.memoryUsage()),sR.lowMemorySamples++);let s=i!==null&&i.total>80;s&&sR.highCpuSamples++;let l=lGe.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&sR.highHeapSamples++;let p=a||s||m,g=r.freePercentage<dGe||i!==null&&i.total>mGe||d>pGe?{cgroupMemory:Jte(),processes:t()}:void 0;return p?e.warn({memory:r,cpu:i,heapStats:l,resourceUsageDetails:g,...n},"Critical resource usage metrics detected"):e.debug({memory:r,cpu:i,heapUsageRatio:d,resourceUsageDetails:g},"Got machine resource usage metrics"),{memory:r,cpu:i,heapUsageRatio:d,memoryPressure:a,cpuPressure:s,heapPressure:m,details:g}}catch{return}}function TGe(){if(fO!=="linux")return null;try{let e=n$("/sys/fs/cgroup/memory.max"),t=WS("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let o=Uf(e);if(isNaN(o))return null;let n=Math.max(0,o-t);return {totalMemory:o,freeMemory:n,freePercentage:n/o}}catch{}try{let e=WS("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=WS("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let o=Nm.totalmem();if(e>=o)return null;let n=Math.max(0,e-t);return {totalMemory:e,freeMemory:n,freePercentage:n/e}}catch{return null}}function ioe(){let e=TGe();if(e)return e;let t=Nm.totalmem(),o=fO==="darwin"?vGe():(()=>{let r=Nm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),n=o.availableMemory/t;return {totalMemory:t,freeMemory:o.availableMemory,freePercentage:n}}function vGe(){try{let e=execSync("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),o=e.match(/page size of (\d+) bytes/)?.[1],n=o?Uf(o):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Uf(m):0},i=r("Pages free"),a=r("Pages inactive"),s=r("Pages speculative"),l=i*n,c=(a+s)*n;return {availableMemory:l+c,rawFreeMemory:l,cachedMemory:c}}catch{let e=Nm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var TO="deployment.environment",vO="service.instance.id";function aoe(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var zf=false,AO,cR=new Map,LGe={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:o}=e.spanContext();cR.set(`${t}:${o}`,e);},onEnd:e=>{let{traceId:t,spanId:o}=e.spanContext();cR.delete(`${t}:${o}`);},shutdown:()=>Promise.resolve()},lR,uR,NGe=[],EO,DGe=2e4;function Tr(){return zf}async function FGe(){for(let e of NGe)try{await e();}catch{}}function BGe(){return Tr()&&trace.getSpan(context.active())!==void 0}function UGe(){return aoe()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${HS}/v1/traces`,headers:{"x-momentic-metrics-api-key":$S},timeoutMillis:DGe})}function zGe(e){let t="production",o=v4$1(),n=UGe();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[TO]:t,[vO]:o,[ATTR_SERVICE_VERSION]:"3.58.0"}),spanProcessors:[LGe,new BatchSpanProcessor(n)]})}function jGe(e){EO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function HGe(e){return !e&&!AO?trace.getTracer("momentic-serverless"):uR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function sc(e){if(!(!e.enabled||zf))try{AO=e.serviceName;let t=zGe(e.serviceName);uR=t,lR=new AsyncLocalStorageContextManager,t.register({contextManager:lR.enable(),propagator:new W3CTraceContextPropagator}),jGe(t),zf=!0;}catch{zf=false,AO=void 0,uR=void 0,lR=void 0,EO=void 0;}}function $Ge(e){if(zf){for(let t of Array.from(cR.values()).reverse())try{t.setAttribute("momentic.aborted",!0),t.setAttribute("momentic.abort_reason",e),t.setStatus({code:SpanStatusCode.ERROR,message:e}),t.end();}catch{}cR.clear();}}async function wO(e="shutdown"){if(zf)try{$Ge(e),await Promise.allSettled([uR?.shutdown(),FGe()]);}catch{}finally{EO?.();try{lR?.disable();}catch{}zf=false,AO=void 0,cR.clear(),lR=void 0,uR=void 0,EO=void 0;}}async function de(e){if(!Tr()||!e.root&&!e.newTrace&&!BGe())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await HGe(e.serviceName).startActiveSpan(e.name,{attributes:t,kind:e.kind??SpanKind.CLIENT},e.newTrace?ROOT_CONTEXT:context.active(),async o=>{try{let n=await e.fn(o);return o.setStatus({code:SpanStatusCode.OK}),n}catch(n){throw o.setStatus({code:SpanStatusCode.ERROR,message:n instanceof Error?n.message.slice(0,300):void 0}),n instanceof Error&&o.recordException(n),n}finally{o.end();}})}var dR=class{increment(t,o,n){}gauge(t,o){}distribution(t,o,n){}async flush(){}async recordDuration(t){return await s$(t)}};async function s$({fn:e,name:t,timeoutMs:o,timeoutMessage:n,trace:r}){let i=r?()=>de({name:r.name,attributes:r.attributes,fn:e}):e,a=Promise.resolve(i());return o===void 0?await a:await ge(a,{milliseconds:o,message:n??`Timed out after ${o}ms recording duration for ${t}`})}function RO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function l$(e){if(!e||e.length===0)return {};let t={};for(let o of e){let n=o.indexOf(":");if(n>-1){let r=o.slice(0,n).trim(),i=o.slice(n+1).trim();r&&(t[r]=i);continue}t[o]=true;}return t}function c$(e,t){let o=l$(e);return !t||Object.keys(t).length===0?o:{...t,...o}}function n2e(){return new OTLPMetricExporter({url:`${HS}/v1/metrics`,headers:{"x-momentic-metrics-api-key":$S},temporalityPreference:AggregationTemporalityPreference.DELTA})}var u$=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],ld=(e,t,o)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...o?{attributeKeys:o}:void 0}),r2e=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],i2e=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],a2e=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],d$=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],s2e=[ld("test_event_duration",u$),ld("test_step_duration",u$),ld("test_mobile_step_duration",u$),ld("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),ld("mo_turn_duration_ms",r2e,["agent","outcome","env"]),ld("mo_step_duration_ms",i2e,["agent","env"]),ld("mo_tool_call_duration_ms",a2e,["agent","tool","outcome","env"]),ld("sandbox_bug_reproduction_latency",d$,["outcome","env"]),ld("sandbox_bugbash_latency",d$,["env"]),ld("sandbox_explore_latency",d$,["env"])],CO=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(t){let o=this.counterCache.get(t);if(o)return o;let n=this.meter.createCounter(t);return this.counterCache.set(t,n),n}getHistogram(t){let o=this.histogramCache.get(t);if(o)return o;let n=this.meter.createHistogram(t);return this.histogramCache.set(t,n),n}ensureObservableGauge(t){let o=this.observableGaugeCache.get(t);if(o)return o;let n=this.meter.createObservableGauge(t);return n.addCallback(r=>{let i=this.gaugeValues.get(t);i!==void 0&&r.observe(i,this.globalAttributes);}),this.observableGaugeCache.set(t,n),n}constructor(t){this.globalAttributes={...t.globalAttributes??{}};let o=typeof process<"u"?"production":"unknown",n=resourceFromAttributes({[ATTR_SERVICE_NAME]:t.serviceName,[TO]:o,[vO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4$1(),[ATTR_SERVICE_VERSION]:"3.58.0"}),r=n2e(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:n,readers:[i],views:s2e}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,o,n){try{let r=c$(n,this.globalAttributes);this.getCounter(t).add(typeof o=="number"?o:1,r);}catch{}}gauge(t,o){try{this.ensureObservableGauge(t),this.gaugeValues.set(t,o);}catch{}}distribution(t,o,n){try{let r=c$(n,this.globalAttributes);this.getHistogram(t).record(o,r);}catch{}}async flush(){try{await this.provider.forceFlush();}catch{}}async recordDuration(t){let{name:o,recordOutcome:n,tags:r}=t,i=Date.now(),a="success";try{return await s$(t)}catch(s){throw a=RO(s),s}finally{this.distribution(o,Date.now()-i,n?[...r??[],`outcome:${a}`]:r);}}};var uo=new dR;function coe(e){if(!e.disabled)try{uo=new CO(e);}catch{uo=new dR;}}var m$;function uoe(e){m$=e;}function Ch(e){c2e(e)&&m$&&m$(e);}var l2e=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function c2e(e){return e instanceof Error&&e.name==="AbortError"?false:cf(e,Kp)?true:cf(e,ue)?false:e instanceof ne?l2e.has(e.reason):true}var u2e=z.object({openrouter:z.object({usage:z.object({cost:z.number().finite().nonnegative()})})});function qS({feature:e,orgId:t,result:o}){uo.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${o}`]);}function d2e(e){let t=u2e.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function xO(e){let t;for(let o of e){let n=d2e(o);n!==void 0&&(t=(t??0)+n);}return t}function KS(e){let t=0,o=0,n=0,r=0,i=0,a=0,s=0,l=0;for(let c of e)t+=c.inputTokens??0,o+=c.inputTokenDetails.noCacheTokens??0,n+=c.inputTokenDetails.cacheReadTokens??0,r+=c.inputTokenDetails.cacheWriteTokens??0,i+=c.outputTokens??0,a+=c.outputTokenDetails.textTokens??0,s+=c.outputTokenDetails.reasoningTokens??0,l+=c.totalTokens??0;return {inputTokens:t,inputTokenDetails:{noCacheTokens:o,cacheReadTokens:n,cacheWriteTokens:r},outputTokens:i,outputTokenDetails:{textTokens:a,reasoningTokens:s},totalTokens:l}}function m2e({usage:e,promptType:t,result:o="success",tags:n=[]}){let r=[`type:${t}`,`result:${o}`,...n],i=e.inputTokens??0,a=e.inputTokenDetails.cacheReadTokens??e.cachedInputTokens??0,s=e.inputTokenDetails.cacheWriteTokens??0,l=e.outputTokens??0;uo.distribution("ai_session_tokens",i,[...r,"category:input"]),uo.distribution("ai_session_tokens",Math.max(0,Math.min(a,i)),[...r,"category:cached_input"]),uo.distribution("ai_session_tokens",Math.max(0,Math.min(s,i-a)),[...r,"category:cache_write_input"]),uo.distribution("ai_session_tokens",l,[...r,"category:output"]);}function Dm({usage:e,costUsd:t,promptType:o,logger:n,message:r,result:i="success",attributes:a,metricTags:s}){m2e({usage:e,promptType:o,result:i,tags:s}),n.info({...a,promptType:o,result:i,usage:e,costUsd:t},r);}function Yr({usage:e,promptType:t,logger:o,metricTags:n}){let r=Promise.resolve(e).catch(i=>{o.warn({err:i,promptType:t},"Failed to resolve AI session usage");});return ({message:i,result:a="success",attributes:s})=>{r.then(l=>{l&&Dm({usage:l,promptType:t,logger:o,result:a,message:i,attributes:s,metricTags:n});});}}var p2e=1e4;function _O({durationMs:e,executor:t,logger:o,orgId:n,resolvedStep:r,status:i}){if(!Mte(r))return;let a=kte(r);uo.distribution("test_step_duration",e,[`type:${a}`,"platform:browser",`executor:${t}`,`orgId:${n}`]),!(i!=="SUCCESS"||e<p2e)&&o.info({durationMs:e,executor:t,orgId:n,outcome:"success",stepId:r.id,stepType:a},"test_step_latency_outlier");}function qe(e=process.stdout){let t=e===process.stderr?supportsColorStderr:supportsColor,o=process.env.CLICOLOR_FORCE!==void 0&&process.env.CLICOLOR_FORCE!=="0",n=o||process.env.FORCE_COLOR!==void 0&&process.env.FORCE_COLOR!=="0",r=t?t.level:0;o&&r===0&&(r=1),(process.env.NO_COLOR!==void 0&&process.env.NO_COLOR!==""||process.env.CLICOLOR==="0")&&!n&&(r=0);let a=process.env.LC_ALL??process.env.LC_CTYPE??process.env.LANG??"",s=process.env.MOMENTIC_NO_UNICODE===void 0&&process.env.TERM!=="linux"&&(process.platform==="win32"||/utf-?8/i.test(a));return {isTTY:!!e.isTTY,colorLevel:r,unicode:s,columns:e.columns??-1,ci:is,colorForced:n}}function cd(e){return e.isTTY&&!e.ci&&e.columns>0}var doe="\r",moe="\x1B[1A",poe="\x1B[J",hoe="\x1B[?25l",p$="\x1B[?25h",y2e="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",b2e="|/-\\",S2e="\u2736\u2738\u2739\u273A\u2739\u2737",T2e="*",v2e="#0891b2",A2e={pass:{glyph:"\u2713",ascii:"v",paint:(e,t)=>e.green(t)},fail:{glyph:"\u2718",ascii:"x",paint:(e,t)=>e.red(t)},skip:{glyph:"\u2212",ascii:"-",paint:(e,t)=>e.dim(t)},cancel:{glyph:"\u2298",ascii:"o",paint:(e,t)=>e.yellow(t)},retry:{glyph:"\u21BB",ascii:"~",paint:(e,t)=>e.yellow(t)}};function Je(e){let t=e.colorLevel>0&&(e.isTTY||e.colorForced),o=new Chalk({level:t?e.colorLevel:0}),n=(r,i)=>t?i(o,r):r;return {unicode:e.unicode,color:t,bold:r=>n(r,(i,a)=>i.bold(a)),dim:r=>n(r,(i,a)=>i.gray(a)),red:r=>n(r,(i,a)=>i.red(a)),green:r=>n(r,(i,a)=>i.green(a)),yellow:r=>n(r,(i,a)=>i.yellow(a)),code:r=>n(r,(i,a)=>i.hex(v2e)(a)),spinner:r=>{let i=e.unicode?y2e:b2e,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},classifySpinner:r=>{let i=e.unicode?S2e:T2e,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},statusGlyph:r=>{let i=A2e[r],a=e.unicode?i.glyph:i.ascii;return t?i.paint(o,a):a},separator:e.unicode?" \xB7 ":" | "}}var h$=class extends Console{_buffer=[];Console=Console;constructor(){super({write:t=>(this._buffer.push(t),true)});}_log(t){this._buffer.push(t);}debug(t,...o){this._log(format(t,...o));}error(t,...o){this._log(format(t,...o));}info(t,...o){this._log(format(t,...o));}log(t,...o){this._log(format(t,...o));}warn(t,...o){this._log(format(t,...o));}flushed(){return this._buffer.length>0?this._buffer.join(`
|
|
183
|
+
`).find(n=>n.startsWith("cpu "));if(!t)return;let o=t.trim().split(/\s+/).slice(1).slice(0,8).map(n=>Number.parseInt(n,10));if(!(o.length===0||o.some(n=>!Number.isFinite(n))))return o.reduce((n,r)=>n+r,0)}function o$(e){try{return eGe(readFileSync(e,"utf8"))}catch{return}}function rGe(){let e;try{e=nGe(readFileSync(`${pO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,o;try{o=readdirSync(pO);}catch{return}for(let n of o){if(!/^\d+$/.test(n))continue;let r=Number.parseInt(n,10);try{let i=tGe(r,readFileSync(`${pO}/${n}/status`,"utf8")),a=oGe(readFileSync(`${pO}/${n}/stat`,"utf8"));if(!i||a===void 0)continue;t.set(r,{...i,cpuTicks:a});}catch{}}return {totalTicks:e,processes:t}}function iGe({current:e,previous:t}){let o=t?e.totalTicks-t.totalTicks:void 0,n=aGe(e.processes),r=new Map,i=0,a=0,s=0,l=false;for(let u of e.processes.values()){i+=u.rssBytes;let d=t?.processes.get(u.pid),m=d?u.cpuTicks-d.cpuTicks:void 0,p=m!==void 0&&m>=0&&o!==void 0&&o>0?m/o*100:void 0,h=r.get(u.name)??{name:u.name,processCount:0,rssBytes:0};h.processCount++,h.rssBytes+=u.rssBytes,p!==void 0&&(h.cpuPercentage=(h.cpuPercentage??0)+p),r.set(u.name,h),n.has(u.pid)&&(a+=u.rssBytes,p!==void 0&&(s+=p,l=true));}let c=[...r.values()];return {visibleProcessCount:e.processes.size,visibleProcessRssBytes:i,currentProcessTreeCount:n.size,currentProcessTreeRssBytes:a,currentProcessTreeCpuPercentage:l?s:void 0,topMemoryProcessGroups:[...c].sort((u,d)=>d.rssBytes-u.rssBytes).slice(0,Yte),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,Yte)}}function aGe(e){let t=new Set;if(!e.has(process.pid))return t;t.add(process.pid);let o=true;for(;o;){o=false;for(let n of e.values())t.has(n.pid)||!t.has(n.parentPid)||(t.add(n.pid),o=true);}return t}var cGe=2e3,uGe=2e4,dGe=.1,mGe=70,pGe=.8,Uf=e=>Number.parseInt(e,10),n$=e=>readFileSync(e,"utf8").trim(),WS=e=>Uf(n$(e));function eoe({summary:e,detailedSnapshots:t}){let o={"momentic.resource.samples":e.samples,"momentic.resource.low_memory_samples":e.lowMemorySamples,"momentic.resource.high_cpu_samples":e.highCpuSamples,"momentic.resource.high_heap_samples":e.highHeapSamples,"momentic.resource.min_free_memory_ratio":e.minFreeMemoryRatio,"momentic.resource.max_cpu_percentage":e.maxCpuPercentage,"momentic.resource.max_heap_usage_ratio":e.maxHeapUsageRatio,"momentic.resource.max_memory_used_bytes":e.maxMemoryUsedBytes,"momentic.resource.max_current_process_tree_rss_bytes":e.maxCurrentProcessTreeRssBytes,"momentic.resource.max_visible_process_rss_bytes":e.maxVisibleProcessRssBytes,"momentic.resource.detailed_snapshots":t};if(!t||!e.peakMemoryDetails)return o;let n=e.peakMemoryDetails.cgroupMemory,r=e.peakMemoryDetails.processes,i={"momentic.resource.peak_cgroup_anonymous_bytes":n?.anonymousBytes,"momentic.resource.peak_cgroup_file_cache_bytes":n?.fileCacheBytes,"momentic.resource.peak_cgroup_kernel_bytes":n?.kernelBytes,"momentic.resource.peak_cgroup_slab_bytes":n?.slabBytes,"momentic.resource.peak_cgroup_shared_memory_bytes":n?.sharedMemoryBytes,"momentic.resource.peak_cgroup_page_tables_bytes":n?.pageTablesBytes,"momentic.resource.peak_cgroup_oom_events":n?.events?.oom,"momentic.resource.peak_cgroup_oom_kill_events":n?.events?.oomKill,"momentic.resource.peak_cgroup_oom_group_kill_events":n?.events?.oomGroupKill};for(let[s,l]of Object.entries(i))l!==void 0&&(o[s]=l);o["momentic.resource.peak_detailed_memory_used_bytes"]=e.peakDetailedMemoryUsedBytes,r&&(o["momentic.resource.peak_memory_process_groups"]=JSON.stringify(r.topMemoryProcessGroups));let a=e.peakCpuDetails?.processes;return a&&(o["momentic.resource.peak_cpu_process_groups"]=JSON.stringify(a.topCpuProcessGroups),a.currentProcessTreeCpuPercentage!==void 0&&(o["momentic.resource.peak_current_process_tree_cpu_percentage"]=a.currentProcessTreeCpuPercentage)),o}var sR={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function toe(){return {...sR}}var fO=Nm.platform(),hGe=Nm.cpus().map(e=>({model:e.model,speed:e.speed})).reduce((e,t)=>(e[t.model]={speed:t.speed},e.totalCores=(e.totalCores??0)+1,e),{});function Xte(e=Date.now()){let t=Nm.cpus(),o={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let n of t)o.user+=n.times.user,o.nice+=n.times.nice,o.sys+=n.times.sys,o.idle+=n.times.idle,o.irq+=n.times.irq;return o.total=o.user+o.nice+o.sys+o.idle+o.irq,o}function gGe(e,t){let o={user:t.user-e.user,nice:t.nice-e.nice,sys:t.sys-e.sys,idle:t.idle-e.idle,irq:t.irq-e.irq,total:t.total-e.total};return o.total<=0?null:{measurementTime:t.measurementTime,intervalMs:t.measurementTime-e.measurementTime,user:o.user/o.total*100,nice:o.nice/o.total*100,sys:o.sys/o.total*100,idle:o.idle/o.total*100,irq:o.irq/o.total*100,total:100-o.idle/o.total*100}}function yO(){let e=Xte();return ()=>{let t=Xte(),o=gGe(e,t);return e=t,o}}function Qte(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Uf(t[1])}catch{}try{let e=WS("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function fGe(){try{let t=n$("/sys/fs/cgroup/cpu.max").split(" "),o=t[0],n=t[1];return !o||!n||o==="max"?null:Uf(o)/Uf(n)}catch{}try{let e=WS("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=WS("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function bO(){if(fO!=="linux")return null;let e=Qte();if(e===null)return null;let t=fGe()??Nm.cpus().length,o=e,n=Date.now();return ()=>{let r=Qte();if(r===null)return null;let i=Date.now(),a=i-n;if(a<=0)return null;let s=r-o,l=a*1e3,c=Math.max(0,Math.min(100,s/l/t*100));return o=r,n=i,{measurementTime:i,intervalMs:a,user:c,nice:0,sys:0,idle:Math.max(0,100-c),irq:0,total:c}}}function yGe(){let e=process.cpuUsage(),t=process.hrtime.bigint();return ()=>{let o=process.cpuUsage(),n=process.hrtime.bigint(),r=Number(n-t)/1e6,i=o.user-e.user,a=o.system-e.system;if(e=o,t=n,r<=0)return null;let s=Math.max(Nm.cpus().length,1),l=c=>Math.max(0,c/1e3/r*100/s);return {total:l(i+a),user:l(i),sys:l(a),intervalMs:r}}}function ooe({intervalMs:e=cGe,maxSamples:t=1e4,keepSamples:o=true,onSample:n}={}){let r=[],i=bO()??yO(),a=yGe(),s=()=>{let u=Date.now(),d=ioe(),m=process.memoryUsage(),p=i(),h=a(),g={timestamp:u,system:{cpu:p,memory:{total:d.totalMemory,free:d.freeMemory,freePercentage:d.freePercentage}},process:{cpu:h,memory:{rss:m.rss,heapTotal:m.heapTotal,heapUsed:m.heapUsed,external:m.external,arrayBuffers:m.arrayBuffers}}};n?.(g),o&&(r.push(g),r.length>t&&r.shift());};s();let l=setInterval(s,e),c=u=>({samples:o?[...r]:[]});return {stop:()=>(clearInterval(l),c()),getSeries:()=>c()}}var bGe=gO(),SGe=bO()??yO(),noe=e=>{r$({logger:e,processUsageTracker:bGe,cpuUsageTracker:SGe});},roe=e=>{let t=gO(),o=bO()??yO(),n=()=>r$({logger:e,processUsageTracker:t,cpuUsageTracker:o});n(),setTimeout(n,5e3);};function SO(e,t={}){let o=gO(),n=bO()??yO(),r={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0,minFreeMemoryRatio:1,maxCpuPercentage:0,maxHeapUsageRatio:0,maxMemoryUsedBytes:0,maxCurrentProcessTreeRssBytes:0,maxVisibleProcessRssBytes:0,peakDetailedMemoryUsedBytes:0},i=()=>{let a=r$({logger:e,processUsageTracker:o,cpuUsageTracker:n});if(!a)return;r.samples++,a.memoryPressure&&r.lowMemorySamples++,a.cpuPressure&&r.highCpuSamples++,a.heapPressure&&r.highHeapSamples++,r.minFreeMemoryRatio=Math.min(r.minFreeMemoryRatio,a.memory.freePercentage);let s=a.cpu?.total??0;a.details&&s>=r.maxCpuPercentage&&(r.peakCpuDetails=a.details),r.maxCpuPercentage=Math.max(r.maxCpuPercentage,s),r.maxHeapUsageRatio=Math.max(r.maxHeapUsageRatio,a.heapUsageRatio),r.maxMemoryUsedBytes=Math.max(r.maxMemoryUsedBytes,a.memory.totalMemory-a.memory.freeMemory),r.maxCurrentProcessTreeRssBytes=Math.max(r.maxCurrentProcessTreeRssBytes,a.details?.processes?.currentProcessTreeRssBytes??0),r.maxVisibleProcessRssBytes=Math.max(r.maxVisibleProcessRssBytes,a.details?.processes?.visibleProcessRssBytes??0);let l=a.memory.totalMemory-a.memory.freeMemory;a.details&&l>=r.peakDetailedMemoryUsedBytes&&(r.peakDetailedMemoryUsedBytes=l,r.peakMemoryDetails=a.details);};return i(),{interval:setInterval(i,t.intervalMs??uGe),cpuMetadata:hGe,platform:fO,getSummary:()=>({...r})}}function r$({logger:e,processUsageTracker:t,cpuUsageTracker:o}){try{let n={},r=ioe(),i=o();sR.samples++;let a=r.freePercentage<.05;a&&(Object.assign(n,process.memoryUsage()),sR.lowMemorySamples++);let s=i!==null&&i.total>80;s&&sR.highCpuSamples++;let l=lGe.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&sR.highHeapSamples++;let p=a||s||m,g=r.freePercentage<dGe||i!==null&&i.total>mGe||d>pGe?{cgroupMemory:Jte(),processes:t()}:void 0;return p?e.warn({memory:r,cpu:i,heapStats:l,resourceUsageDetails:g,...n},"Critical resource usage metrics detected"):e.debug({memory:r,cpu:i,heapUsageRatio:d,resourceUsageDetails:g},"Got machine resource usage metrics"),{memory:r,cpu:i,heapUsageRatio:d,memoryPressure:a,cpuPressure:s,heapPressure:m,details:g}}catch{return}}function TGe(){if(fO!=="linux")return null;try{let e=n$("/sys/fs/cgroup/memory.max"),t=WS("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let o=Uf(e);if(isNaN(o))return null;let n=Math.max(0,o-t);return {totalMemory:o,freeMemory:n,freePercentage:n/o}}catch{}try{let e=WS("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=WS("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let o=Nm.totalmem();if(e>=o)return null;let n=Math.max(0,e-t);return {totalMemory:e,freeMemory:n,freePercentage:n/e}}catch{return null}}function ioe(){let e=TGe();if(e)return e;let t=Nm.totalmem(),o=fO==="darwin"?vGe():(()=>{let r=Nm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),n=o.availableMemory/t;return {totalMemory:t,freeMemory:o.availableMemory,freePercentage:n}}function vGe(){try{let e=execSync("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),o=e.match(/page size of (\d+) bytes/)?.[1],n=o?Uf(o):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Uf(m):0},i=r("Pages free"),a=r("Pages inactive"),s=r("Pages speculative"),l=i*n,c=(a+s)*n;return {availableMemory:l+c,rawFreeMemory:l,cachedMemory:c}}catch{let e=Nm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var TO="deployment.environment",vO="service.instance.id";function aoe(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var zf=false,AO,cR=new Map,LGe={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:o}=e.spanContext();cR.set(`${t}:${o}`,e);},onEnd:e=>{let{traceId:t,spanId:o}=e.spanContext();cR.delete(`${t}:${o}`);},shutdown:()=>Promise.resolve()},lR,uR,NGe=[],EO,DGe=2e4;function Tr(){return zf}async function FGe(){for(let e of NGe)try{await e();}catch{}}function BGe(){return Tr()&&trace.getSpan(context.active())!==void 0}function UGe(){return aoe()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${HS}/v1/traces`,headers:{"x-momentic-metrics-api-key":$S},timeoutMillis:DGe})}function zGe(e){let t="production",o=v4$1(),n=UGe();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[TO]:t,[vO]:o,[ATTR_SERVICE_VERSION]:"3.58.1"}),spanProcessors:[LGe,new BatchSpanProcessor(n)]})}function jGe(e){EO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function HGe(e){return !e&&!AO?trace.getTracer("momentic-serverless"):uR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function sc(e){if(!(!e.enabled||zf))try{AO=e.serviceName;let t=zGe(e.serviceName);uR=t,lR=new AsyncLocalStorageContextManager,t.register({contextManager:lR.enable(),propagator:new W3CTraceContextPropagator}),jGe(t),zf=!0;}catch{zf=false,AO=void 0,uR=void 0,lR=void 0,EO=void 0;}}function $Ge(e){if(zf){for(let t of Array.from(cR.values()).reverse())try{t.setAttribute("momentic.aborted",!0),t.setAttribute("momentic.abort_reason",e),t.setStatus({code:SpanStatusCode.ERROR,message:e}),t.end();}catch{}cR.clear();}}async function wO(e="shutdown"){if(zf)try{$Ge(e),await Promise.allSettled([uR?.shutdown(),FGe()]);}catch{}finally{EO?.();try{lR?.disable();}catch{}zf=false,AO=void 0,cR.clear(),lR=void 0,uR=void 0,EO=void 0;}}async function de(e){if(!Tr()||!e.root&&!e.newTrace&&!BGe())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await HGe(e.serviceName).startActiveSpan(e.name,{attributes:t,kind:e.kind??SpanKind.CLIENT},e.newTrace?ROOT_CONTEXT:context.active(),async o=>{try{let n=await e.fn(o);return o.setStatus({code:SpanStatusCode.OK}),n}catch(n){throw o.setStatus({code:SpanStatusCode.ERROR,message:n instanceof Error?n.message.slice(0,300):void 0}),n instanceof Error&&o.recordException(n),n}finally{o.end();}})}var dR=class{increment(t,o,n){}gauge(t,o){}distribution(t,o,n){}async flush(){}async recordDuration(t){return await s$(t)}};async function s$({fn:e,name:t,timeoutMs:o,timeoutMessage:n,trace:r}){let i=r?()=>de({name:r.name,attributes:r.attributes,fn:e}):e,a=Promise.resolve(i());return o===void 0?await a:await ge(a,{milliseconds:o,message:n??`Timed out after ${o}ms recording duration for ${t}`})}function RO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function l$(e){if(!e||e.length===0)return {};let t={};for(let o of e){let n=o.indexOf(":");if(n>-1){let r=o.slice(0,n).trim(),i=o.slice(n+1).trim();r&&(t[r]=i);continue}t[o]=true;}return t}function c$(e,t){let o=l$(e);return !t||Object.keys(t).length===0?o:{...t,...o}}function n2e(){return new OTLPMetricExporter({url:`${HS}/v1/metrics`,headers:{"x-momentic-metrics-api-key":$S},temporalityPreference:AggregationTemporalityPreference.DELTA})}var u$=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],ld=(e,t,o)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...o?{attributeKeys:o}:void 0}),r2e=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],i2e=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],a2e=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],d$=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],s2e=[ld("test_event_duration",u$),ld("test_step_duration",u$),ld("test_mobile_step_duration",u$),ld("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),ld("mo_turn_duration_ms",r2e,["agent","outcome","env"]),ld("mo_step_duration_ms",i2e,["agent","env"]),ld("mo_tool_call_duration_ms",a2e,["agent","tool","outcome","env"]),ld("sandbox_bug_reproduction_latency",d$,["outcome","env"]),ld("sandbox_bugbash_latency",d$,["env"]),ld("sandbox_explore_latency",d$,["env"])],CO=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(t){let o=this.counterCache.get(t);if(o)return o;let n=this.meter.createCounter(t);return this.counterCache.set(t,n),n}getHistogram(t){let o=this.histogramCache.get(t);if(o)return o;let n=this.meter.createHistogram(t);return this.histogramCache.set(t,n),n}ensureObservableGauge(t){let o=this.observableGaugeCache.get(t);if(o)return o;let n=this.meter.createObservableGauge(t);return n.addCallback(r=>{let i=this.gaugeValues.get(t);i!==void 0&&r.observe(i,this.globalAttributes);}),this.observableGaugeCache.set(t,n),n}constructor(t){this.globalAttributes={...t.globalAttributes??{}};let o=typeof process<"u"?"production":"unknown",n=resourceFromAttributes({[ATTR_SERVICE_NAME]:t.serviceName,[TO]:o,[vO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4$1(),[ATTR_SERVICE_VERSION]:"3.58.1"}),r=n2e(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:n,readers:[i],views:s2e}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,o,n){try{let r=c$(n,this.globalAttributes);this.getCounter(t).add(typeof o=="number"?o:1,r);}catch{}}gauge(t,o){try{this.ensureObservableGauge(t),this.gaugeValues.set(t,o);}catch{}}distribution(t,o,n){try{let r=c$(n,this.globalAttributes);this.getHistogram(t).record(o,r);}catch{}}async flush(){try{await this.provider.forceFlush();}catch{}}async recordDuration(t){let{name:o,recordOutcome:n,tags:r}=t,i=Date.now(),a="success";try{return await s$(t)}catch(s){throw a=RO(s),s}finally{this.distribution(o,Date.now()-i,n?[...r??[],`outcome:${a}`]:r);}}};var uo=new dR;function coe(e){if(!e.disabled)try{uo=new CO(e);}catch{uo=new dR;}}var m$;function uoe(e){m$=e;}function Ch(e){c2e(e)&&m$&&m$(e);}var l2e=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function c2e(e){return e instanceof Error&&e.name==="AbortError"?false:cf(e,Kp)?true:cf(e,ue)?false:e instanceof ne?l2e.has(e.reason):true}var u2e=z.object({openrouter:z.object({usage:z.object({cost:z.number().finite().nonnegative()})})});function qS({feature:e,orgId:t,result:o}){uo.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${o}`]);}function d2e(e){let t=u2e.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function xO(e){let t;for(let o of e){let n=d2e(o);n!==void 0&&(t=(t??0)+n);}return t}function KS(e){let t=0,o=0,n=0,r=0,i=0,a=0,s=0,l=0;for(let c of e)t+=c.inputTokens??0,o+=c.inputTokenDetails.noCacheTokens??0,n+=c.inputTokenDetails.cacheReadTokens??0,r+=c.inputTokenDetails.cacheWriteTokens??0,i+=c.outputTokens??0,a+=c.outputTokenDetails.textTokens??0,s+=c.outputTokenDetails.reasoningTokens??0,l+=c.totalTokens??0;return {inputTokens:t,inputTokenDetails:{noCacheTokens:o,cacheReadTokens:n,cacheWriteTokens:r},outputTokens:i,outputTokenDetails:{textTokens:a,reasoningTokens:s},totalTokens:l}}function m2e({usage:e,promptType:t,result:o="success",tags:n=[]}){let r=[`type:${t}`,`result:${o}`,...n],i=e.inputTokens??0,a=e.inputTokenDetails.cacheReadTokens??e.cachedInputTokens??0,s=e.inputTokenDetails.cacheWriteTokens??0,l=e.outputTokens??0;uo.distribution("ai_session_tokens",i,[...r,"category:input"]),uo.distribution("ai_session_tokens",Math.max(0,Math.min(a,i)),[...r,"category:cached_input"]),uo.distribution("ai_session_tokens",Math.max(0,Math.min(s,i-a)),[...r,"category:cache_write_input"]),uo.distribution("ai_session_tokens",l,[...r,"category:output"]);}function Dm({usage:e,costUsd:t,promptType:o,logger:n,message:r,result:i="success",attributes:a,metricTags:s}){m2e({usage:e,promptType:o,result:i,tags:s}),n.info({...a,promptType:o,result:i,usage:e,costUsd:t},r);}function Yr({usage:e,promptType:t,logger:o,metricTags:n}){let r=Promise.resolve(e).catch(i=>{o.warn({err:i,promptType:t},"Failed to resolve AI session usage");});return ({message:i,result:a="success",attributes:s})=>{r.then(l=>{l&&Dm({usage:l,promptType:t,logger:o,result:a,message:i,attributes:s,metricTags:n});});}}var p2e=1e4;function _O({durationMs:e,executor:t,logger:o,orgId:n,resolvedStep:r,status:i}){if(!Mte(r))return;let a=kte(r);uo.distribution("test_step_duration",e,[`type:${a}`,"platform:browser",`executor:${t}`,`orgId:${n}`]),!(i!=="SUCCESS"||e<p2e)&&o.info({durationMs:e,executor:t,orgId:n,outcome:"success",stepId:r.id,stepType:a},"test_step_latency_outlier");}function qe(e=process.stdout){let t=e===process.stderr?supportsColorStderr:supportsColor,o=process.env.CLICOLOR_FORCE!==void 0&&process.env.CLICOLOR_FORCE!=="0",n=o||process.env.FORCE_COLOR!==void 0&&process.env.FORCE_COLOR!=="0",r=t?t.level:0;o&&r===0&&(r=1),(process.env.NO_COLOR!==void 0&&process.env.NO_COLOR!==""||process.env.CLICOLOR==="0")&&!n&&(r=0);let a=process.env.LC_ALL??process.env.LC_CTYPE??process.env.LANG??"",s=process.env.MOMENTIC_NO_UNICODE===void 0&&process.env.TERM!=="linux"&&(process.platform==="win32"||/utf-?8/i.test(a));return {isTTY:!!e.isTTY,colorLevel:r,unicode:s,columns:e.columns??-1,ci:is,colorForced:n}}function cd(e){return e.isTTY&&!e.ci&&e.columns>0}var doe="\r",moe="\x1B[1A",poe="\x1B[J",hoe="\x1B[?25l",p$="\x1B[?25h",y2e="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",b2e="|/-\\",S2e="\u2736\u2738\u2739\u273A\u2739\u2737",T2e="*",v2e="#0891b2",A2e={pass:{glyph:"\u2713",ascii:"v",paint:(e,t)=>e.green(t)},fail:{glyph:"\u2718",ascii:"x",paint:(e,t)=>e.red(t)},skip:{glyph:"\u2212",ascii:"-",paint:(e,t)=>e.dim(t)},cancel:{glyph:"\u2298",ascii:"o",paint:(e,t)=>e.yellow(t)},retry:{glyph:"\u21BB",ascii:"~",paint:(e,t)=>e.yellow(t)}};function Je(e){let t=e.colorLevel>0&&(e.isTTY||e.colorForced),o=new Chalk({level:t?e.colorLevel:0}),n=(r,i)=>t?i(o,r):r;return {unicode:e.unicode,color:t,bold:r=>n(r,(i,a)=>i.bold(a)),dim:r=>n(r,(i,a)=>i.gray(a)),red:r=>n(r,(i,a)=>i.red(a)),green:r=>n(r,(i,a)=>i.green(a)),yellow:r=>n(r,(i,a)=>i.yellow(a)),code:r=>n(r,(i,a)=>i.hex(v2e)(a)),spinner:r=>{let i=e.unicode?y2e:b2e,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},classifySpinner:r=>{let i=e.unicode?S2e:T2e,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},statusGlyph:r=>{let i=A2e[r],a=e.unicode?i.glyph:i.ascii;return t?i.paint(o,a):a},separator:e.unicode?" \xB7 ":" | "}}var h$=class extends Console{_buffer=[];Console=Console;constructor(){super({write:t=>(this._buffer.push(t),true)});}_log(t){this._buffer.push(t);}debug(t,...o){this._log(format(t,...o));}error(t,...o){this._log(format(t,...o));}info(t,...o){this._log(format(t,...o));}log(t,...o){this._log(format(t,...o));}warn(t,...o){this._log(format(t,...o));}flushed(){return this._buffer.length>0?this._buffer.join(`
|
|
184
184
|
`):void 0}};function foe(e){let t=globalThis.console,o=new h$;globalThis.console=o;try{e();}finally{let n=o.flushed();n&&process.stdout.write(`${n}
|
|
185
185
|
`),globalThis.console=t;}}var R2e=" ",C2e=" ",I2e=" ",x2e=" > ",boe=3;function Soe(e){if(!e.failureDetails)return;let t=e.filePath?PO(e.filePath):void 0;if(t&&t.doc.get("fileType")!==De.TEST_V2)return;let o=t?_2e({root:t,result:e}):void 0,n=e.failureDetails.classification?.previousStepsDescription??[];if(n.length===0&&!o)return;let r=[`${R2e}Failed at:`];for(let i of n)r.push(`${C2e}- ${i}`);if(o){let i=O2e(o);i&&(r.push(""),r.push(i));}return r.join(`
|
|
186
186
|
`)}function PO(e){let t;try{t=readFileSync(e,"utf-8");}catch{return}let o=new LineCounter,n=ds.parseDocument(t,{lineCounter:o});if(!(n.errors.length>0))return {filePath:e,text:t,doc:n,lineCounter:o}}function _2e({root:e,result:t}){let o=[["before",t.beforeResults],["steps",t.results],["after",t.afterResults]];for(let[n,r]of o){if(!r)continue;let i=g$({source:e,yamlPath:[n],results:r});if(i)return i}}function g$({source:e,yamlPath:t,results:o}){let n=o.findIndex(l=>l.status==="FAILED"),r=o[n];if(!r)return;let i=[...t,n],a=e.doc.getIn(i,true);if(!ds.isNode(a))return;let s={source:e,node:a};if(r.type==="MODULE"){let l=P2e({source:e,stepPath:i});return l?g$({source:l,yamlPath:["steps"],results:r.results})??s:s}if(r.type==="CONDITIONAL"){let l=e.doc.getIn([...i,"if","then"],true);return !ds.isNode(l)||!ds.isSeq(l)?s:g$({source:e,yamlPath:[...i,"if","then"],results:r.results})??s}return s}function P2e({source:e,stepPath:t}){let o=e.doc.getIn([...t,"module"]),n=typeof o=="string"?o:e.doc.getIn([...t,"module","path"]);if(typeof n!="string")return;let r=mn__default.resolve(mn__default.dirname(e.filePath),n),i=PO(r);if(i?.doc.get("fileType")===De.MODULE_V2)return i}function O2e(e){let t=e.node.range;if(t)return f$(e.source,t[0])}function Toe(e,t){let o=typeof t[0]=="number"?["steps",...t]:t;for(let n=o.length;n>=0;n--){let r=n===0?e.doc.contents:e.doc.getIn(o.slice(0,n),true);if(ds.isNode(r)&&r.range){let i=r.range[0],{line:a,col:s}=e.lineCounter.linePos(i);return {line:a,col:s,startOffset:i}}}}function f$(e,t){let o=e.lineCounter.linePos(t).line,n=e.text.split(`
|
|
187
187
|
`);if(o<1||o>n.length)return;let r=Math.max(1,o-boe),i=Math.min(n.length,o+boe),a=String(i).length,s=[];for(let l=r;l<=i;l++){let c=l===o?x2e:I2e;s.push(`${c}${String(l).padStart(a)} | ${n[l-1]??""}`);}return s.join(`
|
|
188
188
|
`)}function Aoe(e,t=""){let o=process.stdout?.columns||process.stderr?.columns||80,n=Math.max(o-t.length,20),r=[];for(let i of e.split(`
|
|
189
189
|
`)){let a="";for(let s of i.split(" ")){if(!a.length){a=s;continue}let l=`${a} ${s}`;if(l.length<=n){a=l;continue}r.push(t+a),a=s;}r.push(t+a);}return r.join(`
|
|
190
|
-
`)}var voe=new Set;function Eoe(e,t,o=t){voe.has(o)||(voe.add(o),e.warn(t));}var M2e={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}},L2e={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function hR(e,t,o=0){let n=L2e[e];if(!n)return;let r=Je(t);if(n==="RUNNING")return {badge:r.spinner(o),isTerminal:false};let{glyph:i,isTerminal:a}=M2e[n];return {badge:r.statusGlyph(i),isTerminal:a}}function tr(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function woe({parallel:e,remoteBrowser:t}){let o=cpus$1().length;if(t){if(e<=o*4)return;let n=Math.max(1,o*4-2);C.warn(`Running ${e} workers on a ${o}-core machine with a remote browser. We recommend at most ~${n} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}o>=e*2||C.warn(`Running ${e} workers on a ${o}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function Roe(){let e=toe(),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 fe=VS({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.58.
|
|
190
|
+
`)}var voe=new Set;function Eoe(e,t,o=t){voe.has(o)||(voe.add(o),e.warn(t));}var M2e={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}},L2e={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function hR(e,t,o=0){let n=L2e[e];if(!n)return;let r=Je(t);if(n==="RUNNING")return {badge:r.spinner(o),isTerminal:false};let{glyph:i,isTerminal:a}=M2e[n];return {badge:r.statusGlyph(i),isTerminal:a}}function tr(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function woe({parallel:e,remoteBrowser:t}){let o=cpus$1().length;if(t){if(e<=o*4)return;let n=Math.max(1,o*4-2);C.warn(`Running ${e} workers on a ${o}-core machine with a remote browser. We recommend at most ~${n} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}o>=e*2||C.warn(`Running ${e} workers on a ${o}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function Roe(){let e=toe(),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 fe=VS({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.58.1"});var D2e=5,YS=" ";async function OO({getResults:e,checkDone:t,name:o,timeoutMs:n=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<n;){let a;i>D2e&&(C.error(`Failed to fetch ${o} status too many times.`),process.exit(1));try{a=await e(),i=0;}catch(c){i++,fe.warn({err:c},"Failed to fetch run status; retrying."),C.warn({err:c},"Failed to fetch run status; retrying."),await new Promise(u=>setTimeout(u,1500*i));continue}if(t(a))return a;let l=Math.max(1e4,Math.floor(n/100));await new Promise(c=>setTimeout(c,l));}C.error(`Timeout elapsed waiting for ${o} to complete (${Math.floor(n/1e3)}s).`),process.exit(1);}function Coe(e){let t={passed:[],failed:[],cancelled:[],quarantinedPassed:[],quarantinedFailed:[]};for(let o of e)switch(o.status){case "PASSED":(o.quarantined?t.quarantinedPassed:t.passed).push(o);break;case "FAILED":(o.quarantined?t.quarantinedFailed:t.failed).push(o);break;case "CANCELLED":t.cancelled.push(o);break}return t}function b$(e){let t=Coe(e),o=t.failed.filter(r=>r.failureDetails?.classification?.action==="heal"),n=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:o.length,warnElectedFailures:n.length}}function JS(e,{onlyQuarantined:t=false,overrideExitCode:o=false}={}){let n=o?e.healElectedFailures+e.warnElectedFailures:0,r=e.failed-n,i=t?e.quarantinedFailed:0;return r+i>0||e.cancelled>0}function S$({results:e,startTime:t,getPath:o,getUrl:n,printFailureBody:r,getCancellationReason:i,recoveredCount:a,skippedCount:s,videoRecordingActive:l}){let{passed:c,failed:u,cancelled:d,quarantinedPassed:m,quarantinedFailed:p}=Coe(e),h=qe(),g=Je(h),f=(y,b,S,E)=>{C.log(""),C.log(S(` ${b+1}) ${o(y)}`)),C.log(""),E();let v=n(y);v&&(C.log(""),C.log(`${YS}${tr(v,h)}`));};foe(()=>{u.forEach((I,_)=>{f(I,_,g.red,()=>r?.(I));}),d.forEach((I,_)=>{f(I,u.length+_,g.yellow,()=>{let O=i?.(I)??"Cancelled";C.log(`${YS}${g.yellow(O)}`);});});let y=c.length+m.length,b=Math.max(1,Math.round((Date.now()-t)/1e3)),S=[];m.length>0&&S.push(`${m.length} quarantined`),a&&a>0&&S.push(`${a} recovered`);let E=S.length>0?` (${S.join(", ")})`:"",v=F2e(e,h,l),R=[];u.length>0&&R.push(g.bold(g.red(`${u.length} failed`))),p.length>0&&R.push(g.bold(g.red(`${p.length} failed (quarantined)`))),d.length>0&&R.push(g.bold(g.yellow(`${d.length} cancelled`))),s&&R.push(g.yellow(`${s} skipped`)),R.push(g.bold(g.green(`${y} passed${E}`)));let w=e.length+(s??0),P=(I,_)=>` ${g.dim(I.padEnd(8))} ${_}`;C.log(""),C.log(P("Tests",`${R.join(g.dim(" | "))} ${g.dim(`(${w})`)}`)),C.log(P("Duration",`${b}s${g.dim(v)}`)),u.length+p.length>0&&(C.log(""),C.log(` ${g.dim("Run")} ${g.code("momentic ai triage")} ${g.dim(`to attempt automatic fixes${g.separator}${tr("https://momentic.ai/docs/reliability/auto-heal",h)}`)}`)),Roe();});}function kO(e){return S$(e),b$(e.results)}function F2e(e,t,o=false){let n=e.length;if(n===0)return "";let r=e.filter(s=>s.usedRemoteBrowser).length;return r===0?"":`${t.unicode?" \xB7 ":" | "}${r}/${n} ran on remote browser${o?" (video saved async)":""}`}function MO(e){if(!e.failureDetails||!e.failureReason)return;let t=ku({failureReason:e.failureReason,classification:e.failureDetails.classification,manualClassification:e.failureDetails.manualClassification}),o=t.title??e.failureReason,n=e.failureDetails.classification?.rootCause??t.description??t.title??e.failureReason,r=qe(),i=Je(r);C.log(`${YS}${i.bold(i.red(o))}`),n&&n!==o&&(C.log(""),C.log(i.dim(Aoe(n,YS))));let a=Soe({failureDetails:e.failureDetails,filePath:e.filePath,results:e.results,beforeResults:e.beforeResults,afterResults:e.afterResults});a&&(C.log(""),C.log(a));let s=e.failureDetails.classification?.citations;if(s&&s.length>0){C.log(""),C.log(`${YS}${i.dim("Sources")}`);for(let l of s)C.log(`${YS} ${i.dim(`[${l.refId}]`)} ${l.title}`);}}var XS=" ".repeat(6);var B2e=(e,t,o,n)=>{if(o==="length"||o==="prototype"||o==="arguments"||o==="caller")return;let r=Object.getOwnPropertyDescriptor(e,o),i=Object.getOwnPropertyDescriptor(t,o);!U2e(r,i)&&n||Object.defineProperty(e,o,i);},U2e=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)},z2e=(e,t)=>{let o=Object.getPrototypeOf(t);o!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,o);},j2e=(e,t)=>`/* Wrapped ${e}*/
|
|
191
191
|
${t}`,H2e=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),$2e=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),G2e=(e,t,o)=>{let n=o===""?"":`with ${o.trim()}() `,r=j2e.bind(null,n,t.toString());Object.defineProperty(r,"name",$2e);let{writable:i,enumerable:a,configurable:s}=H2e;Object.defineProperty(e,"toString",{value:r,writable:i,enumerable:a,configurable:s});};function T$(e,t,{ignoreNonConfigurable:o=false}={}){let{name:n}=e;for(let r of Reflect.ownKeys(t))B2e(e,t,r,o);return z2e(e,t),G2e(e,t,n),e}var LO=new WeakMap,Ioe=(e,t={})=>{if(typeof e!="function")throw new TypeError("Expected a function");let o,n=0,r=e.displayName||e.name||"<anonymous>",i=function(...a){if(LO.set(i,++n),n===1)o=e.apply(this,a),e=void 0;else if(t.throw===true)throw new Error(`Function \`${r}\` can only be called once`);return o};return T$(i,e),LO.set(i,n),i};Ioe.callCount=e=>{if(!LO.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return LO.get(e)};var xoe=Ioe;var Hf=[];Hf.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&Hf.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Hf.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var NO=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",v$=Symbol.for("signal-exit emitter"),A$=globalThis,V2e=Object.defineProperty.bind(Object),E$=class{emitted={afterExit:false,exit:false};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(A$[v$])return A$[v$];V2e(A$,v$,{value:this,writable:false,enumerable:false,configurable:false});}on(t,o){this.listeners[t].push(o);}removeListener(t,o){let n=this.listeners[t],r=n.indexOf(o);r!==-1&&(r===0&&n.length===1?n.length=0:n.splice(r,1));}emit(t,o,n){if(this.emitted[t])return false;this.emitted[t]=true;let r=false;for(let i of this.listeners[t])r=i(o,n)===true||r;return t==="exit"&&(r=this.emit("afterExit",o,n)||r),r}},DO=class{},W2e=e=>({onExit(t,o){return e.onExit(t,o)},load(){return e.load()},unload(){return e.unload()}}),w$=class extends DO{onExit(){return ()=>{}}load(){}unload(){}},R$=class extends DO{#n=C$.platform==="win32"?"SIGINT":"SIGHUP";#t=new E$;#e;#i;#m;#o={};#a=false;constructor(t){super(),this.#e=t,this.#o={};for(let o of Hf)this.#o[o]=()=>{let n=this.#e.listeners(o),{count:r}=this.#t,i=t;if(typeof i.__signal_exit_emitter__=="object"&&typeof i.__signal_exit_emitter__.count=="number"&&(r+=i.__signal_exit_emitter__.count),n.length===r){this.unload();let a=this.#t.emit("exit",null,o),s=o==="SIGHUP"?this.#n:o;a||t.kill(t.pid,s);}};this.#m=t.reallyExit,this.#i=t.emit;}onExit(t,o){if(!NO(this.#e))return ()=>{};this.#a===false&&this.load();let n=o?.alwaysLast?"afterExit":"exit";return this.#t.on(n,t),()=>{this.#t.removeListener(n,t),this.#t.listeners.exit.length===0&&this.#t.listeners.afterExit.length===0&&this.unload();}}load(){if(!this.#a){this.#a=true,this.#t.count+=1;for(let t of Hf)try{let o=this.#o[t];o&&this.#e.on(t,o);}catch{}this.#e.emit=(t,...o)=>this.#p(t,...o),this.#e.reallyExit=t=>this.#r(t);}}unload(){this.#a&&(this.#a=false,Hf.forEach(t=>{let o=this.#o[t];if(!o)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,o);}catch{}}),this.#e.emit=this.#i,this.#e.reallyExit=this.#m,this.#t.count-=1);}#r(t){return NO(this.#e)?(this.#e.exitCode=t||0,this.#t.emit("exit",this.#e.exitCode,null),this.#m.call(this.#e,this.#e.exitCode)):0}#p(t,...o){let n=this.#i;if(t==="exit"&&NO(this.#e)){typeof o[0]=="number"&&(this.#e.exitCode=o[0]);let r=n.call(this.#e,t,...o);return this.#t.emit("exit",this.#e.exitCode,null),r}else return n.call(this.#e,t,...o)}},C$=globalThis.process,{onExit:_oe}=W2e(NO(C$)?new R$(C$):new w$);var Poe=Qc.stderr.isTTY?Qc.stderr:Qc.stdout.isTTY?Qc.stdout:void 0,q2e=Poe?xoe(()=>{_oe(()=>{Poe.write("\x1B[?25h");},{alwaysLast:true});}):()=>{},Ooe=q2e;var BO=false,QS={};QS.show=(e=Qc.stderr)=>{e.isTTY&&(BO=false,e.write("\x1B[?25h"));};QS.hide=(e=Qc.stderr)=>{e.isTTY&&(Ooe(),BO=true,e.write("\x1B[?25l"));};QS.toggle=(e,t)=>{e!==void 0&&(BO=e),BO?QS.show(t):QS.hide(t);};var I$=QS;var fR=NU(x$());function _$(){return Qc.platform!=="win32"?Qc.env.TERM!=="linux":!!Qc.env.CI||!!Qc.env.WT_SESSION||!!Qc.env.TERMINUS_SUBLIME||Qc.env.ConEmuTask==="{cmd::Cmder}"||Qc.env.TERM_PROGRAM==="Terminus-Sublime"||Qc.env.TERM_PROGRAM==="vscode"||Qc.env.TERM==="xterm-256color"||Qc.env.TERM==="alacritty"||Qc.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Y2e={info:Jl.blue("\u2139"),success:Jl.green("\u2714"),warning:Jl.yellow("\u26A0"),error:Jl.red("\u2716")},J2e={info:Jl.blue("i"),success:Jl.green("\u221A"),warning:Jl.yellow("\u203C"),error:Jl.red("\xD7")},X2e=_$()?Y2e:J2e,gR=X2e;function P$({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 Q2e=P$();function O$(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return !e.includes("\x1B")&&!e.includes("\x9B")?e:e.replace(Q2e,"")}function k$({stream:e=process.stdout}={}){return !!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}function M$(){let{env:e}=Qc,{TERM:t,TERM_PROGRAM:o}=e;return Qc.platform!=="win32"?t!=="linux":!!e.WT_SESSION||!!e.TERMINUS_SUBLIME||e.ConEmuTask==="{cmd::Cmder}"||o==="Terminus-Sublime"||o==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Z2e=3,L$=class{#n=0;start(){this.#n++,this.#n===1&&this.#t();}stop(){if(this.#n<=0)throw new Error("`stop` called more times than `start`");this.#n--,this.#n===0&&this.#e();}#t(){Qc.platform==="win32"||!Qc.stdin.isTTY||(Qc.stdin.setRawMode(true),Qc.stdin.on("data",this.#i),Qc.stdin.resume());}#e(){Qc.stdin.isTTY&&(Qc.stdin.off("data",this.#i),Qc.stdin.pause(),Qc.stdin.setRawMode(false));}#i(t){t[0]===Z2e&&Qc.emit("SIGINT");}},eVe=new L$,N$=eVe;NU(x$());var D$=class{#n=0;#t=false;#e=0;#i=-1;#m=0;#o;#a;#r;#p;#g;#c;#u;#d;#f;#s;#l;color;constructor(t){typeof t=="string"&&(t={text:t}),this.#o={color:"cyan",stream:Qc.stderr,discardStdin:true,hideCursor:true,...t},this.color=this.#o.color,this.spinner=this.#o.spinner,this.#g=this.#o.interval,this.#r=this.#o.stream,this.#c=typeof this.#o.isEnabled=="boolean"?this.#o.isEnabled:k$({stream:this.#r}),this.#u=typeof this.#o.isSilent=="boolean"?this.#o.isSilent:false,this.text=this.#o.text,this.prefixText=this.#o.prefixText,this.suffixText=this.#o.suffixText,this.indent=this.#o.indent,Qc.env.NODE_ENV==="test"&&(this._stream=this.#r,this._isEnabled=this.#c,Object.defineProperty(this,"_linesToClear",{get(){return this.#n},set(o){this.#n=o;}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#i}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}));}get indent(){return this.#d}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.#d=t,this.#h();}get interval(){return this.#g??this.#a.interval??100}get spinner(){return this.#a}set spinner(t){if(this.#i=-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.#a=t;}else if(!M$())this.#a=fR.default.line;else if(t===void 0)this.#a=fR.default.dots;else if(t!=="default"&&fR.default[t])this.#a=fR.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.#s}set prefixText(t=""){this.#s=t,this.#h();}get suffixText(){return this.#l}set suffixText(t=""){this.#l=t,this.#h();}get isSpinning(){return this.#p!==void 0}#y(t=this.#s,o=" "){return typeof t=="string"&&t!==""?t+o:typeof t=="function"?t()+o:""}#b(t=this.#l,o=" "){return typeof t=="string"&&t!==""?o+t:typeof t=="function"?o+t():""}#h(){let t=this.#r.columns??80,o=this.#y(this.#s,"-"),n=this.#b(this.#l,"-"),r=" ".repeat(this.#d)+o+"--"+this.#f+"--"+n;this.#e=0;for(let i of O$(r).split(`
|
|
192
192
|
`))this.#e+=Math.max(1,Math.ceil(Wme(i,{countAnsiEscapeCodes:true})/t));}get isEnabled(){return this.#c&&!this.#u}set isEnabled(t){if(typeof t!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#c=t;}get isSilent(){return this.#u}set isSilent(t){if(typeof t!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#u=t;}frame(){let t=Date.now();(this.#i===-1||t-this.#m>=this.interval)&&(this.#i=++this.#i%this.#a.frames.length,this.#m=t);let{frames:o}=this.#a,n=o[this.#i];this.color&&(n=Jl[this.color](n));let r=typeof this.#s=="string"&&this.#s!==""?this.#s+" ":"",i=typeof this.text=="string"?" "+this.text:"",a=typeof this.#l=="string"&&this.#l!==""?" "+this.#l:"";return r+n+i+a}clear(){if(!this.#c||!this.#r.isTTY)return this;this.#r.cursorTo(0);for(let t=0;t<this.#n;t++)t>0&&this.#r.moveCursor(0,-1),this.#r.clearLine(1);return (this.#d||this.lastIndent!==this.#d)&&this.#r.cursorTo(this.#d),this.lastIndent=this.#d,this.#n=0,this}render(){return this.#u?this:(this.clear(),this.#r.write(this.frame()),this.#n=this.#e,this)}start(t){return t&&(this.text=t),this.#u?this:this.#c?this.isSpinning?this:(this.#o.hideCursor&&I$.hide(this.#r),this.#o.discardStdin&&Qc.stdin.isTTY&&(this.#t=true,N$.start()),this.render(),this.#p=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#r.write(`- ${this.text}
|
|
193
193
|
`),this)}stop(){return this.#c?(clearInterval(this.#p),this.#p=void 0,this.#i=0,this.clear(),this.#o.hideCursor&&I$.show(this.#r),this.#o.discardStdin&&Qc.stdin.isTTY&&this.#t&&(N$.stop(),this.#t=false),this):this}succeed(t){return this.stopAndPersist({symbol:gR.success,text:t})}fail(t){return this.stopAndPersist({symbol:gR.error,text:t})}warn(t){return this.stopAndPersist({symbol:gR.warning,text:t})}info(t){return this.stopAndPersist({symbol:gR.info,text:t})}stopAndPersist(t={}){if(this.#u)return this;let o=t.prefixText??this.#s,n=this.#y(o," "),r=t.symbol??" ",i=t.text??this.text,s=typeof i=="string"?(r?" ":"")+i:"",l=t.suffixText??this.#l,c=this.#b(l," "),u=n+r+s+c+`
|
|
@@ -259,7 +259,7 @@ ${z.prettifyError(s)}`:`: ${G(s)}`;C.warn(`Project config at ${e} does not match
|
|
|
259
259
|
${r.map(i=>i.configFilePath).join(`
|
|
260
260
|
`)}`);if(r.length===0)throw new ue(`No valid Momentic project file (${Gs}) was found in the current directory or any parent directory. Run this command from inside your Momentic project, or pass the '-c / --config' flag pointing at your ${Gs}.`);return C.debug(`Found valid project configuration at ${r[0].configFilePath}`),r[0]}async function BYe(e){let t=DYe(e);if(!t||!t.projects||!t.projects.length)return;let o=t.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${Gs}`)),n=AbortSignal.timeout(2e3),r;try{r=await yd(o,{cwd:cwd(),maxDepth:MT,ignore:[],nodir:!0,signal:n});}catch(a){throw C.error({err:a},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${qR} is misconfigured.`),a}let i=[];for(let a of r){let s=mn__default.join(cwd(),a),l=K1(s);l&&i.push({configFilePath:s,config:l,rootDir:dirname(s)});}return i}async function Y1(e,t){if(e){e=mn__default.resolve(e);let n=K1(e);return n?[{config:n,configFilePath:e,rootDir:mn__default.dirname(e)}]:(console.error(`No valid Momentic project file found at ${e}.`),t||process.exit(1),[])}if(existsSync(qR)){let n=await BYe(qR);if(n)return n}return FYe()}function ry(e,t){let o=ds.stringify(e);writeFileSync(t,o);}var UYe={name:" Project name. Appears in reports and in the Momentic app.",include:' Globs that select test and module files, relative to this file. Add exclude: ["out/**"] to skip files.',retries:" How many times Momentic reruns a failed test. Example: retries: 2",parallel:' How many tests run at once. "auto" picks a count from your CPU cores, and a higher one on hosted browsers. Example: parallel: 4',recordVideo:" Record video of each test: true, false, or on-fail (keep video for failed tests only).",gitMainBranch:" Main branch of the repo. New branches seed their step cache from the nearest commit on it. See https://momentic.ai/docs/reliability/step-cache",fileFormat:" Test file format version.",advanced:" Advanced options. See https://momentic.ai/docs/configuration/advanced",browser:" Browser settings for every test. See https://momentic.ai/docs/configuration/browser",ai:" AI agent settings. See https://momentic.ai/docs/configuration/ai",environments:" One entry per environment. Read envVariables in tests as {{env.NAME}}. See https://momentic.ai/docs/configuration/environment-variables"},zYe=[" Store a separate step cache per environment. See https://momentic.ai/docs/reliability/step-cache"," isolateCachesByEnvironment: true"].join(`
|
|
261
261
|
`),jYe=[" Run tests on Momentic hosted browsers instead of local Chromium."," Use this in CI to run tests in parallel without adding machines. See https://momentic.ai/docs/running-tests/hosted-test-environments"," remoteBrowser: true"," Skip some browser readiness and stability waits. Faster, less accurate on dynamic sites. See https://momentic.ai/docs/running-tests/performance"," turbo: true"," defaultBrowserType: Chromium"," timezone: America/Los_Angeles"," pageLoadTimeoutMs: 8000"," smartWaitingTimeoutMs: 5000"].join(`
|
|
262
|
-
`);function Wh(e,t,{commentBefore:o,comment:n}){let r=e.items.find(i=>ds.isPair(i)&&ds.isScalar(i.key)&&i.key.value===t);if(r&&(o!==void 0&&ds.isScalar(r.key)&&(r.key.commentBefore=o),n!==void 0)){let i=r.value;(ds.isMap(i)||ds.isSeq(i)||ds.isScalar(i))&&(i.comment=n);}}function Yae(e){let t=new ds.Document(e);if(!ds.isMap(t.contents))return t.toString();let o=true;for(let a of t.contents.items){if(!ds.isPair(a)||!ds.isScalar(a.key))continue;let s=a.key.value,l=Object.entries(UYe).find(([c])=>c===s)?.[1];l!==void 0&&(a.key.commentBefore=l),a.key.spaceBefore=!o,o=false;}Wh(t.contents,"advanced",{comment:zYe}),Wh(t.contents,"browser",{comment:jYe});let n=t.get("advanced");ds.isMap(n)&&Wh(n,"aiActionShorthand",{commentBefore:" Save short AI action goals as bare strings. See https://momentic.ai/docs/configuration/advanced#advanced-aiactionshorthand"});let r=t.get("browser");ds.isMap(r)&&(Wh(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),Wh(r,"disableSecondaryCacheResolution",{commentBefore:" Skip fuzzy cache matching so a cached step does not resolve to the wrong element. See https://momentic.ai/docs/configuration/browser#browser-disablesecondarycacheresolution"}));let i=t.get("ai");return ds.isMap(i)&&(Wh(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),Wh(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),Wh(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Le="v1",J1="cli",iy="3.58.
|
|
262
|
+
`);function Wh(e,t,{commentBefore:o,comment:n}){let r=e.items.find(i=>ds.isPair(i)&&ds.isScalar(i.key)&&i.key.value===t);if(r&&(o!==void 0&&ds.isScalar(r.key)&&(r.key.commentBefore=o),n!==void 0)){let i=r.value;(ds.isMap(i)||ds.isSeq(i)||ds.isScalar(i))&&(i.comment=n);}}function Yae(e){let t=new ds.Document(e);if(!ds.isMap(t.contents))return t.toString();let o=true;for(let a of t.contents.items){if(!ds.isPair(a)||!ds.isScalar(a.key))continue;let s=a.key.value,l=Object.entries(UYe).find(([c])=>c===s)?.[1];l!==void 0&&(a.key.commentBefore=l),a.key.spaceBefore=!o,o=false;}Wh(t.contents,"advanced",{comment:zYe}),Wh(t.contents,"browser",{comment:jYe});let n=t.get("advanced");ds.isMap(n)&&Wh(n,"aiActionShorthand",{commentBefore:" Save short AI action goals as bare strings. See https://momentic.ai/docs/configuration/advanced#advanced-aiactionshorthand"});let r=t.get("browser");ds.isMap(r)&&(Wh(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),Wh(r,"disableSecondaryCacheResolution",{commentBefore:" Skip fuzzy cache matching so a cached step does not resolve to the wrong element. See https://momentic.ai/docs/configuration/browser#browser-disablesecondarycacheresolution"}));let i=t.get("ai");return ds.isMap(i)&&(Wh(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),Wh(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),Wh(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Le="v1",J1="cli",iy="3.58.1";var HYe=9e4,$Ye=3,GYe=1500,VYe=15e3,WYe=6e4,zo=class extends Error{code;status;rawError;retryAfterMs;constructor(t,o,n,r={}){super(n,r),this.code=r.code,this.status=t,this.rawError=o,this.retryAfterMs=r.retryAfterMs;}},X1=class extends ue{constructor(t,o={}){super(t,o),this.name="RateLimitExceededError";}},Q1=class extends ue{constructor(t,o={}){super(t,o),this.name="PlanLimitExceededError";}},KR=class extends ue{constructor(t,o={}){super(t,o),this.name="AuthenticationError";}};function qYe(e){if(!e)return;let t=Number(e.trim());if(Number.isFinite(t)&&t>=0)return t*1e3;let o=Date.parse(e);if(!Number.isNaN(o))return Math.max(o-Date.now(),0)}async function KYe(e){let t=await e.text();try{let o=JSON.parse(t);if(typeof o!="object"||o===null)return {rawError:t};let n="code"in o?o.code:void 0,r="error"in o?o.error:void 0;return {...typeof n=="string"?{code:n}:{},rawError:typeof r=="string"?r:t}}catch{return {rawError:t}}}var Z1=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(t){let o={"Content-Type":"application/json"};return (o[KP]=iy),(o[cee]=J1),o}async sendRequest(t,o){let{retries:n=$Ye,requestTimeoutMs:r=HYe,initialRetryDelayMs:i=GYe,maxRetryDelayMs:a=VYe,onFailedRequest:s}=o,l=n,c=n,u,d={path:t,baseUrl:this.baseUrl,method:o.method};for(;l>0;)try{return l--,await this.sendSingleRequestHelper(t,o,r)}catch(m){u=m;try{s?.(u);}catch{}let p=m instanceof zo&&m.status===429?m:void 0;if(m instanceof zo&&!p&&m.status>=400&&m.status<500)throw m.status===402?new Q1(m.rawError,{cause:m}):m.status===401||m.status===403?new KR(m.rawError,{cause:m}):m;if(m instanceof zo&&m.status===dee)throw m;if(m instanceof Error&&m.name==="AbortError"&&!o.signal?.aborted&&(u=new zs),p&&(l===0||o.signal?.aborted))throw new X1(`The Momentic API rate limited ${o.method} ${t} after ${c} ${c===1?"attempt":"attempts"}: ${p.rawError} Run fewer tests at once, or try again in a minute.`,{cause:p});if(l===0||o.signal?.aborted)throw u;let h=c-l,g=Math.min(i*Math.pow(2,h-1),a);if(p&&(g=Math.min(Math.max(g,p.retryAfterMs??0),WYe)),await JO(g,o.signal),o.signal?.aborted)throw u}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(t,o,n){let r={path:t,baseUrl:this.baseUrl,method:o.method};o.signal?.throwIfAborted();let i=new AbortController,a=setTimeout(()=>i.abort(),n),s=()=>i.abort();o.signal&&o.signal.addEventListener("abort",s,{once:true});let l=Date.now(),c=o.body?JSON.stringify(o.body):void 0,u={...this.getHeaders({serializedBody:c,method:o.method,path:t}),...o.extraHeaders};try{let d=await fetch(`${this.baseUrl}${t}`,{method:o.method,body:c,headers:u,signal:i.signal}),m=o.responseHeadersObject;if(m&&d.headers.forEach((h,g)=>{m[g.toLowerCase()]=h;}),!d.ok){let{code:h,rawError:g}=await KYe(d);throw new zo(d.status,g,`Request to ${o.method} ${t} failed with status ${d.status}: ${g}`,{code:h,retryAfterMs:qYe(d.headers.get("retry-after"))})}let p;if(d.status===204)p={};else if(o.responseType==="buffer"){let h=await d.arrayBuffer();p=Buffer.from(h);}else {let h=await d.text();try{p=JSON.parse(h);}catch{p=h;}}return this.logger&&o.logResponse===!0&&p&&this.logger.debug({result:p,status:d.status,durationMs:Date.now()-l,...r},"Got response from Momentic server"),p}finally{clearTimeout(a),o.signal&&o.signal.removeEventListener("abort",s);}}},ms=class extends Z1{apiKey;mode;runner;constructor(t){super(t),this.apiKey=t.apiKey,this.mode=t.mode,this.runner=t.runner,C.addRedactedValue(t.apiKey);}getHeaders(t){return {...super.getHeaders(t),Authorization:`Bearer ${this.apiKey}`,[lee]:this.mode,[YP]:this.runner}}};var aM=class extends Error{constructor(t,o){super(t),this.name="ParseError",this.type=o.type,this.field=o.field,this.value=o.value,this.line=o.line;}};function eG(e){}function Jae(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=eG,onError:o=eG,onRetry:n=eG,onComment:r}=e,i="",a=true,s,l="",c="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[y,b]=YYe(`${i}${f}`);for(let S of y)d(S);i=b,a=false;}function d(g){if(g===""){p();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),b=g[f+1]===" "?2:1,S=g.slice(f+b);m(y,S,g);return}m(g,"",g);}function m(g,f,y){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
|
|
263
263
|
`;break;case "id":s=f.includes("\0")?void 0:f;break;case "retry":/^\d+$/.test(f)?n(parseInt(f,10)):o(new aM(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:y}));break;default:o(new aM(`Unknown field "${g.length>20?`${g.slice(0,20)}\u2026`:g}"`,{type:"unknown-field",field:g,value:f,line:y}));break}}function p(){l.length>0&&t({id:s,event:c||void 0,data:l.endsWith(`
|
|
264
264
|
`)?l.slice(0,-1):l}),s=void 0,l="",c="";}function h(g={}){i&&g.consume&&d(i),a=true,s=void 0,l="",c="",i="";}return {feed:u,reset:h}}function YYe(e){let t=[],o="",n=0;for(;n<e.length;){let r=e.indexOf("\r",n),i=e.indexOf(`
|
|
265
265
|
`,n),a=-1;if(r!==-1&&i!==-1?a=Math.min(r,i):r!==-1?a=r:i!==-1&&(a=i),a===-1){o=e.slice(n);break}else {let s=e.slice(n,a);t.push(s),n=a+1,e[n-1]==="\r"&&e[n]===`
|
|
@@ -329,7 +329,7 @@ ${s}
|
|
|
329
329
|
`,E8e=1e4,w8e=6e4,wue=x__default.object({stream:x__default.boolean().optional(),type:x__default.literal("response.create").optional()}).passthrough(),R8e=wue.extend({stream:x__default.literal(true)});function Rue(e={}){let t=new r2(e),o=e.fetch??fetch;return async(n,r)=>{if(!I8e(n,r))return o(n,r);let i=await C8e(r?.body);if(!i)return o(n,r);let a=R8e.safeParse(i);return a.success?t.fetch({httpUrl:Cue(n),init:r,request:a.data}):o(n,r)}}var r2=class{constructor(t){this.options=t;}websocket;openPromise;latestResponseId;previousFullInput;pendingRequest;observedCompactionItems=new Set;async fetch({httpUrl:t,init:o,request:n}){if(this.pendingRequest)return (this.options.fetch??fetch)(t,o);this.observedCompactionItems.clear();let r={"momentic.websocket_has_pending_request":false,"momentic.websocket_ready_state":this.websocket?.readyState??-1};await de({name:"openai.responses_websocket.fetch.started",attributes:r,fn:async()=>{}});let i=await de({name:"openai.responses_websocket.open",attributes:r,fn:()=>this.open({httpUrl:t,init:o})}),a=new ReadableStream({start:async s=>{let l={controller:s,fullRequest:n,lastMessageAtMs:Date.now(),maxMessageGapMs:0,messageTimeout:void 0,sentContinuation:false,startedStreaming:false,retryingFullContext:false};this.pendingRequest=l;let c={"momentic.websocket_ready_state":i.readyState};await de({name:"openai.responses_websocket.send.started",attributes:c,fn:async()=>{}}),await de({name:"openai.responses_websocket.send",attributes:c,fn:async()=>this.sendRequest({websocket:i,pendingRequest:l})});},cancel:()=>{this.clearMessageTimeout(this.pendingRequest),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(a,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform"}})}async open({httpUrl:t,init:o}){return this.websocket?.readyState===n2.OPEN?this.websocket:this.openPromise?this.openPromise:(this.openPromise=new Promise((n,r)=>{let i=new n2(x8e(t),{headers:{...Eue(o?.headers),...Eue(this.options.getHeaders?.({httpUrl:t,init:o}))}}),a=setTimeout(()=>{i.terminate(),r(new Error("Timed out opening OpenAI responses websocket"));},E8e);i.once("open",()=>{clearTimeout(a),this.websocket=i,this.openPromise=void 0,n(i);}),i.once("error",s=>{clearTimeout(a),this.resetConnection(),r(s);}),i.on("close",(s,l)=>{let c={"momentic.websocket_close_code":s,"momentic.websocket_close_reason":l.toString(),"momentic.websocket_had_pending_request":!!this.pendingRequest,"momentic.websocket_max_message_gap_ms":this.pendingRequest?.maxMessageGapMs??0};this.resetConnection(),de({name:"openai.responses_websocket.closed",attributes:c,fn:async()=>{}});}),i.on("message",s=>{this.handleMessage(s);});}),this.openPromise)}sendRequest({websocket:t,pendingRequest:o}){let n=this.buildPayload(o.fullRequest);o.sentContinuation=!!n.previous_response_id,this.sendPayload({websocket:t,pendingRequest:o,payload:n});}sendPayload({websocket:t,pendingRequest:o,payload:n}){o.lastMessageAtMs=Date.now(),this.armMessageTimeout(o);try{t.send(JSON.stringify(n),r=>{r&&this.failPendingRequest({pendingRequest:o,err:r});});}catch(r){this.failPendingRequest({pendingRequest:o,err:ri(r)});}}buildPayload(t){let{background:o,stream:n,...r}=t,i={...r,type:"response.create"};_8e({payload:i,compactThreshold:this.options.compactThreshold});let a=Array.isArray(t.input)?t.input:void 0,s=this.latestResponseId&&a&&this.previousFullInput?Sue({currentInput:a,previousInput:this.previousFullInput}):void 0;return s&&s.length>0?(i.input=s,i.previous_response_id=this.latestResponseId,i):(delete i.previous_response_id,i)}handleMessage(t){let o=this.pendingRequest;if(!o)return;let n=Date.now();o.maxMessageGapMs=Math.max(o.maxMessageGapMs,n-o.lastMessageAtMs),o.lastMessageAtMs=n,this.armMessageTimeout(o);let r=O8e(t),i;try{i=JSON.parse(r);}catch(l){this.failPendingRequest({pendingRequest:o,err:ri(l)});return}let a=r8.safeParse(i),s=a.success?a.data:void 0;if(P8e(s)&&o.sentContinuation&&!o.startedStreaming&&!o.retryingFullContext&&this.websocket?.readyState===n2.OPEN){this.latestResponseId=void 0,this.previousFullInput=void 0,o.retryingFullContext=true,o.sentContinuation=false;let l=this.buildPayload(o.fullRequest);delete l.previous_response_id,this.sendPayload({websocket:this.websocket,pendingRequest:o,payload:l});return}if(o.startedStreaming=true,UM(i)){let l=yue(i),c=l??"compaction-without-id",u=this.options.compactThreshold;u!==void 0&&!this.observedCompactionItems.has(c)&&(this.observedCompactionItems.add(c),this.options.onCompaction?.({compactThreshold:u,itemId:l,transport:"websocket"}));}else o.controller.enqueue(k8e(i));if(s?.type==="response.completed"){this.latestResponseId=s.response.id,this.previousFullInput=Array.isArray(o.fullRequest.input)?o.fullRequest.input:void 0,this.closePendingRequest("completed");return}s?.type==="error"&&(this.latestResponseId=void 0,this.previousFullInput=void 0,this.closePendingRequest("error"));}closePendingRequest(t){let o=this.pendingRequest;o&&(this.clearMessageTimeout(o),o.controller.enqueue(new TextEncoder().encode(A8e)),o.controller.close(),this.pendingRequest=void 0,de({name:"openai.responses_websocket.response_finished",attributes:{"momentic.websocket_max_message_gap_ms":o.maxMessageGapMs,"momentic.websocket_response_outcome":t,"momentic.websocket_sent_continuation":o.sentContinuation},fn:async()=>{}}));}resetConnection(){this.websocket=void 0,this.openPromise=void 0,this.latestResponseId=void 0,this.previousFullInput=void 0;let t=this.pendingRequest;t&&(this.clearMessageTimeout(t),t.controller.error(new Error("OpenAI responses websocket connection closed")),this.pendingRequest=void 0);}armMessageTimeout(t){this.clearMessageTimeout(t);let o=this.options.messageTimeoutMs??w8e;t.messageTimeout=setTimeout(()=>{let n={"momentic.websocket_message_timeout_ms":o,"momentic.websocket_max_message_gap_ms":t.maxMessageGapMs,"momentic.websocket_ready_state":this.websocket?.readyState??-1,"momentic.websocket_retrying_full_context":t.retryingFullContext,"momentic.websocket_sent_continuation":t.sentContinuation,"momentic.websocket_started_streaming":t.startedStreaming};this.failPendingRequest({pendingRequest:t,err:new Error(`OpenAI responses websocket timed out after ${o}ms without receiving a message`)}),de({name:"openai.responses_websocket.message_timeout",attributes:n,fn:async()=>{}});},o);}clearMessageTimeout(t){t?.messageTimeout&&(clearTimeout(t.messageTimeout),t.messageTimeout=void 0);}failPendingRequest({pendingRequest:t,err:o}){if(this.pendingRequest!==t)return;this.clearMessageTimeout(t),this.pendingRequest=void 0,t.controller.error(o);let n=this.websocket;this.resetConnection(),n?.terminate();}};async function C8e(e){let t=await jM(e);if(!t)return;let o=wue.safeParse(JSON.parse(t));return o.success?o.data:void 0}function I8e(e,t){return (t?.method??(e instanceof Request?e.method:"GET")).toUpperCase()==="POST"&&Cue(e).endsWith("/responses")}function Cue(e){return e instanceof Request?e.url:e.toString()}function x8e(e){let t=new URL(e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}function Eue(e){if(!e)return {};if(e instanceof Headers){let t={};return e.forEach((o,n)=>{t[n]=o;}),t}return Array.isArray(e)?Object.fromEntries(e):e}function _8e({payload:e,compactThreshold:t}){t&&(e.context_management=[{type:"compaction",compact_threshold:t}]);}function P8e(e){return e?.type==="error"&&e.code==="previous_response_not_found"}function O8e(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 k8e(e){return new TextEncoder().encode(`data: ${JSON.stringify(e)}
|
|
330
330
|
|
|
331
331
|
`)}function i2(e){return {specificationVersion:e.specificationVersion,provider:e.provider,modelId:e.modelId,supportedUrls:e.supportedUrls,doGenerate:t=>e.doGenerate(Iue(t)),doStream:t=>e.doStream(Iue(t))}}function Iue(e){return {...e,providerOptions:{...e.providerOptions,openai:{...e.providerOptions?.openai,store:false}}}}function VM(e){return async(t,o)=>{let n=N8e(o?.body);if(!n)return fetch(t,o);let r=e?.priorityServiceTier===true,i=e?.promptCacheKey;n.store=false,L8e(n),r&&(n.service_tier="priority"),i&&(n.prompt_cache_key=i);let a=await fetch(t,{...o,body:JSON.stringify(n)});return D8e({capturePath:e?.requestCapturePath,input:t,status:a.status,body:n}),a}}function L8e(e){if(e.store!==false)return;let t="reasoning.encrypted_content",o=e.include;if(!Array.isArray(o)){e.include=[t];return}o.includes(t)||(e.include=[...o,t]);}function N8e(e){if(typeof e=="string")try{let t=JSON.parse(e);return xue(t)?t:void 0}catch{return}}function D8e({capturePath:e,input:t,status:o,body:n}){e&&appendFileSync(e,`${JSON.stringify({url:B8e(t),status:o,request:F8e(n)})}
|
|
332
|
-
`);}function F8e(e){let t=e.reasoning,o=e.include;return {model:e.model,service_tier:e.service_tier,prompt_cache_key:e.prompt_cache_key,include:Array.isArray(o)?o.filter(n=>typeof n=="string"):void 0,reasoning:xue(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function xue(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function B8e(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var U8e=3e5;function WM(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var z8e=z.object({input:z.array(z.custom()),instructions:z.unknown().optional(),model:z.string(),tools:z.unknown().optional()}).passthrough(),j8e=z.object({output:z.array(z.object({type:z.literal("compaction"),id:z.string(),encrypted_content:z.string()})).min(1),usage:z.object({dropped_message_count:z.number().int().nonnegative(),input_tokens:z.number().int().nonnegative(),output_tokens:z.number().int().nonnegative()})});function _ue(e={}){let t=e.compactThreshold??U8e,o=VM(e.requestOptions),n;return async(r,i)=>{let a=i?.method??(r instanceof Request?r.method:"GET"),s=new URL(r instanceof Request?r.url:r.toString());if(a.toUpperCase()!=="POST"||!s.pathname.endsWith("/responses"))return o(r,i);let l=typeof i?.body=="string"?i.body:void 0;if(!l)return o(r,i);let c;try{c=JSON.parse(l);}catch{return o(r,i)}let u=z8e.safeParse(c);if(!u.success)return o(r,i);let d=u.data.input,m=n?zM({currentInput:d,previousInput:n.boundaryInput,compactionItem:n.item}):void 0;n&&!m&&(n=void 0);let p=m??d;if((m&&n?n.outputTokens:0)+Rt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await H8e({url:s,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];n={boundaryInput:d,item:f,outputTokens:g.usage.output_tokens},p=[f],e.onCompaction?.({compactThreshold:t,droppedMessageCount:g.usage.dropped_message_count,inputTokens:g.usage.input_tokens,itemId:f.id,outputTokens:g.usage.output_tokens});}}return o(r,{...i,body:JSON.stringify({...u.data,input:p,previous_response_id:void 0})})}}async function H8e({url:e,init:t,model:o,providerInput:n}){e.pathname=`${e.pathname.replace(/\/$/,"")}/compact`;let r=await fetch(e,{...t,body:JSON.stringify({input:n,model:o})});if(!r.ok)return;let i;try{i=await r.json();}catch{return}let a=j8e.safeParse(i);return a.success?a.data:void 0}var V8e="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function og(e){let{apiKey:t,sessionId:o,loggerTags:n,runner:r,parentTraceId:i}=e,a={Authorization:`Bearer ${t}`,[KP]:iy,...o&&{[uee]:o},...r&&{[YP]:r},...i&&{[mee]:i},...n&&{[JP]:JSON.stringify(n)}};for(let[s,l]of Object.entries(a))a[s]=l.replace(/[\u0100-\uffff]/g,c=>"\\u"+c.charCodeAt(0).toString(16).padStart(4,"0"));return a}var Pue="bedrock/",Oue="azure/",kue="anthropic/",Mue=e=>t=>{let o=og(e),n=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Pue)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Pue.length))}`:t.startsWith(Oue)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(Oue.length))}`:t.startsWith(kue)&&(n=t.slice(kue.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(n)}`),createAnthropic({baseURL:r,headers:o,apiKey:e.apiKey})(n)},Lue=e=>t=>{let o=og(e),n=e.useOpenAIResponsesWebSocket??false,r=n?e.openAIResponsesWebSocketCompactThreshold??W8e(process.env[V8e])??$M(t):e.openAIResponsesCompactThreshold??$M(t),i=a=>e.onOpenAINativeCompaction?.({...a,model:t});return i2(GT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:o,apiKey:e.apiKey,fetch:n?Rue({compactThreshold:r,onCompaction:i}):o2({compactThreshold:r,onCompaction:i})})(t))},Nue=e=>t=>{let o=og(e),n=VM(e.xai);return WM(t)&&(n=_ue({requestOptions:e.xai,onCompaction:r=>e.onXAINativeCompaction?.({...r,model:t})})),createXai({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:o,apiKey:e.apiKey,fetch:n}).responses(t)},Due=e=>t=>{let o=og(e);return i2(GT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:o,apiKey:e.apiKey,fetch:o2({compactThreshold:e.openAIResponsesCompactThreshold??$M(t),onCompaction:n=>e.onOpenAINativeCompaction?.({...n,model:t})})})(t))};function Fue(e){return t=>o=>{let n=og(t);return GT({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${o}`,headers:n,apiKey:t.apiKey}).chat(o)}}var Bue=Fue("azure/deepseek"),Uue=Fue("azure/kimi"),zue=e=>t=>{let o=og(e);return GT({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:o,apiKey:e.apiKey}).chat(t)},jue=e=>t=>{let o=og(e);return t2({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:o,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Hue=e=>t=>{let o=og(e);return wG({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:o,apiKey:e.apiKey})(t)};function W8e(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function $ue(e){let t=ht.safeParse(e[OH]);return delete e[OH],t.success?t.data:void 0}var Cr=class extends ms{agentConfig;apiPathPrefix;constructor(t,o){let n={...Xp,...t};a_(n),super(o),this.apiPathPrefix=o.apiPathPrefix??`/${Le}`,this.agentConfig=n;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...Y8e(t),sessionId:o.sessionId,parentTraceId:o.parentTraceId},signal:o.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[JP]:JSON.stringify(a2(o))}});return LJ.parse(n)}async rankChunksWithAi(t,o){let n={...t,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:o.abortSignal});return _X.parse(r)}async rankChunksWithRag(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:iy,...t},signal:o.abortSignal});return xX.parse(n)}async getScreenshotFromS3(t){let o=await this.sendRequest(`${this.apiPathPrefix}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z.string().parse(o)}async getElementLocation(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags,useMemory:o.useMemory,cacheBustReason:o.cacheBustReason,effort:o.effort,agentConfigVersion:this.agentConfig?.locator},r={},i=()=>{let s=$ue(r);s&&o.onEffectiveEffort?.(s);},a=await this.sendRequest(`${this.apiPathPrefix}/web-agent/locate-element`,{method:"POST",body:n,signal:o.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),gee.parse(a)}async getAssertionResult(t,o){let n={...t,disableCache:!!o.disableCache,useConsensus:!!o.useConsensus,attemptNumber:o.attemptNumber,loggerTags:o.loggerTags,useMemory:o.useMemory,effort:o.effort,agentConfigVersion:this.agentConfig?.assertion},r={},i=()=>{let s=$ue(r);s&&o.onEffectiveEffort?.(s);},a=await this.sendRequest(`${this.apiPathPrefix}/web-agent/assertion`,{method:"POST",body:n,signal:o.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),kH.parse(a)}async getLintStepResult(t,o){let n={...t,disableCache:!!o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/lint/step`,{method:"POST",body:n,signal:o.abortSignal});return hee.parse(r)}async getVisualAssertionResult(t,o){let n={...t,disableCache:!!o.disableCache,useConsensus:!!o.useConsensus,attemptNumber:o.attemptNumber,loggerTags:o.loggerTags,useMemory:o.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/visual-assertion`,{method:"POST",body:n,signal:o.abortSignal});return kH.parse(r)}async getAiActionCommand(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return pee.parse(n)}async getMultiturnAiActionCommand(t,o){return await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal})}async getMultiturnAiActionEvaluation(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return Hz.parse(n)}async getReverseMappedDescription(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return fee.parse(n)}async getTextExtraction(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/text-extraction`,{method:"POST",body:n,signal:o.abortSignal});return jz.parse(r)}async getPageSummary(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/page-summary`,{method:"POST",body:n,signal:o.abortSignal});return kJ.parse(r)}async getSmartWaitingDecision(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/smart-waiting`,{method:"POST",body:n,signal:o.abortSignal});return MJ.parse(r)}async getKnowledgeSuggestion(t,o){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return sE.parse(n)}async getExtractedKeywords(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/extract-keywords`,{method:"POST",body:t,signal:o.abortSignal});return HX.parse(n)}async getAutohealingProposal(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return IJ.parse(n)}async getFailureRecoveryProposal(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return PJ.parse(n)}async getFailureRecoveryPlan(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:o.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:o.abortSignal});return _J.parse(n)}async getFailureRecoveryMemory(t,o){try{let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return q8.parse(n)}catch(n){return o.logger.warn({err:n},"Failed to read failure recovery memory"),{failureCount:0}}}async recordFailureRecoveryOutcome(t,o){try{await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:5e3});}catch(n){o.logger.warn({err:n},"Failed to record failure recovery outcome");}}async getOrgLevelFailureRate(t,o){let n=t.environment?`?environment=${encodeURIComponent(t.environment)}`:"";try{let r=await this.sendRequest(`${this.apiPathPrefix}/org-level-failure-rate${n}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return iO.parse(r)}catch(r){return o.logger.warn({err:r},"Failed to read org-level failure rate"),{skip:false,failed:0,total:0}}}async getIframeRegex(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return iJ.parse(n)}createAgentTrace(t){let o=randomUUID(),{completionType:n,runId:r,orgId:i,logger:a}=t,s=a.bindings().sessionId,l=async c=>{try{await this.sendRequest(`${this.apiPathPrefix}/traces/result-classification`,{method:"POST",body:{id:o,completionType:n,input:{runId:r},sessionId:s,...c,metadata:{orgId:i,runId:r,...c.metadata}}});}catch(u){a.warn({err:u},"Failed to upsert result classification trace");}};return l({}),{id:o,update:l}}getAnthropicModelFactory(t){return this.buildModelFactory(Mue,t)}getModelProviderCandidate(t,o){return t.startsWith("bedrock/")?{id:"anthropic-bedrock",model:this.getAnthropicBedrockModelFactory(o)(t.slice(8))}:t.startsWith("azure/claude-")?{id:"anthropic-foundry",model:this.getAnthropicFoundryModelFactory(o)(t.slice(6))}:t.startsWith("anthropic/")?{id:"anthropic",model:this.getAnthropicModelFactory(o)(t)}:t.startsWith("openrouter/")?{id:"openrouter",model:this.getOpenRouterModelFactory(o)(t.slice(11))}:t.startsWith("fireworks/")?{id:"fireworks",model:this.getFireworksModelFactory(o)(t)}:t.startsWith("xai/")?{id:"xai",model:this.getXAIModelFactory(o)(t.slice(4))}:t.startsWith("vertex/gemini-")?{id:"google-vertex",model:this.getVertexGeminiModelFactory(o)(t.slice(7))}:t.startsWith("azure/")?{id:"azure",model:this.getAzureOpenAIModelFactory(o)(t.slice(6))}:t.startsWith("claude-")?{id:"anthropic",model:this.getAnthropicModelFactory(o)(t)}:{id:"openai",model:this.getOpenAIModelFactory(o)(t)}}getAnthropicBedrockModelFactory(t){let o=this.getAnthropicModelFactory(t);return n=>o(`bedrock/${n}`)}getAnthropicFoundryModelFactory(t){let o=this.getAnthropicModelFactory(t);return n=>o(`azure/${n}`)}getOpenAIModelFactory(t){let{sessionId:o,logger:n,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:a}=t;return Lue({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:a2(t),sessionId:o,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:a,onOpenAINativeCompaction:s=>{n.info({promptType:r,nativeCompaction:s},"Native conversation compaction completed");}})}getXAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Nue,t,{onXAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(jue,t)}getAzureOpenAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Due,t,{onOpenAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Bue,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Uue,t)}getFireworksModelFactory(t){return this.buildModelFactory(zue,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Hue,t)}buildModelFactory(t,o,n){let{sessionId:r,parentTraceId:i,xai:a}=o;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:a2(o),sessionId:r,runner:this.runner,parentTraceId:i,xai:a,...n})}};function a2(e){return {...fo(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function Y8e(e){return {...e,messages:e.messages.map(s2)}}function s2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(s2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,o])=>[t,s2(o)]))}async function qM(e,t,o){let{size:n}=await nn__default.promises.stat(o),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(nk(n)):void 0,a;if(r.protocol==="http:")a=request;else if(r.protocol==="https:")a=request$1;else throw new Error(`Unsupported signed upload URL protocol: ${r.protocol}`);return new Promise((s,l)=>{let c=nn__default.createReadStream(o),u=new Promise(f=>c.once("close",f)),d,m=0,p=false,h=false,g=f=>{h||(h=true,c.destroy(),d.destroy(),u.then(()=>l(f)));};try{d=a(r,{method:"PUT",signal:i,headers:{"Content-Length":n,"Content-Type":t}},f=>{p=!0;let y=m<n,b=f.socket;c.unpipe(d),c.destroy(),!d.destroyed&&!d.writableEnded&&d.end();let S=f.statusCode??500,E=S===204||S===205||S===304;if(y&&S>=200&&S<300&&!E){h=!0,d.destroy(),f.destroy(),b.destroy(),u.then(()=>l(new Error(`Upload server returned ${S} before the request body was fully written.`)));return}let v=[];f.on("data",R=>v.push(R)),f.on("error",g),f.on("end",()=>{if(h)return;h=!0,d.destroy(),y&&b.destroy();let R=new Headers;for(let[P,I]of Object.entries(f.headers))if(Array.isArray(I))for(let _ of I)R.append(P,_);else I!==void 0&&R.set(P,I);let w=E?null:Buffer.concat(v);u.then(()=>{try{s(new Response(w,{headers:R,status:S,statusText:f.statusMessage}));}catch(P){l(P);}});});});}catch(f){c.destroy(),u.then(()=>l(f));return}d.on("error",f=>{p||g(f);}),c.on("data",f=>{m+=Buffer.byteLength(f);}),c.on("error",g),c.pipe(d);})}function Vue(e,t,o,n){return fetch(e,{method:"PUT",body:o,signal:n,headers:{"Content-Type":t}})}var Q8e=2e3,Nt=class extends ms{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Le}`;}getAppUrl(){return jS(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Le}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(o){throw o instanceof KR?new ue(`Your Momentic API key was rejected (${o.message}). Run your CLI's \`login\` command or set a valid MOMENTIC_API_KEY. If the key was revoked or expired, create a new one at https://app.momentic.ai/settings/api-keys.`,{cause:o}):o instanceof zo?o.status>=400&&o.status<500?new ue(o.rawError,{cause:o}):new Error(`Momentic server error (HTTP ${o.status}). Please try again in a moment.`,{cause:o}):o instanceof ue?o: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:o})}return Pee.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Le}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Mee.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Le}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return N8.parse(t).announcements}async createMoSessionUpload(t,o){let n;try{n=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof zo&&r.status===404?new ue(`Mo session ${t} was not found.`,{cause:r}):r}return j9.parse(n)}async createMoSessionDownload(t,o,n){let r;try{r=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3,signal:n});}catch(i){throw i instanceof zo&&i.status===404?new ue(i.rawError,{cause:i}):i}return z9.parse(r)}async listProductUpdates(t=3){let o=await this.sendRequest(`/${Le}/product-updates?limit=${t}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return ate.parse(o).updates}async getQuotaStatus(){let t=await this.sendRequest(`/${Le}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Oee.parse(t)}async createRemoteBrowserConnection(t){let o=await this.sendRequest(`/${Le}/browsers/connection`,{method:"POST",body:{...t?.envName?{envName:t.envName}:{},...t?.runAttemptId?{runAttemptId:t.runAttemptId}:{},...t?.runGroupId?{runGroupId:t.runGroupId}:{},...t?.testId?{testId:t.testId}:{},...t?.testName?{testName:t.testName}:{},...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:12e4});return ete.parse(o)}async tryCreateBrowserFleetAccessToken(t,o){let n;try{n=await this.sendRequest(`/${Le}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});}catch(i){if(i instanceof zo&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=Zee.parse(n);return "network"in r?r:null}async bulkGetRunStatus(t){let o=await this.sendRequest(`/${Le}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Cee.parse(o)}async getOrgLevelFailureRate(t){let o=t?`?environment=${encodeURIComponent(t)}`:"",n=await this.sendRequest(`/${Le}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return iO.parse(n)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Le}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t){let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return QP.parse(o)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Le}/traces/interactive-agent-feedback`,{method:"POST",body:t,retries:1,requestTimeoutMs:2e3}).catch(o=>{});}catch(o){}return Promise.resolve()}async getResultClassificationCacheEntries(t){let o=await this.sendRequest(`/${Le}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return fte.parse(o)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Le}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Le}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let o=await this.sendRequest(`/${Le}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return s8.parse(o)}async saveRunClassification(t,o){await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,o){let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=ZP.parse(n),i=await Vue(r,"application/zip",o,AbortSignal.timeout(nk(o.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Le}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let o=await this.sendRequest(`/${Le}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return bee.parse(o)}async updateStepCaches(t,o){await this.sendRequest(`/${Le}/cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,o){await this.sendRequest(`/${Le}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,o){let n=await this.sendRequest(`/${Le}/cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return Tee.parse(n)}async getSnapshotCacheForTest(t,o){let n=await this.sendRequest(`/${Le}/snapshot-cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return vee.parse(n)}async deleteStepCacheEntry(t,o){await this.sendRequest(`/${Le}/cache/entry`,{method:"DELETE",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let o=await this.sendRequest(`/${Le}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MH.parse(o)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:o,headers:n}){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:o,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,o){let n=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MH.parse(n)}async updateMobileStepCaches(t){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:o,headers:n}){let r=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:o,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return Aee[t](r)}async queueTests(t){let o=await this.sendRequest(`/${Le}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return yee.parse(o)}async uploadScreenshot(t){let o=await this.sendRequest(`/${Le}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return _ee.parse(o)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Le}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Le}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let o={};return {data:await this.sendRequest(`/${Le}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:o}),contentType:o["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${Le}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return kee.parse(t)}async acquireCacheLock(t,o){let n=await this.sendRequest(`/${Le}/result-cache/lock`,{method:"POST",body:t,signal:o,retries:3,requestTimeoutMs:3e4});return ute.parse(n)}async releaseCacheLock(t){await this.sendRequest(`/${Le}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Le}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(o){if(o instanceof Error&&o.message.includes("404"))return null;throw o}}async queueSuiteRuns(t){let o=await this.sendRequest(`/${Le}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Dee.parse(o)}async bulkGetRunGroupStatus(t){let o={runGroupIds:t},n=await this.sendRequest(`/${Le}/run-groups/status`,{method:"POST",body:o,retries:3,requestTimeoutMs:5e3});return EX.array().parse(n)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return nP.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}async getRun(t){try{let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ja.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}async getRunsByCommit(t){let n=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(n.push(...i.runs.map(a=>({...a,test:null}))),i.runs.length<100||r>=i.pageCount)break}return n}async getRunGroupRuns(t){let o=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Uee.parse(o)}async updateGithubPRHealRiskSummary(t,o){await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,o){try{await this.sendRequest(`/${Le}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(n){o.error({err:n},"Failed to upload proposed steps");}}async reportBillableEvents(t,o){try{await this.sendRequest(`/${Le}/billing/events`,{method:"POST",body:o,retries:10,requestTimeoutMs:1e4});}catch(n){t.error({err:n},"Failed to report billable event");}}async fetchTestFragment(t){let o=await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Fee.parse(o)}async patchTestFragment(t,o){await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,o){let n=await this.sendRequest(`/${Le}/results/tests/${t}`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return Bee.parse(n)}async listRuns(t){let o=await this.sendRequest(`/${Le}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return zee.parse(o)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Le}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return jee.parse(t)}async startProcessingResultsUpload(t,o){let n=await this.sendRequest(`/${Le}/results/uploads/${t}/process`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return Hee.parse(n)}async startExploreTraceUpload(t){let o=await this.sendRequest(`/${Le}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return Ite.parse(o)}async fetchIconKnowledgeBase(t){try{let o=await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Ste.parse(o)}catch(o){return t.error({err:o},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,o){try{await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(n){o.error({err:n},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:o,testId:n,environmentId:r,types:i,agentSubtype:a,limit:s,mode:l,scoreMultiplier:c,scopeBuckets:u,retries:d,signal:m,timeoutMs:p},h){try{let g=await this.sendRequest(`/${Le}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:o,testId:n,environmentId:r,types:i,agentSubtype:a,limit:s,mode:l,scoreMultiplier:c,scopeBuckets:u,timeoutMs:p},retries:d??3,requestTimeoutMs:p===void 0?5e3:p+Q8e,signal:m});return GJ.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let o=await this.sendRequest(`/${Le}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return Xz.parse(o)}async getMergeBaseCommitFromGithub(t,o,n,r){let i=new URLSearchParams;i.set("base",n),i.set("head",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(a)}async compareCommitsFromGithub({owner:t,repo:o,base:n,head:r},i){i?.throwIfAborted();let a=new URLSearchParams;a.set("base",n),a.set("head",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${o}/compare?${a.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return l9.parse(s)}async listGithubCommitsForPath({owner:t,repo:o,path:n,ref:r,limit:i}){let a=new URLSearchParams;a.set("path",n),a.set("ref",r),a.set("limit",String(i));let s=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits?${a.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return c9.parse(s).commits}async getGithubFileContent({owner:t,repo:o,path:n,ref:r}){let i=new URLSearchParams;i.set("path",n),i.set("ref",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return u9.parse(a).content??void 0}async getGithubBranchMetadata(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return d9.parse(i)}async createGithubPullRequest(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-requests`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return Q8.parse(r)}async createGithubCommit(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return Z8.parse(r)}async getGithubPullRequestTemplate(t,o){try{let n=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return h9.parse(n).template}catch(n){if(n instanceof zo&&n.status===404)return;throw n}}async getGithubPullRequestForBranch(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i;try{i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof zo&&a.status===404)return;throw a}return i9.parse(i)}async getCommitFromGithub(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(r)}async getGithubDefaultBranch(t,o){try{let n=await this.sendRequest(`/${Le}/git/github/${t}/${o}/default-branch`,{method:"GET"}),r=z.object({defaultBranch:z.string().min(1)}).safeParse(n);return r.success?r.data.defaultBranch:void 0}catch{return}}async getGithubCollaboratorsWithMergeAccess(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/collaborator-merge-access`,{method:"POST",body:{usernames:n},retries:3,requestTimeoutMs:15e3});return e9.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/related-pull-requests`,{method:"POST",body:{query:n},retries:2,requestTimeoutMs:6e4});return n9.parse(r)}async getGithubRelatedPullRequestDetails(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/related-pull-requests/${n}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z.object({pullRequest:iH}).parse(r).pullRequest}async getGithubCommitDetails(t,o,n){let r=t9.parse({shas:n}),i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return o9.parse(i)}async getMergedBranchFromGithub(t,o,n,r){let i=encodeURIComponent(n),a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return jH.parse(a)}async getMergeBaseCommitFromGitlab(t,o,n){let r=new URLSearchParams;r.set("base",o),r.set("head",n);let i=encodeURIComponent(t),a=await this.sendRequest(`/${Le}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return rR.parse(a)}async getGitlabMergeRequestForBranch(t,o){let n=new URLSearchParams;n.set("branch",o);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${Le}/git/gitlab/${r}/merge-requests?${n.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof zo&&a.status===404)return;throw a}return m9.parse(i)}async getCommitFromGitlab(t,o){let n=encodeURIComponent(t),r=await this.sendRequest(`/${Le}/git/gitlab/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(r)}async getMergedBranchFromGitlab(t,o,n){let r=encodeURIComponent(o),i=encodeURIComponent(t),a=await this.sendRequest(`/${Le}/git/gitlab/${i}/${r}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return jH.parse(a)}async getAgentConfig(){let t=await this.sendRequest(`/${Le}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z.record(z.string(),z.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${Le}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return lX(t)}catch(t){if(t instanceof zo&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),hS.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Le}/quarantine`,{method:"GET"});return $ee.parse(t)}async listQuarantinedTests(t){let o=await this.sendRequest(`/${Le}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Gee.parse(o)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Le}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Le}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,o,n){await this.sendRequest(`/${Le}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:o,...n??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,o,n){await this.sendRequest(`/${Le}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:o,...n??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let o=await this.sendRequest(this.limbarPath("android"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Wee.parse(o)}async extendEmulatorTtl(t,o){let n=Date.now();try{await this.sendRequest(this.limbarPath(`${this.platformRoute(t)}/${o}/keepalive`),{method:"POST",retries:3,requestTimeoutMs:15e3}),this.logger.debug({platform:t,emulatorName:o,durationMs:Date.now()-n},"Extended emulator keepalive");}catch(r){this.logger.warn({err:r,platform:t,emulatorName:o,durationMs:Date.now()-n},"Failed to extend emulator keepalive");}}async generateAssetUploadUrl({channel:t,tag:o,alias:n,md5:r,platform:i}){let a={channel:t,tag:o,alias:n,md5:r},s=await this.sendRequest(this.limbarPath(`${this.platformRoute(i)}/upload-url`),{method:"POST",retries:3,body:a,requestTimeoutMs:15e3,logResponse:true});return Kee.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(this.limbarPath(`android/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(this.limbarPath("assets"),{method:"GET",retries:3,requestTimeoutMs:1e4});return Yee.parse(t)}async getLimbarAssetDownloadUrl(t,o,n){let r=await this.sendRequest(this.limbarPath(`assets/${t}/${o}/${this.platformRoute(n)}/download-url`),{method:"GET",retries:2,requestTimeoutMs:3e4});return Jee.parse(r)}async deleteAsset(t,o,n){await this.sendRequest(this.limbarPath(`assets/${t}/${o}/${this.platformRoute(n)}`),{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let o=await this.sendRequest(this.limbarPath("ios"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return qee.parse(o)}async deleteIosEmulator(t){await this.sendRequest(this.limbarPath(`ios/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let o=await this.sendRequest(`/${Le}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return _8.parse(o)}async generateMcpSessionTraceUploadUrl(t){let o=await this.sendRequest(`/${Le}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return ZP.parse(o)}};async function gy(e){let t=process.versions.node,o=parseInt(t.split(".")[0]);(isNaN(o)||o<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 n=await e.client.getAuthInfo();return C.debug("Got auth info from API"),n}var Qm=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,o){await this.apiClient.reportBillableEvents(t,o);}};async function Zm({reporter:e,logger:t,feature:o,cached:n,outcome:r,result:i,runId:a,testId:s,testName:l,labels:c,triageTestResults:u=[],sessionId:d,agentInvocationId:m,transactionId:p}){if(o==="triage"&&r===void 0)throw new Error("Triage invocation outcome is required");if(o==="triage"&&(!d||!m))throw new Error("Triage invocation IDs are required");if(o!=="triage"&&u.length>0)throw new Error("Only triage invocations can report test outcomes");let h=new Date().toISOString(),g=new Set(u.map(E=>E.outcome)),f=r;i==="failure"&&(f="error");let y={cached:n,sessionId:d,agentInvocationId:m},b=eO.parse({...y,runId:a,testId:s,testName:l,aiFeature:o,outcome:f,labels:c,hasFixedTest:g.has("fixed"),hasCannotFixTest:g.has("cannot-fix"),hasNoFixNeededTest:g.has("no-fix-needed")}),S=[{event:"ai-agent-invocation",timestamp:h,transactionId:p,properties:b},...u.map(E=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${E.testId}`,properties:eO.parse({...y,runId:E.runId,testId:E.testId,testName:E.testName,aiFeature:"triage",outcome:E.outcome,labels:E.labels})}))];try{await e.reportBillableEvents(t,S);}catch(E){t.warn({err:E,feature:o,cached:n,outcome:f},"Failed to report AI agent invocation");}}var ep=class extends ms{generator;constructor(t,o){super(t),this.generator=o;}async runTemplateMatching(t,o={}){let n=await this.sendRequest(`/${Le}/web-agent/template-matching`,{method:"POST",body:t,signal:o?.signal});return aJ.parse(n)}async constructIframeRegex(t,o={}){return this.generator.getIframeRegex(t,{abortSignal:o.signal,loggerTags:o.loggerTags})}};var YT=class{constructor(t,o){this.client=t;this.orgId=o;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return jS(t)}async acquireCacheLock(t,o){return this.client.acquireCacheLock(t,o)}async createOnDemandScreenshot(t,o,n){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:o.toString("base64"),contentType:n});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:n}}}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,o){return this.client.saveNewIcons(t,o)}};var Z8e="x-momentic-internal-api-endpoint-secret",KM=class extends Nt{internalHeaders;constructor({internalApiSecret:t,...o}){super(o),this.internalHeaders=t?{[Z8e]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t){let o=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return QP.parse(o)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/internal/eval/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return nP.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}};var tp="v1",o9e=2e3,Wue="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",op=class{httpClient;fakerInstance;fakerSeed;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.fakerSeed=t.fakerSeed,this.supportsLease=t.supportsLease??true,this.resetFaker();}resetFaker(){if(this.fakerSeed===void 0){this.fakerInstance=void 0;return}this.fakerInstance=new Faker({locale:en$1}),this.fakerInstance.seed(this.fakerSeed);}async sendSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to send sms: ${o.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):o})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(Wue);let o=await this.httpClient.sendRequest(`/${tp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof zo?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),n=D8.parse(o);return this.activeLeases.set(n.phoneNumber,{leaseToken:n.leaseToken}),n}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(Wue);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to release phone number: ${o.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([o,{leaseToken:n}])=>ge(this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:{phoneNumber:o,leaseToken:n}}),{milliseconds:o9e,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to send email: ${o.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to fetch all emails: ${o.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to fetch latest emails: ${o.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${tp}/tools/email/create`,{method:"POST",body:{}}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to create email inbox: ${o.message}`)});return F8.parse(t)}};var JT=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:o,archivePath:n,persist:r}=t,{uploadUrl:i,id:a}=await this.client.generateTestResultsUploadUrl(),s=await qM(i,"application/zip",n);if(!s.ok)throw new Error(`Failed to upload test results: ${await s.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(a,{resultType:"run",runGroupId:o,persist:r});return l}async uploadExploreArchive(t){let{exploreRunId:o,metadata:n,archivePath:r,videos:i}=t,{uploadUrl:a,videoUploadUrls:s}=await this.client.startExploreTraceUpload({exploreRunId:o,metadata:n,videoAssets:i?.map(c=>c.name)});for(let c of i??[]){let u=s?.[c.name];if(!u)throw new Error(`Missing upload URL for video asset ${c.name}`);let d=await qM(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await qM(a,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function np({logger:e,orgId:t,client:o,gitMetadata:n,regenerateCache:r,alwaysSaveCache:i,noCache:a,isolateCachesByEnvironment:s=false,bustOldestCachePercentage:l}){return a?new sO:new l2(e,t,o,n,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:s})}var l2=class{constructor(t,o,n,r,i){this.orgId=o;this.client=n;let{regenerateCache:a,alwaysSaveCache:s,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:u,gitProtectedBranches:d}=r;t.info({options:i,gitBranchName:u,gitProtectedBranches:d},"Cache storage initialization options"),this.cacheHeaders=XP(r),this.isolateCachesByEnvironment=c,this.readCaches=!a;let m=u&&d.includes(u);s||!m?this.writeCaches=true:this.writeCaches=false,m||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:o}){if(!this.writeCaches){o.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:WH(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(n){o.error({err:n},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:o}){if(t.length!==0)try{await this.client.updateSnapshotCaches({entries:WH(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(n){o.error({err:n},"Failed to save snapshot cache entries");}}async deleteStepCacheEntry({logger:t,testId:o,key:n,environment:r}){await this.client.deleteStepCacheEntry({testId:o,key:n,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders),t.debug({testId:o,key:n},"Deleted step cache entry");}async resolveStepCacheEntries(t){let{restoredIdentity:o,restoredStepLists:n}=await this.restoreAndPersistStepIdentity(t);if(!this.readCaches)return t.logger.debug("Skipping cache resolution because of regenerate flag"),{restoredStepLists:n};let{steps:r,beforeSteps:i,afterSteps:a}=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 d=Object.entries(s).map(([h,g])=>({key:h,time:g.value.cache?.updatedAt?.getTime()??0}));d.sort((h,g)=>h.time-g.time);let m=d.length,p=Math.max(1,Math.floor(m*this.bustOldestCachePercentage/100));d.slice(0,p).forEach(({key:h})=>{delete s[h];}),t.logger.info({nCachesToBust:p,bustOldestCachePercentage:this.bustOldestCachePercentage,totalCaches:m},"Busted oldest caches");}let l={totalSteps:0,cacheKeysHit:[],cacheKeysMissed:[],uniqueKeysHit:[],cacheMissSamples:[]};for(let d of [r,i,a]){if(!d)continue;let m=Nh({steps:d,stepCacheEntries:s,logger:t.logger});l.totalSteps+=m.totalSteps,l.cacheKeysHit.push(...m.cacheKeysHit),l.cacheKeysMissed.push(...m.cacheKeysMissed),l.uniqueKeysHit.push(...m.uniqueKeysHit),l.cacheMissSamples.push(...m.cacheMissSamples);}o&&r9e({cacheResolutionStats:l,logger:t.logger,restoredIdentity:o,schemaVersion:t.schemaVersion,testId:t.testId});let c=["platform:web","source:local",`fileFormat:${t.useSnapshotIdentityCache?"v2":"v1"}`,`snapshotIdentityCache:${t.useSnapshotIdentityCache}`,`orgId:${this.orgId}`,"cliVersion:3.58.0"];if(uo.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),uo.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),uo.increment("step_cache_resolution",l.totalSteps,[...c,"outcome:total"]),!this.writeCaches)return t.logger.debug("Skipping cache last used at update because branch is protected"),{restoredStepLists:n};let{cachesToSave:u}=await Cn({stepLists:t.stepLists,useSnapshotIdentityCache:false,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveStepCacheEntries({entries:u,logger:t.logger}),{restoredStepLists:n}}async restoreAndPersistStepIdentity(t){let o=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0;if(!o)return {restoredIdentity:void 0,restoredStepLists:void 0};let{snapshotCachesToSave:n}=await Cn({stepLists:t.stepLists,useSnapshotIdentityCache:true,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveSnapshotCacheEntries({entries:n,logger:t.logger}),{restoredIdentity:o,restoredStepLists:structuredClone(o.stepLists)}}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(o){t.logger.warn({err:o,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),uo.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.58.0","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:o,testId:n}=t,r=await this.client.getSnapshotCacheForTest({testId:n,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);for(let s of r){if(!s.schema_version)continue;let l=Zj(s.schema_version),c=Zj(Ct);if(l&&c&&l.compare(c)>0){o.warn(`Snapshot cache for test ${n} was written at schema version ${s.schema_version}, which is newer than this CLI's latest (${Ct}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=Ok({entries:r,orgId:this.orgId,testId:n,logger:o}),a=Pk({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...a.stepLists.steps),t.stepLists.beforeSteps=a.stepLists.beforeSteps,t.stepLists.afterSteps=a.stepLists.afterSteps,o.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:a.stats.mintedSteps,stats:a.stats,moduleRestoreResults:a.moduleRestoreResults.map(({moduleId:s,snapshotHit:l,stats:c})=>({moduleId:s,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),a}};function r9e({cacheResolutionStats:e,logger:t,restoredIdentity:o,schemaVersion:n,testId:r}){let i=e.cacheKeysHit.length,a=e.cacheKeysMissed.length,s=i+a,l=s>0?Math.round(a/s*1e3)/10:0,c=o.stats.matchedSteps+o.stats.mintedSteps,u=c>0?Math.round(o.stats.mintedSteps/c*1e3)/10:0,d=o.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})),m=o.stats.mintedSteps>=5&&u>=25,p=m||o.stats.bustedConditionals>0||d.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:a,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:m,identityMintRate:u,moduleIdentityIssueCount:d.length,moduleIdentityIssues:d,schemaVersion:n,snapshotIdentityCache:true,stepIdentityStats:o.stats,testId:r,totalCacheableSteps:e.totalSteps};if(!p){t.debug(h,"V2 cache resolution completed");return}t.warn(h,"V2 cache resolution degraded");}async function fs({project:e,apiClient:t,classificationOverrides:o}){let{classification:n,healing:r,explore:i}=(await i9e(t))?.ai??{},a=s9e({flags:o,config:e.config.ai?.classification,cloudCategories:n?.categories}),s={...e.config.ai};return o?.disabled&&(s.aiFailureAnalysis=false),{...e,config:{...e.config,ai:{...s,classification:a,healing:r,explore:i}}}}async function i9e(e){try{return await e.getOrgSettings()}catch(t){if(!a9e(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function a9e(e){return e instanceof zo?e.status>=500:e instanceof zs||vR(e)}function s9e({flags:e,config:t,cloudCategories:o}){if(!(!t&&!o))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??w5,categories:o??Is}}var que="golden/visual-diff",Kue="reports",du="test-results";var l9e=z.object({width:z.number(),height:z.number()}),QT=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,o,n){let r=mn__default.join(t.rootDir,t.config.goldenFileDir??que);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=n,this.apiClient=o;}async prepareGoldenScreenshotForComparison(t,o,n){if(y6(o.screenshot?.data))return {buffer:(await this.apiClient.fetchOnDemandScreenshot(o.screenshot.data.id)).data,width:o.screenshot.width,height:o.screenshot.height};if(o.screenshot?.data?.startsWith("https://")){let a=await fetch(o.screenshot.data);return {buffer:Buffer.from(await a.arrayBuffer()),width:o.screenshot.width,height:o.screenshot.height}}let r=o.screenshot?.data;r||(r=mn__default.join(this.defaultGoldenScreenshotDir,`${o.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return nn__default.mkdirSync(mn__default.dirname(r),{recursive:true}),nn__default.writeFileSync(r,n.buffer),nn__default.writeFileSync(i,JSON.stringify({width:n.width,height:n.height})),{buffer:Buffer.from(n.buffer),width:n.width,height:n.height};if(nn__default.existsSync(r)){let a=nn__default.readFileSync(r),s=l9e.parse(JSON.parse(nn__default.readFileSync(i,"utf-8")));return {buffer:a,width:s.width,height:s.height}}else throw new ne("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var Jue=3e3,u9e=new Set(["editor","git_config","git_config_count","git_config_global","git_config_system","git_editor","git_exec_path","git_external_diff","git_pager","git_sequence_editor","git_template_dir","pager","prefix"]);function d9e(){let e={};for(let[t,o]of Object.entries(process.env))o!==void 0&&!u9e.has(t.toLowerCase())&&(e[t]=o);return e.LC_ALL="C",e.LANG="C",e}var m9e=d9e();function Id(e,t){return t?.throwIfAborted(),f2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(m9e)}var pi=Id();async function d2(e,t,o){try{return await Id(e,o).revparse(t)}catch(n){if(o?.throwIfAborted(),tde(n))return;throw n}}async function vc(e,t){return d2(e,["--show-toplevel"],t)}async function ZT(e){let t=await vc(e);if(!t)return;let o=mn__default.relative(t,e);if(!(o.startsWith("..")||mn__default.isAbsolute(o)))return o===""?".":o}async function Xue(e){return d2(e,["HEAD"])}async function Que(e){try{return (await Id(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function Zue(e){return d2(e,["--abbrev-ref","HEAD"])}async function ev({cwd:e,base:t,head:o,logger:n,abortSignal:r}){try{let i=(await Id(e,r).raw(["merge-base",t,o])).trim();if(i.length>0)return i;n.warn({base:t,head:o},"git merge-base returned empty");}catch(i){r?.throwIfAborted(),n.warn({err:i,base:t,head:o},"git merge-base failed");}}function m2(){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 tv({client:e,repository:t,base:o,head:n,logger:r,abortSignal:i}){let a=Zn(t);if(a)try{i?.throwIfAborted();let s=await e.compareCommitsFromGithub({owner:a.owner,repo:a.repo,base:o,head:n},i);return s.commits.length===0?void 0:s}catch(s){i?.throwIfAborted(),r.warn({err:s,repository:t,base:o,head:n},"remote commit compare failed");return}}async function Tc(e){let{logger:t,operation:o,fn:n,context:r}=e,i=Date.now();try{return await n()}finally{let a=Date.now()-i;a>Jue&&!process.env.CI&&t.warn({operation:o,durationMs:a,thresholdMs:Jue,...r??{}},"[timing] slow git metadata operation");}}function Cd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function ede(e,t){let o=await On(e,t.raw(["config","--null","--list"])),n={};if(!o)return n;for(let r of o.split("\0")){let i=r.indexOf(`
|
|
332
|
+
`);}function F8e(e){let t=e.reasoning,o=e.include;return {model:e.model,service_tier:e.service_tier,prompt_cache_key:e.prompt_cache_key,include:Array.isArray(o)?o.filter(n=>typeof n=="string"):void 0,reasoning:xue(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function xue(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function B8e(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var U8e=3e5;function WM(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var z8e=z.object({input:z.array(z.custom()),instructions:z.unknown().optional(),model:z.string(),tools:z.unknown().optional()}).passthrough(),j8e=z.object({output:z.array(z.object({type:z.literal("compaction"),id:z.string(),encrypted_content:z.string()})).min(1),usage:z.object({dropped_message_count:z.number().int().nonnegative(),input_tokens:z.number().int().nonnegative(),output_tokens:z.number().int().nonnegative()})});function _ue(e={}){let t=e.compactThreshold??U8e,o=VM(e.requestOptions),n;return async(r,i)=>{let a=i?.method??(r instanceof Request?r.method:"GET"),s=new URL(r instanceof Request?r.url:r.toString());if(a.toUpperCase()!=="POST"||!s.pathname.endsWith("/responses"))return o(r,i);let l=typeof i?.body=="string"?i.body:void 0;if(!l)return o(r,i);let c;try{c=JSON.parse(l);}catch{return o(r,i)}let u=z8e.safeParse(c);if(!u.success)return o(r,i);let d=u.data.input,m=n?zM({currentInput:d,previousInput:n.boundaryInput,compactionItem:n.item}):void 0;n&&!m&&(n=void 0);let p=m??d;if((m&&n?n.outputTokens:0)+Rt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await H8e({url:s,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];n={boundaryInput:d,item:f,outputTokens:g.usage.output_tokens},p=[f],e.onCompaction?.({compactThreshold:t,droppedMessageCount:g.usage.dropped_message_count,inputTokens:g.usage.input_tokens,itemId:f.id,outputTokens:g.usage.output_tokens});}}return o(r,{...i,body:JSON.stringify({...u.data,input:p,previous_response_id:void 0})})}}async function H8e({url:e,init:t,model:o,providerInput:n}){e.pathname=`${e.pathname.replace(/\/$/,"")}/compact`;let r=await fetch(e,{...t,body:JSON.stringify({input:n,model:o})});if(!r.ok)return;let i;try{i=await r.json();}catch{return}let a=j8e.safeParse(i);return a.success?a.data:void 0}var V8e="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function og(e){let{apiKey:t,sessionId:o,loggerTags:n,runner:r,parentTraceId:i}=e,a={Authorization:`Bearer ${t}`,[KP]:iy,...o&&{[uee]:o},...r&&{[YP]:r},...i&&{[mee]:i},...n&&{[JP]:JSON.stringify(n)}};for(let[s,l]of Object.entries(a))a[s]=l.replace(/[\u0100-\uffff]/g,c=>"\\u"+c.charCodeAt(0).toString(16).padStart(4,"0"));return a}var Pue="bedrock/",Oue="azure/",kue="anthropic/",Mue=e=>t=>{let o=og(e),n=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Pue)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Pue.length))}`:t.startsWith(Oue)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(Oue.length))}`:t.startsWith(kue)&&(n=t.slice(kue.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(n)}`),createAnthropic({baseURL:r,headers:o,apiKey:e.apiKey})(n)},Lue=e=>t=>{let o=og(e),n=e.useOpenAIResponsesWebSocket??false,r=n?e.openAIResponsesWebSocketCompactThreshold??W8e(process.env[V8e])??$M(t):e.openAIResponsesCompactThreshold??$M(t),i=a=>e.onOpenAINativeCompaction?.({...a,model:t});return i2(GT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:o,apiKey:e.apiKey,fetch:n?Rue({compactThreshold:r,onCompaction:i}):o2({compactThreshold:r,onCompaction:i})})(t))},Nue=e=>t=>{let o=og(e),n=VM(e.xai);return WM(t)&&(n=_ue({requestOptions:e.xai,onCompaction:r=>e.onXAINativeCompaction?.({...r,model:t})})),createXai({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:o,apiKey:e.apiKey,fetch:n}).responses(t)},Due=e=>t=>{let o=og(e);return i2(GT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:o,apiKey:e.apiKey,fetch:o2({compactThreshold:e.openAIResponsesCompactThreshold??$M(t),onCompaction:n=>e.onOpenAINativeCompaction?.({...n,model:t})})})(t))};function Fue(e){return t=>o=>{let n=og(t);return GT({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${o}`,headers:n,apiKey:t.apiKey}).chat(o)}}var Bue=Fue("azure/deepseek"),Uue=Fue("azure/kimi"),zue=e=>t=>{let o=og(e);return GT({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:o,apiKey:e.apiKey}).chat(t)},jue=e=>t=>{let o=og(e);return t2({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:o,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Hue=e=>t=>{let o=og(e);return wG({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:o,apiKey:e.apiKey})(t)};function W8e(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function $ue(e){let t=ht.safeParse(e[OH]);return delete e[OH],t.success?t.data:void 0}var Cr=class extends ms{agentConfig;apiPathPrefix;constructor(t,o){let n={...Xp,...t};a_(n),super(o),this.apiPathPrefix=o.apiPathPrefix??`/${Le}`,this.agentConfig=n;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...Y8e(t),sessionId:o.sessionId,parentTraceId:o.parentTraceId},signal:o.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[JP]:JSON.stringify(a2(o))}});return LJ.parse(n)}async rankChunksWithAi(t,o){let n={...t,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:o.abortSignal});return _X.parse(r)}async rankChunksWithRag(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:iy,...t},signal:o.abortSignal});return xX.parse(n)}async getScreenshotFromS3(t){let o=await this.sendRequest(`${this.apiPathPrefix}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z.string().parse(o)}async getElementLocation(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags,useMemory:o.useMemory,cacheBustReason:o.cacheBustReason,effort:o.effort,agentConfigVersion:this.agentConfig?.locator},r={},i=()=>{let s=$ue(r);s&&o.onEffectiveEffort?.(s);},a=await this.sendRequest(`${this.apiPathPrefix}/web-agent/locate-element`,{method:"POST",body:n,signal:o.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),gee.parse(a)}async getAssertionResult(t,o){let n={...t,disableCache:!!o.disableCache,useConsensus:!!o.useConsensus,attemptNumber:o.attemptNumber,loggerTags:o.loggerTags,useMemory:o.useMemory,effort:o.effort,agentConfigVersion:this.agentConfig?.assertion},r={},i=()=>{let s=$ue(r);s&&o.onEffectiveEffort?.(s);},a=await this.sendRequest(`${this.apiPathPrefix}/web-agent/assertion`,{method:"POST",body:n,signal:o.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),kH.parse(a)}async getLintStepResult(t,o){let n={...t,disableCache:!!o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/lint/step`,{method:"POST",body:n,signal:o.abortSignal});return hee.parse(r)}async getVisualAssertionResult(t,o){let n={...t,disableCache:!!o.disableCache,useConsensus:!!o.useConsensus,attemptNumber:o.attemptNumber,loggerTags:o.loggerTags,useMemory:o.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/visual-assertion`,{method:"POST",body:n,signal:o.abortSignal});return kH.parse(r)}async getAiActionCommand(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return pee.parse(n)}async getMultiturnAiActionCommand(t,o){return await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal})}async getMultiturnAiActionEvaluation(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return Hz.parse(n)}async getReverseMappedDescription(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:o.disableCache,loggerTags:o.loggerTags},signal:o.abortSignal});return fee.parse(n)}async getTextExtraction(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/text-extraction`,{method:"POST",body:n,signal:o.abortSignal});return jz.parse(r)}async getPageSummary(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/page-summary`,{method:"POST",body:n,signal:o.abortSignal});return kJ.parse(r)}async getSmartWaitingDecision(t,o){let n={...t,disableCache:o.disableCache,loggerTags:o.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/smart-waiting`,{method:"POST",body:n,signal:o.abortSignal});return MJ.parse(r)}async getKnowledgeSuggestion(t,o){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return sE.parse(n)}async getExtractedKeywords(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/extract-keywords`,{method:"POST",body:t,signal:o.abortSignal});return HX.parse(n)}async getAutohealingProposal(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return IJ.parse(n)}async getFailureRecoveryProposal(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return PJ.parse(n)}async getFailureRecoveryPlan(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:o.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:o.abortSignal});return _J.parse(n)}async getFailureRecoveryMemory(t,o){try{let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return q8.parse(n)}catch(n){return o.logger.warn({err:n},"Failed to read failure recovery memory"),{failureCount:0}}}async recordFailureRecoveryOutcome(t,o){try{await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:5e3});}catch(n){o.logger.warn({err:n},"Failed to record failure recovery outcome");}}async getOrgLevelFailureRate(t,o){let n=t.environment?`?environment=${encodeURIComponent(t.environment)}`:"";try{let r=await this.sendRequest(`${this.apiPathPrefix}/org-level-failure-rate${n}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return iO.parse(r)}catch(r){return o.logger.warn({err:r},"Failed to read org-level failure rate"),{skip:false,failed:0,total:0}}}async getIframeRegex(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal});return iJ.parse(n)}createAgentTrace(t){let o=randomUUID(),{completionType:n,runId:r,orgId:i,logger:a}=t,s=a.bindings().sessionId,l=async c=>{try{await this.sendRequest(`${this.apiPathPrefix}/traces/result-classification`,{method:"POST",body:{id:o,completionType:n,input:{runId:r},sessionId:s,...c,metadata:{orgId:i,runId:r,...c.metadata}}});}catch(u){a.warn({err:u},"Failed to upsert result classification trace");}};return l({}),{id:o,update:l}}getAnthropicModelFactory(t){return this.buildModelFactory(Mue,t)}getModelProviderCandidate(t,o){return t.startsWith("bedrock/")?{id:"anthropic-bedrock",model:this.getAnthropicBedrockModelFactory(o)(t.slice(8))}:t.startsWith("azure/claude-")?{id:"anthropic-foundry",model:this.getAnthropicFoundryModelFactory(o)(t.slice(6))}:t.startsWith("anthropic/")?{id:"anthropic",model:this.getAnthropicModelFactory(o)(t)}:t.startsWith("openrouter/")?{id:"openrouter",model:this.getOpenRouterModelFactory(o)(t.slice(11))}:t.startsWith("fireworks/")?{id:"fireworks",model:this.getFireworksModelFactory(o)(t)}:t.startsWith("xai/")?{id:"xai",model:this.getXAIModelFactory(o)(t.slice(4))}:t.startsWith("vertex/gemini-")?{id:"google-vertex",model:this.getVertexGeminiModelFactory(o)(t.slice(7))}:t.startsWith("azure/")?{id:"azure",model:this.getAzureOpenAIModelFactory(o)(t.slice(6))}:t.startsWith("claude-")?{id:"anthropic",model:this.getAnthropicModelFactory(o)(t)}:{id:"openai",model:this.getOpenAIModelFactory(o)(t)}}getAnthropicBedrockModelFactory(t){let o=this.getAnthropicModelFactory(t);return n=>o(`bedrock/${n}`)}getAnthropicFoundryModelFactory(t){let o=this.getAnthropicModelFactory(t);return n=>o(`azure/${n}`)}getOpenAIModelFactory(t){let{sessionId:o,logger:n,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:a}=t;return Lue({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:a2(t),sessionId:o,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:a,onOpenAINativeCompaction:s=>{n.info({promptType:r,nativeCompaction:s},"Native conversation compaction completed");}})}getXAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Nue,t,{onXAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(jue,t)}getAzureOpenAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Due,t,{onOpenAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Bue,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Uue,t)}getFireworksModelFactory(t){return this.buildModelFactory(zue,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Hue,t)}buildModelFactory(t,o,n){let{sessionId:r,parentTraceId:i,xai:a}=o;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:a2(o),sessionId:r,runner:this.runner,parentTraceId:i,xai:a,...n})}};function a2(e){return {...fo(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function Y8e(e){return {...e,messages:e.messages.map(s2)}}function s2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(s2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,o])=>[t,s2(o)]))}async function qM(e,t,o){let{size:n}=await nn__default.promises.stat(o),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(nk(n)):void 0,a;if(r.protocol==="http:")a=request;else if(r.protocol==="https:")a=request$1;else throw new Error(`Unsupported signed upload URL protocol: ${r.protocol}`);return new Promise((s,l)=>{let c=nn__default.createReadStream(o),u=new Promise(f=>c.once("close",f)),d,m=0,p=false,h=false,g=f=>{h||(h=true,c.destroy(),d.destroy(),u.then(()=>l(f)));};try{d=a(r,{method:"PUT",signal:i,headers:{"Content-Length":n,"Content-Type":t}},f=>{p=!0;let y=m<n,b=f.socket;c.unpipe(d),c.destroy(),!d.destroyed&&!d.writableEnded&&d.end();let S=f.statusCode??500,E=S===204||S===205||S===304;if(y&&S>=200&&S<300&&!E){h=!0,d.destroy(),f.destroy(),b.destroy(),u.then(()=>l(new Error(`Upload server returned ${S} before the request body was fully written.`)));return}let v=[];f.on("data",R=>v.push(R)),f.on("error",g),f.on("end",()=>{if(h)return;h=!0,d.destroy(),y&&b.destroy();let R=new Headers;for(let[P,I]of Object.entries(f.headers))if(Array.isArray(I))for(let _ of I)R.append(P,_);else I!==void 0&&R.set(P,I);let w=E?null:Buffer.concat(v);u.then(()=>{try{s(new Response(w,{headers:R,status:S,statusText:f.statusMessage}));}catch(P){l(P);}});});});}catch(f){c.destroy(),u.then(()=>l(f));return}d.on("error",f=>{p||g(f);}),c.on("data",f=>{m+=Buffer.byteLength(f);}),c.on("error",g),c.pipe(d);})}function Vue(e,t,o,n){return fetch(e,{method:"PUT",body:o,signal:n,headers:{"Content-Type":t}})}var Q8e=2e3,Nt=class extends ms{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Le}`;}getAppUrl(){return jS(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Le}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(o){throw o instanceof KR?new ue(`Your Momentic API key was rejected (${o.message}). Run your CLI's \`login\` command or set a valid MOMENTIC_API_KEY. If the key was revoked or expired, create a new one at https://app.momentic.ai/settings/api-keys.`,{cause:o}):o instanceof zo?o.status>=400&&o.status<500?new ue(o.rawError,{cause:o}):new Error(`Momentic server error (HTTP ${o.status}). Please try again in a moment.`,{cause:o}):o instanceof ue?o: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:o})}return Pee.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Le}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Mee.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Le}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return N8.parse(t).announcements}async createMoSessionUpload(t,o){let n;try{n=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof zo&&r.status===404?new ue(`Mo session ${t} was not found.`,{cause:r}):r}return j9.parse(n)}async createMoSessionDownload(t,o,n){let r;try{r=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3,signal:n});}catch(i){throw i instanceof zo&&i.status===404?new ue(i.rawError,{cause:i}):i}return z9.parse(r)}async listProductUpdates(t=3){let o=await this.sendRequest(`/${Le}/product-updates?limit=${t}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return ate.parse(o).updates}async getQuotaStatus(){let t=await this.sendRequest(`/${Le}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Oee.parse(t)}async createRemoteBrowserConnection(t){let o=await this.sendRequest(`/${Le}/browsers/connection`,{method:"POST",body:{...t?.envName?{envName:t.envName}:{},...t?.runAttemptId?{runAttemptId:t.runAttemptId}:{},...t?.runGroupId?{runGroupId:t.runGroupId}:{},...t?.testId?{testId:t.testId}:{},...t?.testName?{testName:t.testName}:{},...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:12e4});return ete.parse(o)}async tryCreateBrowserFleetAccessToken(t,o){let n;try{n=await this.sendRequest(`/${Le}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});}catch(i){if(i instanceof zo&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=Zee.parse(n);return "network"in r?r:null}async bulkGetRunStatus(t){let o=await this.sendRequest(`/${Le}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Cee.parse(o)}async getOrgLevelFailureRate(t){let o=t?`?environment=${encodeURIComponent(t)}`:"",n=await this.sendRequest(`/${Le}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return iO.parse(n)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Le}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t){let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return QP.parse(o)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Le}/traces/interactive-agent-feedback`,{method:"POST",body:t,retries:1,requestTimeoutMs:2e3}).catch(o=>{});}catch(o){}return Promise.resolve()}async getResultClassificationCacheEntries(t){let o=await this.sendRequest(`/${Le}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return fte.parse(o)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Le}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Le}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let o=await this.sendRequest(`/${Le}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return s8.parse(o)}async saveRunClassification(t,o){await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,o){let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=ZP.parse(n),i=await Vue(r,"application/zip",o,AbortSignal.timeout(nk(o.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Le}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let o=await this.sendRequest(`/${Le}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return bee.parse(o)}async updateStepCaches(t,o){await this.sendRequest(`/${Le}/cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,o){await this.sendRequest(`/${Le}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,o){let n=await this.sendRequest(`/${Le}/cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return Tee.parse(n)}async getSnapshotCacheForTest(t,o){let n=await this.sendRequest(`/${Le}/snapshot-cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return vee.parse(n)}async deleteStepCacheEntry(t,o){await this.sendRequest(`/${Le}/cache/entry`,{method:"DELETE",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let o=await this.sendRequest(`/${Le}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MH.parse(o)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:o,headers:n}){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:o,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,o){let n=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return MH.parse(n)}async updateMobileStepCaches(t){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:o,headers:n}){let r=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:o,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return Aee[t](r)}async queueTests(t){let o=await this.sendRequest(`/${Le}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return yee.parse(o)}async uploadScreenshot(t){let o=await this.sendRequest(`/${Le}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return _ee.parse(o)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Le}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Le}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let o={};return {data:await this.sendRequest(`/${Le}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:o}),contentType:o["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${Le}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return kee.parse(t)}async acquireCacheLock(t,o){let n=await this.sendRequest(`/${Le}/result-cache/lock`,{method:"POST",body:t,signal:o,retries:3,requestTimeoutMs:3e4});return ute.parse(n)}async releaseCacheLock(t){await this.sendRequest(`/${Le}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Le}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(o){if(o instanceof Error&&o.message.includes("404"))return null;throw o}}async queueSuiteRuns(t){let o=await this.sendRequest(`/${Le}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Dee.parse(o)}async bulkGetRunGroupStatus(t){let o={runGroupIds:t},n=await this.sendRequest(`/${Le}/run-groups/status`,{method:"POST",body:o,retries:3,requestTimeoutMs:5e3});return EX.array().parse(n)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return nP.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}async getRun(t){try{let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ja.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}async getRunsByCommit(t){let n=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(n.push(...i.runs.map(a=>({...a,test:null}))),i.runs.length<100||r>=i.pageCount)break}return n}async getRunGroupRuns(t){let o=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Uee.parse(o)}async updateGithubPRHealRiskSummary(t,o){await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,o){try{await this.sendRequest(`/${Le}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(n){o.error({err:n},"Failed to upload proposed steps");}}async reportBillableEvents(t,o){try{await this.sendRequest(`/${Le}/billing/events`,{method:"POST",body:o,retries:10,requestTimeoutMs:1e4});}catch(n){t.error({err:n},"Failed to report billable event");}}async fetchTestFragment(t){let o=await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Fee.parse(o)}async patchTestFragment(t,o){await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,o){let n=await this.sendRequest(`/${Le}/results/tests/${t}`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return Bee.parse(n)}async listRuns(t){let o=await this.sendRequest(`/${Le}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return zee.parse(o)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Le}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return jee.parse(t)}async startProcessingResultsUpload(t,o){let n=await this.sendRequest(`/${Le}/results/uploads/${t}/process`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return Hee.parse(n)}async startExploreTraceUpload(t){let o=await this.sendRequest(`/${Le}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return Ite.parse(o)}async fetchIconKnowledgeBase(t){try{let o=await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Ste.parse(o)}catch(o){return t.error({err:o},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,o){try{await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(n){o.error({err:n},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:o,testId:n,environmentId:r,types:i,agentSubtype:a,limit:s,mode:l,scoreMultiplier:c,scopeBuckets:u,retries:d,signal:m,timeoutMs:p},h){try{let g=await this.sendRequest(`/${Le}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:o,testId:n,environmentId:r,types:i,agentSubtype:a,limit:s,mode:l,scoreMultiplier:c,scopeBuckets:u,timeoutMs:p},retries:d??3,requestTimeoutMs:p===void 0?5e3:p+Q8e,signal:m});return GJ.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let o=await this.sendRequest(`/${Le}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return Xz.parse(o)}async getMergeBaseCommitFromGithub(t,o,n,r){let i=new URLSearchParams;i.set("base",n),i.set("head",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(a)}async compareCommitsFromGithub({owner:t,repo:o,base:n,head:r},i){i?.throwIfAborted();let a=new URLSearchParams;a.set("base",n),a.set("head",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${o}/compare?${a.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return l9.parse(s)}async listGithubCommitsForPath({owner:t,repo:o,path:n,ref:r,limit:i}){let a=new URLSearchParams;a.set("path",n),a.set("ref",r),a.set("limit",String(i));let s=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits?${a.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return c9.parse(s).commits}async getGithubFileContent({owner:t,repo:o,path:n,ref:r}){let i=new URLSearchParams;i.set("path",n),i.set("ref",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return u9.parse(a).content??void 0}async getGithubBranchMetadata(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return d9.parse(i)}async createGithubPullRequest(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-requests`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return Q8.parse(r)}async createGithubCommit(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return Z8.parse(r)}async getGithubPullRequestTemplate(t,o){try{let n=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return h9.parse(n).template}catch(n){if(n instanceof zo&&n.status===404)return;throw n}}async getGithubPullRequestForBranch(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i;try{i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof zo&&a.status===404)return;throw a}return i9.parse(i)}async getCommitFromGithub(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(r)}async getGithubDefaultBranch(t,o){try{let n=await this.sendRequest(`/${Le}/git/github/${t}/${o}/default-branch`,{method:"GET"}),r=z.object({defaultBranch:z.string().min(1)}).safeParse(n);return r.success?r.data.defaultBranch:void 0}catch{return}}async getGithubCollaboratorsWithMergeAccess(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/collaborator-merge-access`,{method:"POST",body:{usernames:n},retries:3,requestTimeoutMs:15e3});return e9.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/related-pull-requests`,{method:"POST",body:{query:n},retries:2,requestTimeoutMs:6e4});return n9.parse(r)}async getGithubRelatedPullRequestDetails(t,o,n){let r=await this.sendRequest(`/${Le}/git/github/${t}/${o}/related-pull-requests/${n}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z.object({pullRequest:iH}).parse(r).pullRequest}async getGithubCommitDetails(t,o,n){let r=t9.parse({shas:n}),i=await this.sendRequest(`/${Le}/git/github/${t}/${o}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return o9.parse(i)}async getMergedBranchFromGithub(t,o,n,r){let i=encodeURIComponent(n),a=await this.sendRequest(`/${Le}/git/github/${t}/${o}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return jH.parse(a)}async getMergeBaseCommitFromGitlab(t,o,n){let r=new URLSearchParams;r.set("base",o),r.set("head",n);let i=encodeURIComponent(t),a=await this.sendRequest(`/${Le}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return rR.parse(a)}async getGitlabMergeRequestForBranch(t,o){let n=new URLSearchParams;n.set("branch",o);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${Le}/git/gitlab/${r}/merge-requests?${n.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof zo&&a.status===404)return;throw a}return m9.parse(i)}async getCommitFromGitlab(t,o){let n=encodeURIComponent(t),r=await this.sendRequest(`/${Le}/git/gitlab/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rR.parse(r)}async getMergedBranchFromGitlab(t,o,n){let r=encodeURIComponent(o),i=encodeURIComponent(t),a=await this.sendRequest(`/${Le}/git/gitlab/${i}/${r}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return jH.parse(a)}async getAgentConfig(){let t=await this.sendRequest(`/${Le}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z.record(z.string(),z.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${Le}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return lX(t)}catch(t){if(t instanceof zo&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),hS.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Le}/quarantine`,{method:"GET"});return $ee.parse(t)}async listQuarantinedTests(t){let o=await this.sendRequest(`/${Le}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Gee.parse(o)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Le}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Le}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,o,n){await this.sendRequest(`/${Le}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:o,...n??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,o,n){await this.sendRequest(`/${Le}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:o,...n??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let o=await this.sendRequest(this.limbarPath("android"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Wee.parse(o)}async extendEmulatorTtl(t,o){let n=Date.now();try{await this.sendRequest(this.limbarPath(`${this.platformRoute(t)}/${o}/keepalive`),{method:"POST",retries:3,requestTimeoutMs:15e3}),this.logger.debug({platform:t,emulatorName:o,durationMs:Date.now()-n},"Extended emulator keepalive");}catch(r){this.logger.warn({err:r,platform:t,emulatorName:o,durationMs:Date.now()-n},"Failed to extend emulator keepalive");}}async generateAssetUploadUrl({channel:t,tag:o,alias:n,md5:r,platform:i}){let a={channel:t,tag:o,alias:n,md5:r},s=await this.sendRequest(this.limbarPath(`${this.platformRoute(i)}/upload-url`),{method:"POST",retries:3,body:a,requestTimeoutMs:15e3,logResponse:true});return Kee.parse(s)}async deleteAndroidEmulator(t){await this.sendRequest(this.limbarPath(`android/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async getMobileAssets(){let t=await this.sendRequest(this.limbarPath("assets"),{method:"GET",retries:3,requestTimeoutMs:1e4});return Yee.parse(t)}async getLimbarAssetDownloadUrl(t,o,n){let r=await this.sendRequest(this.limbarPath(`assets/${t}/${o}/${this.platformRoute(n)}/download-url`),{method:"GET",retries:2,requestTimeoutMs:3e4});return Jee.parse(r)}async deleteAsset(t,o,n){await this.sendRequest(this.limbarPath(`assets/${t}/${o}/${this.platformRoute(n)}`),{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let o=await this.sendRequest(this.limbarPath("ios"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return qee.parse(o)}async deleteIosEmulator(t){await this.sendRequest(this.limbarPath(`ios/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let o=await this.sendRequest(`/${Le}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return _8.parse(o)}async generateMcpSessionTraceUploadUrl(t){let o=await this.sendRequest(`/${Le}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return ZP.parse(o)}};async function gy(e){let t=process.versions.node,o=parseInt(t.split(".")[0]);(isNaN(o)||o<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 n=await e.client.getAuthInfo();return C.debug("Got auth info from API"),n}var Qm=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,o){await this.apiClient.reportBillableEvents(t,o);}};async function Zm({reporter:e,logger:t,feature:o,cached:n,outcome:r,result:i,runId:a,testId:s,testName:l,labels:c,triageTestResults:u=[],sessionId:d,agentInvocationId:m,transactionId:p}){if(o==="triage"&&r===void 0)throw new Error("Triage invocation outcome is required");if(o==="triage"&&(!d||!m))throw new Error("Triage invocation IDs are required");if(o!=="triage"&&u.length>0)throw new Error("Only triage invocations can report test outcomes");let h=new Date().toISOString(),g=new Set(u.map(E=>E.outcome)),f=r;i==="failure"&&(f="error");let y={cached:n,sessionId:d,agentInvocationId:m},b=eO.parse({...y,runId:a,testId:s,testName:l,aiFeature:o,outcome:f,labels:c,hasFixedTest:g.has("fixed"),hasCannotFixTest:g.has("cannot-fix"),hasNoFixNeededTest:g.has("no-fix-needed")}),S=[{event:"ai-agent-invocation",timestamp:h,transactionId:p,properties:b},...u.map(E=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${E.testId}`,properties:eO.parse({...y,runId:E.runId,testId:E.testId,testName:E.testName,aiFeature:"triage",outcome:E.outcome,labels:E.labels})}))];try{await e.reportBillableEvents(t,S);}catch(E){t.warn({err:E,feature:o,cached:n,outcome:f},"Failed to report AI agent invocation");}}var ep=class extends ms{generator;constructor(t,o){super(t),this.generator=o;}async runTemplateMatching(t,o={}){let n=await this.sendRequest(`/${Le}/web-agent/template-matching`,{method:"POST",body:t,signal:o?.signal});return aJ.parse(n)}async constructIframeRegex(t,o={}){return this.generator.getIframeRegex(t,{abortSignal:o.signal,loggerTags:o.loggerTags})}};var YT=class{constructor(t,o){this.client=t;this.orgId=o;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return jS(t)}async acquireCacheLock(t,o){return this.client.acquireCacheLock(t,o)}async createOnDemandScreenshot(t,o,n){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:o.toString("base64"),contentType:n});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:n}}}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,o){return this.client.saveNewIcons(t,o)}};var Z8e="x-momentic-internal-api-endpoint-secret",KM=class extends Nt{internalHeaders;constructor({internalApiSecret:t,...o}){super(o),this.internalHeaders=t?{[Z8e]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t){let o=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return QP.parse(o)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/internal/eval/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return nP.parse(o)}catch(o){if(o instanceof zo&&o.status===404)return null;throw o}}};var tp="v1",o9e=2e3,Wue="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",op=class{httpClient;fakerInstance;fakerSeed;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.fakerSeed=t.fakerSeed,this.supportsLease=t.supportsLease??true,this.resetFaker();}resetFaker(){if(this.fakerSeed===void 0){this.fakerInstance=void 0;return}this.fakerInstance=new Faker({locale:en$1}),this.fakerInstance.seed(this.fakerSeed);}async sendSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to send sms: ${o.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):o})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(Wue);let o=await this.httpClient.sendRequest(`/${tp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof zo?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),n=D8.parse(o);return this.activeLeases.set(n.phoneNumber,{leaseToken:n.leaseToken}),n}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(Wue);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to release phone number: ${o.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([o,{leaseToken:n}])=>ge(this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:{phoneNumber:o,leaseToken:n}}),{milliseconds:o9e,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to send email: ${o.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to fetch all emails: ${o.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to fetch latest emails: ${o.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${tp}/tools/email/create`,{method:"POST",body:{}}).catch(o=>{throw o instanceof zo?new Error(o.rawError):new Error(`Failed to create email inbox: ${o.message}`)});return F8.parse(t)}};var JT=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:o,archivePath:n,persist:r}=t,{uploadUrl:i,id:a}=await this.client.generateTestResultsUploadUrl(),s=await qM(i,"application/zip",n);if(!s.ok)throw new Error(`Failed to upload test results: ${await s.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(a,{resultType:"run",runGroupId:o,persist:r});return l}async uploadExploreArchive(t){let{exploreRunId:o,metadata:n,archivePath:r,videos:i}=t,{uploadUrl:a,videoUploadUrls:s}=await this.client.startExploreTraceUpload({exploreRunId:o,metadata:n,videoAssets:i?.map(c=>c.name)});for(let c of i??[]){let u=s?.[c.name];if(!u)throw new Error(`Missing upload URL for video asset ${c.name}`);let d=await qM(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await qM(a,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function np({logger:e,orgId:t,client:o,gitMetadata:n,regenerateCache:r,alwaysSaveCache:i,noCache:a,isolateCachesByEnvironment:s=false,bustOldestCachePercentage:l}){return a?new sO:new l2(e,t,o,n,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:s})}var l2=class{constructor(t,o,n,r,i){this.orgId=o;this.client=n;let{regenerateCache:a,alwaysSaveCache:s,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:u,gitProtectedBranches:d}=r;t.info({options:i,gitBranchName:u,gitProtectedBranches:d},"Cache storage initialization options"),this.cacheHeaders=XP(r),this.isolateCachesByEnvironment=c,this.readCaches=!a;let m=u&&d.includes(u);s||!m?this.writeCaches=true:this.writeCaches=false,m||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:o}){if(!this.writeCaches){o.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:WH(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(n){o.error({err:n},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:o}){if(t.length!==0)try{await this.client.updateSnapshotCaches({entries:WH(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(n){o.error({err:n},"Failed to save snapshot cache entries");}}async deleteStepCacheEntry({logger:t,testId:o,key:n,environment:r}){await this.client.deleteStepCacheEntry({testId:o,key:n,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders),t.debug({testId:o,key:n},"Deleted step cache entry");}async resolveStepCacheEntries(t){let{restoredIdentity:o,restoredStepLists:n}=await this.restoreAndPersistStepIdentity(t);if(!this.readCaches)return t.logger.debug("Skipping cache resolution because of regenerate flag"),{restoredStepLists:n};let{steps:r,beforeSteps:i,afterSteps:a}=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 d=Object.entries(s).map(([h,g])=>({key:h,time:g.value.cache?.updatedAt?.getTime()??0}));d.sort((h,g)=>h.time-g.time);let m=d.length,p=Math.max(1,Math.floor(m*this.bustOldestCachePercentage/100));d.slice(0,p).forEach(({key:h})=>{delete s[h];}),t.logger.info({nCachesToBust:p,bustOldestCachePercentage:this.bustOldestCachePercentage,totalCaches:m},"Busted oldest caches");}let l={totalSteps:0,cacheKeysHit:[],cacheKeysMissed:[],uniqueKeysHit:[],cacheMissSamples:[]};for(let d of [r,i,a]){if(!d)continue;let m=Nh({steps:d,stepCacheEntries:s,logger:t.logger});l.totalSteps+=m.totalSteps,l.cacheKeysHit.push(...m.cacheKeysHit),l.cacheKeysMissed.push(...m.cacheKeysMissed),l.uniqueKeysHit.push(...m.uniqueKeysHit),l.cacheMissSamples.push(...m.cacheMissSamples);}o&&r9e({cacheResolutionStats:l,logger:t.logger,restoredIdentity:o,schemaVersion:t.schemaVersion,testId:t.testId});let c=["platform:web","source:local",`fileFormat:${t.useSnapshotIdentityCache?"v2":"v1"}`,`snapshotIdentityCache:${t.useSnapshotIdentityCache}`,`orgId:${this.orgId}`,"cliVersion:3.58.1"];if(uo.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),uo.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),uo.increment("step_cache_resolution",l.totalSteps,[...c,"outcome:total"]),!this.writeCaches)return t.logger.debug("Skipping cache last used at update because branch is protected"),{restoredStepLists:n};let{cachesToSave:u}=await Cn({stepLists:t.stepLists,useSnapshotIdentityCache:false,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveStepCacheEntries({entries:u,logger:t.logger}),{restoredStepLists:n}}async restoreAndPersistStepIdentity(t){let o=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0;if(!o)return {restoredIdentity:void 0,restoredStepLists:void 0};let{snapshotCachesToSave:n}=await Cn({stepLists:t.stepLists,useSnapshotIdentityCache:true,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveSnapshotCacheEntries({entries:n,logger:t.logger}),{restoredIdentity:o,restoredStepLists:structuredClone(o.stepLists)}}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(o){t.logger.warn({err:o,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),uo.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.58.1","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:o,testId:n}=t,r=await this.client.getSnapshotCacheForTest({testId:n,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);for(let s of r){if(!s.schema_version)continue;let l=Zj(s.schema_version),c=Zj(Ct);if(l&&c&&l.compare(c)>0){o.warn(`Snapshot cache for test ${n} was written at schema version ${s.schema_version}, which is newer than this CLI's latest (${Ct}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=Ok({entries:r,orgId:this.orgId,testId:n,logger:o}),a=Pk({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...a.stepLists.steps),t.stepLists.beforeSteps=a.stepLists.beforeSteps,t.stepLists.afterSteps=a.stepLists.afterSteps,o.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:a.stats.mintedSteps,stats:a.stats,moduleRestoreResults:a.moduleRestoreResults.map(({moduleId:s,snapshotHit:l,stats:c})=>({moduleId:s,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),a}};function r9e({cacheResolutionStats:e,logger:t,restoredIdentity:o,schemaVersion:n,testId:r}){let i=e.cacheKeysHit.length,a=e.cacheKeysMissed.length,s=i+a,l=s>0?Math.round(a/s*1e3)/10:0,c=o.stats.matchedSteps+o.stats.mintedSteps,u=c>0?Math.round(o.stats.mintedSteps/c*1e3)/10:0,d=o.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})),m=o.stats.mintedSteps>=5&&u>=25,p=m||o.stats.bustedConditionals>0||d.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:a,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:m,identityMintRate:u,moduleIdentityIssueCount:d.length,moduleIdentityIssues:d,schemaVersion:n,snapshotIdentityCache:true,stepIdentityStats:o.stats,testId:r,totalCacheableSteps:e.totalSteps};if(!p){t.debug(h,"V2 cache resolution completed");return}t.warn(h,"V2 cache resolution degraded");}async function fs({project:e,apiClient:t,classificationOverrides:o}){let{classification:n,healing:r,explore:i}=(await i9e(t))?.ai??{},a=s9e({flags:o,config:e.config.ai?.classification,cloudCategories:n?.categories}),s={...e.config.ai};return o?.disabled&&(s.aiFailureAnalysis=false),{...e,config:{...e.config,ai:{...s,classification:a,healing:r,explore:i}}}}async function i9e(e){try{return await e.getOrgSettings()}catch(t){if(!a9e(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function a9e(e){return e instanceof zo?e.status>=500:e instanceof zs||vR(e)}function s9e({flags:e,config:t,cloudCategories:o}){if(!(!t&&!o))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??w5,categories:o??Is}}var que="golden/visual-diff",Kue="reports",du="test-results";var l9e=z.object({width:z.number(),height:z.number()}),QT=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,o,n){let r=mn__default.join(t.rootDir,t.config.goldenFileDir??que);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=n,this.apiClient=o;}async prepareGoldenScreenshotForComparison(t,o,n){if(y6(o.screenshot?.data))return {buffer:(await this.apiClient.fetchOnDemandScreenshot(o.screenshot.data.id)).data,width:o.screenshot.width,height:o.screenshot.height};if(o.screenshot?.data?.startsWith("https://")){let a=await fetch(o.screenshot.data);return {buffer:Buffer.from(await a.arrayBuffer()),width:o.screenshot.width,height:o.screenshot.height}}let r=o.screenshot?.data;r||(r=mn__default.join(this.defaultGoldenScreenshotDir,`${o.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return nn__default.mkdirSync(mn__default.dirname(r),{recursive:true}),nn__default.writeFileSync(r,n.buffer),nn__default.writeFileSync(i,JSON.stringify({width:n.width,height:n.height})),{buffer:Buffer.from(n.buffer),width:n.width,height:n.height};if(nn__default.existsSync(r)){let a=nn__default.readFileSync(r),s=l9e.parse(JSON.parse(nn__default.readFileSync(i,"utf-8")));return {buffer:a,width:s.width,height:s.height}}else throw new ne("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var Jue=3e3,u9e=new Set(["editor","git_config","git_config_count","git_config_global","git_config_system","git_editor","git_exec_path","git_external_diff","git_pager","git_sequence_editor","git_template_dir","pager","prefix"]);function d9e(){let e={};for(let[t,o]of Object.entries(process.env))o!==void 0&&!u9e.has(t.toLowerCase())&&(e[t]=o);return e.LC_ALL="C",e.LANG="C",e}var m9e=d9e();function Id(e,t){return t?.throwIfAborted(),f2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(m9e)}var pi=Id();async function d2(e,t,o){try{return await Id(e,o).revparse(t)}catch(n){if(o?.throwIfAborted(),tde(n))return;throw n}}async function vc(e,t){return d2(e,["--show-toplevel"],t)}async function ZT(e){let t=await vc(e);if(!t)return;let o=mn__default.relative(t,e);if(!(o.startsWith("..")||mn__default.isAbsolute(o)))return o===""?".":o}async function Xue(e){return d2(e,["HEAD"])}async function Que(e){try{return (await Id(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function Zue(e){return d2(e,["--abbrev-ref","HEAD"])}async function ev({cwd:e,base:t,head:o,logger:n,abortSignal:r}){try{let i=(await Id(e,r).raw(["merge-base",t,o])).trim();if(i.length>0)return i;n.warn({base:t,head:o},"git merge-base returned empty");}catch(i){r?.throwIfAborted(),n.warn({err:i,base:t,head:o},"git merge-base failed");}}function m2(){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 tv({client:e,repository:t,base:o,head:n,logger:r,abortSignal:i}){let a=Zn(t);if(a)try{i?.throwIfAborted();let s=await e.compareCommitsFromGithub({owner:a.owner,repo:a.repo,base:o,head:n},i);return s.commits.length===0?void 0:s}catch(s){i?.throwIfAborted(),r.warn({err:s,repository:t,base:o,head:n},"remote commit compare failed");return}}async function Tc(e){let{logger:t,operation:o,fn:n,context:r}=e,i=Date.now();try{return await n()}finally{let a=Date.now()-i;a>Jue&&!process.env.CI&&t.warn({operation:o,durationMs:a,thresholdMs:Jue,...r??{}},"[timing] slow git metadata operation");}}function Cd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function ede(e,t){let o=await On(e,t.raw(["config","--null","--list"])),n={};if(!o)return n;for(let r of o.split("\0")){let i=r.indexOf(`
|
|
333
333
|
`);if(i===-1)continue;let a=r.slice(0,i),s=r.slice(i+1).trim();n[a]=s;}return n}function aC(e){if(e.startsWith("git@")){let t=e.split(":");if(t.length===2){let o=t[1].replace(".git","").split("/");if(o.length===2){let n=o[0],r=o[1];return `${n}/${r}`}}}else if(e.startsWith("http")||e.startsWith("https")){let o=new URL(e).pathname.split("/").filter(Boolean);if(o.length>=2){let n=o[0],r=o[1].replace(".git","");return `${n}/${r}`}}}var p9e=["not a git repository","ENOENT","detected dubious ownership","does not have any commits yet","ambiguous argument","Not a valid object name","Needed a single revision","No such ref"];function tde(e){return e instanceof Error?p9e.some(t=>e.message.includes(t)):false}async function On(e,t){try{return (await t).trim()}catch(o){if(tde(o))return;e.error({err:o},"Failed to run git command");return}}async function oa(e,t,o){if(e)try{return (await Id(t,o).revparse([e]))?.trim()||void 0}catch{o?.throwIfAborted();return}}async function sC(e){let t=await oa(e);return t||await oa(`origin/${e}`)}function ode(){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 h9e(e){let[t,o,n]=await Promise.all([On(e,pi.show(["--no-patch","--format=%ci"])),On(e,pi.show(["-s","--pretty=%B"])),On(e,pi.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?Cd(t):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:r,gitCommitMessage:o,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID,ciBuildUrl:r&&process.env.GITHUB_RUN_ID?`${r}/actions/runs/${process.env.GITHUB_RUN_ID}`:void 0,ciWorkflowName:process.env.GITHUB_WORKFLOW}}async function g9e(e){let[t,o,n]=await Promise.all([On(e,pi.listRemote(["--get-url","origin"])),On(e,pi.show(["-s","--pretty=%B"])),On(e,pi.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?Cd(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:t,gitCommitMessage:o,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`,ciBuildUrl:process.env.CI_PIPELINE_URL,ciWorkflowName:process.env.CI_PIPELINE_NAME}}async function f9e(e){let[t,o,n,r]=await Promise.all([On(e,pi.show(["--no-patch","--format=%ci"])),On(e,pi.listRemote(["--get-url","origin"])),On(e,pi.show(["-s","--pretty=%B"])),On(e,pi.show(["-s","--pretty=%an"]))]),a=process.env.CIRCLE_REPOSITORY_URL?.trim()||void 0||o||void 0,s=a?.includes("github.com")??false,l=a?.includes("gitlab.com")??false,c=a?aC(a):void 0;return {ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:t?Cd(t):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:a,gitCommitMessage:n,gitCommitAuthorName:r,githubRepository:s?c:void 0,gitlabProjectPath:l?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID,ciBuildUrl:process.env.CIRCLE_WORKFLOW_ID?`https://app.circleci.com/pipelines/workflows/${process.env.CIRCLE_WORKFLOW_ID}`:void 0}}async function y9e(e){let[t,o,n]=await Promise.all([On(e,pi.show(["--no-patch","--format=%ci"])),On(e,pi.show(["-s","--pretty=%B"])),On(e,pi.show(["-s","--pretty=%an"]))]),r=process.env.BUILDKITE_REPO,i=r?.includes("github.com"),a=r?.includes("gitlab.com"),s=r?aC(r):void 0;return {ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:t?Cd(t):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:r,gitCommitMessage:o,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`,ciBuildUrl:process.env.BUILDKITE_BUILD_URL,ciWorkflowName:process.env.BUILDKITE_PIPELINE_NAME}}async function b9e(e){let[t,o,n]=await Promise.all([On(e,pi.show(["--no-patch","--format=%ci"])),On(e,pi.show(["-s","--pretty=%B"])),On(e,pi.show(["-s","--pretty=%an"]))]),r=process.env["Build.Repository.Uri"],i=r?.includes("github.com"),a=r?.includes("gitlab.com"),s=r?aC(r):void 0,l=process.env["Build.SourceBranch"],c=l?.startsWith("refs/heads/")?l:process.env["Build.SourceBranchName"];return {ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:t?Cd(t):void 0,gitBranchName:Ww(process.env["System.PullRequest.SourceBranch"]??c),gitOriginUrl:r,gitCommitMessage:o,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function nde(e,t,o,n="full"){let r=Id(o?.repoDir),[i,a,s,l,c]=await Promise.all([S9e(e,r,n),On(e,r.revparse(["--abbrev-ref","HEAD"])),On(e,r.listRemote(["--get-url","origin"])),t?On(e,r.raw(["merge-base","--fork-point",t])):Promise.resolve(void 0),n==="full"?ede(e,r):Promise.resolve(void 0)]),u=i.sha??await On(e,r.revparse(["HEAD"])),d=s??c?.["remote.origin.url"]??await On(e,r.raw(["config","--get","remote.origin.url"])),m=l||(t?await On(e,r.raw(["merge-base",t,"HEAD"])):void 0),p=m?await On(e,r.show(["--no-patch","--format=%cI",m])):void 0,h=d?.includes("github.com"),g=d?.includes("gitlab.com"),f=d?aC(d):void 0,y=c?.["user.email"]||void 0,b=c?.["user.name"]||void 0,S=c?.["user.username"]||void 0,E=c?.["github.user"]||void 0,v=S??E??void 0;return {ciProvider:"none",gitCommitSha:u,gitCommitShaShort:i.shaShort,gitBranchName:a,gitOriginUrl:d,gitCommitTimestamp:Cd(i.timestamp),gitCommitMessage:i.message,gitCommitAuthorName:i.authorName,gitLocalUsername:v,gitLocalEmail:y,gitLocalName:b,lastCommitOnMainSha:m,lastCommitOnMainTimestamp:p?Cd(p):void 0,githubRepository:h?f:void 0,gitlabProjectPath:g?f:void 0,pipelineId:void 0}}async function S9e(e,t,o){let n=o==="full"?"%H%x00%h%x00%cI%x00%an%x00%B":"%H%x00%cI",r=await On(e,t.raw(["log","-1",`--format=${n}`,"HEAD"]));if(!r)return {};if(o==="cache"){let[u,d]=r.split("\0");return {sha:u||void 0,timestamp:d||void 0}}let[i,a,s,l,...c]=r.split("\0");return {sha:i||void 0,shaShort:a||void 0,timestamp:s||void 0,authorName:l||void 0,message:c.join("\0")||void 0}}async function T9e(e){let[t,o]=await Promise.all([On(e,pi.show(["--no-patch","--format=%ci"])),On(e,pi.show(["-s","--pretty=%an"]))]),n=process.env.GIT_REPOSITORY_URL,r=n?.includes("github.com"),i=n?.includes("gitlab.com"),a=n?aC(n):void 0;return {ciProvider:"Bitrise",gitCommitSha:process.env.BITRISE_GIT_COMMIT,gitCommitShaShort:process.env.BITRISE_GIT_COMMIT?.slice(0,6),gitCommitTimestamp:t?Cd(t):void 0,gitBranchName:process.env.BITRISE_GIT_BRANCH,gitOriginUrl:n,gitCommitMessage:process.env.BITRISE_GIT_MESSAGE,gitCommitAuthorName:o,githubRepository:r?a:void 0,gitlabProjectPath:i?a:void 0,pipelineId:`${process.env.BITRISE_APP_SLUG}:${process.env.BITRISE_BUILD_SLUG}`,ciBuildUrl:process.env.BITRISE_BUILD_URL,ciWorkflowName:process.env.BITRISE_TRIGGERED_WORKFLOW_TITLE}}async function v9e(){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 A9e(){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:Cd(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:Cd(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}}function YM({project:e,resolvedMainBranch:t}){e.config.gitMainBranch||C.warn(t?` gitMainBranch is not set in momentic.config.yaml; using "${t}" from the checkout's origin/HEAD. Set it explicitly if that is not your main branch.`:" gitMainBranch is not set in momentic.config.yaml and could not be inferred from the checkout, so comparisons against the main branch are an estimate. Set it to get accurate results.");}async function fy(e){try{let t=(await Id(e).raw(["symbolic-ref","--quiet","refs/remotes/origin/HEAD"])).trim(),o="refs/remotes/origin/";return t.startsWith(o)?t.slice(o.length):void 0}catch{return}}async function E9e(e){let t=[...e.config.gitProtectedBranches??[]];return e.config.gitMainBranch&&t.push(e.config.gitMainBranch),{gitMainBranch:e.config.gitMainBranch??await fy(e.rootDir),gitProtectedBranches:t}}async function Ac(e,t,o){let n=ode();if(!n)return nde(e,t,o);switch(n){case "GithubActions":return h9e(e);case "GitlabCI":return g9e(e);case "CircleCI":return f9e(e);case "Buildkite":return y9e(e);case "AzureDevOps":return b9e(e);case "GCPCloudBuild":return v9e();case "Bitrise":return T9e(e);case "Custom":return A9e()}}async function p2(e,t){let o=await ede(e,Id(t));return {gitLocalUsername:o["user.username"]??o["github.user"]??void 0,gitLocalEmail:o["user.email"]||void 0,gitLocalName:o["user.name"]||void 0}}async function w9e(e,t,o,n,r){let i=n,a=n.gitCommitSha;if(!a)return i;if(!i.gitCommitTimestamp||r==="full"&&(!i.gitCommitAuthorName||!i.gitCommitMessage))try{let c=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getCommitFromGitlab",fn:()=>t.getCommitFromGitlab(o,a),context:{projectPath:o,gitCommitSha:a}});c&&(i={...i,gitCommitTimestamp:i.gitCommitTimestamp??c.committer.date,gitCommitAuthorName:i.gitCommitAuthorName??c.author.name,gitCommitMessage:i.gitCommitMessage??c.message});}catch(c){e.warn({err:c},"Failed to get commit from Gitlab");}let l=n.gitMainBranch;if(l&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let c=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getMergeBaseCommitFromGitlab",fn:()=>t.getMergeBaseCommitFromGitlab(o,l,a),context:{projectPath:o,mainBranch:l}});i={...i,lastCommitOnMainSha:c.sha,lastCommitOnMainTimestamp:c.committer.date};}catch(c){e.warn({err:c},"Failed to get merge base commit from Gitlab");}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!i.mergedGitBranchName){let c=n.gitBranchName;try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getMergedBranchFromGitlab",fn:()=>t.getMergedBranchFromGitlab(o,c,a),context:{projectPath:o,branchName:c,gitCommitSha:a}});u.mergedBranch&&(i={...i,mergedGitBranchName:u.mergedBranch});}catch(u){e.warn({err:u},"Failed to get merged branch from Gitlab");}}return i}async function R9e(e,t,o,n,r,i){let a=r,s=r.gitCommitSha;if(!s)return a;if(!a.gitCommitTimestamp||i==="full"&&(!a.gitCommitAuthorName||!a.gitCommitMessage))try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getCommitFromGithub",fn:()=>t.getCommitFromGithub(o,n,s),context:{owner:o,repo:n,gitCommitSha:s}});u&&(a={...a,gitCommitTimestamp:a.gitCommitTimestamp??u.committer.date,gitCommitAuthorName:a.gitCommitAuthorName??u.author.name,gitCommitMessage:a.gitCommitMessage??u.message});}catch(u){e.warn({err:u},"Failed to get commit from GitHub");}let c=r.gitMainBranch;if(c&&(!a.lastCommitOnMainSha||!a.lastCommitOnMainTimestamp))try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getMergeBaseCommitFromGithub",fn:()=>t.getMergeBaseCommitFromGithub(o,n,c,s),context:{owner:o,repo:n,mainBranch:c}});a={...a,lastCommitOnMainSha:u.sha,lastCommitOnMainTimestamp:u.committer.date};}catch(u){e.warn({err:u},"Failed to get merge base commit from GitHub");}if(r.gitBranchName&&r.gitBranchName===r.gitMainBranch&&!a.mergedGitBranchName){let u=r.gitBranchName;try{let d=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getMergedBranchFromGithub",fn:()=>t.getMergedBranchFromGithub(o,n,u,s),context:{owner:o,repo:n,branchName:u,gitCommitSha:s}});d.mergedBranch&&(a={...a,mergedGitBranchName:d.mergedBranch});}catch(d){e.warn({err:d},"Failed to get merged branch from GitHub");}}return a}async function C9e(e,t,o,n){try{if(o.githubRepository){let{owner:r,repo:i}=g9(o.githubRepository);return await Tc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitHub",fn:()=>R9e(e,t,r,i,o,n),context:{githubRepository:o.githubRepository}})}else if(o.gitlabProjectPath){let r=o.gitlabProjectPath;return await Tc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitlab",fn:()=>w9e(e,t,r,o,n),context:{gitlabProjectPath:r}})}}catch(r){e.warn({err:r},"Failed to get remote git metadata");}return o}async function rde(e,t,o,n){let r=n==="full"?"getGitMetadata":"getGitMetadataForCache",i={},a={gitMainBranch:o.config.gitMainBranch};return Tc({logger:e,operation:`${r}.total`,fn:async()=>{let[s,l]=await Promise.all([Tc({logger:e,operation:`${r}.getConfiguredGitMetadata`,fn:()=>E9e(o),context:{projectConfigPath:o.configFilePath}}),Tc({logger:e,operation:`${r}.getEnvironmentGitMetadata`,fn:async()=>{let d=ode()?await Ac(e,o.config.gitMainBranch,{repoDir:o.rootDir}):await nde(e,o.config.gitMainBranch,{repoDir:o.rootDir},n);return a.ciProvider=d.ciProvider,d},context:a})]),c={...s,...l};i.gitBranchName=c.gitBranchName,i.githubRepository=c.githubRepository,i.gitlabProjectPath=c.gitlabProjectPath,(!c.lastCommitOnMainSha||!c.lastCommitOnMainTimestamp)&&c.gitBranchName===s.gitMainBranch&&(c.lastCommitOnMainSha=c.gitCommitSha,c.lastCommitOnMainTimestamp=c.gitCommitTimestamp);let u=await Tc({logger:e,operation:`${r}.getRemoteMetadataIfNeeded`,fn:()=>C9e(e,t,c,n),context:{githubRepository:c.githubRepository,gitlabProjectPath:c.gitlabProjectPath,gitBranchName:c.gitBranchName}});return {...s,...l,...u}},context:i})}async function ide(e){try{let t=await Id(e).remote(["show","origin"]);return t?t.match(/HEAD branch: (.*)$/m)?.[1]?.trim():void 0}catch{return}}async function ade(){try{return (await pi.revparse(["--is-inside-work-tree"])).trim()==="true"}catch{return false}}var rC,iC;async function sde(e,t){let o=Id(t.rootDir),[n,r]=await Promise.all([o.raw(["symbolic-ref","--short","-q","HEAD"]).then(s=>s.trim()||void 0).catch(()=>{}),On(e,o.revparse(["--verify","HEAD"]).then(s=>s.trim()))]);if(!r)return;let i=`${t.configFilePath}:${t.config.gitMainBranch}:${t.config.gitProtectedBranches?.join(",")}`,a=n?`branch:${n}`:"detached";return `${t.rootDir}:${a}:${r}:${i}`}async function ng(e,t,o){let n=await sde(e,o);if(n&&rC?.snapshotKey===n)return e.debug("Using cached git metadata"),await rC.value;let r=rde(e,t,o,"full");n&&(rC={snapshotKey:n,value:r});try{return await r}catch(i){throw rC?.value===r&&(rC=void 0),i}}async function xd(e,t,o){let n=await sde(e,o);if(n&&iC?.snapshotKey===n)return e.debug("Using cached git metadata for cache resolution"),await iC.value;let r=rde(e,t,o,"cache").then(i=>({gitMainBranch:i.gitMainBranch,gitProtectedBranches:i.gitProtectedBranches,gitBranchName:i.gitBranchName,gitCommitTimestamp:i.gitCommitTimestamp,lastCommitOnMainSha:i.lastCommitOnMainSha,lastCommitOnMainTimestamp:i.lastCommitOnMainTimestamp,mergedGitBranchName:i.mergedGitBranchName}));n&&(iC={snapshotKey:n,value:r});try{return await r}catch(i){throw iC?.value===r&&(iC=void 0),i}}var x9e=z.object({pull_request:z.object({body:z.string().nullable().optional()}).optional()});async function JM({client:e,gitMetadata:t,logger:o}){let n=process.env.CI_MERGE_REQUEST_DESCRIPTION;if(n&&n.trim().length>0)return n;let r=await _9e(o);if(r!==void 0)return r;let i=t.gitBranchName;if(i)try{if(t.githubRepository){let a=Zn(t.githubRepository);if(!a)return;let s=await e.getGithubPullRequestForBranch(a.owner,a.repo,i);return s?.body?.trim()?s.body:void 0}if(t.gitlabProjectPath){let a=await e.getGitlabMergeRequestForBranch(t.gitlabProjectPath,i);return a?.description?.trim()?a.description:void 0}}catch(a){o.warn({err:a},"Failed to load change request description from remote git metadata");}}async function _9e(e){let t=process.env.GITHUB_EVENT_PATH;if(t)try{let o=JSON.parse(await readFile(t,"utf8")),r=x9e.parse(o).pull_request?.body;return r?.trim()?r:void 0}catch(o){e.warn({err:o,eventPath:t},"Failed to load change request description from GitHub event");return}}var P9e=1024*1024;async function rg({absoluteRepoRoot:e,baseRef:t="HEAD",candidateRepoRelativePaths:o}){cC(e);let n=f2(e),r=o?lC(o):[];if(o&&r.length===0)return [];for(let l of r)y2({absoluteRepoRoot:e,repoRelativePath:l});let i=r.map(g2),[a,s]=await Promise.all([n.diff(["--name-only","--diff-filter=ACDMRTUXB",t,"--",...i]),n.raw(["ls-files","--others","--exclude-standard","--",...i])]);return O9e(lC([...lde(a),...lde(s)]))}function O9e(e){return e.filter(ip)}function ip(e){let t=rp.basename(e);return e.endsWith(".test.yaml")||e.endsWith(".module.yaml")||t===Gs||t===qR}async function XM({absoluteRepoRoot:e,repoRelativePaths:t,maxFileSizeBytes:o=P9e}){cC(e);let n=[];for(let r of lC(t)){let i=y2({absoluteRepoRoot:e,repoRelativePath:r});if(!ip(r))throw new Error(`Pull request path is not a Momentic file: ${r}`);let a=await promises.stat(i).catch(()=>{});if(!a){n.push({operation:"delete",path:r});continue}if(!a.isFile())throw new Error(`Cannot create pull request change for non-file path: ${r}`);if(a.size>o)throw new Error(`Cannot create pull request change for oversized file: ${r}`);let s=await promises.readFile(i,"utf8");if(s.includes("\0"))throw new Error(`Cannot create pull request change for binary file: ${r}`);n.push({operation:"upsert",path:r,content:s});}return n}async function ig({absoluteRepoRoot:e,repoRelativePaths:t,baseRef:o="HEAD",maxFileSizeBytes:n}){cC(e);let r=lC(t??await rg({absoluteRepoRoot:e,baseRef:o}));if(r.length===0)return "";let a=(await XM({absoluteRepoRoot:e,repoRelativePaths:r,maxFileSizeBytes:n})).filter(l=>l.operation==="upsert").map(l=>l.path),s=await promises.mkdtemp(rp.join(cde.tmpdir(),"momentic-git-patch-"));try{let l=f2(e).env("GIT_INDEX_FILE",rp.join(s,"index"));return await l.raw(["read-tree",o]),a.length>0&&await l.raw(["add","--intent-to-add","--",...a.map(g2)]),await l.raw(["diff","--binary","--",...r.map(g2)])}finally{await promises.rm(s,{recursive:true,force:true});}}async function ude({absoluteRepoRoot:e,patch:t}){cC(e);let o=await promises.mkdtemp(rp.join(cde.tmpdir(),"momentic-git-apply-")),n=rp.join(o,"heal.patch");try{await promises.writeFile(n,t,"utf8");let r=f2(e),i=k9e(await r.raw(["apply","--numstat","-z","--",n]));if(i.length===0)throw new Error("Cannot apply an empty heal patch.");for(let a of i)if(y2({absoluteRepoRoot:e,repoRelativePath:a}),!ip(a))throw new Error(`Heal patch path is not a Momentic file: ${a}`);return await r.raw(["apply","--check","--",n]),await r.raw(["apply","--",n]),i}finally{await promises.rm(o,{recursive:true,force:true});}}async function dde({absoluteRepoRoot:e,repoRelativePaths:t,baseBranch:o,baseCommitSha:n,headBranch:r,branchPrefix:i,idempotencyKey:a,commitMessage:s,title:l,body:c,reviewers:u,teamReviewers:d,fallbackReviewers:m,draft:p,coAuthorRange:h,omitBaseCommitCoAuthors:g,requestCommitAuthorsAsReviewers:f,assignCommitAuthorsAsAssignees:y,assignees:b,maxFileSizeBytes:S}){cC(e);let E=await XM({absoluteRepoRoot:e,repoRelativePaths:t??await rg({absoluteRepoRoot:e,baseRef:n}),maxFileSizeBytes:S}),v=o??await Zue(e);if(!v)throw new ue(`Cannot determine base branch because git is not usable in '${e}'.`);let R=n??await Xue(e);if(!R)throw new ue(`Cannot determine base commit SHA because git is not usable in '${e}'.`);return {baseBranch:v,baseCommitSha:R,headBranch:r,branchPrefix:i,idempotencyKey:a,commitMessage:s,title:l,body:c,changes:E,reviewers:u,teamReviewers:d,fallbackReviewers:m,draft:p,coAuthorRange:h,requestCommitAuthorsAsReviewers:f,assignCommitAuthorsAsAssignees:y,assignees:b,omitBaseCommitCoAuthors:g}}function lde(e){return e?e.split(`
|
|
334
334
|
`).filter(t=>t.length>0):[]}function lC(e){return [...new Set(e)]}function g2(e){return `:(literal)${e}`}function k9e(e){let t=e.split("\0"),o=[];for(let n=0;n<t.length;n++){let r=t[n];if(!r)continue;let i=r.split(" ");if(i.length<3)throw new Error("Cannot determine files touched by heal patch.");let a=i.slice(2).join(" ");if(a){o.push(a);continue}let s=t[++n],l=t[++n];if(!s||!l)throw new Error("Cannot determine renamed files touched by heal patch.");o.push(s,l);}return lC(o)}function cC(e){if(!rp.isAbsolute(e))throw new Error(`Git repository root must be absolute: ${e}`)}function y2({absoluteRepoRoot:e,repoRelativePath:t}){if(!t||rp.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let o=rp.resolve(e,t);if(o!==e&&!o.startsWith(`${e}${rp.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var mde=mn__default.join(".momentic","skills"),pde="SKILL.md",N9e=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/,D9e=50;function F9e({rootDir:e,fileSystem:t}){let o=mn__default.resolve(e);for(let n=0;n<D9e;n++){let r=mn__default.join(o,mde);if(t.existsSync(r))return r;let i=mn__default.dirname(o);if(i===o)break;o=i;}return mn__default.join(mn__default.resolve(e),mde)}function B9e({rootDir:e,fileSystem:t=pt}){let o=F9e({rootDir:e,fileSystem:t}),n=hde({skillsDir:o,fileSystem:t}),r=[];for(let i of n){let a=mn__default.basename(mn__default.dirname(i)),s=mn__default.relative(o,mn__default.dirname(i)).split(mn__default.sep).join("/"),l=U9e({dirName:a,skillPath:s,filePath:i,fileSystem:t});l&&r.push(l);}return r.sort((i,a)=>i.name.localeCompare(a.name)||i.path.localeCompare(a.path))}function ov({rootDir:e,agent:t,fileSystem:o=pt}){let n=B9e({rootDir:e,fileSystem:o}).filter(r=>r.agents===void 0||r.agents.includes(t));if(n.length!==0)return n.map(r=>`<skill name="${r.name}" path="${r.path}" description="${r.description}">
|
|
335
335
|
${r.body}
|
|
@@ -443,7 +443,7 @@ ${r.code(tr(u,n))}`,i),t)try{await D7e(u);}catch{e.warn(`Could not open a browse
|
|
|
443
443
|
`);if(n===this.lastFrame&&this.liveRows===o.length)return;let r=this.eraseSeq();o.length>0&&(r+=`${n}
|
|
444
444
|
`),r+=this.cursorSeq(o.length>0),r.length>0&&this.opts.stream.write(r),this.commitFrame(o,n);}commitFrame(t,o){this.liveRows=t.length,this.lastFrame=o,t.length===0?this.stopTicker():this.ensureTicker();}eraseSeq(){return this.liveRows===0?"":doe+moe.repeat(this.liveRows)+poe}ensureTicker(){this.tickTimer||(this.tickTimer=setInterval(()=>{this.tick+=1,this.update();},this.opts.tickMs),this.tickTimer.unref?.());}stopTicker(){this.tickTimer&&(clearInterval(this.tickTimer),this.tickTimer=void 0);}};var Oet=80,ket=120,Met=20,Let="classifying failure",wL=class{totalTests=0;nextIndex=0;running=new Map;quarantined=new Set;recovered=new Set;region;theme;screen;constructor(t){this.screen={...t,isTTY:cd(t)},this.theme=Je(this.screen),this.region=new dg({stream:process.stdout,isTTY:this.screen.isTTY,tickMs:Oet,render:o=>this.renderRunningRows(o)});}onBegin(t){this.totalTests=t.tests.length,this.nextIndex=0,this.quarantined.clear(),this.recovered.clear();for(let o of t.tests)o.quarantined&&this.quarantined.add(o.relativeFilePath);for(let o of t.tests)o.skipped&&(this.nextIndex+=1,this.commitRow({testRef:o.relativeFilePath,status:"SKIP",index:this.nextIndex,note:o.skipped.kind==="quarantined"?o.skipped.reason:void 0}));}onTestBegin(t){this.nextIndex+=1,this.running.set(t,{index:this.nextIndex,status:"RUN",startedAt:Date.now()}),this.region.update();}onTestStatus(t,o,n){let r=this.running.get(t);r?(r.status=o,r.note=n,r.step=void 0,r.classifying=false):(this.nextIndex+=1,this.running.set(t,{index:this.nextIndex,status:o,note:n,startedAt:Date.now()})),this.region.update();}onStepStart(t,o){let n=this.running.get(t);if(n){if(n.step={text:o},n.classifying=o===pm,n.classifying&&!this.screen.isTTY){let r=this.formatRow({testRef:t,status:n.status,index:n.index,classifying:true,classifyPending:true});r&&this.region.writeAbove(r);return}this.region.update();}}onStepEnd(t,o,n){}onSectionStart(t,o){}onTestEnd(t,o,n){n?.recovered&&this.recovered.add(t);let r=this.running.get(t),i=r?this.formatRow({testRef:t,status:o,index:r.index,elapsedMs:Date.now()-r.startedAt}):this.formatRow({testRef:t,status:o,index:++this.nextIndex});if(r&&this.running.delete(t),i){this.region.writeAbove(i);return}this.region.update();}onEnd(t){this.region.clear();}commitRow(t){let o=this.formatRow(t);o&&this.region.writeAbove(o);}renderRunningRows(t){let o=[];for(let[n,r]of this.running){let i=this.formatRow({testRef:n,status:r.status,index:r.index,note:r.note,elapsedMs:Date.now()-r.startedAt,step:r.step,tick:t,classifying:r.classifying});i&&o.push(i);}return o}formatRow(t){let o=hR(t.status,this.screen,t.tick);if(!o)return;let n=t.classifying===true&&!o.isTerminal,r=n?this.theme.classifySpinner(t.tick??0):o.badge,a=String(this.totalTests).length*2+3,s=`[${t.index}/${this.totalTests}]`.padStart(a),l=this.quarantined.has(t.testRef)?" [quarantined]":"",c=this.recovered.has(t.testRef)?" [recovered]":"",u=typeof t.elapsedMs=="number"?Math.floor(t.elapsedMs/1e3):0,m=(o.isTerminal?typeof t.elapsedMs=="number":u>=1)?` (${Math.max(1,u)}s)`:"",p=this.screen.columns>0?this.screen.columns:ket,h=a+3+t.testRef.length+l.length+c.length+m.length,g=Math.max(Met,p-1)-h,f=n?`${Let}${t.classifyPending?"\u2026":""}`:t.step&&!o.isTerminal?t.step.text:void 0,b=f?q2(n?" \xB7 ":" \u203A ",f,g):"";g-=b.length;let S=t.note?q2(" ",t.note,g):"";return `${this.theme.dim(s)} ${r} ${t.testRef}${this.theme.dim(l)}${this.theme.dim(c)}${this.theme.dim(b)}${S}${this.theme.dim(m)}`}};var RL=class{constructor(t){this.reporters=t;}onBegin(t){for(let o of this.reporters)o.onBegin(t);}onTestBegin(t){for(let o of this.reporters)o.onTestBegin(t);}onTestStatus(t,o,n){for(let r of this.reporters)r.onTestStatus(t,o,n);}onStepStart(t,o,n){for(let r of this.reporters)r.onStepStart(t,o,n);}onStepEnd(t,o,n){for(let r of this.reporters)r.onStepEnd(t,o,n);}onSectionStart(t,o){for(let n of this.reporters)n.onSectionStart(t,o);}onTestEnd(t,o,n){for(let r of this.reporters)r.onTestEnd(t,o,n);}onEnd(t){for(let o of this.reporters)o.onEnd(t);}};var Net="classifying failure",CL=class{totalTests=0;nextIndex=0;running=new Map;quarantined=new Set;recovered=new Set;theme;screen;constructor(t){this.screen=t,this.theme=Je(t);}onBegin(t){this.totalTests=t.tests.length,this.nextIndex=0,this.quarantined.clear(),this.recovered.clear();for(let o of t.tests)o.quarantined&&this.quarantined.add(o.relativeFilePath);for(let o of t.tests){if(!o.skipped)continue;this.nextIndex+=1;let n=o.skipped.kind==="quarantined"?` ${o.skipped.reason}`:"";this.write(`${this.counter(this.nextIndex)}${this.theme.statusGlyph("skip")} ${o.relativeFilePath}${n}`);}}onTestBegin(t){this.nextIndex+=1,this.running.set(t,{index:this.nextIndex,startedAt:Date.now()}),this.write(`${this.counter(this.nextIndex)}${this.theme.bold(t)}`);}onTestStatus(t,o,n){let r=this.running.get(t);r||(this.nextIndex+=1,r={index:this.nextIndex,startedAt:Date.now()},this.running.set(t,r));let i=hR(o,this.screen);if(!i||i.isTerminal||o==="RUN")return;let a=n?` ${this.theme.dim(n)}`:"";this.detail(r,1,`${i.badge} ${this.theme.dim(o.toLowerCase())}${a}`);}onStepStart(t,o,n=0){let r=this.running.get(t);if(r){if(o===pm){this.detail(r,1,`${this.theme.classifySpinner(0)} ${this.theme.dim(`${Net}\u2026`)}`);return}this.detail(r,this.stepIndent(r,n),this.theme.dim(`- ${o}`));}}onStepEnd(t,o,n){let r=this.running.get(t);if(!r)return;let i=this.theme.statusGlyph(n.success?"pass":"fail");this.detail(r,this.stepIndent(r,n.depth),`${i} ${this.theme.dim(sp(n.durationMs))}`);}onSectionStart(t,o){let n=this.running.get(t);n&&(n.sectioned=true,this.detail(n,1,this.theme.dim(o)));}onTestEnd(t,o,n){n?.recovered&&this.recovered.add(t);let r=this.running.get(t),i=hR(o,this.screen),a=r?.index??++this.nextIndex;if(r&&this.running.delete(t),!i)return;let s=this.quarantined.has(t)?" [quarantined]":"",l=this.recovered.has(t)?" [recovered]":"",c=r?` (${Math.max(1,Math.floor((Date.now()-r.startedAt)/1e3))}s)`:"",u=r?"":` ${t}`;this.write(`${this.counter(a)}${i.badge}${u}${this.theme.dim(s)}${this.theme.dim(l)}${this.theme.dim(c)}`);}onEnd(t){}stepIndent(t,o){return o+(t.sectioned?2:1)}detail(t,o,n){this.write(`${this.counter(t.index)}${" ".repeat(o)}${n}`);}counter(t){if(this.totalTests<=1)return "";let n=String(this.totalTests).length*2+3;return this.theme.dim(`[${t}/${this.totalTests}]`.padStart(n))+" "}write(t){process.stdout.write(`${t}
|
|
445
445
|
`);}};var Fet="list",xpe="steps",_pe="dot",IL=["json","junit","allure","allure-json","playwright-json","buildkite-json"],xL=["newrelic"],Ipe=[Fet,xpe,_pe,...IL,...xL];function Ppe(e,t){if(!Ipe.includes(e))throw new InvalidArgumentError$2(`Allowed choices are ${Ipe.join(", ")}.`);return [...t,e]}function Ope(e){let t=[],o=[];for(let r of e.reporter??[]){let i=IL.find(s=>s===r);i&&t.push(i);let a=xL.find(s=>s===r);a&&o.push(a);}let n;return e.reporter?.includes(_pe)?n=new EL(e.screen):e.reporter?.includes(xpe)?n=new CL(e.screen):n=new wL(e.screen),{live:new RL([n]),files:t,network:o}}function _L(e,t){return e.split(`
|
|
446
|
-
`).map(o=>t.color?o.startsWith("+")?Jl.green(o):o.startsWith("-")?Jl.red(o):o.startsWith("@@")?t.dim(o):o:o)}var zet="MOMENTIC_SKIP_UPGRADE_PROMPT",jet=24*60*60*1e3;async function Mpe(e){let{runUpgrade:t}=e;if(!t||process.env.NO_UPDATE_NOTIFIER||process.env[zet]!==void 0||is||!process.stdin.isTTY||!process.stdout.isTTY)return;let o;try{o=await Y2(e);}catch(n){e.logger.warn({err:n},"Failed to check for a newer CLI version");return}if(!(!o||!lp.gt(o,e.currentVersion))&&mv(`upgrade-prompt-${e.packageName}-${o}`,jet)){J2(e,o,qe());try{if(!await confirm({message:`Upgrade ${e.packageName} to v${o} now?`,default:!0})){C.log(` Run ${e.updateCommand} at any time to update.`);return}await t(o,e.logger),C.success(`Upgraded ${e.packageName} to v${o}. This command continues on v${e.currentVersion}; new runs use v${o}.`);}catch(n){if(n instanceof Error&&n.name==="ExitPromptError")return;e.logger.warn({err:n},"Failed to upgrade the CLI"),C.warn(`Could not upgrade ${e.packageName}: ${G(n)}. Run ${e.updateCommand} to update manually.`);}}}var Het="https://api.momentic.ai";function Lpe({server:e,serverSource:t,apiKeySource:o}){return t!=="default"||o==="default"?e:Het}function Npe(e,t){switch(e){case "cli":return "--api-key";case "env":return "MOMENTIC_API_KEY";default:return t}}function Dpe({auth:e,serverUrl:t,appUrl:o,keySource:n,screen:r}){let i=Je(r),a=e.name??e.email??e.userId,s=[];e.email!==void 0&&s.push({label:"Email",value:e.email}),s.push({label:"User ID",value:e.userId},{label:"Org ID",value:e.orgId},{label:"Server",value:t},{label:"App",value:tr(o,r)},{label:"API key",value:i.dim(n)}),C.log(`Signed in as ${i.bold(a)}`),C.log(Od(s,r));}var _C=25;function Fpe(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function Bpe(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function aV({project:e,newProjectConfig:t,fileFormatLabel:o,migratedFilePaths:n}){e.config=t,ry(e.config,e.configFilePath),n.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${o} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${n.length} migrated files`),NT([...new Set(n)],t));}async function PC(e,t,o){for(let n=0;n<e.length;n+=t)await Promise.all(e.slice(n,n+t).map(o));}function sV(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function Get(e){let t=e.ai??={},o=t.agentConfig??={},n=[];for(let[a,s]of Object.entries(Xp)){let l=o[a];l!==s&&(l?.startsWith(`${s}.`)||(o[a]=s,n.push({type:a,newValue:s})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:n,enabledUseMemory:r,enabledFailureRecovery:i}}async function Upe({project:e,dryRun:t,migrate:o}){let n=e.config.fileFormat!=="v2",r=ds.stringify(e.config),i=Get(e.config);if(!n)return !t&&sV(i)&&ry(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:i,migration:lV(),configDiff:rV(r,e.config)};let a=await o();return {fileFormatChanged:n,aiSettings:i,migration:a,configDiff:rV(r,{...e.config,fileFormat:"v2"})}}function rV(e,t){return Gf(e,ds.stringify(t),{n_surrounding:2})}function zpe(e){return rV(ds.stringify(e),{...e,fileFormat:"v2"})}function lV(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function cV({summary:e,fileFormatChanged:t,configChange:o,dryRun:n,testNoun:r="test",moduleNoun:i="module"}){let a=qe(),s=Je(a),l=s.green("~");C.info(""),C.info(ug(n?"Upgrade Preview":"Upgrade Summary",a)),C.info("");let c=p=>` ${l} ${s.code(mn__default.relative(process.cwd(),p))}`,u=(p,h)=>{let g=rT(p,h);return `${s.bold(g.charAt(0).toUpperCase()+g.slice(1))} ${s.dim(`(${h})`)}`},d=e.migratedTestPaths.length,m=e.migratedModulePaths.length;if(t||d>0||m>0){let p=n?"Would migrate":"Migrated";if(C.info(`${p} ${s.bold(`${d} ${rT(r,d)}`)} and ${s.bold(`${m} ${rT(i,m)}`)} to the simplified format.`),C.info(""),d>0){C.info(u(r,d));for(let h of [...e.migratedTestPaths].sort())C.info(c(h));C.info("");}if(m>0){C.info(u(i,m));for(let h of [...e.migratedModulePaths].sort())C.info(c(h));C.info("");}(e.alreadyV2TestCount>0||e.alreadyV2ModuleCount>0)&&(C.dimmed(`Skipped ${e.alreadyV2TestCount} already-migrated ${rT(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-migrated ${rT(i,e.alreadyV2ModuleCount)}.`),C.info(""));}if(o&&o.diff.trim().length>0){C.info(u("config",1)),C.info(c(o.configFilePath));for(let p of _L(o.diff,s))C.info(` ${p}`);C.info("");}}var uV=false,jpe;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.58.0",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(o,n){return Pne(n?.originalException)||cf(n?.originalException,ue)||One(n?.originalException)?null:o}}),uoe(e.captureException),jpe=o=>{if(!o){e.setUser(null);return}e.setUser({id:o.userId,organizationId:o.orgId,...o.email&&{email:o.email}});},uV=!0;}catch{}var Hpe=e=>jpe?.(e);var Wet=new ek(30,60*1e3),kC="https://api.momentic.ai",fv,$pe,cp=e=>{kC=e;},Pl=()=>kC,Gpe=()=>jS(kC),mg=e=>{$pe=e;},hu=()=>$pe,Nn=()=>fv,Vpe=()=>{if(!fv)throw new Error("Global API client has not been initialized.");return fv};var OC,OL,Wpe,qpe,Kpe,kL,Ype,Jpe=({authInfo:e,apiKey:t,apiClient:o})=>{kC=o.baseUrl,fv=o,OC=e.orgId,OL=e.userId,Wpe=e.email,qpe=e.name,Kpe=e.pylonEmailHash,kL=t,Ype=e.selfServe;},pg=async({apiClient:e,apiKey:t,skipPrompts:o})=>{let n=await gy({client:e});return Jpe({authInfo:n,apiKey:t,apiClient:e}),n},NL=async({apiKey:e,mode:t,runner:o})=>{if(fv&&OC&&kL)return OC;let n=new Nt({baseUrl:kC,apiKey:e,logger:C,mode:t,runner:o});fv=n;try{let r=await n.getAuthInfo();return Jpe({authInfo:r,apiKey:e,apiClient:n}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},xr=()=>{if(!OC)throw new Error("Your organization ID is invalid.");return OC},Ld=()=>{if(!OL)throw new Error("Your user ID is invalid.");return OL},Xpe=()=>OL,yv=()=>Wpe,Qpe=()=>qpe,Zpe=()=>Kpe,DL=()=>Ype,up=()=>{if(!kL)throw new Error("Your API key is invalid.");return kL},ML,LL,dp=()=>{LL?.abort(),LL=void 0;},hg=(e,t)=>{ML=e,dp(),LL=new AbortController;let o=LL.signal,n=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=mn__default.resolve(e.rootDir,r.envFile);try{if(nn__default.lstatSync(i).isSymbolicLink())return;nn__default.existsSync(i)&&n.push(i);}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`);}});try{qet({filesToWatch:n,revalidator:t,signal:o,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function bv({project:e,apiClient:t}){let o=n=>fs({project:n,apiClient:t});hg(await o(e),async n=>o(await Ro({configFilePath:n})));}var xt=()=>{if(!ML)throw new ue("No Momentic project is currently loaded. Open or select a project before invoking this action.");return ML};function qet({filesToWatch:e,revalidator:t,signal:o,project:n}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(s,l)=>{if(s.mtime.getTime()!==l.mtime.getTime()){Wet.increment("setLocalProject")&&C.warn(`A file change under the ${n.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{ML=await Promise.resolve(t(n.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};nn__default.watchFile(r,{persistent:false},i);let a=()=>{nn__default.unwatchFile(r,i),o.removeEventListener("abort",a);};o.addEventListener("abort",a);});}function Vt(e){return function(...t){let o=t[t.length-1],n=e(...t);Promise.resolve(n).catch(o);}}var Yet="3.58.0",mp=VS({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:Yet});(async()=>{try{let e=await Ac(mp);e.gitBranchName&&mp.addBinding("branch",e.gitBranchName);}catch{}})();var ehe=Router();ehe.get("/",async(e,t)=>{let o=xt(),n=Nn();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await xd(mp,n,o),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:a,alwaysSaveCache:s}=hu(),l=!a&&(s||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var dV=ehe;var Qet=5e3,Zet=[".js",".mjs",".cjs",".ts"];function mV(e={}){let t=Router();function o(){let d=xt();return mn__default.dirname(d.configFilePath)}function n(d){return mn__default.join(o(),...d)}function r(d){let m=mn__default.relative(o(),d);return m?m.split(mn__default.sep):[]}function i(d,m){let p=nn__default.statSync(d),h=r(d);return dH.parse({name:m,absolutePath:d,relativePath:h.join(mn__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function a(d){let m=mn__default.relative(o(),d);return m===""||!m.startsWith("..")&&!mn__default.isAbsolute(m)}async function s(d){let m=xt();return yd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(Qet)})}function l(d){let m=d.trimStart().replace(/^file:\/\//,"").replaceAll("\\","/"),p=m.lastIndexOf("/");return p===-1?{directoryText:"",filePrefix:m}:{directoryText:m.slice(0,p+1),filePrefix:m.slice(p+1)}}function c(d){return d.replaceAll("\\","/").split("/").filter(m=>m&&m!==".")}function u({sourceDirectoryPath:d,targetPath:m,isDirectory:p}){let h=mn__default.relative(d,m).split(mn__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",Vt(async(d,m,p)=>{let h=k9.safeParse(d.body);if(!h.success){m.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??Zet).map(I=>I.toLowerCase())),b=l(f);if(b.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let S=mn__default.resolve(o(),...c(g)),E=mn__default.resolve(S,...c(b.directoryText));if(!a(S)||!a(E)){m.status(200).json({suggestions:[]});return}if(!nn__default.existsSync(E)||!nn__default.statSync(E).isDirectory()){m.status(200).json({suggestions:[]});return}let v;try{v=await s(E);}catch(I){if(I instanceof Error&&I.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw I}let R=v.map(I=>{let _=mn__default.join(E,I);return {entryName:I,targetPath:_,isDirectory:nn__default.statSync(_).isDirectory()}}),w=b.filePrefix.toLowerCase(),P=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(mn__default.extname(I.entryName).toLowerCase())).sort((I,_)=>I.isDirectory!==_.isDirectory?I.isDirectory?-1:1:I.entryName.localeCompare(_.entryName)).map(I=>({name:I.entryName,isDirectory:I.isDirectory,value:u({sourceDirectoryPath:S,targetPath:I.targetPath,isDirectory:I.isDirectory})}));m.status(200).json({suggestions:P});})),t.post("/",Vt(async(d,m,p)=>{let h,g;try{let v=O9.parse(d.body);h=v.pathSegments,g=v.directoriesOnly??!1;}catch(v){m.status(400).json({error:`Failed to parse folder read body: ${v}`});return}let f=n(h);if(!nn__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(mn__default.sep)}`});return}if(!nn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mn__default.sep)}`});return}let b;try{b=await s(f);}catch(v){if(v instanceof Error&&v.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw v}let S=b.map(v=>{let R=mn__default.join(f,v);return i(R,v)});if(g&&(S=S.filter(v=>v.isDirectory)),e.allowedFileTypes){let v=new Set(e.allowedFileTypes);S=(await Promise.all(S.map(async R=>{if(R.isDirectory||!(R.name.endsWith(".test.yaml")||R.name.endsWith(".module.yaml")))return R;let P=await ett(R.absolutePath);return P!==void 0&&v.has(P)?R:null}))).filter(R=>R!==null);}let E={absolutePath:f,pathSegments:h,contents:S};m.status(200).json(E);})),t.put("/",Vt(async(d,m,p)=>{let h;try{h=M9.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=n(h);if(nn__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(mn__default.sep)}`,pathSegments:h});return}nn__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(mn__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",Vt(async(d,m,p)=>{let h,g;try{let E=L9.parse(d.body);h=E.pathSegments,g=E.newPathSegments;}catch(E){m.status(400).json({error:`Failed to parse folder update body: ${E}`});return}let f=n(h),y=n(g);if(!nn__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(mn__default.sep)}`});return}if(nn__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(mn__default.sep)}`});return}let b=mn__default.dirname(y);nn__default.existsSync(b)||nn__default.mkdirSync(b,{recursive:true}),nn__default.renameSync(f,y);let S={success:true,message:`Folder moved from ${h.join(mn__default.sep)} to ${g.join(mn__default.sep)}`,pathSegments:g};m.status(200).json(S);})),t.delete("/",Vt(async(d,m,p)=>{let h,g=true;try{let S=N9.parse(d.body);h=S.pathSegments,g=S.recursive??!0;}catch(S){m.status(400).json({error:`Failed to parse folder delete body: ${S}`});return}let f=n(h);if(!nn__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(mn__default.sep)}`,pathSegments:h});return}if(!nn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mn__default.sep)}`});return}try{if(g)nn__default.rmSync(f,{recursive:!0,force:!0});else {if(nn__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}nn__default.rmdirSync(f);}}catch(S){let{status:E,body:v}=zde(S,`delete folder ${h.join("/")}`);m.status(E).json(v);return}let b={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(b);})),t}async function ett(e){try{let t=await nn__default.promises.open(e,"r");try{let o=Buffer.alloc(4096),{bytesRead:n}=await t.read(o,0,o.length,0);return o.toString("utf-8",0,n).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var the=Router();the.get("/",async(e,t)=>{let o=xt(),n=Nn();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await ng(mp,n,o);t.status(200).json(r);});var pV=the;var ohe=Router();ohe.get("/",async(e,t)=>{let o=Nn(),n=[];try{n=await o?.listProductUpdates()??[];}catch(r){mp.debug({err:r},"Failed to fetch product updates");}t.status(200).json({updates:n});});var hV=ohe;var ntt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async()=>{t.info({sessionId:n},"Cancel event received");let r=o.getSession(n);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},nhe={event:"cancel",createHandler:ntt};var rtt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{testId:n,sessionId:r}=e;return async(i,a)=>{let{stepId:s,environment:l,parentStepIdChain:c}=i;t.info({testId:n,stepId:s},"Clearing AI action cache");try{let u=o.getSession(r);if(!u)throw new Error("No active session found");let d=sT(s,c.join(":")||void 0);await Promise.all(d.map(m=>u.cacheStorage.deleteStepCacheEntry({logger:t,testId:n,key:m,environment:l}))),a({ok:!0});}catch(u){t.error({testId:n,stepId:s,err:u},"Failed to clear AI action cache"),a({ok:false,error:G(u)});}}},rhe={event:"clearAIActionCache",createHandler:rtt};var itt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async(r,i)=>{let a=o.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let c=(await s.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});}}},ihe={event:"fetchA11yTree",createHandler:itt};var att=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async(r,i)=>{let a=o.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let l=await s.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});}}},ahe={event:"fetchDom",createHandler:att};var stt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return r=>{t.info({sessionId:n,reason:r},`Disconnect event received (${r})`),o.removeSession(n,t);}},she={event:"disconnect",createHandler:stt};function Xs(e){let{result:t,nestedResults:o}=e;if(!e.nestedResults.length)return;let{firstMetadata:n,lastMetadata:r}=ltt(o);ctt(t,n,r);let i=o[o.length-1];i.status!=="SUCCESS"&&(t.message=i.message,t.failureReason=i.failureReason,t.failureClassification=i.failureClassification);let a=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await utt(a,t,n,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function ltt(e){let t=e[0],o;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":o=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!t.results.length){o=t;break}t=t.results[0];break;default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(o)break}let n=e[e.length-1],r;for(;;){switch(n.type){case "PRESET_ACTION":{r=n;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!n.results.length){r=n;break}n=n.results[n.results.length-1];break;default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:o,lastMetadata:r}}function ctt(e,t,o){t&&(e.beforeUrl=t.beforeUrl),o&&(e.afterUrl=o.afterUrl,e.data=o.data);}async function utt(e,t,o,n){await Promise.allSettled(e),o&&(t.beforeSnapshot=o.beforeSnapshot),n&&(t.afterSnapshot=n.afterSnapshot);}function MC(e,t,o){let n={};return Object.entries(t).forEach(([i,a])=>{n[i]=JSON.stringify(a);}),{type:"MODULE",id:e.id,moduleId:e.moduleId,moduleName:e.name,startedAt:new Date,cacheConfig:e.cacheConfig,inputs:n,results:[],finishedAt:new Date,status:o}}async function gg(e,t,o){return dtt(e,t,o)}async function dtt(e,t,o){let n=new Date;try{return o.throwIfAborted(),await t()}catch(r){let i=new Date,a="FAILED",s;if(o.aborted||r instanceof DOMException&&r.name==="AbortError"?(s="Step aborted by user.",a="CANCELLED"):r instanceof ne?s=`${r}`:s=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=MC(e,{},"FAILED");return l.message=s,l.startedAt=n,l.finishedAt=i,l}return {...hT(e),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function _a(e,t){let o=false;try{return e&&!e.state.failureRecoveryDisabled&&(e.state.failureRecoveryDisabled=!0,o=!0),await t()}finally{e&&o&&(e.state.failureRecoveryDisabled=void 0);}}var Sv=20,FL=100;function gV(e){return e.baseDerivedFrom==="estimate"}var mtt={config:"the main branch configured for this project","run-metadata":"the main branch recorded with this run","origin-head":"the remote's default branch from origin/HEAD, which git records at clone time and never refreshes \u2014 if this repository's default branch has changed since, this window is against the old one",estimate:"an estimate: a fixed number of commits back from head, because the main branch could not be resolved. The window therefore contains commits made on the main branch that this branch did not make, and a file may appear newly added when it merely predates the base. Do not conclude that this branch introduced a change from its presence in this window alone"};function BL(e){return e.baseDerivedFrom?` The base of this comparison window is ${mtt[e.baseDerivedFrom]}.`:""}function L({text:e,section:t}){if(!t)return [{type:"text",text:e}];let o=`### ${t}`;return e.length===0?[{type:"text",text:o}]:[{type:"text",text:`${o}
|
|
446
|
+
`).map(o=>t.color?o.startsWith("+")?Jl.green(o):o.startsWith("-")?Jl.red(o):o.startsWith("@@")?t.dim(o):o:o)}var zet="MOMENTIC_SKIP_UPGRADE_PROMPT",jet=24*60*60*1e3;async function Mpe(e){let{runUpgrade:t}=e;if(!t||process.env.NO_UPDATE_NOTIFIER||process.env[zet]!==void 0||is||!process.stdin.isTTY||!process.stdout.isTTY)return;let o;try{o=await Y2(e);}catch(n){e.logger.warn({err:n},"Failed to check for a newer CLI version");return}if(!(!o||!lp.gt(o,e.currentVersion))&&mv(`upgrade-prompt-${e.packageName}-${o}`,jet)){J2(e,o,qe());try{if(!await confirm({message:`Upgrade ${e.packageName} to v${o} now?`,default:!0})){C.log(` Run ${e.updateCommand} at any time to update.`);return}await t(o,e.logger),C.success(`Upgraded ${e.packageName} to v${o}. This command continues on v${e.currentVersion}; new runs use v${o}.`);}catch(n){if(n instanceof Error&&n.name==="ExitPromptError")return;e.logger.warn({err:n},"Failed to upgrade the CLI"),C.warn(`Could not upgrade ${e.packageName}: ${G(n)}. Run ${e.updateCommand} to update manually.`);}}}var Het="https://api.momentic.ai";function Lpe({server:e,serverSource:t,apiKeySource:o}){return t!=="default"||o==="default"?e:Het}function Npe(e,t){switch(e){case "cli":return "--api-key";case "env":return "MOMENTIC_API_KEY";default:return t}}function Dpe({auth:e,serverUrl:t,appUrl:o,keySource:n,screen:r}){let i=Je(r),a=e.name??e.email??e.userId,s=[];e.email!==void 0&&s.push({label:"Email",value:e.email}),s.push({label:"User ID",value:e.userId},{label:"Org ID",value:e.orgId},{label:"Server",value:t},{label:"App",value:tr(o,r)},{label:"API key",value:i.dim(n)}),C.log(`Signed in as ${i.bold(a)}`),C.log(Od(s,r));}var _C=25;function Fpe(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function Bpe(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function aV({project:e,newProjectConfig:t,fileFormatLabel:o,migratedFilePaths:n}){e.config=t,ry(e.config,e.configFilePath),n.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${o} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${n.length} migrated files`),NT([...new Set(n)],t));}async function PC(e,t,o){for(let n=0;n<e.length;n+=t)await Promise.all(e.slice(n,n+t).map(o));}function sV(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function Get(e){let t=e.ai??={},o=t.agentConfig??={},n=[];for(let[a,s]of Object.entries(Xp)){let l=o[a];l!==s&&(l?.startsWith(`${s}.`)||(o[a]=s,n.push({type:a,newValue:s})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:n,enabledUseMemory:r,enabledFailureRecovery:i}}async function Upe({project:e,dryRun:t,migrate:o}){let n=e.config.fileFormat!=="v2",r=ds.stringify(e.config),i=Get(e.config);if(!n)return !t&&sV(i)&&ry(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:i,migration:lV(),configDiff:rV(r,e.config)};let a=await o();return {fileFormatChanged:n,aiSettings:i,migration:a,configDiff:rV(r,{...e.config,fileFormat:"v2"})}}function rV(e,t){return Gf(e,ds.stringify(t),{n_surrounding:2})}function zpe(e){return rV(ds.stringify(e),{...e,fileFormat:"v2"})}function lV(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function cV({summary:e,fileFormatChanged:t,configChange:o,dryRun:n,testNoun:r="test",moduleNoun:i="module"}){let a=qe(),s=Je(a),l=s.green("~");C.info(""),C.info(ug(n?"Upgrade Preview":"Upgrade Summary",a)),C.info("");let c=p=>` ${l} ${s.code(mn__default.relative(process.cwd(),p))}`,u=(p,h)=>{let g=rT(p,h);return `${s.bold(g.charAt(0).toUpperCase()+g.slice(1))} ${s.dim(`(${h})`)}`},d=e.migratedTestPaths.length,m=e.migratedModulePaths.length;if(t||d>0||m>0){let p=n?"Would migrate":"Migrated";if(C.info(`${p} ${s.bold(`${d} ${rT(r,d)}`)} and ${s.bold(`${m} ${rT(i,m)}`)} to the simplified format.`),C.info(""),d>0){C.info(u(r,d));for(let h of [...e.migratedTestPaths].sort())C.info(c(h));C.info("");}if(m>0){C.info(u(i,m));for(let h of [...e.migratedModulePaths].sort())C.info(c(h));C.info("");}(e.alreadyV2TestCount>0||e.alreadyV2ModuleCount>0)&&(C.dimmed(`Skipped ${e.alreadyV2TestCount} already-migrated ${rT(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-migrated ${rT(i,e.alreadyV2ModuleCount)}.`),C.info(""));}if(o&&o.diff.trim().length>0){C.info(u("config",1)),C.info(c(o.configFilePath));for(let p of _L(o.diff,s))C.info(` ${p}`);C.info("");}}var uV=false,jpe;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.58.1",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(o,n){return Pne(n?.originalException)||cf(n?.originalException,ue)||One(n?.originalException)?null:o}}),uoe(e.captureException),jpe=o=>{if(!o){e.setUser(null);return}e.setUser({id:o.userId,organizationId:o.orgId,...o.email&&{email:o.email}});},uV=!0;}catch{}var Hpe=e=>jpe?.(e);var Wet=new ek(30,60*1e3),kC="https://api.momentic.ai",fv,$pe,cp=e=>{kC=e;},Pl=()=>kC,Gpe=()=>jS(kC),mg=e=>{$pe=e;},hu=()=>$pe,Nn=()=>fv,Vpe=()=>{if(!fv)throw new Error("Global API client has not been initialized.");return fv};var OC,OL,Wpe,qpe,Kpe,kL,Ype,Jpe=({authInfo:e,apiKey:t,apiClient:o})=>{kC=o.baseUrl,fv=o,OC=e.orgId,OL=e.userId,Wpe=e.email,qpe=e.name,Kpe=e.pylonEmailHash,kL=t,Ype=e.selfServe;},pg=async({apiClient:e,apiKey:t,skipPrompts:o})=>{let n=await gy({client:e});return Jpe({authInfo:n,apiKey:t,apiClient:e}),n},NL=async({apiKey:e,mode:t,runner:o})=>{if(fv&&OC&&kL)return OC;let n=new Nt({baseUrl:kC,apiKey:e,logger:C,mode:t,runner:o});fv=n;try{let r=await n.getAuthInfo();return Jpe({authInfo:r,apiKey:e,apiClient:n}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},xr=()=>{if(!OC)throw new Error("Your organization ID is invalid.");return OC},Ld=()=>{if(!OL)throw new Error("Your user ID is invalid.");return OL},Xpe=()=>OL,yv=()=>Wpe,Qpe=()=>qpe,Zpe=()=>Kpe,DL=()=>Ype,up=()=>{if(!kL)throw new Error("Your API key is invalid.");return kL},ML,LL,dp=()=>{LL?.abort(),LL=void 0;},hg=(e,t)=>{ML=e,dp(),LL=new AbortController;let o=LL.signal,n=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=mn__default.resolve(e.rootDir,r.envFile);try{if(nn__default.lstatSync(i).isSymbolicLink())return;nn__default.existsSync(i)&&n.push(i);}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`);}});try{qet({filesToWatch:n,revalidator:t,signal:o,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function bv({project:e,apiClient:t}){let o=n=>fs({project:n,apiClient:t});hg(await o(e),async n=>o(await Ro({configFilePath:n})));}var xt=()=>{if(!ML)throw new ue("No Momentic project is currently loaded. Open or select a project before invoking this action.");return ML};function qet({filesToWatch:e,revalidator:t,signal:o,project:n}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(s,l)=>{if(s.mtime.getTime()!==l.mtime.getTime()){Wet.increment("setLocalProject")&&C.warn(`A file change under the ${n.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{ML=await Promise.resolve(t(n.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};nn__default.watchFile(r,{persistent:false},i);let a=()=>{nn__default.unwatchFile(r,i),o.removeEventListener("abort",a);};o.addEventListener("abort",a);});}function Vt(e){return function(...t){let o=t[t.length-1],n=e(...t);Promise.resolve(n).catch(o);}}var Yet="3.58.1",mp=VS({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:Yet});(async()=>{try{let e=await Ac(mp);e.gitBranchName&&mp.addBinding("branch",e.gitBranchName);}catch{}})();var ehe=Router();ehe.get("/",async(e,t)=>{let o=xt(),n=Nn();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await xd(mp,n,o),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:a,alwaysSaveCache:s}=hu(),l=!a&&(s||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var dV=ehe;var Qet=5e3,Zet=[".js",".mjs",".cjs",".ts"];function mV(e={}){let t=Router();function o(){let d=xt();return mn__default.dirname(d.configFilePath)}function n(d){return mn__default.join(o(),...d)}function r(d){let m=mn__default.relative(o(),d);return m?m.split(mn__default.sep):[]}function i(d,m){let p=nn__default.statSync(d),h=r(d);return dH.parse({name:m,absolutePath:d,relativePath:h.join(mn__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function a(d){let m=mn__default.relative(o(),d);return m===""||!m.startsWith("..")&&!mn__default.isAbsolute(m)}async function s(d){let m=xt();return yd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(Qet)})}function l(d){let m=d.trimStart().replace(/^file:\/\//,"").replaceAll("\\","/"),p=m.lastIndexOf("/");return p===-1?{directoryText:"",filePrefix:m}:{directoryText:m.slice(0,p+1),filePrefix:m.slice(p+1)}}function c(d){return d.replaceAll("\\","/").split("/").filter(m=>m&&m!==".")}function u({sourceDirectoryPath:d,targetPath:m,isDirectory:p}){let h=mn__default.relative(d,m).split(mn__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",Vt(async(d,m,p)=>{let h=k9.safeParse(d.body);if(!h.success){m.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??Zet).map(I=>I.toLowerCase())),b=l(f);if(b.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let S=mn__default.resolve(o(),...c(g)),E=mn__default.resolve(S,...c(b.directoryText));if(!a(S)||!a(E)){m.status(200).json({suggestions:[]});return}if(!nn__default.existsSync(E)||!nn__default.statSync(E).isDirectory()){m.status(200).json({suggestions:[]});return}let v;try{v=await s(E);}catch(I){if(I instanceof Error&&I.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw I}let R=v.map(I=>{let _=mn__default.join(E,I);return {entryName:I,targetPath:_,isDirectory:nn__default.statSync(_).isDirectory()}}),w=b.filePrefix.toLowerCase(),P=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(mn__default.extname(I.entryName).toLowerCase())).sort((I,_)=>I.isDirectory!==_.isDirectory?I.isDirectory?-1:1:I.entryName.localeCompare(_.entryName)).map(I=>({name:I.entryName,isDirectory:I.isDirectory,value:u({sourceDirectoryPath:S,targetPath:I.targetPath,isDirectory:I.isDirectory})}));m.status(200).json({suggestions:P});})),t.post("/",Vt(async(d,m,p)=>{let h,g;try{let v=O9.parse(d.body);h=v.pathSegments,g=v.directoriesOnly??!1;}catch(v){m.status(400).json({error:`Failed to parse folder read body: ${v}`});return}let f=n(h);if(!nn__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(mn__default.sep)}`});return}if(!nn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mn__default.sep)}`});return}let b;try{b=await s(f);}catch(v){if(v instanceof Error&&v.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw v}let S=b.map(v=>{let R=mn__default.join(f,v);return i(R,v)});if(g&&(S=S.filter(v=>v.isDirectory)),e.allowedFileTypes){let v=new Set(e.allowedFileTypes);S=(await Promise.all(S.map(async R=>{if(R.isDirectory||!(R.name.endsWith(".test.yaml")||R.name.endsWith(".module.yaml")))return R;let P=await ett(R.absolutePath);return P!==void 0&&v.has(P)?R:null}))).filter(R=>R!==null);}let E={absolutePath:f,pathSegments:h,contents:S};m.status(200).json(E);})),t.put("/",Vt(async(d,m,p)=>{let h;try{h=M9.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=n(h);if(nn__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(mn__default.sep)}`,pathSegments:h});return}nn__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(mn__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",Vt(async(d,m,p)=>{let h,g;try{let E=L9.parse(d.body);h=E.pathSegments,g=E.newPathSegments;}catch(E){m.status(400).json({error:`Failed to parse folder update body: ${E}`});return}let f=n(h),y=n(g);if(!nn__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(mn__default.sep)}`});return}if(nn__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(mn__default.sep)}`});return}let b=mn__default.dirname(y);nn__default.existsSync(b)||nn__default.mkdirSync(b,{recursive:true}),nn__default.renameSync(f,y);let S={success:true,message:`Folder moved from ${h.join(mn__default.sep)} to ${g.join(mn__default.sep)}`,pathSegments:g};m.status(200).json(S);})),t.delete("/",Vt(async(d,m,p)=>{let h,g=true;try{let S=N9.parse(d.body);h=S.pathSegments,g=S.recursive??!0;}catch(S){m.status(400).json({error:`Failed to parse folder delete body: ${S}`});return}let f=n(h);if(!nn__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(mn__default.sep)}`,pathSegments:h});return}if(!nn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mn__default.sep)}`});return}try{if(g)nn__default.rmSync(f,{recursive:!0,force:!0});else {if(nn__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}nn__default.rmdirSync(f);}}catch(S){let{status:E,body:v}=zde(S,`delete folder ${h.join("/")}`);m.status(E).json(v);return}let b={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(b);})),t}async function ett(e){try{let t=await nn__default.promises.open(e,"r");try{let o=Buffer.alloc(4096),{bytesRead:n}=await t.read(o,0,o.length,0);return o.toString("utf-8",0,n).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var the=Router();the.get("/",async(e,t)=>{let o=xt(),n=Nn();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await ng(mp,n,o);t.status(200).json(r);});var pV=the;var ohe=Router();ohe.get("/",async(e,t)=>{let o=Nn(),n=[];try{n=await o?.listProductUpdates()??[];}catch(r){mp.debug({err:r},"Failed to fetch product updates");}t.status(200).json({updates:n});});var hV=ohe;var ntt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async()=>{t.info({sessionId:n},"Cancel event received");let r=o.getSession(n);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},nhe={event:"cancel",createHandler:ntt};var rtt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{testId:n,sessionId:r}=e;return async(i,a)=>{let{stepId:s,environment:l,parentStepIdChain:c}=i;t.info({testId:n,stepId:s},"Clearing AI action cache");try{let u=o.getSession(r);if(!u)throw new Error("No active session found");let d=sT(s,c.join(":")||void 0);await Promise.all(d.map(m=>u.cacheStorage.deleteStepCacheEntry({logger:t,testId:n,key:m,environment:l}))),a({ok:!0});}catch(u){t.error({testId:n,stepId:s,err:u},"Failed to clear AI action cache"),a({ok:false,error:G(u)});}}},rhe={event:"clearAIActionCache",createHandler:rtt};var itt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async(r,i)=>{let a=o.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let c=(await s.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});}}},ihe={event:"fetchA11yTree",createHandler:itt};var att=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return async(r,i)=>{let a=o.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let l=await s.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});}}},ahe={event:"fetchDom",createHandler:att};var stt=({metadata:e,logger:t,globalE2eStateManager:o})=>{let{sessionId:n}=e;return r=>{t.info({sessionId:n,reason:r},`Disconnect event received (${r})`),o.removeSession(n,t);}},she={event:"disconnect",createHandler:stt};function Xs(e){let{result:t,nestedResults:o}=e;if(!e.nestedResults.length)return;let{firstMetadata:n,lastMetadata:r}=ltt(o);ctt(t,n,r);let i=o[o.length-1];i.status!=="SUCCESS"&&(t.message=i.message,t.failureReason=i.failureReason,t.failureClassification=i.failureClassification);let a=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await utt(a,t,n,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function ltt(e){let t=e[0],o;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":o=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!t.results.length){o=t;break}t=t.results[0];break;default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(o)break}let n=e[e.length-1],r;for(;;){switch(n.type){case "PRESET_ACTION":{r=n;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!n.results.length){r=n;break}n=n.results[n.results.length-1];break;default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:o,lastMetadata:r}}function ctt(e,t,o){t&&(e.beforeUrl=t.beforeUrl),o&&(e.afterUrl=o.afterUrl,e.data=o.data);}async function utt(e,t,o,n){await Promise.allSettled(e),o&&(t.beforeSnapshot=o.beforeSnapshot),n&&(t.afterSnapshot=n.afterSnapshot);}function MC(e,t,o){let n={};return Object.entries(t).forEach(([i,a])=>{n[i]=JSON.stringify(a);}),{type:"MODULE",id:e.id,moduleId:e.moduleId,moduleName:e.name,startedAt:new Date,cacheConfig:e.cacheConfig,inputs:n,results:[],finishedAt:new Date,status:o}}async function gg(e,t,o){return dtt(e,t,o)}async function dtt(e,t,o){let n=new Date;try{return o.throwIfAborted(),await t()}catch(r){let i=new Date,a="FAILED",s;if(o.aborted||r instanceof DOMException&&r.name==="AbortError"?(s="Step aborted by user.",a="CANCELLED"):r instanceof ne?s=`${r}`:s=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=MC(e,{},"FAILED");return l.message=s,l.startedAt=n,l.finishedAt=i,l}return {...hT(e),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function _a(e,t){let o=false;try{return e&&!e.state.failureRecoveryDisabled&&(e.state.failureRecoveryDisabled=!0,o=!0),await t()}finally{e&&o&&(e.state.failureRecoveryDisabled=void 0);}}var Sv=20,FL=100;function gV(e){return e.baseDerivedFrom==="estimate"}var mtt={config:"the main branch configured for this project","run-metadata":"the main branch recorded with this run","origin-head":"the remote's default branch from origin/HEAD, which git records at clone time and never refreshes \u2014 if this repository's default branch has changed since, this window is against the old one",estimate:"an estimate: a fixed number of commits back from head, because the main branch could not be resolved. The window therefore contains commits made on the main branch that this branch did not make, and a file may appear newly added when it merely predates the base. Do not conclude that this branch introduced a change from its presence in this window alone"};function BL(e){return e.baseDerivedFrom?` The base of this comparison window is ${mtt[e.baseDerivedFrom]}.`:""}function L({text:e,section:t}){if(!t)return [{type:"text",text:e}];let o=`### ${t}`;return e.length===0?[{type:"text",text:o}]:[{type:"text",text:`${o}
|
|
447
447
|
${e}`}]}function Mi({base64Data:e,mediaType:t,section:o}){return o?[{type:"text",text:`### ${o}`},{type:"media",data:e,mediaType:t}]:[{type:"media",data:e,mediaType:t}]}function UL(e,t){return {role:"user",content:e.map(n=>n.type==="media"?{type:"image",image:n.data,mediaType:n.mediaType}:{type:"text",text:n.text}),providerOptions:t}}function Y(e){if(e.length===0)throw new $t("No content parts provided to construct the tool response content.");return {type:"content",value:e}}function Qs(e){return {type:"content",value:[{type:"text",text:e}]}}function yV({data:e,filters:t}){let o=ene(e,t??[]);return Ku(o)?o:{}}function zL({data:e,filters:t,tokenLimit:o,perItemLimit:n=Math.max(1,Math.floor(o/4))}){let r=yV({data:e,filters:t}),i=JSON.stringify(r,null,2);if(Rt(i)<=o)return i;let a=bV({environmentVariables:r,perItemLimit:n}),s=JSON.stringify(a,null,2);return Rt(s)<=o?s:JSON.stringify(SV(a,o),null,2)}function bV({environmentVariables:e,perItemLimit:t}){return Object.fromEntries(Object.entries(e).map(([o,n])=>{if(Ku(n))return [o,lhe(n,t)];let r=lhe({[o]:n},t);return [o,r[o]]}))}function lhe(e,t=2e4){let o={};for(let[n,r]of Object.entries(e)){if(typeof r=="object"&&r!==null){let i=JSON.stringify(r,null,2);if(Rt(i)>t){o[n]="[too large truncated]";continue}o[n]=r;continue}if(typeof r=="string"){o[n]=ptt(r,t);continue}o[n]=r;}return o}function ptt(e,t){let o=Rt(e);if(o<=t)return e;let n=Math.max(1,Math.floor(t*(e.length/o)));return `${e.slice(0,n)}... [truncated]`}function SV(e,t){let o={},n=0,r=Object.entries(e).map(([i,a])=>{let s=JSON.stringify(a,null,2),l=Rt(s);return {key:i,value:a,tokens:l}}).sort((i,a)=>i.tokens-a.tokens);for(let{key:i,value:a,tokens:s}of r)n+s<=t&&(o[i]=a,n+=s);return o}function che({projectRoot:e,filePath:t,pathLabel:o="path"}){if(!t||!mn__default.isAbsolute(t))return t;let n=mn__default.relative(e,t);if(n.startsWith("..")||mn__default.isAbsolute(n))throw new Error(`Error: ${o} "${t}" must be inside project root "${e}".`);return n}function uhe(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 (n=>{throw new Error("Unhandled content part")})()}})}var ghe=["__generated__"],fhe=[".env",".npmrc",".netrc",".git-credentials","credentials","credentials.json"],yhe=[".env.","id_rsa","id_ecdsa","id_ed25519","service-account"],bhe=[".pem",".key",".p12",".pfx",".keystore",".jks",".tfstate"],She=[".tfstate."],HL=[...fhe.map(e=>`**/${e}`),...yhe.map(e=>`**/${e}*`),...bhe.map(e=>`**/*${e}`),...She.map(e=>`**/*${e}*`)];function dhe(e){let t=mn__default.basename(e).toLowerCase();return fhe.includes(t)||yhe.some(o=>t.startsWith(o))||bhe.some(o=>t.endsWith(o))||She.some(o=>t.includes(o))}function Tv(e){return `Relative paths resolve at the Git repository root \`${e}\`, never at the server cwd; absolute paths are also accepted.`}function mhe(e,t){return mn__default.resolve(mn__default.resolve(e),t)}async function LC(e,t){let o=mhe(e,t);if(mn__default.isAbsolute(t)||await phe(o))return o;let n=mhe(process.cwd(),t);return n===o||!await phe(n)?o:n}async function phe(e){try{return await vV.stat(e),!0}catch{return false}}async function The(e,t){let o=await LC(e,t);if(dhe(o))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);let n=await vV.realpath(o);if(dhe(n))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);return n}var gtt=z.object({pattern:z.string().min(1).describe("Glob pattern to match against file paths (relative to the search root). Patterns are NOT recursive by default \u2014 `*` matches a single path segment, the same way shell globs do. Prefix with `**/` for recursive globs (e.g. `**/*.ts` to find all TypeScript files, `**/open-app*` to find any file whose basename starts with `open-app`)."),path:z.string().optional().describe("Optional directory to start the search in. Relative paths resolve at the Git repository root given in this tool's description, not at the server cwd. Defaults to the repository root."),maxResults:z.int().min(1).max(1e3).default(100).describe("Maximum number of paths to return. Defaults to 100.")});function ftt(e){return `Find files by glob pattern. ${Tv(e)} 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 GL(e){return {tool:tool({description:ftt(e.repoRoot),inputSchema:gtt,execute:async(o,{abortSignal:n})=>{let r=await ytt(o,e,n);return Y(L({text:btt(o.pattern,r)}))},toModelOutput:({output:o})=>o}),name:lr}}async function ytt({pattern:e,path:t,maxResults:o},n,r){let i=ac({signal:r,timeoutMs:3e4});i.throwIfAborted();let a=mn__default.resolve(n.repoRoot),s=t?await LC(a,t):a,l=await yd([e],{cwd:s,ignore:[...ghe.map(c=>`**/${c}`),...HL],maxDepth:1/0,nodir:true,signal:i});return i.throwIfAborted(),l.slice(0,o).map(c=>mn__default.relative(a,mn__default.resolve(s,c)))}function btt(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(`
|
|
448
448
|
`)}async function VL({baseRef:e,headRef:t,context:o,abortSignal:n}){if(!e&&!t)return {baseSha:o.baseSha,headSha:o.headSha};if(!e||!t)throw new Error("baseRef and headRef must be provided together");let[r,i]=await Promise.all([oa(`${e}^{commit}`,o.repoRoot,n),oa(`${t}^{commit}`,o.repoRoot,n)]);if(!r)throw new Error(`Could not resolve baseRef '${e}'`);if(!i)throw new Error(`Could not resolve headRef '${t}'`);return {baseSha:r,headSha:i}}function NC({lines:e,startLine:t,maxLines:o,maxBytes:n,truncateLineChars:r}){let i=e.length,a=Math.max(1,t);if(a>i)return {content:"",endLine:a-1,droppedLines:0,droppedBytesFromByteCap:0};let s=Math.min(i,a-1+o),l=e.slice(a-1,s).map(g=>r?vhe(g,300):g),c=l.join(`
|
|
449
449
|
`),u=Buffer.byteLength(c,"utf-8");if(u<=n)return {content:c,endLine:s,droppedLines:i-s,droppedBytesFromByteCap:0};let d=0,m=0;for(let g of l){let f=(d===0?0:1)+Buffer.byteLength(g,"utf-8");if(d>0&&m+f>n)break;m+=f,d++;}let p=l.slice(0,d).join(`
|
|
@@ -7963,7 +7963,7 @@ ${l}`,{errOptions:{cause:e}})}if(i.includes("element is not visible")){let l="Th
|
|
|
7963
7963
|
//# sourceURL=momentic-injected/extra-scripts.js`}function jSe(e){return e?.split(",").map(t=>t.trim()).filter(t=>t.length>0)??[]}function udt(e){let t=e.indexOf("=");return t===-1?e:e.slice(0,t)}function USe(e,t=process.env.MOMENTIC_CHROME_REMOVE_ARGS){let o=new Set(jSe(t));return o.size===0?e:e.filter(n=>{let r=udt(n);return !o.has(n)&&!o.has(r)})}var ddt=500,mdt=2e3,pdt=3,hdt=3e4,dI=class{constructor(t,o,n={}){this.debugDataType=t;this.logger=o;this.slowOperationMs=n.slowOperationMs??ddt,this.hardOperationMs=n.hardOperationMs??mdt,this.slowOperationLimit=n.slowOperationLimit??pdt,this.windowMs=n.windowMs??hdt,this.now=n.now??Date.now,this.consoleWarn=n.consoleWarn??(r=>C.warn(r)),this.onDisable=n.onDisable,this.onResume=n.onResume,this.resumeAfterMs=n.resumeAfterMs,this.scheduleResume=n.scheduleResume??((r,i)=>{let a=setTimeout(r,i);return a.unref(),()=>clearTimeout(a)}),this.activityWindowMs=n.activityWindowMs,this.maxEventsPerWindow=n.maxEventsPerWindow,this.maxCharsPerWindow=n.maxCharsPerWindow,this.maxActiveOperations=n.maxActiveOperations;}slowOperationMs;hardOperationMs;slowOperationLimit;windowMs;now;consoleWarn;onDisable;onResume;resumeAfterMs;scheduleResume;activityWindowMs;maxEventsPerWindow;maxCharsPerWindow;maxActiveOperations;slowOperationTimestamps=[];disabled=false;cancelResume;activeOperations=0;activityWindowStartedAt;activityEventCount=0;activityCharCount=0;isDisabled(){return this.disabled}dispose(){this.cancelResume?.(),this.cancelResume=void 0;}async run({stage:t,fn:o}){if(this.disabled)return;if(this.maxActiveOperations!==void 0&&this.activeOperations>=this.maxActiveOperations){this.disable({stage:t,reason:"concurrent operation limit reached"});return}let n=performance.now();this.activeOperations++;try{await o();}finally{this.activeOperations--,this.record({stage:t,durationMs:performance.now()-n});}}record({stage:t,durationMs:o}){if(this.disabled||o<this.slowOperationMs)return;let n=this.now();this.slowOperationTimestamps=this.slowOperationTimestamps.filter(i=>n-i<=this.windowMs),this.slowOperationTimestamps.push(n);let r=o>=this.hardOperationMs;!r&&this.slowOperationTimestamps.length<this.slowOperationLimit||this.disable({stage:t,durationMs:o,reason:r?"hard operation latency limit reached":"repeated slow operations"});}recordActivity({stage:t,charCount:o}){if(this.disabled||this.activityWindowMs===void 0||this.maxEventsPerWindow===void 0&&this.maxCharsPerWindow===void 0)return;let n=this.now();(this.activityWindowStartedAt===void 0||n-this.activityWindowStartedAt>=this.activityWindowMs)&&(this.activityWindowStartedAt=n,this.activityEventCount=0,this.activityCharCount=0),this.activityEventCount++,this.activityCharCount+=o;let r=this.maxEventsPerWindow!==void 0&&this.activityEventCount>=this.maxEventsPerWindow,i=this.maxCharsPerWindow!==void 0&&this.activityCharCount>=this.maxCharsPerWindow;!r&&!i||this.disable({stage:t,reason:r?"event rate limit reached":"log volume limit reached",activityEventCount:this.activityEventCount,activityCharCount:this.activityCharCount,activityWindowMs:this.activityWindowMs});}recordBufferOverflow({stage:t,bufferLimit:o}){this.disabled||this.disable({stage:t,reason:"buffer capacity reached",bufferLimit:o});}disable({stage:t,reason:o,durationMs:n,activityEventCount:r,activityCharCount:i,activityWindowMs:a,bufferLimit:s}){this.disabled=true;let l=`Disabling browser ${this.debugDataType} debug data recording to protect browser engine performance`;this.logger.warn({debugDataType:this.debugDataType,stage:t,durationMs:n===void 0?void 0:Math.round(n),activeOperations:this.activeOperations,slowOperationCount:this.slowOperationTimestamps.length,slowOperationMs:this.slowOperationMs,hardOperationMs:this.hardOperationMs,windowMs:this.windowMs,activityEventCount:r,activityCharCount:i,activityWindowMs:a,bufferLimit:s,maxActiveOperations:this.maxActiveOperations,reason:o},l);let c=n!==void 0?`${Math.round(n)}ms during ${t}`:`${o} during ${t}`;this.consoleWarn(`${l} (${c})`);try{this.onDisable?.();}catch(u){this.logger.warn({err:u,debugDataType:this.debugDataType},"Failed to stop browser debug data recording");}this.scheduleResumeIfEnabled();}scheduleResumeIfEnabled(){this.resumeAfterMs!==void 0&&(this.cancelResume?.(),this.cancelResume=this.scheduleResume(()=>this.resume(),this.resumeAfterMs));}resume(){if(this.cancelResume=void 0,!!this.disabled){this.disabled=false,this.slowOperationTimestamps=[],this.activityWindowStartedAt=void 0,this.activityEventCount=0,this.activityCharCount=0,this.logger.info({debugDataType:this.debugDataType},"Resuming browser debug data recording after cooldown");try{this.onResume?.();}catch(t){this.logger.warn({err:t,debugDataType:this.debugDataType},"Failed to resume browser debug data recording");}}}};function Pq(e){let t=[],o="";for(let n of e)n==="+"&&o?(t.push(o),o=""):o+=n;return t.push(o),t}function vD(e,t){return e instanceof Error&&e.message.includes("Unknown key:")?new Yp(`Invalid key "${t}" in keyboard step. Use the canonical key name (e.g. "Escape", "Enter", "ArrowUp", "Control", "Meta").`,{cause:e}):e}var gdt=["clipboard-read","clipboard-write","microphone","camera","geolocation","local-network-access"];function HSe(e){return e}function $Se(e){return HSe(e||gdt)}var Oq="__momentic_session_storage_initialized";function mI(e){return e.parentFrame!==void 0}async function GSe(e,t,o){try{let n=await ydt(e);if(n.entries.length===0)return;let r=t.origins?.find(i=>i.origin===n.origin);r?r.sessionStorage=n.entries:(t.origins=t.origins??[],t.origins.push({origin:n.origin,localStorage:[],sessionStorage:n.entries})),o.info(`Saved ${n.entries.length} session storage entries`);}catch(n){o.warn({err:n},"Failed to extract session storage, continuing...");}}async function ydt(e){return e.evaluate(t=>{let o=[];for(let n=0;n<window.sessionStorage.length;n++){let r=window.sessionStorage.key(n);if(r&&r!==t){let i=window.sessionStorage.getItem(r);i!==null&&o.push({name:r,value:i});}}return {origin:window.location.origin,entries:o}},Oq)}function VSe(e,t){if(!e||!t)return;let o=e.x+e.width/2,n=e.y+e.height/2,r=t.x+t.width/2,i=t.y+t.height/2,a=r-o,s=i-n,l=Math.atan2(s,a);return l<0?l+2*Math.PI:l}function WSe(e,t){if(!e||!t)return;let o=e.x+e.width/2,n=e.y+e.height/2,r=t.x+t.width/2,i=t.y+t.height/2,a=r-o,s=i-n;return Math.sqrt(a*a+s*s)}async function bdt(e){let{initialLocationResult:t,cacheEvaluationParams:o,locator:n,bannedAttributes:r}=e;return n.evaluate((i,a)=>{let l=window._momentic,{initialLocationResult:c,cacheEvaluationParams:u,bannedAttributes:d}=a;if(!l?.momenticConstants)throw new Error("Momentic constants not found");if(!l.getImportantElementAttributes)throw new Error("Momentic element serialization scripts not found");if(i.tagName.toLowerCase()!==c.tagName.toLowerCase())return "Tag name mismatch";let m=(i.textContent??"").slice(0,l.momenticConstants.serializedElementForCachingTruncateLength),p=(c.textContent??"").slice(0,l.momenticConstants.serializedElementForCachingTruncateLength);if(m!==p)return "Text content mismatch";let h=l.getImportantElementAttributes(i,{bannedAttributes:d});for(let[y,b]of Object.entries(c.importantAttributes))if(h[y]!==b)return `Attribute ${y} mismatch`;let g=c.boundingBox.width*c.boundingBox.height,f=i.getBoundingClientRect().width*i.getBoundingClientRect().height;if(g===0||f===0){if(g!==f)return "Area mismatch"}else if(Math.abs(g-f)/g>.05)return "Area mismatch";if(c.identityHash&&l.getElementIdentityHash&&c.identityHash!==l.getElementIdentityHash(i,{bannedAttributes:d}))return "Identity hash mismatch";if(u&&l.evaluatePrimaryCaches){let{css:y,hybrid:b}=l.evaluatePrimaryCaches(u);if(b?.result&&b.result.mPath&&c.mPath&&JSON.stringify(b.result.mPath)!==JSON.stringify(c.mPath))return "Hybrid selector returned a different element than the original";if(!b&&y&&y.result&&y.result.dataMomenticId!==c.dataMomenticId)return "CSS selector returned a different element than the original"}},{initialLocationResult:t,cacheEvaluationParams:o,bannedAttributes:r},{timeout:ft})}async function kq(e){let{logger:t}=e;try{let o=await bdt(e);if(!o)return;throw t.warn({failReason:o},"Locator no longer matches cache, re-triggering evaluation"),new Mu("Locator no longer matches cache")}catch(o){if(o instanceof Mu)throw o;if(qU(o))throw t.warn({err:o},"Locator selector is no longer valid, re-triggering evaluation"),new Mu("Locator selector is no longer valid");t.warn({err:o},"Failed to check whether locator has drifted from cache");}}var Tdt=createRequire(import.meta.url),AD;function ED(){if(process.env.MOMENTIC_DISABLE_SHARP==="1")return null;if(AD===void 0)try{AD=Tdt("sharp");}catch{AD=null;}return AD}async function qSe(e,t){let{data:o,info:n}=await e(t,{ignoreIcc:true}).toColourspace("srgb").ensureAlpha().raw().toBuffer({resolveWithObject:true});if(n.channels!==4)throw new Error(`Expected sharp to decode RGBA, got ${n.channels} channels`);return {data:o,width:n.width,height:n.height}}var XSe=100,KSe=Buffer.from([137,80,78,71,13,10,26,10]);function wD(e){if(e.subarray(0,KSe.length).equals(KSe))return Edt(e);if(e.length>=2&&e[0]===255&&e[1]===216)return wdt(e);throw new Error("Unsupported image format: expected PNG or JPEG")}function Edt(e){if(e.length<24||e.toString("latin1",12,16)!=="IHDR")throw new Error("Invalid PNG: missing IHDR chunk");return {width:e.readUInt32BE(16),height:e.readUInt32BE(20)}}function wdt(e){let t=2;for(;t+4<=e.length;){if(e[t]!==255)throw new Error("Invalid JPEG: expected marker");let o=e.readUInt8(t+1);if(o===255){t+=1;continue}if(o===1||o>=208&&o<=217){t+=2;continue}if(o>=192&&o<=207&&o!==196&&o!==200&&o!==204){if(t+9>e.length)break;return {height:e.readUInt16BE(t+5),width:e.readUInt16BE(t+7)}}t+=2+e.readUInt16BE(t+2);}throw new Error("Invalid JPEG: no frame header found")}async function QSe(e,t){let o=ED();return de({name:"browser.image.resize",serviceName:"browser",attributes:{"momentic.image_processor":o?"sharp":"jimp"},fn:async()=>o?o(e).resize(t.width,t.height,{fit:"fill"}).jpeg({quality:XSe}).toBuffer():(await Jimp.fromBuffer(e)).resize({w:t.width,h:t.height}).getBuffer("image/jpeg")})}async function ZSe(e,t){let o=ED();return de({name:"browser.image.crop",serviceName:"browser",attributes:{"momentic.image_processor":o?"sharp":"jimp"},fn:async()=>o?o(e).extract({left:t.x,top:t.y,width:t.width,height:t.height}).jpeg({quality:XSe}).toBuffer():(await Jimp.fromBuffer(e)).crop({x:t.x,y:t.y,w:t.width,h:t.height}).getBuffer("image/jpeg")})}function eTe(e,t,o=.01){let n=ED();return de({name:"browser.getJpegDiffPercent",serviceName:"browser",attributes:{"momentic.image_processor":n?"sharp":"jpeg-js"},fn:async()=>{if(e.equals(t))return 0;let[r,i]=await Promise.all([YSe(e,n),YSe(t,n)]);if(r.width!==i.width||r.height!==i.height)return 100;let a=r.width,s=r.height;return Adt(r.data,i.data,null,a,s,{threshold:o})/(a*s)*100}})}async function YSe(e,t){return t?qSe(t,e):Vq.decode(e)}var oTe=["date","datetime-local","month","time","week"],tTe={date:/^\d{4}-\d{2}-\d{2}$/,"datetime-local":/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,month:/^\d{4}-\d{2}$/,time:/^\d{2}:\d{2}$/,week:/^\d{4}-W\d{2}$/};async function nTe(e){try{await ge(Rdt(e),{milliseconds:ft});}catch(t){e.logger.warn({err:t},"Failed to transform native datetime input, continuing...");}}async function Rdt({root:e,text:t,options:o,logger:n,callbacks:r}){let i=(await Or({root:e,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:ko,arg:void 0,waitForPageLoad:r.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!tTe[i])return;tTe[i].test(t)&&n.warn(`Detected datetime input (${t}) in normalized format - this may fail to fill correctly as it is not how the user would input the value`),o.clearContent=false,o.fill=void 0,n.info("Transforming datetime input to use sequential key presses");}var rTe=z.object({x:z.number(),y:z.number()}),iTe=z.object({doubleClick:z.boolean().optional(),rightClick:z.boolean().optional(),force:z.boolean().optional(),waitForDownload:z.boolean().optional(),delayMs:z.number().optional(),downloadTimeoutMs:z.number().optional(),relativePosition:rTe.optional(),iterations:z.number().optional()});z.object({relativePosition:rTe.optional()});z.object({repeat:z.number().optional(),convertMeta:z.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:z.number().optional()});async function RD(e){return de({name:"browser.highlightLocator",serviceName:"browser",fn:()=>Cdt(e)})}async function Cdt({locator:e,callbacks:t,logger:o,timeoutMs:n=ko}){try{await Mq(t,n);let r=e.evaluate(a=>{let l=window._momentic;if(!l)throw new Error("Momentic namespace is not initialized");l.removeHighlightTimers??=[],l.removeHighlightFunctions??={};let c=h=>{let f=window.getComputedStyle(h,null).getPropertyValue("display");if(f==="none"||f==="contents")return !1;let y=h.getBoundingClientRect();return !(!y.height||!y.width)},u=0;for(;!c(a)&&u<3;){if(!a.parentElement)throw new Error("No eligible non-empty parent found for highlighting");a=a.parentElement,u++;}let d=a.style.getPropertyValue("outline"),m=a.style.getPropertyPriority("outline");a.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let p=`momentic${Math.floor(Math.random()*1e7)}`;l.removeHighlightFunctions[p]=()=>{a.style.removeProperty("outline"),a.style.setProperty("outline",d,m),a.getAttribute("style")||a.removeAttribute("style");},l.removeHighlightTimers.push(window.setTimeout(()=>{l.removeHighlightFunctions?.[p]?.(),l.removeHighlightFunctions?.[p]&&delete l.removeHighlightFunctions[p];},5e3));},void 0,{timeout:n}).then(()=>!0).catch(a=>(o.debug({err:a},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1));return await ge(r,{milliseconds:n})}catch(r){return o.debug({err:r},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),false}}async function Mq(e,t=ko){let o=await e.state.getRoot();await Or({root:o,fn:()=>{let i=window._momentic;if(!i)return;let a=i.removeHighlightTimers??[];for(;a.length;){let s=a.pop();s!==void 0&&clearTimeout(s);}Object.values(i.removeHighlightFunctions??{}).forEach(s=>{s();});},timeout:t,arg:void 0,waitForPageLoad:e.waitForPageLoad,codePath:"removing element highlights"});}async function Lq(e){let t=!!e.browserCallbacks.state.userBrowserSettings.visualActions;return Gy({action:"clicking element",targetingResult:e.targetingResult,logger:e.logger,retryTimeoutMs:e.retryTimeoutMs,callbacks:e.browserCallbacks,func:async o=>sTe({...e,targetingResult:o,useVisualClick:t})})}async function Nq({targetingResult:e,relativePosition:t}){let o=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ft}),n=t.x,r=t.y;return o?.width&&(n=Math.max(0,Math.min(t.x,o.width))),o?.height&&(r=Math.max(0,Math.min(t.y,o.height))),{x:(o?.x??0)+n,y:(o?.y??0)+r}}async function Pdt(e){return de({name:"browser.applyChakraClickRedirect",serviceName:"browser",fn:()=>Odt(e)})}async function Odt({actionSource:e,position:t,targetingResult:o,logger:n}){let{locator:r}=o;if(e!=="click"||t)return {locator:r,position:t,redirected:false};let i=await iSe({targetingResult:o,logger:n});return i?{locator:i.locator,position:i.relativePoint,redirected:true}:{locator:r,position:t,redirected:false}}async function kdt(e,t){try{return await Mdt(e,t)}catch(o){throw t.logger.warn({redirectionAttemptError:o,originalError:e},"Error handling click error, rethrowing original error"),e}}async function Mdt(e,t){let{logger:o,redirectionAttempts:n=0}=t,r=t.targetingResult.locator;if(e.message.includes("label")&&e.message.includes("for=")&&e.message.includes("intercepts pointer events")){let i=await r.getAttribute("id",{timeout:ko});if(!i)throw e;let a=r.page().locator(`[for=${JSON.stringify(i)}]`),s=await a.boundingBox({timeout:ko});if(!s||s.width===0||s.height===0)throw o.warn("Label element has no bounding box, throwing original error..."),e;return o.warn({err:e},"Attempting locator redirection due to input being covered by label"),sTe({...t,targetingResult:{locator:a,originalElementLocationResult:void 0,serverSideBoundingBox:s},redirectionAttempts:n+1})}else throw o.warn({err:e},"Click error does not match any known recoverable patterns, rethrowing"),e}async function Ldt(e){let{logger:t,targetingResult:o,position:n,options:r}=e,i=iTe.safeParse(r),a=Date.now(),{clickX:s,clickY:l,reason:c}=await Bdt({targetingResult:o,position:n,options:r,logger:t});return t.info({position:n,options:i.success?i.data:void 0,clickLocation:{clickX:s,clickY:l,reason:c},duration:Date.now()-a},"Visual click"),{x:s,y:l}}async function Ndt(e){return de({name:"browser.locatorBasedClickImplementation",serviceName:"browser",fn:()=>Ddt(e)})}async function Ddt(e){let{actionSource:t,targetingResult:o,options:n,logger:r}=e,i=e.targetingResult.locator,a=n?.relativePosition??e.position;({locator:i,position:a}=await Pdt({actionSource:t,position:a,targetingResult:o,logger:r}));let s=n?.force||o.hints?.force||false;s&&!a&&o.hints?.relativeXYToLocator&&(a=o.hints.relativeXYToLocator);let l=i.toString();r.info({locator:l,position:a,forceClick:s},"Locator click");try{lTe(n)?await i.dblclick({button:n?.rightClick?"right":"left",timeout:ft,position:a,delay:n?.delayMs??25,force:s,noWaitAfter:!0}):await i.click({button:n?.rightClick?"right":"left",timeout:ft,position:a,delay:n?.delayMs??25,force:s,clickCount:n?.iterations,noWaitAfter:!0});}catch(c){if(Hdt(c))r.warn({err:c},"Click action timed out while waiting for navigation after completion, continuing...");else {if((e.redirectionAttempts??0)<1)return r.warn({err:c},"Error clicking on locator, attempting to recover..."),kdt(c,{...e,targetingResult:o});throw c}}return {locatorSource:l}}async function sTe(e){let{options:t,logger:o,browserCallbacks:n,controllerCallbacks:r,useVisualClick:i,targetingResult:a}=e,s=a.locator.page(),l,c;if(t?.waitForDownload){let p=s.context(),h=new Set(p.pages());c=h,l=(async()=>{let g=t.downloadTimeoutMs??sI;try{return await p.waitForEvent("download",{timeout:g,predicate:f=>{let y=f.page();return y===s||!h.has(y)}})}catch(f){return f instanceof errors.TimeoutError?new ne("ActionFailureError",`Download did not complete in ${g}ms`):new ne("ActionFailureError",`Download failed: ${f.message}`)}})();}try{await RD({locator:a.locator,callbacks:n,logger:o,timeoutMs:ko});}catch(p){o.warn({err:p},"Error highlighting locator in click, continuing...");}let u,d,m=async()=>{if(i){u=await Ldt(e);return}d=(await Ndt(e)).locatorSource;};if(e.actionSource==="click"?await n.runWithMainFrameNavigationLatch({page:s,action:m}):await m(),t?.waitForDownload)if(l){if(!r?.createIsolatedFolder)throw new ne("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");o.info("Waiting for download to start and complete");let p=await ge(l,{milliseconds:t.downloadTimeoutMs??sI});if(p instanceof Error)throw p;let h=await jdt(p,r.createIsolatedFolder,o,n);return await zdt({download:p,clickPage:s,pagesBeforeClick:c,logger:o}),{downloadedFile:h,coordinates:u,locatorSource:d}}else throw new Error("No download promise or error but the step requested to wait for a download");return {coordinates:u,locatorSource:d}}async function Fdt(e,t){let o=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ft});if(!o){let i=e.originalElementLocationResult?.serializedElement;throw new ne("ActionFailureError",`${KU}${i?`: ${i}`:""}`)}if(e.hints?.relativeXYToLocator){let i=o.x+e.hints.relativeXYToLocator.x,a=o.y+e.hints.relativeXYToLocator.y;return [{x:i,y:a},"targeting hint"]}let n=o.x+o.width/2,r=o.y+o.height/2;return [{x:n,y:r},"halfway point"]}async function Bdt(e){return de({name:"browser.clickOnLocatorXY",serviceName:"browser",fn:()=>Udt(e)})}async function Udt({options:e,targetingResult:t,position:o,logger:n}){let r,i,a;if(e?.relativePosition)(({x:r,y:i}=await Nq({targetingResult:t,relativePosition:e.relativePosition}))),a="relative position from user";else if(o){let u=t.serverSideBoundingBox??await t.locator.boundingBox({timeout:ft});r=(u?.x??0)+o.x,i=(u?.y??0)+o.y,a="predefined position";}else {let[u,d]=await Fdt(t);r=u.x,i=u.y,a=d;}let s=t.locator.page(),l=e?.rightClick?"right":"left",c=e?.delayMs??25;return lTe(e)?await s.mouse.dblclick(r,i,{button:l,delay:c}):await s.mouse.click(r,i,{button:l,delay:c,clickCount:e?.iterations}),{clickX:r,clickY:i,reason:a}}function lTe(e){return e?.doubleClick===true||e?.iterations===2}async function zdt(e){let{download:t,clickPage:o,pagesBeforeClick:n,logger:r}=e,i=t.page();if(!(i===o||i.isClosed()||n?.has(i)))try{await i.close(),r.info("Closed transient tab opened for download");}catch(a){r.warn({err:a},"Failed to close transient download tab, continuing...");}}async function jdt(e,t,o,n){o.info("Download detected, saving file to disk");let r=n.state.isRemoteBrowser,i;r||(i=await e.path());let a=fq(e.suggestedFilename()),s=t();await de({name:"web-agent.download.save_as",attributes:{"momentic.download.filename":a.slice(0,200),"momentic.download.remote_browser_session":r},fn:()=>ge(e.saveAs(join(s,a)),{milliseconds:sI,message:new ne("ActionFailureError",`Download save timed out after ${sI/1e3}s.`)})}),i&&rmSync(i,{force:true}),setTimeout(()=>{rmSync(s,{recursive:true,force:true});},5*60*1e3);let l=lSe(basename(s),a);return o.info({uri:l,downloadFolder:s},"Saved download to isolated folder"),l}function Hdt(e){return e.message.includes("locator.click: Timeout")&&e.message.includes("click action done")}async function Dq({frame:e,page:t,deltaX:o,directionX:n,deltaY:r,directionY:i,signal:a,callbacks:s,logger:l}){if(!o&&!r)return;let c=n==="left"?-1:1,u=i==="up"?-1:1;if(e)await Or({root:e,fn:([d,m,p,h])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*p,window.scrollY+(m??window.innerHeight)*h),arg:[o,r,c,u],waitForPageLoad:s.waitForPageLoad,timeout:Go,codePath:"scrolling page"});else {let d=t.viewportSize()||qi,m=await Or({root:t,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:Go,codePath:"computing page height"}),[p,h,g]=await Or({root:t,fn:()=>{let f=document.activeElement;if(!f)return [void 0,void 0,void 0];let y=f.getBoundingClientRect();return [f.scrollTop,y.x,y.y]},arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:Go,codePath:"computing active element position"});await t.mouse.wheel((o??d.width)*c,(r??d.height)*u);try{let f=Date.now();for(;Date.now()-f<Go;){a?.throwIfAborted();let y=await ge(t.evaluate(()=>document.body.scrollHeight),{milliseconds:ko}),[b,S,E]=await ge(t.evaluate(()=>{let v=document.activeElement;if(!v)return [void 0,void 0,void 0];let R=v.getBoundingClientRect();return [v.scrollTop,R.x,R.y]}),{milliseconds:ko});if(y===m&&b===p&&S===h&&E===g)break;m=y,p=b,h=S,g=E,await gt(Qr);}}catch(f){l.warn({err:f},"Failed to wait for scroll to complete, continuing...");}}}async function Fq(e,t){let o,n;for(let r=0;r<4;r++)try{return o=e.pages(),await Promise.all(o.map(async i=>{let a="";try{a=t?.getTitles?await ge(i.title(),{milliseconds:Ibe}):"";}catch{a="Unknown page";}return {id:t.getPageId(i),title:a,url:i.url()}}))}catch(i){n=i,await gt(Qr);}throw new Error(`Failed to get tab titles after all retries: ${n?.message}`)}async function Bq(e){let{page:t,deltaX:o,deltaY:n,steps:r,visualTarget:i,isAndroid:a,hoverDurationMs:s}=e;if(a){await $dt(e);return}await t.mouse.move(i.x,i.y),await t.mouse.down(),await t.mouse.move(o+i.x,n+i.y,{steps:r}),await gt(s??Ap),await t.mouse.up();}async function cTe({page:e,fromLocator:t,toLocator:o,stepCount:n,dragDurationMs:r,hoverDurationMs:i}){let a=await o.boundingBox({timeout:ft});if(!a)throw new ne("ActionFailureError","Could not get bounding box of 'to' target element");let s=await t.boundingBox({timeout:ft});if(!s)throw new ne("ActionFailureError","Could not get bounding box of 'from' target element");let l=a.x+a.width/2,c=a.y+a.height/2,u=s.x+s.width/2,d=s.y+s.height/2;await Bq({page:e,deltaX:l-u,deltaY:c-d,steps:n,dragDurationMs:r,hoverDurationMs:i,visualTarget:{x:u,y:d},isAndroid:true});}async function uTe(e,t,o,n){await e.mouse.move(t.x,t.y,{steps:3}),await e.mouse.down(),await e.mouse.move(o.x,o.y,{steps:3}),await gt(Math.min(n.hoverDurationMs??500,dD)),await e.mouse.up();}async function $dt(e){let{page:t,deltaX:o,deltaY:n,steps:r,visualTarget:i,dragDurationMs:a,hoverDurationMs:s}=e,l=Math.max(1,r??1),c=i.x,u=i.y,d=i.x+o,m=i.y+n;await t.evaluate(async({startX:p,startY:h,endX:g,endY:f,stepCount:y,dragDurationMs:b,hoverDurationMs:S})=>{let E=document.elementFromPoint(p,h)??document.body??document.documentElement,w=window._momentic._momenticMobileUtilities.dispatchTouch;w(E,"touchstart",p,h);for(let P=1;P<=y;P+=1){let I=p+(g-p)*P/y,_=h+(f-h)*P/y;w(E,"touchmove",I,_),await new Promise(O=>setTimeout(O,Math.floor((b??500)/y)));}S&&await new Promise(P=>setTimeout(P,S)),w(E,"touchend",g,f);},{startX:c,startY:u,endX:d,endY:m,stepCount:l,dragDurationMs:a,hoverDurationMs:s});}var Yv="<empty>",Gdt=["doubleclick.net","googletagmanager.com","googlesyndication.com","s.amazon-adsystem.com","smartadserver.com","omnitagjs.com","x.adroll.com"];function Vdt(e){return Gdt.some(t=>e.includes(t))}function hTe(e){let t=e.adFrameStatus?.adFrameType;return t==="child"||t==="root"||Vdt(e.url)}async function Wdt(e,t){let o=await e.send({timeout:ft,method:"DOM.getFrameOwner",params:{frameId:t},retries:1}),r=(await e.send({timeout:ft,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[o.backendNodeId]},retries:1})).nodeIds[0],a=(await e.send({timeout:ft,method:"DOM.describeNode",params:{backendNodeId:o.backendNodeId},retries:1})).node;return a.nodeId=r,a}async function Jv({cdpClient:e,page:t,logger:o}){let n={type:"root",childFrames:[],page:t},r=[],[i,a]=await Promise.all([e.send({timeout:Kv,method:"Page.getFrameTree",params:{}}),e.send({timeout:Kv,method:"DOM.getDocument",params:{depth:0}})]),c=(i.frameTree.childFrames??[]).map(async(d,m)=>{if(hTe(d.frame))return null;try{return await gTe({cdpClient:e,rawFrameTree:d,indices:[m],parent:n,warnings:r,logger:o})}catch(p){return r.push(`Failed to get child frame: ${p}`),null}}),u=await Promise.all(c);return n.childFrames=u.filter(d=>d!==null),r.length&&o?.warn({warnings:r},"Got warnings when fetching frame tree"),n}var qdt=["name","id","title","src","srcdoc","sandbox"];async function gTe({cdpClient:e,rawFrameTree:t,indices:o,parent:n,warnings:r,logger:i}){let a=t.frame.id,s=await Wdt(e,a),l=s.attributes??[],c=null,u=[];for(let h of qdt){let g=kg(l,h);g&&(u.push(`${h}=${JSON.stringify(g)}`),h==="src"&&(c=g));}let d={type:"frame",cdpFrame:t.frame,url:t.frame.url,frameId:a,locationData:{indices:o,attributeSelectors:u},src:c,childFrames:[],parent:n,domNode:s},p=(t.childFrames??[]).map(async(h,g)=>{if(hTe(h.frame))return null;try{return await gTe({cdpClient:e,rawFrameTree:h,indices:[...o,g],parent:d,warnings:r,logger:i})}catch(f){return r.push(`Failed to get child frame (child ${g} of frame with url ${t.frame.url}): ${f}`),null}});return d.childFrames=(await Promise.all(p)).filter(h=>h!==null),d}async function Kdt(e){try{return await e.owner().count()===1}catch{return false}}async function Ydt(e){try{return await e.count()===1}catch{return false}}function dTe(e){return e.split("=")[0]}function mTe(e,t){let o=e.locationData.attributeSelectors,n=t?o.filter(r=>!r.startsWith(`${t}=`)):o;return [...n.length?n:o,Yv]}async function Dg(e,t,o){let n=[],r=e;for(;r.parent.type==="frame";)n.push(r.parent),r=r.parent;n.reverse();let i=t,a=[];for(let[u,d]of n.entries()){let m=false;for(let p of mTe(d,o?.get(u))){let h=i.frameLocator(p===Yv?"iframe":`iframe[${p}]`);if(await Kdt(h)){m=true,i=h,a.push(p);break}}if(!m)throw new ne("ActionFailureError",`Failed to find a unique attribute to identify intermediate frame with url matching '${d.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`)}let s;for(let u of mTe(e,o?.get(n.length))){let d=i.locator(u===Yv?"iframe":`iframe[${u}]`);if(await Ydt(d)){s=d,a.push(u);break}}if(!s)throw new ne("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${e.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let l=await s.evaluateHandle(u=>u),c=await l.asElement().contentFrame();if(!c)throw new ne("InternalWebAgentError",`Failed to load the browser frame for iframe with url '${e.url}'`);return await l.dispose(),{frame:c,mPathSelectorTokens:a}}function pTe(e,t){let o=[...e],n=[];for(;o.length;){let r=o.shift();t(r)&&n.push(r),o.push(...r.childFrames);}return n}async function Uq({handle:e,page:t,frameTree:o,excludedAttributes:n}){let{frame:r,mPathSelectorTokens:i}=await Dg(e,t,n);return {type:"auto",frame:r,handle:e,mPathSelectorTokens:i,frameTree:o}}async function fTe({page:e,frameTree:t,cache:o}){let n,r=t.childFrames,i=[],a=new Map;if(o.mPathSelectorTokens.length){let l=r;for(let d=0;d<o.mPathSelectorTokens.length-1;d++){let m=o.mPathSelectorTokens[d];if(m===Yv){l=l.length===1?l[0].childFrames:[];continue}let p=l.filter(h=>h.locationData.attributeSelectors.includes(m));!p.length&&!a.size&&a.set(d,dTe(m)),l=p.map(h=>h.childFrames).flat();}let c=[],u=o.mPathSelectorTokens[o.mPathSelectorTokens.length-1];if(u===Yv?c=l:c=l.filter(d=>d.locationData.attributeSelectors.includes(u)),c.length===1){n=c[0],i.push(`Found unique frame with mpath ${o.mPathSelectorTokens.join(" > ")}`);let{frame:d}=await Dg(n,e);return {resolution:{type:"auto",frame:d,handle:n,mPathSelectorTokens:o.mPathSelectorTokens,frameTree:t},logs:i}}else i.push(`Found ${c.length} frames with mpath ${o.mPathSelectorTokens.join(" > ")}`),!a.size&&u!==Yv&&a.set(o.mPathSelectorTokens.length-1,dTe(u));for(let[d,m]of a)i.push(`Excluding attribute ${m} at frame depth ${d}`);}if(o.frameSrcRegex){let l=new RegExp(o.frameSrcRegex),c=pTe(r,u=>!!u.src&&l.test(u.src));if(c.length===1)return n=c[0],i.push(`Found unique frame with src regex ${o.frameSrcRegex}`),{resolution:await Uq({handle:n,page:e,frameTree:t,excludedAttributes:a}),logs:i};i.push(`Found ${c.length} frames with src regex ${o.frameSrcRegex}`),o.frameSrcRegex=void 0;}if(o.frameUrlRegex){let l=new RegExp(o.frameUrlRegex),c=pTe(r,u=>!!u.url&&l.test(u.url));if(c.length===1)return n=c[0],i.push(`Found unique frame with url regex ${o.frameUrlRegex}`),{resolution:await Uq({handle:n,page:e,frameTree:t,excludedAttributes:a}),logs:i};i.push(`Found ${c.length} frames with url regex ${o.frameUrlRegex}`),o.frameUrlRegex=void 0;}let s=r;for(let l=0;l<o.indices.length-1;l++)s=s[o.indices[l]]?.childFrames??[];if(n=s[o.indices[o.indices.length-1]],n)return i.push(`Found unique frame with indices ${o.indices.join(" > ")}`),{resolution:await Uq({handle:n,page:e,frameTree:t}),logs:i};throw i.push(`Found ${s.length} frames with indices ${o.indices}`),new ca("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:false,logs:i}],"could-not-find-iframe")}function CD(e){return e.type==="auto"?JSON.stringify({type:"auto",frameId:e.handle.frameId}):JSON.stringify(e)}function zq(e){for(;e.parent.type==="frame";)e=e.parent;return e.parent}function yTe(e){let t=zq(e),o=e.src??"",n=e.url??"",r=[],i=[],a=[...t.childFrames];for(;a.length;){let s=a.shift();s.src&&r.push(s.src),s.url&&i.push(s.url),a.push(...s.childFrames);}return {srcs:r,urls:i,desiredSrc:o,desiredUrl:n}}function bTe(e){return e.type==="auto"?{type:"auto",frameId:e.handle.frameId,url:e.handle.url,src:e.handle.src??"",mPathSelectorTokens:e.mPathSelectorTokens.join(" > ")}:{type:"url",url:e.url}}async function STe({frame:e,logger:t,signal:o}){let n;try{n=await e.frameElement(),await Jdt({frameElementHandle:n,logger:t,signal:o});}catch(r){n?t.warn({err:r},"Failed to scroll iframe into view, trying with raw JS"):t.warn("Failed to scroll iframe into view - no frame element");}finally{await n?.dispose();}}async function Jdt({frameElementHandle:e,logger:t,signal:o}){let n=await e.boundingBox(),i=await pT({promiseGenerator:async()=>e.evaluate(async a=>{let s=a.scrollTop,l=a.getBoundingClientRect(),c=0,u=0,d=window.innerWidth,m=window.innerHeight,p=l.top>=c&&l.left>=u&&l.bottom<=m&&l.right<=d,h=l.bottom>c&&l.top<m&&l.right>u&&l.left<d,g=Math.max(l.top,c),f=Math.min(l.bottom,m),y=Math.max(0,f-g),b=h&&y/window.innerHeight>=.8;if(p)return {didScroll:false,reason:"already-fully-visible"};if(b)return {didScroll:false,reason:"already-occupies-most-of-viewport"};a.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(R=>setTimeout(R,250));let S=Date.now();for(;Date.now()-S<1e3;){let R=a.scrollTop;if(R===s)break;s=R,await new Promise(w=>setTimeout(w,250));}let E=a.getBoundingClientRect();return E.top!==l.top||E.left!==l.left||E.right!==l.right||E.bottom!==l.bottom?{didScroll:true,reason:"scrolled",afterRect:E}:{didScroll:false,reason:"no-more-scroll-possible",afterRect:E}}),timeoutMs:Go,codePath:"scrollIframeIntoView",signal:o});i.didScroll&&t.info({oldBb:n,newBb:await e.boundingBox(),evalResult:i},"Successfully scrolled iframe into view");}var jq=()=>{let e,t,o=new Promise((n,r)=>{e=n,t=r;});return {resolve:e,reject:t,value:o}};var TTe=(e,t)=>{let o=e.name??`batcher:${Math.random().toString(16).slice(2)})`,n=e.scheduler??Xdt(10),r=globalThis.__BATSHIT_DEVTOOLS__?.for(o),i={seq:0,batch:new Set,currentRequest:jq(),timer:void 0,start:null,latest:null,abortController:new AbortController};r?.create({seq:i.seq});let a=()=>{i.batch=new Set,i.currentRequest=jq(),i.timer=void 0,i.start=null,i.latest=null,i.abortController=new AbortController;},s=()=>{let d=i.seq,m=e.fetcher([...i.batch],i.abortController.signal),p=i.currentRequest;return r?.fetch({seq:d,batch:[...i.batch]}),a(),m.then(h=>{r?.data({seq:d,data:h}),p.resolve(h);}).catch(h=>{r?.error({seq:d,error:h}),p.reject(h);}),i.seq++,m};return {fetch:d=>{i.start||(i.start=Date.now()),i.latest=Date.now(),i.batch.add(d),clearTimeout(i.timer);let m=n(i.start,i.latest,i.batch.size);if(r?.queue({seq:i.seq,query:d,batch:[...i.batch],scheduled:m,latest:i.latest,start:i.start}),m==="immediate"){let p=i.currentRequest;return s(),p.value.then(h=>e.resolver(h,d))}else return m==="never"?i.currentRequest.value.then(p=>e.resolver(p,d)):(i.timer=setTimeout(s,m),i.currentRequest.value.then(p=>e.resolver(p,d)))},next:()=>{s();},abort:()=>{i.abortController.abort(),i.currentRequest.reject(new DOMException("Aborted","AbortError")),a();}}};var Xdt=e=>(t,o)=>{let n=o-t;return e-n};var vTe=({windowMs:e,maxBatchSize:t})=>(o,n,r)=>{if(r>=t)return "immediate";let i=n-o;return e-i};var Zdt=100,emt=2e3;function ATe(e){return TTe({fetcher:async o=>{e(reduce(o,(n,r)=>({...n,...r}),{}));},resolver:()=>{},scheduler:vTe({windowMs:emt,maxBatchSize:Zdt})})}async function ETe({event:e,transformer:t,enricher:o,frame:n,lastScreenshotForRecording:r,logger:i,autoExpandIframes:a}){let{warnings:s,error:l,properties:c}=e.target;if(l){i.error({err:l,warnings:s},"Error while capturing passive click");return}if(s.length&&i.warn({warnings:s},"Warnings while capturing passive click"),!c)return;let u=n.parentFrame()?n.url():void 0,m=n.page().frames().map(g=>g.url());i.debug({frameUrl:u,...e},"Passive click event captured on element");let p,h;if(u&&!a)try{let g=await n.frameElement();p=await ge(g?.boundingBox(),{milliseconds:ft})??void 0;let f=await o.constructIframeRegex({urls:m,srcs:[],desiredUrl:u},{loggerTags:fo(i)});if(f.urlRegex)h={type:"url",url:`/${f.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(f)}`)}catch(g){i.warn({err:g},"Failed to construct iframe details for recorded action, using hardcoded URL only"),h={type:"url",url:u};}(async()=>{try{await t.recordElementAction({...e,screenshotBase64:r,frameConfig:h,frameBoundingBox:p,autoExpandIframes:a,isInIframe:!!u});}catch(g){i.error({err:g},"Failed to transform passive click action");}})();}var omt=["Dead"],ID=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:t,callbacks:o,generator:n,testId:r,orgId:i,logger:a}){this.signal=t,this.logger=a,this.testId=r,this.orgId=i,this.callbacks={onStepRecorded:(s,l)=>{this.recordedSteps.set(l,{step:s}),o.onStepRecorded(s,l);},onActionReceived:(s,l)=>{this.recordedSteps.set(l,{step:s}),o.onActionReceived?.(s,l);}},this.generator=n;}reserveIndexForCommand(t){let o=this.nextStepOffset;return this.recordedSteps.set(o,{step:{id:randomUUID(),type:"PRESET_ACTION",command:Hl(t)}}),this.nextStepOffset++,o}async recordElementAction(t){let{type:o,target:n,frameConfig:r,autoExpandIframes:i,isInIframe:a}=t,s=!!i&&!!a;if(this.signal.aborted){this.logger.debug("Transformer was already cleaned up, ignoring click...");return}let l,c,u=n.properties.attributes.nodeOnlySerializedHtml.trim(),d=u,m;switch(t.frameConfig?t.frameBoundingBox?m={x:t.frameBoundingBox.x+n.properties.boundingBox.x,y:t.frameBoundingBox.y+n.properties.boundingBox.y,width:n.properties.boundingBox.width,height:n.properties.boundingBox.height}:this.logger.warn(t,"No frame bounding box found, refusing to write bounding box"):m=n.properties.boundingBox,o){case "CLICK":{l="CLICK";let b=Hl(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...b,target:{type:"description",elementDescriptor:d},iframeUrl:r?.url,cache:s?void 0:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:m}}}};break}case "SELECT":{l="SELECT_OPTION";let b=Hl(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...b,type:"SELECT_OPTION",iframeUrl:r?.url,target:{type:"description",elementDescriptor:d},cache:s?void 0:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:m}},choice:{type:"VALUE",value:t.selectedValue??"Unknown option"}}};break}case "MOUSE_DRAG":{l="MOUSE_DRAG";let b=Hl(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...b,target:{type:"description",elementDescriptor:d},deltaX:t.deltaX.toString(),deltaY:t.deltaY.toString(),iframeUrl:r?.url,cache:s?void 0:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),targetUpdateLoggerTags:fo(this.logger),boundingBox:m}}}};break}default:throw new Error(`Unknown action type: ${o}`)}let p;t.offset===void 0?(p=this.nextStepOffset,this.nextStepOffset++):p=t.offset,this.callbacks.onActionReceived?.(c,p);let h=t.target.browserState;try{h=tmt.html(h,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),h=mbe(h,"data-momentic-interacted",4e4);}catch{}let g;try{g=(await this.generator.getReverseMappedDescription({target:h,screenshot:t.screenshotBase64?`data:image/jpeg;base64,${t.screenshotBase64}`:void 0,boundingBox:n.properties.boundingBox},{disableCache:!1,loggerTags:{testId:this.testId,...fo(this.logger)}})).phrase;}catch(b){this.logger.error({err:b},"Error generating reverse mapping description"),g=u;}let f=this.recordedSteps.get(p)?.step??c,y=f?.command;y&&"target"in y&&y.target?(y.target={type:"description",elementDescriptor:g},"cache"in y&&y.cache&&"target"in y.cache&&(y.cache.target.inputDescription=g),this.callbacks.onStepRecorded({...f,command:y},p)):this.logger.warn("Could not find existing command to update after description mapping");}recordKeystroke(t){let{key:o,combinable:n}=t;if(omt.includes(o)||this.signal.aborted)return;let r="normal";o.length>1&&(r="special");let i;if(r==="normal"){let d=Hl("TYPE");i={id:randomUUID(),type:"PRESET_ACTION",command:{...d,target:void 0,value:o,clearContent:false}};}else {let d=Hl("PRESS");i={id:randomUUID(),type:"PRESET_ACTION",command:{...d,value:o}};}let a,s=this.nextStepOffset-1,l=this.recordedSteps.get(s),c=l?.step,u=c?.command;if(n){if(u?.type===i.command.type){let d=u.value,m=i.command.value;i={id:randomUUID(),type:"PRESET_ACTION",command:{...u,value:i.command.type==="PRESS"?`${d}+${m}`:`${d}${m}`}},a=s;}else if(u?.type==="CLICK"&&i.command.type==="TYPE")c.command={...i.command,target:u.target,cache:u.cache},i=l.step,a=s;else if(u?.type==="TYPE"&&i.command.type==="PRESS"&&i.command.value==="Backspace"){let d=u.value;i={id:randomUUID(),type:"PRESET_ACTION",command:{...u,value:d.slice(0,d.length-1)}},a=s;}}a===void 0&&(a=this.nextStepOffset,this.nextStepOffset++),this.callbacks.onStepRecorded(i,a);}recordScroll(t){if(this.signal.aborted)return;let o=()=>{let{deltaY:i}=t;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,l;s?.type==="SCROLL_DOWN"&&s.deltaY?(i+=s.deltaY,l=a):s?.type==="SCROLL_UP"&&s.deltaY?(i-=s.deltaY,l=a):(l=this.nextStepOffset,this.nextStepOffset++);let c=i>0?"SCROLL_DOWN":"SCROLL_UP",u=Hl(c);u.deltaY=Math.abs(i);let d={id:randomUUID(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,l);},n=()=>{let{deltaX:i}=t;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,l;s?.type==="SCROLL_RIGHT"&&s.deltaX?(i+=s.deltaX,l=a):s?.type==="SCROLL_LEFT"&&s.deltaX?(i-=s.deltaX,l=a):(l=this.nextStepOffset,this.nextStepOffset++);let c=i>0?"SCROLL_RIGHT":"SCROLL_LEFT",u=Hl(c);u.deltaX=Math.abs(i);let d={id:randomUUID(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,l);},r=this.recordedSteps.get(this.nextStepOffset-1);r?.step.command.type==="SCROLL_LEFT"||r?.step.command.type==="SCROLL_RIGHT"?(n(),t.deltaY>=20&&o()):(o(),t.deltaX>=20&&n());}};var xD=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userControlledBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position","background-image"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;lastA11yTreeFetchTimeMs;pageLoadWaitStateByPage=new WeakMap;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:t,pageLoadTimeoutMs:o,allowPartialAccessibilityTree:n,logger:r,cdpClient:i,pageGetter:a,abortSignalGetter:s,enricher:l,iconKnowledgeBase:c,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=t,this.pageLoadTimeoutMs=o,this.allowPartialAccessibilityTree=n,this.logger=r,this.cdpClient=i,this.pageGetter=a,this.abortSignalGetter=s,this.enricher=l,this.iconKnowledgeBase=c,this.userControlledBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userControlledBrowserSettings.importantStyles)for(let m of this.userControlledBrowserSettings.importantStyles){let p=m.split(":");if(p.length!==2){this.logger.warn({style:m},"Invalid style property passed to importantStyles");continue}let h=p[0]?.trim(),g=p[1]?.trim();if(h===void 0||g===void 0){this.logger.warn({style:m},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(h)||this.computedStylesToFetch.push(h);}}get frameConfig(){return this.activeFrameConfig}get domGraph(){return this.lastDomGraph}get selectorToNodeMap(){return this.lastSelectorToNodeMap}get dataMomenticIdToNodeMap(){return this.lastDataMomenticIdToNodeMap}get a11yIdToNodeMap(){return this.lastA11yIdToNodeMap}get a11yTreeRoot(){return this.lastA11yTreeRoot}setActiveFrameConfig(t){t?(this.activeFrameConfig=t,this.activeFrameCache=void 0):(this.activeFrameConfig=void 0,this.activeFrameCache=void 0);}reset(){this.activeFrameCache=void 0,this.activeFrameConfig=void 0,this.lastA11yIdToNodeMap={},this.lastDataMomenticIdToNodeMap={},this.lastSelectorToNodeMap={},this.lastA11yTreeRoot=void 0,this.lastDomGraph=void 0,this.lastA11yTreeFetchTimeMs=void 0;}saveAutoFrameCacheDetails(t){if(!this.activeFrameConfig||this.activeFrameConfig.type!=="auto"||!this.userControlledBrowserSettings.autoExpandIframes)return;let o={...t,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,o),o}async getAutoFrameDetailsFromHandle(t){let o=this.pageGetter(),n=zq(t),{frame:r,mPathSelectorTokens:i}=await Dg(t,o),a={indices:t.locationData.indices,mPathSelectorTokens:i};return this.constructIframeRegexAsync(t,a),{cache:a,config:{type:"auto",frame:r,handle:t,mPathSelectorTokens:i,frameTree:n,cache:a}}}async resolveAutoFrameCache(t){let o=this.pageGetter(),n=await Jv({cdpClient:this.cdpClient,page:o,logger:this.logger}),{resolution:r,logs:i}=await fTe({page:o,frameTree:n,cache:t});return this.logger.info({logs:i},"Resolved auto frame cache"),{...r,cache:t}}async resolveActiveFrameConfig({logger:t=this.logger,signal:o=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(CD(this.frameConfig)!==this.activeFrameCache.frameIdentifierStringified)this.activeFrameCache=void 0;else if(this.activeFrameCache.frame&&"isDetached"in this.activeFrameCache.frame&&this.activeFrameCache.frame.isDetached())this.activeFrameCache=void 0;else return this.activeFrameCache;let n;return this.frameConfig.type==="url"?n=await this.resolveUrlMatcherFrameConfig({config:this.frameConfig,logger:t,signal:o}):n={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:CD(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await STe({frame:n.frame,logger:t,signal:o}),this.activeFrameCache=n,n}async executeFunctionInAllFrames(t,o){let n=this.pageGetter(),r=await Jv({cdpClient:this.cdpClient,page:n,logger:this.logger}),i=[ge(n.evaluate(t,o),{milliseconds:Go})],a=Array.from(r.childFrames);for(;a.length>0;){let l=a.shift(),c=l.url;c==="about:blank"||c.startsWith("chrome-error://")||(a.push(...l.childFrames),i.push(Dg(l,n).then(({frame:u})=>ge(u.evaluate(t,o),{milliseconds:Go})).catch(u=>(this.logger.warn({err:u,frameUrl:l.url},"Failed to evaluate function in frame"),"MOMENTIC_FRAME_EVAL_ERROR"))));}return (await Promise.all(i)).filter(l=>l!=="MOMENTIC_FRAME_EVAL_ERROR")}async getAllChildFrameUrls(){let t=this.pageGetter(),o=await Jv({cdpClient:this.cdpClient,page:t,logger:this.logger}),n=Array.from(o.childFrames),r=[];for(;n.length>0;){let i=n.shift();n.push(...i.childFrames),r.push(i.src??i.url);}return r}async getDomGraph({devicePixelRatio:t,signal:o,logger:n}){let r=await this.getDOMTree({devicePixelRatio:t??1,signal:o,logger:n??this.logger});return this.lastDomGraph=r,r}async getA11yTree(t){let o={},n=t.logger??this.logger,r=t.abortSignal??this.abortSignalGetter(),i=this.pageGetter(),a=await this.waitForPageLoadBeforeA11yTree({page:i,skipPageLoad:t.skipPageLoad,logger:n}),{frameContext:s,startingFrameId:l}=await this.getFrameTreeAndAddMomenticIds({logger:n,signal:r,logTimings:o}),c=await xc({fn:()=>this.getDomGraph({devicePixelRatio:t.devicePixelRatio??1,signal:r,logger:n}),codePath:"domFetch",logObject:o,signal:r,logger:n}),u=await xc({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:l,childFrames:s.childFrames,logTimings:o,logger:n,signal:r}),codePath:"totalA11yFetch",logObject:o,signal:r,logger:n}),{tree:d}=await xc({fn:()=>this.composeA11yDomGraph({opts:t,a11yGraph:u,domGraph:c,startingFrameId:l,frameContext:s,logger:n,iconKnowledgeBase:this.iconKnowledgeBase,showZeroOpacityElements:t.showZeroOpacityElements,flagNotActionableNodes:t.flagNotActionableNodes,allowIneligibleTagRedirect:t.allowIneligibleTagRedirect}),codePath:"a11yProcess",logObject:o,signal:r,logger:n});if(Object.values(o).some(m=>m>750)&&n.warn({logTimings:o},"A11y tree fetch component took a long time"),t.skipPageLoad!==true&&a){let m=this.pageGetter()!==i,p=false;if(m||(p=await this.getPageLoadWaitState(i)!==a),m||p)throw new Error("Page navigated while collecting page state")}return this.lastA11yIdToNodeMap=d.a11yIdNodeMap,this.lastDataMomenticIdToNodeMap=d.dataMomenticIdMap,this.lastA11yTreeRoot=d.root,this.lastDomGraph=c,this.lastSelectorToNodeMap=d.selectorToNodeMap,this.lastA11yTreeFetchTimeMs=Date.now(),d}getNodeUsingDataMomenticId(t){if(this.lastA11yTreeFetchTimeMs&&!(Date.now()-this.lastA11yTreeFetchTimeMs>1e4))return this.lastDataMomenticIdToNodeMap[t]}async getFrameTreeAndAddMomenticIds({logger:t=this.logger,signal:o=this.abortSignalGetter(),logTimings:n}){let r=this.pageGetter(),i,a,s=null;if(this.frameConfig?.type==="url"){if(i=await xc({fn:()=>this.resolveActiveFrameConfig({logger:t,signal:o}),codePath:"getActiveFrameDetails",logObject:n,signal:o,logger:t})??void 0,!i)throw new ne("ActionFailureError","Got null frame details despite active frame config");a=i.handle,s=a.frameId;}else this.userControlledBrowserSettings.autoExpandIframes?(a=await xc({fn:()=>Jv({cdpClient:this.cdpClient,page:this.pageGetter(),logger:t}),codePath:"getMomenticFrameTree",logObject:n,signal:o,logger:t}),s=null):(a={type:"root",page:r,childFrames:[]},s=null);return await xc({fn:async()=>this.addMomenticIds({rootPage:r,childFrames:a.childFrames,frameFilter:i?.frame,logger:t}),codePath:"addIdsToElement",logObject:n,signal:o,logger:t}),{startingFrameOverride:i,frameContext:a,startingFrameId:s}}async getPageLoadWaitState(t){if(this.userControlledBrowserSettings.ignorePageLoadTimeouts!==true)return;let{frameTree:o}=await this.cdpClient.send({method:"Page.getFrameTree",params:{}}),n=o.frame.loaderId,r=this.pageLoadWaitStateByPage.get(t);if(r?.documentId===n)return r;let i={documentId:n,didTimeOut:false};return this.pageLoadWaitStateByPage.set(t,i),i}async waitForPageLoadBeforeA11yTree({page:t,skipPageLoad:o,logger:n}){if(o)return;let r=await this.getPageLoadWaitState(t);if(r?.didTimeOut)return r;try{await t.waitForLoadState("load",{timeout:this.pageLoadTimeoutMs});}catch(i){if(n.warn({err:i},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),r&&i instanceof errors.TimeoutError)return r.didTimeOut=true,r;await this.cdpClient.reinitialize();}return r}async fetchA11yTreeForRecording(t,o){if(await this.getA11yTree({devicePixelRatio:t,abortSignal:o,logger:ba,filterByViewport:false,flagNotActionableNodes:false,allowIneligibleTagRedirect:true,skipPageLoad:true}),Math.random()<.1){let n=this.lastA11yTreeRoot?.serialize();this.logger.debug({tree:n&&n.length>4e5?"REDACTED_DUE_TO_SIZE":n},"Refreshed a11y tree during recording");}}async getLocatorFromA11yNode({page:t,root:o,node:n}){if(n.backendNodeId===void 0)throw new Error(`Node with a11y id ${n.id} has no backend node ID: ${n.getNodeOnlySerializedForm()}`);if(this.userControlledBrowserSettings.visualActions){let r=this.domGraph?.backendIdToNode[n.backendNodeId];if(!r)throw new Error(`Could not find DOM node for backend node ID ${n.backendNodeId}`);let i=Gbe({node:r,domGraph:this.domGraph});return Vbe(t,i)}else return n.domNode||this.logger.warn({a11yRole:n.role,content:n.content},"Attempting to get locator from a11y node with no DOM node"),this.getLocatorFromBackendId(o,n.backendNodeId)}async getLocatorFromBackendId(t,o){let n=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:o},timeout:ft,retries:1});if(!n||!n.object.objectId)throw new Error(`Could not resolve backend node ${o}`);let r;try{r=await Wbe(this.cdpClient,n.object.objectId);}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(n.object)},"Failed to get ID attribute for target"),i}return t.locator(vp(r))}getNodeUsingMPathSelector(t){let o=this.selectorToNodeMap[t];if(o)return o}async resolveUrlMatcherFrameConfig({config:t,signal:o=this.abortSignalGetter(),logger:n=this.logger}){let r=Date.now(),i,a,s,l=0;for(;Date.now()-r<this.smartWaitingTimeoutMs;)try{i=await Jv({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),a=await this.getMatchingFrameByUrlWithCdp(i,t),n.info({frameId:a.handle.frameId,url:a.handle.url,src:a.handle.src,locationData:a.handle.locationData},`Found matching frame using ${a.matchType}`);break}catch(c){if(s=c,c instanceof ne&&c.reason==="UserInfrastructureError")throw c;l%3===0&&this.logger.warn({attempt:l,err:c},"Failed to resolve active frame, retrying..."),await gt(Qr,o);}finally{l++;}if(a)return {source:"url",frame:a.frame,handle:a.handle,frameIdentifierStringified:CD(t),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw s}async getMatchingFrameByUrlWithCdp(t,o){let n=o.url,r=this.pageGetter(),i=Array.from(t.childFrames),a=[];for(;i.length>0;){let s=i.shift(),l=s.domNode;i.push(...s.childFrames);let c=kg(l.attributes??[],"src"),u=l.contentDocument?.documentURL;if(!c&&!u){this.logger.debug("Skipping frame with no URL or src");continue}for(let d of [c,u])if(d){if(n.startsWith("/")&&n.endsWith("/")){if(new RegExp(n.slice(1,-1)).test(d)){a.push({handle:s,matchType:"regex",...await Dg(s,r)});break}}else if(n.trim()===d.trim()){a.push({handle:s,matchType:"url",...await Dg(s,r)});break}}}if(a.length===1){let s=a[0];return this.userControlledBrowserSettings.autoExpandIframes||(s.handle.childFrames=[]),s}else throw a.length>1?new Error(`Found multiple frames with src matching '${n}'. Please use a more specific selector.`):new ne("ActionFailureError",`Failed to find frame with src matching: ${n}`)}async composeA11yDomGraph({opts:t,a11yGraph:o,domGraph:n,startingFrameId:r,frameContext:i,logger:a,iconKnowledgeBase:s,showZeroOpacityElements:l,flagNotActionableNodes:c,allowIneligibleTagRedirect:u}){let d=await tSe({rawA11yGraph:o,startingFrameId:r,frameContext:i,domGraph:n,logger:a,cdpClient:this.cdpClient,showZeroOpacityElements:l,flagNotActionableNodes:c,allowIneligibleTagRedirect:u,filterByViewport:t.filterByViewport,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},viewportDetails:void 0,iconKnowledgeBase:s,useMPaths:this.userControlledBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride,defaultSerializeParams:this.userControlledBrowserSettings.includeLocatorBoundingBoxes?{includeAllBoundingBoxes:true}:void 0});if(!d||!d.root)throw new Error("Accessibility tree appears empty");return {tree:d}}async addMomenticIds({rootPage:t,childFrames:o,frameFilter:n,logger:r}){if(this.userControlledBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(n??t,1);if(!this.userControlledBrowserSettings.autoExpandIframes||n)return;let a=Array.from(o),s=[];for(;a.length>0;){let l=a.shift();a.push(...l.childFrames);let c=async()=>{try{let{frame:u}=await Dg(l,t);i=await this.addMomenticIdsHelper(u,i);}catch(u){l.url!=="about:blank"&&r.warn({err:u},"Error adding momentic IDs to child frame, continuing...");}};s.push(c());}await Promise.all(s);}async addMomenticIdsHelper(t,o){if(this.userControlledBrowserSettings.visualActions)return o;let n=this.logger;return await Or({root:t,fn:i=>window._momentic?.addIdsToElement?.(document.body,i),arg:o,timeout:Go,waitForPageLoad:async()=>{try{await t.waitForLoadState("domcontentloaded",{timeout:this.smartWaitingTimeoutMs});}catch(i){n.warn({err:i},"Error loading frame root adding momentic ids, continuing...");}},codePath:"adding Momentic element IDs to the page"})??o}async decideChildFrameUnrollEligibility({logger:t,warnings:o,handle:n}){try{let{shouldUnroll:r,reason:i}=await this.decideChildFrameUnrollEligibilityHelper({domNode:n.domNode});return {shouldUnroll:r,reason:i}}catch(r){if(r.message.includes("Could not compute box model"))return {shouldUnroll:false};let i=`Got error when determining whether to filter frame ${n.frameId} with url ${n.url}, allowing it to be fetched: ${r}`;return o?.push(i),t?.warn({err:r},i),{shouldUnroll:true}}}async decideChildFrameUnrollEligibilityHelper({domNode:t}){let o=t.attributes??[];if(kg(o,"aria-hidden")==="true")return {shouldUnroll:false,reason:"aria-hidden"};let n=kg(o,"style");if(n?.includes("display: none")||n?.includes("visibility: hidden"))return {shouldUnroll:false,reason:"hidden CSS style"};await this.cdpClient.send({timeout:ft,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[t.backendNodeId]}});let[r,i]=await Promise.all([this.cdpClient.send({timeout:ft,method:"DOM.getBoxModel",params:{backendNodeId:t.backendNodeId}}),this.cdpClient.send({timeout:ft,method:"CSS.getComputedStyleForNode",params:{nodeId:t.nodeId}})]);if(!r.model||!r.model.height||!r.model.width)return {shouldUnroll:false,reason:"no bounding box"};if(r.model.height<10||r.model.width<10)return {shouldUnroll:false,reason:"small bounding box"};for(let a of i.computedStyle){if(a.name==="display"&&a.value==="none")return {shouldUnroll:false,reason:"display: none"};if(a.name==="visibility"&&a.value==="hidden")return {shouldUnroll:false,reason:"visibility: hidden"};if(a.name==="opacity"&&a.value==="0")return {shouldUnroll:false,reason:"opacity: 0"}}return {shouldUnroll:true}}async getRawA11yGraph({cdpClient:t,frameId:o,childFrames:n,logTimings:r,logger:i=this.logger,signal:a=this.abortSignalGetter()}){let s=[],l,c;for(let p=0;p<3;p++)try{c=await xc({fn:()=>this.getRawA11yTreeForFrame({frameId:o,timeoutMs:this.pageLoadTimeoutMs,logTimings:r}),codePath:"a11y-tree-fetch-root",logObject:r,logger:i});break}catch(h){l=h,i.warn({err:h},"Reinitializing CDP client before retrying a11y graph fetch"),await this.cdpClient.reinitialize();}if(!c)throw new Error(`Failed to fetch accessibility tree for root page: ${l}`);let u={};if(u[o??"root"]=c,!this.userControlledBrowserSettings.autoExpandIframes)return u;let d=Array.from(n),m=[];for(;d.length>0;){let p=d.shift();try{let{shouldUnroll:g}=await this.decideChildFrameUnrollEligibility({handle:p,warnings:s});if(!g)continue}catch(g){if(g.message.includes("Could not compute box model"))continue;s.push(`Got error when determining whether to filter frame ${p.frameId} with url ${p.url}, allowing it to be fetched: ${g}`);}d.push(...p.childFrames);let h=async()=>{try{let g=await xc({fn:()=>this.getRawA11yTreeForFrame({frameId:p.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:r}),codePath:`a11y-tree-fetch-child-${p.frameId}`,logObject:r,logger:i});u[p.frameId]=g;}catch(g){i.warn({err:g,url:p.url,src:p.src},`Error getting raw a11y tree for child frame ${p.frameId}, continuing...`);}};m.push(h());}return await Promise.all(m),s.length>0&&this.logger.warn({warnings:s},"Got warnings when fetching the raw a11y graph"),u}async getRawA11yTreeForFrame({frameId:t,timeoutMs:o,logTimings:n}){let r=await this.cdpClient.withDomainEnabled({domain:"Accessibility",fn:async()=>{if(this.allowPartialAccessibilityTree)return (await xc({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:t??void 0},timeout:o,timeoutMsg:`Fetching the document tree took over ${o}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes;let a=(await xc({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:t??void 0},timeout:Go}),codePath:"cdp-get-root-ax-node",logObject:n,logger:this.logger})).node.backendDOMNodeId;return (await xc({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:a},timeout:o,timeoutMsg:`Fetching the document tree took over ${o}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes}});if(!r||r.length<=1)throw new Error("Document is entirely empty");return {root:r[0],allNodes:r}}async getDOMTree({devicePixelRatio:t,signal:o,logger:n}){let r,i=0,a;for(;!r&&i<3;)try{if(r=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:this.computedStylesToFetch},timeout:ft}),!r||!r.documents.length)throw new Error("Got empty DOM tree")}catch(s){await gt(Qr,o),i++,a=s;}if(!r||!r.documents.length)throw n.error({err:a},"Fatal error fetching DOM tree"),new ne("UserInfrastructureError",`Received an empty HTML snapshot from the browser. This usually indicates the page has crashed due to resource consumption issues or hanging client-side JavaScript code: ${a?.message}`);return $be({snapshot:r,devicePixelRatio:t,computedStylesToFetch:this.computedStylesToFetch,logger:n})}constructIframeRegexAsync(t,o){if(o.frameSrcRegex||o.frameUrlRegex)return;let n=yTe(t);if(!n.desiredSrc&&!n.desiredUrl){this.logger.debug({params:n},"Skipping iframe regex construction because desiredSrc and desiredUrl are both empty");return}(async()=>{try{let r=await this.enricher?.constructIframeRegex(n,{loggerTags:fo(this.logger)});r?.srcRegex&&(o.frameSrcRegex=r.srcRegex),r?.urlRegex&&(o.frameUrlRegex=r.urlRegex),this.logger.debug({result:r,params:n},"Constructed iframe regex for cache");}catch(r){this.logger.warn({err:r},"Failed to construct iframe regex, skipping...");}})();}};function rmt(e,t,o={}){e.warn({behavior:t,...o},"Suspicious usage detected");}function wTe({logger:e,url:t}){let o=imt(t);o&&rne(o)&&rmt(e,"navigate_to_sanctioned_tld",{hostname:o});}function imt(e){try{return new URL(e).hostname.toLowerCase().replace(/\.$/,"")}catch{return null}}var _D=class{constructor(t,o=Date.now){this.maxAgeMs=t;this.now=o;}cached;clear(){this.cached=void 0;}store({buffer:t,...o}){this.cached={...o,buffer:t,capturedAt:this.now(),viewport:o.viewport?{...o.viewport}:null};}take({clearHighlights:t,page:o,quality:n,url:r,viewport:i}){let a=this.cached;if(this.cached=void 0,!a)return;let s=this.now()-a.capturedAt;if(!(s<0||s>this.maxAgeMs||a.page!==o||a.url!==r||a.quality!==n||t&&!a.clearHighlights||a.viewport?.width!==i?.width||a.viewport?.height!==i?.height))return a.buffer}};var fmt=5e3;function xTe(e){return `${e}
|
|
7964
7964
|
//# sourceURL=momentic-injected/rrweb-record.js`}var Bg=class e{static NAVIGATION_SETTLE_MS=750;initOptions;abortSignal=void 0;contextInitialized=false;cleanedUp=false;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;pageLoadAbortControllers=new Set;pageLoadAbortListenerCleanup;clientCallbacks;harBatcher;popupDocumentAttributionAbortController=new AbortController;pendingPopupDocumentCaptures=new Set;pendingPopupDocumentResponseCollections=new Set;consoleLogCircuitBreaker;networkLogCircuitBreaker;pageIds=new WeakMap;consoleLogListeners=new WeakMap;networkRouteHandlers=new WeakMap;customHeaderRouteHandlers=new WeakMap;iconKnowledgeBase;cdpClient;debugData={logsPerPage:[]};rootUrlLastChangedAt=new WeakMap;pendingMainFrameNavigationObservations=[];recentFrameNavigations={};requestRecorders={};mocks={};offline=false;customHeaders=[];extraHeaderNames=new Set;enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;traceScreenshotCache=new _D(xbe);originsVisited=new Set;viewport;onVideoPageChange;videoOutputPath;isRemoteBrowser;operatingSystem;pendingRemoteVideoSaves=[];activeRemoteVideoSaves=[];trackedVideoNames=new WeakMap;lastVideoActivationPage;baseUrl;get executionMode(){return this.initOptions?.browserExecutionMode!==void 0?this.initOptions.browserExecutionMode:this.userControlledBrowserSettings.turbo?"turbo":"standard"}updateRuntimeSettings(t){if(!this.initOptions)throw new Error("Cannot update browser runtime settings before initialization");return t.executionMode!==void 0&&(this.initOptions.browserExecutionMode=t.executionMode),{executionMode:this.executionMode}}constructor({storage:t,enricher:o,browser:n,context:r,page:i,baseUrl:a,logger:s,userBrowserSettings:l,viewport:c,properties:u,clientCallbacks:d,iconKnowledgeBase:m,onVideoPageChange:p,videoOutputPath:h,isRemoteBrowser:g}){Cte(l),this.storage=t,this.enricher=o,this.browser=n,this.context=r,this.page=i,this.baseUrl=a,this.logger=s,this.consoleLogCircuitBreaker=new dI("console",s,{activityWindowMs:kbe,maxEventsPerWindow:Mbe,maxCharsPerWindow:Lbe,maxActiveOperations:Nbe,onDisable:()=>this.removeConsoleLogListeners()}),this.networkLogCircuitBreaker=new dI("network",s,{...g?{slowOperationMs:Fbe,hardOperationMs:Bbe,slowOperationLimit:Ube,windowMs:zbe}:{},resumeAfterMs:Dbe,onDisable:()=>this.scheduleRemoveUnusedNetworkRoutes(),onResume:()=>this.scheduleEnsureNetworkRoutes()}),this.userControlledBrowserSettings=l,this.viewport=c,this.properties=u,this.clientCallbacks=d,this.iconKnowledgeBase=m,this.onVideoPageChange=p,this.videoOutputPath=h,this.isRemoteBrowser=g??false,this.operatingSystem=u.operatingSystem;}registerAbortSignal(t){if(this.pageLoadAbortListenerCleanup&&(this.pageLoadAbortListenerCleanup(),this.pageLoadAbortListenerCleanup=void 0),this.abortSignal=t,!this.abortSignal)return;let o=()=>{for(let n of this.pageLoadAbortControllers)n.abort();this.pageLoadAbortControllers.clear();};if(this.abortSignal.aborted){o();return}this.abortSignal.addEventListener("abort",o),this.pageLoadAbortListenerCleanup=()=>{this.abortSignal?.removeEventListener("abort",o);};}async initialize({grantPermissions:t,permissionsToGrant:o,runInitScripts:n,timingRecorder:r}){if(this.contextInitialized)return;let i={[dbe]:this.userBrowserSettings.visualActions},a=[];if(this.userControlledBrowserSettings.extraHeaders){for(let p of Object.keys(this.userControlledBrowserSettings.extraHeaders))this.extraHeaderNames.add(p.toLowerCase());a.push(this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders));}t&&a.push(this.context.grantPermissions($Se(o))),a.push(this.context.addInitScript({content:`${cq.htmlUtilsLibJs}
|
|
7965
7965
|
//# sourceURL=momentic-injected/browser-scripts.js`}),this.context.addInitScript({content:_q(i,this.userBrowserSettings.disableFullStory)}),this.exposeRecordingBindings());let s=this.clientCallbacks?.rrweb;s&&a.push(this.context.addInitScript({content:xTe(s.recordScript)}),this.exposeRrwebBinding());let l=p=>this.handleNewPageEvent(p);this.context.on("page",l);let c=p=>this.handleContextRequestEvent(p);this.context.on("request",c),this.handleNewPageEventHelper(this.page),this.context.on("close",()=>{this.context.off("page",l),this.context.off("request",c);});let u=false;if(n){let p=async()=>{let h=Date.now();try{let g=[this.page.addScriptTag({content:`${cq.htmlUtilsLibJs}
|
|
7966
|
-
//# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:_q(i,this.userBrowserSettings.disableFullStory)})];s&&g.push(this.page.addScriptTag({content:xTe(s.recordScript)})),await Promise.all(g);}catch(g){if(g instanceof Error&&(g.message.includes("Content Security Policy")||g.message.includes("TrustedScript")))this.logger.warn({err:g},"Content Security Policy error from adding Momentic scripts, reloading page instead"),u=true;else throw g}(r??{})["add-init-scripts"]=Date.now()-h;};a.push(p());}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&!this.isRemoteBrowser&&platform()==="darwin"&&execSync("system_profiler SPDisplaysDataType").toString().includes("Retina"))C.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else {let p=async()=>{let h=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(r??{})["fetch-dpr"]=Date.now()-h;};a.push(p());}let d=Date.now();await ge(Promise.all(a),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let m=Date.now();(r??{})["ops-attach"]=m-d,u&&await this.page.reload(),this.cdpClient=await hD.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout,onAttach:async p=>{await this.initializeScreencast(p);}}),(r??{})["cdp-init"]=Date.now()-m,this.stateManager=new xD({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??true,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=true;}async fixViewportForNewHeadless(t=this.cdpClient){this.properties.isNewHeadless&&(this.properties.isAndroid||this.viewport&&await t.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}}));}async waitForRootNavSettle(t){return de({name:"browser.waitForRootNavSettle",serviceName:"browser",fn:()=>this.waitForRootNavSettleHelper(t)})}async waitForRootNavSettleHelper(t){let o=this.rootUrlLastChangedAt.get(this.page)??0,n=Date.now()-o;if(n>=e.NAVIGATION_SETTLE_MS)return;let r=e.NAVIGATION_SETTLE_MS-n;try{await ge(this.page.waitForLoadState("load",{timeout:r}),{milliseconds:r,signal:t,fallback:()=>{}});}catch{t?.throwIfAborted();}}async initializeScreencast(t){await this.fixViewportForNewHeadless(t),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await t.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),t.on("Page.screencastFrame",o=>{let n=o.sessionId,r=Buffer.from(o.data,"base64");this.lastScreenshotForRecording=r,this.clientCallbacks?.onScreencastFrame?.(r,()=>{(async()=>{try{await t.send({method:"Page.screencastFrameAck",params:{sessionId:n}});}catch{}})();});}));}static async init(t){let o;try{o=await xq(t);}catch(r){throw Iq(r,t.userBrowserSettings.browserType)}let n=new e(o);return n.initOptions=t,await n.trackPageVideo(n.page),await n.initialize({grantPermissions:true,permissionsToGrant:t.userBrowserSettings.grantedPermissions,runInitScripts:false}),n}static async fromExistingContext({context:t,page:o,attachTimeoutMs:n,storage:r,enricher:i,userBrowserSettings:a,properties:s,logger:l,timingRecorder:c}){let u=o??t.pages()[0];if(!u)throw new Error("No page found in existing context");let d=u.viewportSize();if(!d){let h=Date.now();d=await ge(u.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),{milliseconds:n??1/0,message:"Timed out connecting to the webview"}),c["eval-viewport"]=Date.now()-h;}let m=u?.url(),p=new e({browser:t.browser(),context:t,page:u,baseUrl:m,logger:l,storage:r,enricher:i,userBrowserSettings:a,viewport:d,properties:s,clientCallbacks:void 0,iconKnowledgeBase:null});try{await ge(p.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:c}),{milliseconds:n??1/0,message:"Timed out connecting to the webview"});}catch(h){throw await p.cleanup(),h}return p}async handleAvailableTabsChangeHelper(){try{let t=await Fq(this.context,{getTitles:!0,getPageId:n=>this.getPageId(n)}),o=this.getPageId(this.page);this.clientCallbacks?.onTabsChange?.(t,o);}catch(t){this.logger.error({err:t},"Error sending available tabs to frontend");}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500);}catch(t){this.logger.warn({err:t},"Error handling available tabs change");}}addToPageLoadPromises(t,o){let n=randomUUID(),r=`${t}-${n}`,i=Date.now(),a=false,s=new AbortController;this.pageLoadAbortControllers.add(s);let l=async()=>{try{await ge(o(),{signal:s.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${t} timed out after ${this.pageLoadTimeout}ms`});}catch(c){c.name!=="AbortError"&&!this.closed&&this.logger.error({err:c,promiseKey:r,codePath:t,duration:Date.now()-i},`Page load promise for code path ${t} encountered error`);}finally{delete this.pageLoadPromises[r],this.pageLoadAbortControllers.delete(s),a=true;}};this.pageLoadPromises[r]=l().catch(()=>{}),a&&delete this.pageLoadPromises[r];}handlePageClosedEvent(t){if(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(n=>n.page!==t),this.page!==t){this.logger.debug({url:t.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let o=async()=>{if(this.closed)return;this.logger.info({url:t.url()},"Detected active page was closed, switching to another tab");let n=this.context.pages();for(let r=n.length-1;r>=0;r--){let i=n[r];if(!(!i||i.isClosed()||!Bh(i.url()))){this.logger.info(`Automatically switching to tab ${r} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(r)});break}}};this.addToPageLoadPromises("page closed handler",o);}handleNewPageEvent(t){let o=t.url();this.logger.info({url:o},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(t);}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....");}}handleNewPageEventHelper(t){let o=this.getPageId(t),n="new-page-load-handler";t.on("close",a=>this.handlePageClosedEvent(a)),t.on("framenavigated",a=>this.handleFrameNavigationEvent(a)),t.on("crash",()=>{this.logger.error("Page crashed at the browser level!");});let r=this.context.pages().indexOf(t);if((!this.userBrowserSettings.disableBrowserMonitoring||this.userControlledBrowserSettings.lightweightConsoleLogs)&&!this.userControlledBrowserSettings.disableConsoleLogs&&!this.consoleLogCircuitBreaker.isDisabled()){let a=s=>{this.consoleLogCircuitBreaker.recordActivity({stage:"receive",charCount:s.text().length}),!this.consoleLogCircuitBreaker.isDisabled()&&this.consoleLogCircuitBreaker.run({stage:"serialize",fn:async()=>{await mSe(t,r,this.debugData,s,this.logger,this.userControlledBrowserSettings.lightweightConsoleLogs?{includeArgs:false,maxLogsPerPage:ZW}:void 0)&&this.consoleLogCircuitBreaker.recordBufferOverflow({stage:"serialize",bufferLimit:this.userControlledBrowserSettings.lightweightConsoleLogs?ZW:mD});}});};this.consoleLogListeners.set(t,a),t.on("console",a);}let i=async()=>{this.shouldCaptureNetworkLogs()&&(bq(this.logger,o,this.clientCallbacks?.onNetworkPage),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=ATe(this.clientCallbacks.onNetworkLogs))),await this.ensureNetworkRoutes({page:t,pageId:o}),await this.trackPageVideo(t),await this.loadFrameAndRecordUrl({root:t,codePath:n}),this.handleAvailableTabsChange();};this.addToPageLoadPromises(n,i);}async ensureNetworkRoutes({page:t,pageId:o}){let{extraHeaders:n={}}=this.userControlledBrowserSettings,r=Object.keys(n).length>0;if((this.shouldCaptureNetworkLogs()||r||this.customHeaders.length>0||this.hasActiveRequestInterceptors())&&!this.networkRouteHandlers.has(t)){let a=async(s,l)=>{let c=this.shouldCaptureNetworkLogs(),u=c&&!this.hasActiveRequestRecorders();if(!c&&!this.hasActiveRequestInterceptors()){await s.continue();return}await Tq({pageId:o,route:s,request:l,onHarEntry:c?(d,m)=>{this.redactExtraHeaders(m),this.harBatcher?.fetch({[d]:m}).catch(()=>{});}:void 0,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed,onCollectionTiming:u?d=>this.networkLogCircuitBreaker.record(d):void 0});};this.networkRouteHandlers.set(t,a);try{await t.route("**/*",a);}catch(s){throw this.networkRouteHandlers.delete(t),s}}if(this.customHeaders.length>0&&!this.customHeaderRouteHandlers.has(t)){let a=fSe(this.customHeaders,this.logger);this.customHeaderRouteHandlers.set(t,a);try{await t.route("**/*",a);}catch(s){throw this.customHeaderRouteHandlers.delete(t),s}}}redactExtraHeaders(t){for(let o of t.request.headers)this.extraHeaderNames.has(o.name.toLowerCase())&&(o.value="[redacted]");}handleContextRequestEvent(t){let o=this.harBatcher;if(!(this.cleanedUp||!o||t.resourceType()!=="document"||!t.isNavigationRequest()||t.serviceWorker()||!this.shouldCaptureNetworkLogs()))try{t.frame();}catch{let n=this.capturePopupDocumentRequest({request:t,harBatcher:o});this.pendingPopupDocumentCaptures.add(n),n.finally(()=>{this.pendingPopupDocumentCaptures.delete(n);});}}async capturePopupDocumentRequest({request:t,harBatcher:o}){try{let n=randomUUID(),r=randomUUID(),i=ac({signal:this.popupDocumentAttributionAbortController.signal,timeoutMs:eq}),a=this.context.waitForEvent("page",{predicate:d=>{try{return t.frame().page()===d}catch{return !1}},timeout:eq}).catch(()=>{}),s=await lI(n,t,{abortSignal:i});this.redactExtraHeaders(s);let l=await ge(a,{signal:i,milliseconds:1/0}).catch(()=>{});l?s.pageref=this.getPageId(l):bq(this.logger,n,this.clientCallbacks?.onNetworkPage,this.page);let c=(d,m)=>{o.fetch({[d]:m}).catch(()=>{});};c(r,s);let u=bD({request:t,onHarEntry:c,logger:this.logger,requestRecorders:{},entry:s,requestId:r,neverRedact:!1,isBrowserClosed:()=>this.closed});this.pendingPopupDocumentResponseCollections.add(u),u.finally(()=>{this.pendingPopupDocumentResponseCollections.delete(u);});}catch(n){this.closed||this.logger.warn({err:n},"Failed to capture popup document request in HAR");}}async finishPendingPopupDocumentCaptures(){this.popupDocumentAttributionAbortController.abort(),await Promise.all(this.pendingPopupDocumentCaptures),this.pendingPopupDocumentCaptures.clear();}async finishPendingPopupDocumentResponseCollections(){await Promise.all(this.pendingPopupDocumentResponseCollections),this.pendingPopupDocumentResponseCollections.clear();}async ensureNetworkRoutesForOpenPages(){await Promise.all(this.context.pages().map(async t=>{let o=this.pageIds.get(t);o&&await this.ensureNetworkRoutes({page:t,pageId:o});}));}removeConsoleLogListeners(){for(let t of this.context.pages()){let o=this.consoleLogListeners.get(t);o&&(t.off("console",o),this.consoleLogListeners.delete(t));}}async removeUnusedNetworkRoutes(){let{extraHeaders:t={}}=this.userControlledBrowserSettings,o=Object.keys(t).length>0;this.shouldCaptureNetworkLogs()||o||this.customHeaders.length>0||this.hasActiveRequestInterceptors()||await Promise.all(this.context.pages().map(async n=>{let r=this.networkRouteHandlers.get(n);if(r){this.networkRouteHandlers.delete(n);try{await n.unroute("**/*",r);}catch(i){this.closed||(this.networkRouteHandlers.set(n,r),this.logger.warn({err:i},"Failed to remove browser network debug data route"));}}}));}async removeCustomHeaderRoutes(){await Promise.all(this.context.pages().map(async t=>{let o=this.customHeaderRouteHandlers.get(t);if(o){this.customHeaderRouteHandlers.delete(t);try{await t.unroute("**/*",o);}catch(n){this.closed||(this.customHeaderRouteHandlers.set(t,o),this.logger.warn({err:n},"Failed to remove browser custom header route"));}}}));}scheduleRemoveUnusedNetworkRoutes(){this.removeUnusedNetworkRoutes().catch(t=>{this.logger.warn({err:t},"Failed to stop browser network debug data recording");});}scheduleEnsureNetworkRoutes(){this.closed||this.ensureNetworkRoutesForOpenPages().catch(t=>{this.logger.warn({err:t},"Failed to resume browser network debug data recording");});}shouldCaptureNetworkLogs(){return this.networkLogCircuitBreaker.isDisabled()?false:!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs}hasActiveRequestInterceptors(){return this.hasActiveRequestRecorders()||Object.keys(this.mocks).length>0}hasActiveRequestRecorders(){return Object.keys(this.requestRecorders).length>0}async handleCollectSvgs(t){}handleFrameNavigationEvent(t){let o=t.url(),n=t.parentFrame()?"has-parent":"no-parent",r=`frame-navigation-handler-${o.slice(0,50)} (${n})`;if(!o||o==="about:blank"||!Bh(o))return;t.parentFrame()||this.rootUrlLastChangedAt.set(t.page(),Date.now());let i=this.recentFrameNavigations[r];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[r]=Date.now(),t.parentFrame()||wTe({logger:this.logger,url:o});let a=async()=>{try{if(t.isDetached())return;await this.loadFrameAndRecordUrl({root:t,codePath:r}),this.handleAvailableTabsChange(),!t.parentFrame()&&!t.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(t);}catch(l){this.logger.warn({err:l},"Failed to collect SVGs on page, continuing...");}})();},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(t));}catch(s){s.name!=="AbortError"&&this.logger.warn({err:s,url:o,codePath:r},"Failed to handle frame navigation event, continuing...");}};this.addToPageLoadPromises(r,a);}async injectKnowledgeBaseIntoBrowser(t){try{if(!this.iconKnowledgeBase||await t.evaluate(()=>!!window._momentic._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let n={};Object.keys(this.iconKnowledgeBase).forEach(r=>{this.iconKnowledgeBase[r]?.description&&(n[r]=this.iconKnowledgeBase[r].description);}),await t.evaluate(r=>{let a=window._momentic;a._MOMENTIC_ICON_KNOWLEDGE_BASE=r;},n);}catch(o){this.logger.warn({err:o},"Failed to inject icon knowledge base into browser, continuing...");}}getBrowserCallbacks(){return {runWithMainFrameNavigationLatch:t=>this.runWithMainFrameNavigationLatch(t),waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:t=>this.waitForUrl(t),waitForStability:t=>this.waitForStability(t),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings,isRemoteBrowser:this.isRemoteBrowser},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(t){this.stateManager.setActiveFrameConfig(t);}async reset(t){if(this.debugData.logsPerPage=[],this.pageLoadPromises={},this.pendingMainFrameNavigationObservations=[],this.traceScreenshotCache.clear(),t.newUrl&&(this.baseUrl=t.newUrl),this.closed){await this.restartBrowser(t);return}try{this.requestRecorders={},this.mocks={},this.customHeaders.length=0,this.offline&&(await this.context.setOffline(!1),this.offline=!1),await Promise.all([this.removeUnusedNetworkRoutes(),this.removeCustomHeaderRoutes()]),await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:this.baseUrl,initialNavigation:!0,loadTimeoutMs:t.timeout}),this.stateManager.reset();}catch(o){if(!this.closed)throw o;await this.restartBrowser(t);}}async restartBrowser(t){if(!this.initOptions)throw new Error("Cannot restart browser: no init options available");this.logger.info("Browser closed, restarting from scratch"),await this.finishPendingPopupDocumentCaptures();try{await this.context.close();}catch{}try{await this.browser?.close();}catch{}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next();let o;try{o=await xq(this.initOptions);}catch(n){throw Iq(n,this.initOptions.userBrowserSettings.browserType)}this.browser=o.browser,this.context=o.context,this.page=o.page,this.viewport=o.viewport,this.properties=o.properties,this.cleanedUp=false,this.contextInitialized=false,this.originsVisited=new Set,this.mocks={},this.requestRecorders={},this.customHeaders=[],this.offline=false,this.harBatcher=void 0,this.popupDocumentAttributionAbortController=new AbortController,this.recentFrameNavigations={},this.pageLoadAbortControllers.forEach(n=>n.abort()),this.pageLoadAbortControllers.clear(),this.pageLoadAbortListenerCleanup=void 0,await this.trackPageVideo(this.page),await this.initialize({grantPermissions:true,permissionsToGrant:this.initOptions.userBrowserSettings.grantedPermissions,runInitScripts:false}),await this.navigate({url:this.baseUrl,initialNavigation:true,loadTimeoutMs:t.timeout}),this.stateManager.reset();}async clearHighlights(){try{await ge(Mq(this.getBrowserCallbacks()),{milliseconds:ko});}catch(t){this.logger.debug({err:t},"Failed to clear highlights, continuing...");}}async cleanup(t={}){this.abortSignal=void 0,this.cleanedUp=true,await this.finishPendingPopupDocumentCaptures(),this.networkLogCircuitBreaker.dispose(),this.consoleLogCircuitBreaker.dispose(),t.saveRemoteVideos??true?this.startPendingRemoteVideoSaves():this.pendingRemoteVideoSaves.splice(0);try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(n=>n.abort()),this.pageLoadAbortControllers.clear(),this.originsVisited.clear(),await this.context.close();}catch(n){this.logger.warn({err:n},"Error cleaning up browser, continuing...");}try{await this.finishPendingRemoteVideoSaves(),await this.browser?.close();}catch(n){this.logger.warn({err:n},"Error cleaning up browser, continuing...");}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next(),this.browser=null;}get closed(){return this.cleanedUp||this.context.pages().every(t=>t.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(t,o,n){return de({name:"browser.ensureMomenticBrowserScriptsLoaded",serviceName:"browser",fn:()=>this.ensureMomenticBrowserScriptsLoadedHelper(t,o,n)})}async ensureMomenticBrowserScriptsLoadedHelper(t,o,n){let r=Date.now(),i=0,a=0;for(;Date.now()-r<Kv;){a++,n?.throwIfAborted();try{if(await Or({fn:()=>{let c=window._momentic;return !!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:ko,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad({signal:n}),root:t,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){o.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await gt(Qr),a%2===0&&o.warn("Still waiting for momentic browser scripts to load...");}throw new Error(`Failed to load momentic browser scripts on page ${t.url()}`)}async html(){let t=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(t,this.logger),Or({root:t,fn:()=>{let n=window._momentic;if(!n.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return n.getFullHtmlTree()},arg:void 0,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let o=window._momentic,n=[],r=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(i=>{r.set(i,{value:i.style.getPropertyValue("caret-color"),priority:i.style.getPropertyPriority("caret-color")}),i.style.setProperty("caret-color","transparent","important");}),n.push(()=>{for(let[i,a]of r)i.style.setProperty("caret-color",a.value,a.priority);}),o._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let i of n)i();delete o._MOMENTIC_SCREENSHOT_CLEANUP;};},void 0,"stabilizing page for screenshot");}catch(t){(!(t instanceof Error)||!t.message.includes("Execution context was destroyed"))&&this.logger.warn({err:t},"Failed to stabilize page before screenshot, continuing...");}}async removeScreenshotStabilization(){return de({name:"browser.removeScreenshotStabilization",serviceName:"browser",fn:()=>this.removeScreenshotStabilizationHelper()})}async removeScreenshotStabilizationHelper(){try{await this.evaluateFunctionInPage(()=>{window._momentic._MOMENTIC_SCREENSHOT_CLEANUP?.();},void 0,"removing screenshot stabilization");}catch{}}async screenshot(t){let o=()=>fi({logger:this.logger,operation:"screenshot",trace:{name:"browser.screenshot"},fn:()=>this.screenshotHelper(t)});return t.traceScreenshotRole?jn().startAsyncSpan("GET_PAGE_SCREENSHOT",o,{}):o()}async screenshotHelper(t){let{retries:o=1,stabilizeBeforeScreenshot:n=false}=t,r=this.page,i=r.url();if(t.traceScreenshotRole==="before"){let s=this.traceScreenshotCache.take({clearHighlights:t.clearHighlights===true,page:r,quality:t.quality,url:i,viewport:this.getViewport()});if(s&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath)return s}else this.traceScreenshotCache.clear();n&&await de({name:"browser.stabilizePageForScreenshot",serviceName:"browser",fn:()=>this.stabilizePageForScreenshot()});let a=Date.now();try{await this.waitForRootNavSettle(),await this.fixViewportForNewHeadless();let s=await this.captureScreenshot({...t,retries:o});if(s.byteLength>5e6)this.logger.warn("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(s.length===0)throw new Error("Got empty screenshot");if(t.traceScreenshotRole==="after"&&r===this.page&&i===r.url()&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath){let l=this.getViewport();this.traceScreenshotCache.store({buffer:s,clearHighlights:t.clearHighlights===!0,page:r,quality:t.quality,url:i,viewport:l});}return s}catch(s){if(o<=0||s.message.includes("has been closed"))throw s;return this.logger.warn({err:s,pageUrl:i},"Failed taking screenshot, retrying..."),await gt(Ap),this.screenshotHelper({...t,retries:o-1})}finally{Date.now()-a>1e3&&this.logger.warn({pageUrl:i,duration:Date.now()-a},"Screenshot took longer than expected"),n&&await this.removeScreenshotStabilization();}}async captureScreenshot({locator:t,quality:o,saveToDiskPath:n,timeout:r,respectActiveFrame:i,clearHighlights:a=false,boundingBoxOverride:s}){a&&await de({name:"browser.screenshot.clearHighlights",serviceName:"browser",fn:()=>this.clearHighlights()}),i&&this.stateManager.frameConfig&&(t=await(await this.getActivePageOrFrame()).frameElement());let l=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:o,optimizeForSpeed:true},timeout:r??Cbe});return de({name:"browser.screenshot.processImage",serviceName:"browser",attributes:{"momentic.screenshot_base64_length":l.data.length},fn:async c=>{let u=await this.processCapturedScreenshotImage({screenshotData:l.data,locator:t,boundingBoxOverride:s,saveToDiskPath:n});return c?.setAttributes({"momentic.screenshot_cropped":u.cropped,"momentic.screenshot_raw_height":u.rawHeight,"momentic.screenshot_raw_width":u.rawWidth,"momentic.screenshot_resized":u.resized,"momentic.screenshot_source":"cdp",...u.viewportHeight===void 0?{}:{"momentic.screenshot_viewport_height":u.viewportHeight},...u.viewportWidth===void 0?{}:{"momentic.screenshot_viewport_width":u.viewportWidth}}),u.buffer}})}async processCapturedScreenshotImage({screenshotData:t,locator:o,boundingBoxOverride:n,saveToDiskPath:r}){try{let i=Buffer.from(t,"base64"),{width:a,height:s}=wD(i),{width:l,height:c}=this.getViewport()??{},u=i,d=a,m=s,p=!1;if(l&&c&&(a!==l||s!==c)&&(u=await QSe(i,{width:l,height:c}),d=l,m=c,p=!0),r&&writeFileSync(r,u),this.lastScreenshotForRecording=u,!o&&!n)return {buffer:u,cropped:!1,rawHeight:s,rawWidth:a,resized:p,viewportHeight:c,viewportWidth:l};let h=n??(o?await o.boundingBox({timeout:ft}):void 0);if(!h)throw new Error("Attempted to screenshot an element that is not visible on the page");if(!h.width||!h.height)throw new Error("Attempted to screenshot an element with zero width or height");let g=Math.max(0,Math.min(Math.floor(h.x),d-1)),f=Math.max(0,Math.min(Math.floor(h.y),m-1)),y=Math.max(1,Math.min(Math.floor(h.width),d-g)),b=Math.max(1,Math.min(Math.floor(h.height),m-f));try{return {buffer:await ZSe(u,{x:g,y:f,width:y,height:b}),cropped:!0,rawHeight:s,rawWidth:a,resized:p,viewportHeight:c,viewportWidth:l}}catch(S){throw new Error(`Failed taking element screenshot at coordinates (${g}, ${f}) with size (${y}, ${b}): ${S}`)}}finally{o&&"dispose"in o&&await o.dispose();}}getViewport(){if(this.viewport)return this.viewport;let t=this.page.viewportSize();return t||null}async getUserAgent(){try{return await Or({root:this.page,fn:()=>navigator.userAgent,arg:void 0,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"reading the browser user agent"})}catch(t){return this.logger.warn({err:t},"Failed to read browser user agent"),pD}}async navigate({url:t,initialNavigation:o=false,loadTimeoutMs:n=this.pageLoadTimeout}){eie(t)&&(t=new URL(t,this.baseUrl).toString());let r=Date.now();o||(await this.waitForPageLoad(),await this.waitForStability());let i=false,a;for(let l=0;l<3;l++)try{await this.page.goto(t,{timeout:n,waitUntil:"domcontentloaded"}),i=!0;break}catch(c){if(a=c,this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(a)){i=true,this.logger.warn({err:a,url:t},"DOMContentLoaded timed out during navigation, continuing due to browser setting");break}let u=a.message.includes("net::ERR_CONNECTION_REFUSED");if(this.logger.warn({err:c},`Error occurred during navigation${l<2&&!u?", retrying...":" (fatal)"}`),u)break;await gt(Qr);try{await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:n});}catch(d){this.logger.warn({err:d},"Page.stopLoading failed during navigation retry");}}if(!i)throw new ne("UserInfrastructureError",a?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:t},`Navigation complete in ${Math.floor(Date.now()-r)}ms`);let s=this.url();if(Obe.has(s))throw new ne("UserInfrastructureError",`${t} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless();}async type(t,o={},n=false){await fi({attributes:uq(t,o),logger:this.logger,operation:"type",targetMode:"focused",trace:{name:"browser.type",attributes:{"momentic.type.text_length":t.length,"momentic.type.delay_ms":o.delay??p_,"momentic.type.clear_content":o.clearContent??false,"momentic.type.press_enter":o.pressEnter??false,"momentic.type.require_active_element":n}},fn:()=>this.directTypeHelper(t,o,n)});}async getActiveElementHandle(t){return t.evaluateHandle(()=>document.activeElement)}async getActiveElement(t){try{return await Or({root:t,fn:()=>{let n=document.activeElement?.textContent??void 0;n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]");let r=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(r=!0);let a=document.activeElement;return a&&"selectionStart"in a&&typeof a.selectionStart=="number"&&typeof a.selectionEnd=="number"&&a.selectionStart!==a.selectionEnd&&(r=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n,hasTextSelected:r}:{hasTextSelected:r}},arg:void 0,timeout:ko,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(o){this.logger.warn({err:o},"Failed to get active element");return}}async directTypeHelper(t,o={},n=false){let r=await this.getActivePageOrFrame();await nTe({root:r,text:t,options:o,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(r);if(n){let l=Date.now();for(;Date.now()-l<this.smartWaitingTimeout&&(!i||i.tag==="body");)await gt(Ap),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(r);i||this.logger.warn("No active element found to type into, attempting anyways");}if(o.fill){await r.locator(":focus").first().fill(t,{force:o.force,timeout:Go}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}let a=o.delay??p_,s=i?.tag==="input"||i?.tag==="textarea";if(o.clearContent)if(s||o.forceClearContent)if(this.properties.isAndroid&&!s&&i?.textContent){this.logger.info("Clearing content using backspaces");let l=0,c=i.textContent?.length;for(;c&&l<50;){l++;let u=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(u),i=await this.getActiveElement(r),c=i?.textContent?.length;}c&&this.logger.warn("Content still remains after clearing existing");}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):this.operatingSystem==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.waitForTimeout(a),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(a);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(t,{delay:a}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();}async scrollIntoViewIfNeeded(t){try{await t.scrollIntoViewIfNeeded({timeout:Go});}catch(o){this.logger.warn({err:o},"Failed to scroll into view, trying with raw JS");try{await t.evaluate(async n=>{let r=n.scrollTop;n.scrollIntoView({block:"nearest"}),await new Promise(a=>setTimeout(a,250));let i=Date.now();for(;Date.now()-i<1e3;){let a=n.scrollTop;if(a===r)break;r=a,await new Promise(s=>setTimeout(s,250));}},void 0,{timeout:Go});}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...");}}}async highlightA11yId(t){try{let{resolution:o}=await this.createTargetFromA11yId({id:t,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(o.locator),!0}catch(o){return this.logger.debug({err:o,id:t},"Failed to highlight target"),false}}async highlight(t){return RD({locator:t,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(t){try{let o=new URL(t).origin;if(o==="null")return;this.originsVisited.add(o);}catch(o){this.logger.warn({err:o},"Failed to record origin visited");}}async waitForPageLoad(t){return de({name:"browser.wait_for_page_load",serviceName:"browser",fn:()=>this.waitForPageLoadHelper(t)})}async runWithMainFrameNavigationLatch({page:t,action:o}){let n=()=>{},r=new Promise(u=>{n=u;}),i=u=>{u.parentFrame()||n(true);};t.on("framenavigated",i);let a;try{a=await o();}catch(u){throw t.off("framenavigated",i),u}if(t.isClosed())return t.off("framenavigated",i),a;let s=performance.now(),l=Promise.race([r,gt(Ap,this.abortSignal).then(()=>false,()=>false)]).then(u=>({observed:u,durationMs:performance.now()-s})).finally(()=>t.off("framenavigated",i)),c={page:t,observation:l};return this.pendingMainFrameNavigationObservations.push(c),t.isClosed()&&(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(u=>u!==c),t.off("framenavigated",i)),a}consumeMainFrameNavigationObservations(t){let o=[],n=[];for(let r of this.pendingMainFrameNavigationObservations)r.page===t?o.push(r.observation):r.page.isClosed()||n.push(r);return this.pendingMainFrameNavigationObservations=n,Promise.all(o)}async settleObservedMainFrameNavigation({observationsPromise:t,signal:o}){let n=performance.now(),r=await t,i=r.some(s=>s.observed),a=0;if(i){let s=performance.now();await this.waitForPageLoad({signal:o}),a=performance.now()-s;}return {observed:i,attributes:{"momentic.stability.navigation_latch_count":r.length,"momentic.stability.navigation_observed":i,"momentic.stability.navigation_detection_duration_ms":Math.max(0,...r.map(s=>s.durationMs)),"momentic.stability.navigation_observation_wait_duration_ms":Math.max(0,performance.now()-n-a),"momentic.stability.navigation_page_load_duration_ms":a}}}async waitForPageLoadHelper(t){let o=t?.signal??this.abortSignal;await this.awaitOutstandingPageLoadPromises(o)&&await this.waitForRootNavSettle(o);}async awaitOutstandingPageLoadPromises(t){return de({name:"browser.awaitOutstandingPageLoadPromises",serviceName:"browser",fn:()=>this.awaitOutstandingPageLoadPromisesHelper(t)})}async awaitOutstandingPageLoadPromisesHelper(t){let o=Date.now(),n=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises),i=-1,a=0;for(;n.length!==0;){if(t?.throwIfAborted(),Date.now()-o>this.pageLoadTimeout){this.logger.warn({outstandingPromiseKeys:r,outstandingPromises:n},"Timed out waiting on page load promises, continuing anyways...");break}if(Date.now()-i<20&&(a++,a>2))return this.logger.error({outstandingPromiseKeys:r,outstandingPromises:n},"Synchronous waiting loop detected, exiting page load wait"),false;i=Date.now(),await Promise.allSettled(n),n=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises);}return true}async clearAuthState(t){await this.context.clearCookies();for(let r of this.originsVisited)this.logger.debug({origin:r},`Clearing data using CDP for origin ${r}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:r,storageTypes:"all"},timeout:ko}),this.originsVisited.delete(r);let o=this.context.pages().indexOf(this.page),n=[...this.context.pages()];for(let r=0;r<n.length;r++){let i=n[r];if(i.isClosed())continue;let a=i.url();try{this.originsVisited.delete(new URL(a).origin);}catch{}await dSe(i,this.logger),r!==o&&t.closeNonActiveTabs&&(this.logger.info(`Closing tab ${r} with URL ${a}`),await i.close());}}async loadAuthState(t){await this.waitForPageLoad(),await this.waitForStability(),!t||Object.keys(t).length===0?await this.clearAuthState({closeNonActiveTabs:false}):await this.loadAuthStateHelper(t),await this.refresh(),await this.waitForStability();}async loadAuthStateHelper(t){let o=[];for(let l of t.cookies??[]){let c=await this.setCookie(l);o=o.concat(c);}this.logger.info(`Loaded ${t.cookies?.length??0} cookies`);let n=0,r=new Map;await this.cdpClient.withDomainEnabled({domain:"DOMStorage",timeout:ko,fn:async()=>{for(let l of t.origins??[])for(let c of l.localStorage)try{await this.cdpClient.send({timeout:ko,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(l.origin).origin,isLocalStorage:!0},key:c.name,value:c.value}}),n++;}catch{let u=new URL(l.origin).origin,d=r.get(u)??[];d.push(c),r.set(u,d);continue}}});for(let[l,c]of r)await this.loadLocalStorageThroughPage({origin:l,entries:c}),n+=c.length;this.logger.info(`Loaded ${n} local storage entries`);let i={},a=0;for(let l of t.origins??[])if(l.sessionStorage&&l.sessionStorage.length>0){let c={};for(let u of l.sessionStorage)c[u.name]=u.value,a++;i[new URL(l.origin).origin]=c;}a>0&&await this.context.addInitScript(({storageByOrigin:l,markerKey:c})=>{let u=window.location.origin,d=l[u];if(d&&!window.sessionStorage.getItem(c)){for(let[m,p]of Object.entries(d))window.sessionStorage.setItem(m,p);window.sessionStorage.setItem(c,"1");}},{storageByOrigin:i,markerKey:Oq}),this.logger.info(`Loaded ${a} session storage entries`);let s=t.idb;s&&Object.keys(s).length>0&&(await uSe(this.page,s,this.logger),this.logger.info(`Loaded ${Object.keys(s??{}).length} indexedDB databases`));}async loadLocalStorageThroughPage({origin:t,entries:o}){let n=await this.context.newPage();try{if(await n.route(`${t}/**`,async r=>{await r.fulfill({status:200,contentType:"text/html",body:"<!doctype html>"});}),await n.goto(t,{waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),new URL(n.url()).origin!==t)throw new Error(`Could not initialize browser storage for ${t}`);await n.evaluate(r=>{for(let{name:i,value:a}of r)window.localStorage.setItem(i,a);},o);}finally{await n.close();}}async saveAuthState(){let o=0,n=null;for(;o<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let r=await this.context.storageState();return r.idb=await cSe(this.page,this.logger),await GSe(this.page,r,this.logger),r}catch(r){if(n=r,o++,o<=2){this.logger.warn({err:r,retryCount:o,maxRetries:2},`Error saving auth state, retrying (${o}/2)...`);let i=Math.pow(2,o)*100;await new Promise(a=>setTimeout(a,i));}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new ne("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(t){return Fq(this.context,{...t,getPageId:o=>this.getPageId(o)})}getPageId(t){let o=this.pageIds.get(t);return o||(o=randomUUID(),this.pageIds.set(t,o)),o}getActivePageIndex(){return this.context.pages().indexOf(this.page)}saveA11yDetailsToCache(t,o){o.content=t.content,o.name=t.name,o.role=t.role,o.numChildren=t.children.length,delete o.serializedForm,delete o.nodeOnlySerializedForm;}async updateCacheWithNewNodeDetails({node:t,target:o,locator:n,originalElementLocationResult:r,allowNotActionableNodesOverride:i,logger:a=this.logger,skipSavingVisualAttributes:s=false,acceptElementMovedError:l=false}){if(t&&this.saveA11yDetailsToCache(t,o),o.frameCache=this.stateManager.saveAutoFrameCacheDetails(o.frameCache),n)try{let c=await this.fetchHtmlAttributes({locator:n,logger:a,originalElementLocationResult:r,allowNotActionableNodesOverride:i});c?(o.generatedSelectors=c.generatedSelectors,o.serializedHtml=c.serializedHtml,o.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,o.hybridSelector=c.hybridSelector,o.svgPathHash=c.svgPathHash):a.warn("Got undefined HTML attributes when trying to update cache");}catch(c){if(c instanceof Mu&&l)a.warn({err:c},"Suppressing ElementMovedError due to acceptElementMovedError");else {if(c instanceof Pb)throw a.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;a.warn({err:c},"Failed to fetch HTML attributes for target, continuing...");}}try{s||await this.saveElementVisualAttributes({target:o,locator:n,originalElementLocationResult:r,logger:a});}catch(c){a.debug({err:c},"Failed to save element visual details, continuing...");}}async saveElementVisualAttributes({target:t,locator:o,logger:n}){if(!o)return;let r=await o.boundingBox({timeout:ko});if(!r||!r.width||!r.height){n.debug("Skipping visual attributes saving for element with no bounding box after action"),t.boundingBox=void 0;return}let i=this.getViewport();if(r.x<0||r.y<0||!i||r.x+r.width>i.width||r.y+r.height>i.height||(t.boundingBox=r,this.userBrowserSettings.disableBrowserMonitoring))return;let a=jn();if(a.parent&&x8(a.parent)&&a.storeTraceAsset){let s=randomUUID();a.parent.elementScreenshotSnapshotId=s,(async()=>{try{let l=await this.screenshot({locator:o,quality:75,retries:0,boundingBoxOverride:r});a.storeTraceAsset?.({snapshotId:s,data:l});}catch(l){this.logger.warn({err:l,screenshotId:s},"Failed to capture element screenshot for trace");}})();}}async resolveAutoFrameCache(t){return this.stateManager.resolveAutoFrameCache(t)}async getElementRequiredValues({logger:t,boundingBox:o,locator:n,requirements:r}){let i={},a=!!r?.position&&r.position!=="irrelevant",s=!!r?.shape&&r.shape!=="irrelevant";if(a||s){if(!o||!o.width||!o.height)throw new ne("ActionFailureError","Element does not have a bounding box as required");s&&(i.shape={width:o.width,height:o.height,tolerance:r.shape}),a&&(i.position={x1:o.x,y1:o.y,x2:o.x+o.width,y2:o.y+o.height,tolerance:r.position});}if(r?.text){let l=await n.evaluate(c=>window._momentic.getElementTextContentForCache(c),void 0,{timeout:ft});l!==void 0&&(i.text=l.trim());}if(r?.attributes&&r.attributes.length>0){let l={};for(let c of r.attributes){let u=c.trim().toLowerCase();if(!(!u||Ic.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await n.getAttribute(u,{timeout:ft});d!==null&&(l[c]=d);}catch(d){t.warn({err:d,attr:c},"Failed to fetch required attribute, continuing...");}}i.attributes=l;}return i}async getAdditionalDetailsForElement({mainLocator:t,mainBoundingBox:o,additionalElement:n,root:r,logger:i}){let a=this.stateManager.a11yIdToNodeMap[n.id];if(!a)return;let s=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:r,node:a});if(t.contentFrame!==s.contentFrame)return;let l=await this.fetchHtmlAttributes({locator:s,logger:i});if(!l?.generatedSelectors||l.generatedSelectors.length===0)return;let c=await s.boundingBox({timeout:ft}),u={selectors:l.generatedSelectors,relativeAngleRadians:VSe(o,c),relativeDistance:WSe(o,c)};return n.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:s,boundingBox:c,requirements:n.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:t,mainLocator:o,mainBoundingBox:n,additionalElements:r,root:i,logger:a}){let s=new Set,l=[];for(let d of r)d.id!==t&&(s.has(d.id)||(s.add(d.id),l.push(d)));let c=await Promise.allSettled(l.map(d=>this.getAdditionalDetailsForElement({mainLocator:o,mainBoundingBox:n,additionalElement:d,root:i,logger:a}))),u=[];for(let[d,m]of c.entries()){let p=l[d];if(p){if(m.status==="fulfilled"){let h=m.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:m.reason,additionalElement:p},"Failed to fetch additional element details, continuing...");}}return u}async updateCacheWithAdditionalRequirements({mainElementId:t,requirements:o,additionalElements:n,target:r,locator:i,root:a,logger:s}){let l=await i.boundingBox({timeout:ft});if(o)try{r.requirements=await this.getElementRequiredValues({logger:s,boundingBox:l,locator:i,requirements:o});}catch(c){s.warn({err:c},"Failed to generate required values for target");}n&&n.length>0&&(r.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:t,mainBoundingBox:l,mainLocator:i,additionalElements:n,root:a,logger:s}));}async createTargetFromA11yId({id:t,description:o,targetSource:n,skipSaveToCache:r,skipSavingVisualAttributes:i,logger:a=this.logger,requirements:s,additionalElements:l,acceptElementMovedError:c}){if(t<0)throw new ne("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let u=this.stateManager.a11yIdToNodeMap[t];if(!u)throw new ne("InternalWebAgentError",`Resolving target failed because id ${t} does not exist on the page. This generally indicates an incorrect element was targeted.`);let d=this.stateManager.frameConfig,m,p,h,g;if(this.userBrowserSettings.autoExpandIframes&&!d&&u.parentFrame){let v=u.parentFrame,{cache:R,config:w}=await this.stateManager.getAutoFrameDetailsFromHandle(v);p=R,h=w,m=w.frame,g="auto iframe";}else u.parentFrame&&d?(h=d,m=await this.getActivePageOrFrame(),g="hardcoded url already on the state manager"):(m=await this.getActivePageOrFrame(),g="should not be possible");let f=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:m,node:u}),y=await f.evaluate((v,{bannedAttributes:R})=>window._momentic.generateCommonLocationResultMetadata(v,{bannedAttributes:R}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:Go}),b={id:t,inputDescription:o??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:fo(a),frameCache:p},S,E=false;r||(h&&(a.info({frameConfigSource:g,frameConfig:bTe(h)},"A11y node was resolved to a target within an iframe"),S=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(h),E=true),await this.updateCacheWithAdditionalRequirements({mainElementId:t,requirements:s,additionalElements:l,target:b,root:m,locator:f,logger:a}),await this.updateCacheWithNewNodeDetails({node:u,target:b,locator:f,logger:a,allowNotActionableNodesOverride:true,skipSavingVisualAttributes:i,originalElementLocationResult:y,acceptElementMovedError:c}));try{return {resolution:{locator:f,a11yNode:u,displayString:u.getNodeOnlySerializedForm(),originalElementLocationResult:y,decisions:[]},target:b,frameConfig:h,frameConfigSource:g}}finally{E&&this.stateManager.setActiveFrameConfig(S);}}async resolveTarget(t,o={}){return fi({logger:this.logger,operation:"resolve_target",trace:{name:"browser.resolve_target"},fn:()=>this.resolveTargetWithRetries(t,o)})}async resolveTargetWithRetries(t,o={}){let{logger:n=this.logger,signal:r=this.abortSignal,stats:i,allowNotActionableNodesOverride:a,skipWaitForPageLoad:s,acceptElementMovedError:l}=o;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,h=false,g=Date.now();for(;Date.now()-g<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),h=!0;break}catch(f){p=f,await gt(Qr,r);}if(!h)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,n,r);let u=Date.now(),d=0,m;for(;Date.now()-u<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),d++,i&&(i.attempts=d);let p=d===2||Date.now()-u>this.smartWaitingTimeout-2e3&&d%2===0;try{m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:!0,shouldLogOnFailure:p,logger:n,allowNotActionableNodesOverride:a,signal:r,skipWaitForPageLoad:s,acceptElementMovedError:l});break}catch(h){if(h instanceof uE)break;r?.throwIfAborted(),p&&n.warn({err:h},`Could not resolve target using primary cache only (x${d})`),await gt(Qr,r);}}return m||(i&&(i.attempts+=1),m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:false,logger:n,signal:r,allowNotActionableNodesOverride:a,acceptElementMovedError:l}),n.info({decisions:m.decisions},"Target resolution succeeded after waiting")),m}async resolveTargetHelper({root:t,target:o,stats:n,primaryOnly:r,logger:i,signal:a,allowNotActionableNodesOverride:s,shouldLogOnFailure:l,skipWaitForPageLoad:c,skipSavingVisualAttributes:u,acceptElementMovedError:d}){let m=[],p;if(c||await this.waitForPageLoad(),!this.userBrowserSettings.visualActions){let g={};await this.stateManager.getFrameTreeAndAddMomenticIds({logger:i,signal:a,logTimings:g}),Object.values(g).some(f=>f>750)&&i.warn({logTimings:g},"Momentic ID attach took a long time");}let h;if(o.generatedSelectors||o.hybridSelector){let g;try{g=await this.resolveTargetWithPrimaryMethods({root:t,target:o,stats:n,logger:i,allowNotActionableNodesOverride:s,shouldLogOnFailure:l,skipSavingVisualAttributes:u,acceptElementMovedError:d});}catch(f){h=f,f instanceof ca&&(m.push(...f.decisions),p=f.cacheMissReason);}if(g)return {...g,decisions:[...m,...g.decisions]};r||(m.push({type:"CSS_SELECTOR",matched:false,reason:h?.message,selectors:cloneDeep(o.generatedSelectors??[])}),o.generatedSelectors=void 0,o.hybridSelector=void 0);}if(r)throw h;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let g=await this.resolveTargetWithSecondaryMethods({root:t,target:o,decisions:m,logger:i,signal:a,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:u,acceptElementMovedError:d});if(g)return o.targetSource="HEURISTIC_HEALED",o.targetUpdateTime=new Date().toISOString(),o.targetUpdateLoggerTags=fo(i),g;p=p??"secondary-resolution-failed";}throw new ca("Could not find any relevant node given target",m,p)}async resolveTargetWithPrimaryMethods({root:t,target:o,stats:n,logger:r,allowNotActionableNodesOverride:i,shouldLogOnFailure:a,skipSavingVisualAttributes:s,acceptElementMovedError:l}){if(!o.nodeOnlySerializedHtml)throw new uE("Insufficient data to resolve target using primary methods (missing node HTML)");let c={x:0,y:0};if(mI(t)){let M=await(await t.frameElement()).boundingBox();M&&(c=M);}let u=this.userControlledBrowserSettings.hybridSelectorMode??Ez,d=o.boundingBox,m=!!d?.width&&!!d?.height,p=m&&d?.x!==void 0&&d?.y!==void 0?{x:d.x,y:d.y,width:d.width,height:d.height}:void 0,h=!i&&m,g={ldistThreshold:Pbe,disableLdistCacheValidation:this.userControlledBrowserSettings.disableLdistCacheValidation,requireBoundingBox:h,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requirements:o.requirements,additionalElements:o.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},rootBoundingBox:c,cachedBoundingBox:p},f={cssParams:{selectors:o.generatedSelectors??[],cachedElementSerialized:o.nodeOnlySerializedHtml,opts:g,svgPathHash:o.svgPathHash??void 0},hybridParams:u&&o.hybridSelector?{nodes:o.hybridSelector,cachedElementSerialized:o.nodeOnlySerializedHtml,opts:g,svgPathHash:o.svgPathHash??void 0}:void 0},{css:y,hybrid:b}=await Or({fn:async M=>{let z=Date.now()+1e3;for(;!document.documentElement&&!(Date.now()>=z);)await new Promise(V=>setTimeout(V,10));return window._momentic.evaluatePrimaryCaches(M)},arg:f,root:t,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"});n&&(n.evaluationDurationMs+=(y?.evaluationDurationMs??0)+(b?.evaluationDurationMs??0));let S={rootUrl:t.url(),rootType:mI(t)?"frame":"page",frameDetached:mI(t)?t.isDetached():void 0},E=y.error?new Error(y.error):void 0,v=b?.error?new Error(b.error):void 0;E&&r.error({err:E,browserEvaluation:y.diagnostics,...S},"Cache evaluation errored unexpectedly (CSS)"),v&&r.error({err:v,browserEvaluation:b?.diagnostics,...S},"Cache evaluation errored unexpectedly (Hybrid)");let R,w,P=[];if((u==="prefer"||u==="always")&&b?.result){R=b.result;let M={type:"HYBRID_SELECTOR",matched:true,logs:b.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};P.push(M),w="HYBRID_SELECTOR";}else {if(u==="always"&&!b?.result)throw P.push({type:"HYBRID_SELECTOR",matched:false,reason:b?.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:b?.logs}),new ca("Hybrid selector failed to find an element",P,b?.cacheMissReason,v?{cause:v}:void 0);if(y?.result){R=y.result;let M=`${R.workingSelectors.length} CSS selectors matched the following element: ${R.serializedElement}`,z=R.workingSelectors.slice(0,5);P.push({type:"CSS_SELECTOR",matched:true,logs:y.logs,reason:M,selectors:z}),r.debug({reason:M,workingSelectors:z},"Resolved with CSS selectors"),w="CSS_SELECTOR";}else throw P.push({type:"CSS_SELECTOR",matched:false,reason:y.error?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:y.logs}),b&&P.push({type:"HYBRID_SELECTOR",matched:false,reason:b.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:b.logs}),new ca("Cache evaluation failed",P,y.cacheMissReason==="no-selectors"&&b?.cacheMissReason?b.cacheMissReason:y.cacheMissReason,v||E?{cause:v??E}:void 0)}let I,_,O;if(this.userBrowserSettings.visualActions){let M=R.mPath;if(!M)throw new Error("Found element did not have an mPath despite using visual actions");let z=M.join(" > ");I=t.locator(z),_=this.stateManager.getNodeUsingMPathSelector(z);}else if(R.dataMomenticId!==void 0)O=parseInt(R.dataMomenticId),_=this.stateManager.getNodeUsingDataMomenticId(O),I=t.locator(vp(O));else if("workingSelectors"in R)I=t.locator(R.workingSelectors[0]);else throw new ne("InternalWebAgentError","Received an element resolution result with no identifying attributes");let N=cloneDeep(o);await this.updateCacheWithNewNodeDetails({node:_,target:o,locator:I,logger:r,originalElementLocationResult:R,allowNotActionableNodesOverride:i,skipSavingVisualAttributes:s,acceptElementMovedError:l});let D=diff(N,o);return D&&Object.keys(D).length>0&&(o.cacheResolutionUpdateTime=new Date().toISOString(),o.cacheResolutionUpdateLoggerTags=fo(r),o.cacheResolutionUpdateSource=w),{a11yNode:_,displayString:R.serializedElement,locator:I,decisions:P,originalElementLocationResult:R,revalidator:async()=>{await kq({initialLocationResult:R,cacheEvaluationParams:f,locator:I,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}async resolveHardcodedCssSelector(t){let{selector:o,signal:n=this.abortSignal,timeoutMs:r=this.smartWaitingTimeout}=t,i=await this.getActivePageOrFrame(),a=Date.now(),s=0,l,c=[];for(;Date.now()-a<r;){n?.throwIfAborted(),s++;let u=i.locator(o),d;try{await u.waitFor({state:"attached",timeout:ko});let m=await u.evaluate((p,{bannedAttributes:h})=>window._momentic.generateCommonLocationResultMetadata?.(p,{bannedAttributes:h}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:Go});return d=m?.serializedElement??"unknown element",c.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${o} matched an element on the page.`}),{locator:u,originalElementLocationResult:m,displayString:d,decisions:c}}catch(m){let p=m.message;l=new ne("ActionFailureError",`CSS selector '${o}' failed to resolve after ${s} attempts: ${p.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":p}`),await gt(Qr,n);}}throw l}async resolveTargetWithSecondaryMethods(t){if(!t.target.boundingBox)return;let{x:o,y:n,width:r,height:i}=t.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(t);if(!a)return;let s=await a.locator.boundingBox({timeout:ft});if(!s){this.logger.debug({proposedNode:a.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:l,y:c,width:u,height:d}=s;if(Math.abs(u-r)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:r,newH:d,oldH:i,proposedNode:a.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!o||!n||!l||!c){this.logger.debug({oldX:o,oldY:n,newX:l,newY:c,proposedNode:a.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(l-o)>100||Math.abs(c-n)>100){this.logger.debug({newX:l,newY:c,oldX:o,oldY:n,proposedNode:a.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return a}async resolveTargetWithSecondaryMethodsHelper({root:t,target:o,decisions:n,logger:r,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s,acceptElementMovedError:l}){if(o.nodeOnlySerializedHtml&&o.nodeOnlySerializedHtml.trim().length<_be)n.push({type:"HTML_DISTANCE",matched:false,reason:"Refusing to attempt HTML comparison since the saved element is too short."});else if(o.nodeOnlySerializedHtml&&o.nodeOnlySerializedHtml.length>50){let c={x:0,y:0};if(mI(t)){let u=await(await t.frameElement()).boundingBox();u&&(c=u);}try{let u=await Or({fn:d=>window._momentic.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:o.nodeOnlySerializedHtml,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes,requirements:o.requirements,additionalElements:o.additionalElements,rootBoundingBox:c,svgPathHash:o.svgPathHash??void 0},timeout:Go,root:t,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,m,p;if(d)m=this.stateManager.getNodeUsingDataMomenticId(d),p=t.locator(vp(d));else if(u.mPath){let y=u.mPath.join(" > ");m=this.stateManager.getNodeUsingMPathSelector(y),p=t.locator(y);}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;r.warn({result:u,originalTarget:o,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=cloneDeep(o);await this.updateCacheWithNewNodeDetails({node:m,target:o,locator:p,logger:r,originalElementLocationResult:u,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s,acceptElementMovedError:l});let f=diff(g,o);return f&&Object.keys(f).length>0&&(o.cacheResolutionUpdateTime=new Date().toISOString(),o.cacheResolutionUpdateLoggerTags=fo(r),o.cacheResolutionUpdateSource="HTML_DISTANCE",r.info({diffs:f,result:u},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:o.nodeOnlySerializedHtml}),{locator:p,a11yNode:m,displayString:h,decisions:n,originalElementLocationResult:u,revalidator:async()=>{await kq({initialLocationResult:u,locator:p,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){r.info({err:u},"Failed to find closest HTML node using levenshtein distance"),n.push({type:"HTML_DISTANCE",matched:false,reason:`Error finding closest HTML node by string distance: ${u}`});}}}async typeIntoTarget(t,o,n={}){return fi({attributes:uq(t,n),logger:this.logger,operation:"type",targetMode:"element",trace:{name:"browser.type_into_target",attributes:{"momentic.type.force":n.force??false,"momentic.type.has_relative_position":n.relativePosition!==void 0,"momentic.type.text_length":t.length,"momentic.type.delay_ms":n.delay??p_,"momentic.type.clear_content":n.clearContent??false,"momentic.type.press_enter":n.pressEnter??false}},fn:async()=>{if(n.fill){await o.locator.fill(t,{force:n.force,timeout:Go}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}await this.highlight(o.locator);let r;o.originalElementLocationResult?r=o.originalElementLocationResult.importantAttributes.type??"":r=await o.locator.getAttribute("type",{timeout:ko})??"";let i=oTe.some(a=>a===r.toLowerCase());return await Lq({targetingResult:o,options:{force:n.force,relativePosition:n.relativePosition?ua(n.relativePosition):void 0},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false}),await this.page.waitForTimeout(150),this.directTypeHelper(t,n)}})}async click(t,o,n={}){return fi({logger:this.logger,operation:"click",targetMode:"element",trace:{name:"browser.click"},fn:()=>Lq({targetingResult:t,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:o,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false})})}async waitForUrl({beforeUrl:t,matcher:o},n){let r=n?.timeout??this.pageLoadTimeout,i=Date.now(),a=false,s=t;for(;Date.now()-i<r;){if(this.abortSignal?.throwIfAborted(),s=this.url(),wk(s,o,n)){a=true;break}await gt(Qr,this.abortSignal);}if(!a){let l=Dne(o);throw new ne("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${sk(o)} in ${r}ms.${l?`
|
|
7966
|
+
//# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:_q(i,this.userBrowserSettings.disableFullStory)})];s&&g.push(this.page.addScriptTag({content:xTe(s.recordScript)})),await Promise.all(g);}catch(g){if(g instanceof Error&&(g.message.includes("Content Security Policy")||g.message.includes("TrustedScript")))this.logger.warn({err:g},"Content Security Policy error from adding Momentic scripts, reloading page instead"),u=true;else throw g}(r??{})["add-init-scripts"]=Date.now()-h;};a.push(p());}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&!this.isRemoteBrowser&&platform()==="darwin"&&execSync("system_profiler SPDisplaysDataType").toString().includes("Retina"))C.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else {let p=async()=>{let h=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(r??{})["fetch-dpr"]=Date.now()-h;};a.push(p());}let d=Date.now();await ge(Promise.all(a),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let m=Date.now();(r??{})["ops-attach"]=m-d,u&&await this.page.reload(),this.cdpClient=await hD.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout,onAttach:async p=>{await this.initializeScreencast(p);}}),(r??{})["cdp-init"]=Date.now()-m,this.stateManager=new xD({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??true,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=true;}async fixViewportForNewHeadless(t=this.cdpClient){this.properties.isNewHeadless&&(this.properties.isAndroid||this.viewport&&await t.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}}));}async waitForRootNavSettle(t){return de({name:"browser.waitForRootNavSettle",serviceName:"browser",fn:()=>this.waitForRootNavSettleHelper(t)})}async waitForRootNavSettleHelper(t){let o=this.rootUrlLastChangedAt.get(this.page)??0,n=Date.now()-o;if(n>=e.NAVIGATION_SETTLE_MS)return;let r=e.NAVIGATION_SETTLE_MS-n;try{await ge(this.page.waitForLoadState("load",{timeout:r}),{milliseconds:r,signal:t,fallback:()=>{}});}catch{t?.throwIfAborted();}}async initializeScreencast(t){await this.fixViewportForNewHeadless(t),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await t.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),t.on("Page.screencastFrame",o=>{let n=o.sessionId,r=Buffer.from(o.data,"base64");this.lastScreenshotForRecording=r,this.clientCallbacks?.onScreencastFrame?.(r,()=>{(async()=>{try{await t.send({method:"Page.screencastFrameAck",params:{sessionId:n}});}catch{}})();});}));}static async init(t){let o;try{o=await xq(t);}catch(r){throw Iq(r,t.userBrowserSettings.browserType)}let n=new e(o);return n.initOptions=t,await n.trackPageVideo(n.page),await n.initialize({grantPermissions:true,permissionsToGrant:t.userBrowserSettings.grantedPermissions,runInitScripts:false}),n}static async fromExistingContext({context:t,page:o,attachTimeoutMs:n,storage:r,enricher:i,userBrowserSettings:a,properties:s,logger:l,timingRecorder:c}){let u=o??t.pages()[0];if(!u)throw new Error("No page found in existing context");let d=u.viewportSize();if(!d){let h=Date.now();d=await ge(u.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),{milliseconds:n??1/0,message:"Timed out connecting to the webview"}),c["eval-viewport"]=Date.now()-h;}let m=u?.url(),p=new e({browser:t.browser(),context:t,page:u,baseUrl:m,logger:l,storage:r,enricher:i,userBrowserSettings:a,viewport:d,properties:s,clientCallbacks:void 0,iconKnowledgeBase:null});try{await ge(p.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:c}),{milliseconds:n??1/0,message:"Timed out connecting to the webview"});}catch(h){throw await p.cleanup(),h}return p}async handleAvailableTabsChangeHelper(){try{let t=await Fq(this.context,{getTitles:!0,getPageId:n=>this.getPageId(n)}),o=this.getPageId(this.page);this.clientCallbacks?.onTabsChange?.(t,o);}catch(t){this.logger.error({err:t},"Error sending available tabs to frontend");}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500);}catch(t){this.logger.warn({err:t},"Error handling available tabs change");}}addToPageLoadPromises(t,o){let n=randomUUID(),r=`${t}-${n}`,i=Date.now(),a=false,s=new AbortController;this.pageLoadAbortControllers.add(s);let l=async()=>{try{await ge(o(),{signal:s.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${t} timed out after ${this.pageLoadTimeout}ms`});}catch(c){c.name!=="AbortError"&&!this.closed&&this.logger.error({err:c,promiseKey:r,codePath:t,duration:Date.now()-i},`Page load promise for code path ${t} encountered error`);}finally{delete this.pageLoadPromises[r],this.pageLoadAbortControllers.delete(s),a=true;}};this.pageLoadPromises[r]=l().catch(()=>{}),a&&delete this.pageLoadPromises[r];}handlePageClosedEvent(t){if(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(n=>n.page!==t),this.page!==t){this.logger.debug({url:t.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let o=async()=>{if(this.closed)return;this.logger.info({url:t.url()},"Detected active page was closed, switching to another tab");let n=this.context.pages();for(let r=n.length-1;r>=0;r--){let i=n[r];if(!(!i||i.isClosed()||!Bh(i.url()))){this.logger.info(`Automatically switching to tab ${r} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(r)});break}}};this.addToPageLoadPromises("page closed handler",o);}handleNewPageEvent(t){let o=t.url();this.logger.info({url:o},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(t);}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....");}}handleNewPageEventHelper(t){let o=this.getPageId(t),n="new-page-load-handler";t.on("close",a=>this.handlePageClosedEvent(a)),t.on("framenavigated",a=>this.handleFrameNavigationEvent(a)),t.on("crash",()=>{this.logger.error("Page crashed at the browser level!");});let r=this.context.pages().indexOf(t);if((!this.userBrowserSettings.disableBrowserMonitoring||this.userControlledBrowserSettings.lightweightConsoleLogs)&&!this.userControlledBrowserSettings.disableConsoleLogs&&!this.consoleLogCircuitBreaker.isDisabled()){let a=s=>{this.consoleLogCircuitBreaker.recordActivity({stage:"receive",charCount:s.text().length}),!this.consoleLogCircuitBreaker.isDisabled()&&this.consoleLogCircuitBreaker.run({stage:"serialize",fn:async()=>{await mSe(t,r,this.debugData,s,this.logger,this.userControlledBrowserSettings.lightweightConsoleLogs?{includeArgs:false,maxLogsPerPage:ZW}:void 0)&&this.consoleLogCircuitBreaker.recordBufferOverflow({stage:"serialize",bufferLimit:this.userControlledBrowserSettings.lightweightConsoleLogs?ZW:mD});}});};this.consoleLogListeners.set(t,a),t.on("console",a);}let i=async()=>{this.shouldCaptureNetworkLogs()&&(bq(this.logger,o,this.clientCallbacks?.onNetworkPage),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=ATe(this.clientCallbacks.onNetworkLogs))),await this.ensureNetworkRoutes({page:t,pageId:o}),await this.trackPageVideo(t),await this.loadFrameAndRecordUrl({root:t,codePath:n}),this.handleAvailableTabsChange();};this.addToPageLoadPromises(n,i);}async ensureNetworkRoutes({page:t,pageId:o}){let{extraHeaders:n={}}=this.userControlledBrowserSettings,r=Object.keys(n).length>0;if((this.shouldCaptureNetworkLogs()||r||this.customHeaders.length>0||this.hasActiveRequestInterceptors())&&!this.networkRouteHandlers.has(t)){let a=async(s,l)=>{let c=this.shouldCaptureNetworkLogs(),u=c&&!this.hasActiveRequestRecorders();if(!c&&!this.hasActiveRequestInterceptors()){await s.continue();return}await Tq({pageId:o,route:s,request:l,onHarEntry:c?(d,m)=>{this.harBatcher?.fetch({[d]:this.redactExtraHeaders(m)}).catch(()=>{});}:void 0,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed,onCollectionTiming:u?d=>this.networkLogCircuitBreaker.record(d):void 0});};this.networkRouteHandlers.set(t,a);try{await t.route("**/*",a);}catch(s){throw this.networkRouteHandlers.delete(t),s}}if(this.customHeaders.length>0&&!this.customHeaderRouteHandlers.has(t)){let a=fSe(this.customHeaders,this.logger);this.customHeaderRouteHandlers.set(t,a);try{await t.route("**/*",a);}catch(s){throw this.customHeaderRouteHandlers.delete(t),s}}}redactExtraHeaders(t){return this.extraHeaderNames.size===0?t:{...t,request:{...t.request,headers:t.request.headers.map(o=>this.extraHeaderNames.has(o.name.toLowerCase())?{...o,value:"[redacted]"}:o)}}}handleContextRequestEvent(t){let o=this.harBatcher;if(!(this.cleanedUp||!o||t.resourceType()!=="document"||!t.isNavigationRequest()||t.serviceWorker()||!this.shouldCaptureNetworkLogs()))try{t.frame();}catch{let n=this.capturePopupDocumentRequest({request:t,harBatcher:o});this.pendingPopupDocumentCaptures.add(n),n.finally(()=>{this.pendingPopupDocumentCaptures.delete(n);});}}async capturePopupDocumentRequest({request:t,harBatcher:o}){try{let n=randomUUID(),r=randomUUID(),i=ac({signal:this.popupDocumentAttributionAbortController.signal,timeoutMs:eq}),a=this.context.waitForEvent("page",{predicate:d=>{try{return t.frame().page()===d}catch{return !1}},timeout:eq}).catch(()=>{}),s=await lI(n,t,{abortSignal:i}),l=await ge(a,{signal:i,milliseconds:1/0}).catch(()=>{});l?s.pageref=this.getPageId(l):bq(this.logger,n,this.clientCallbacks?.onNetworkPage,this.page);let c=(d,m)=>{o.fetch({[d]:this.redactExtraHeaders(m)}).catch(()=>{});};c(r,s);let u=bD({request:t,onHarEntry:c,logger:this.logger,requestRecorders:{},entry:s,requestId:r,neverRedact:!1,isBrowserClosed:()=>this.closed});this.pendingPopupDocumentResponseCollections.add(u),u.finally(()=>{this.pendingPopupDocumentResponseCollections.delete(u);});}catch(n){this.closed||this.logger.warn({err:n},"Failed to capture popup document request in HAR");}}async finishPendingPopupDocumentCaptures(){this.popupDocumentAttributionAbortController.abort(),await Promise.all(this.pendingPopupDocumentCaptures),this.pendingPopupDocumentCaptures.clear();}async finishPendingPopupDocumentResponseCollections(){await Promise.all(this.pendingPopupDocumentResponseCollections),this.pendingPopupDocumentResponseCollections.clear();}async ensureNetworkRoutesForOpenPages(){await Promise.all(this.context.pages().map(async t=>{let o=this.pageIds.get(t);o&&await this.ensureNetworkRoutes({page:t,pageId:o});}));}removeConsoleLogListeners(){for(let t of this.context.pages()){let o=this.consoleLogListeners.get(t);o&&(t.off("console",o),this.consoleLogListeners.delete(t));}}async removeUnusedNetworkRoutes(){let{extraHeaders:t={}}=this.userControlledBrowserSettings,o=Object.keys(t).length>0;this.shouldCaptureNetworkLogs()||o||this.customHeaders.length>0||this.hasActiveRequestInterceptors()||await Promise.all(this.context.pages().map(async n=>{let r=this.networkRouteHandlers.get(n);if(r){this.networkRouteHandlers.delete(n);try{await n.unroute("**/*",r);}catch(i){this.closed||(this.networkRouteHandlers.set(n,r),this.logger.warn({err:i},"Failed to remove browser network debug data route"));}}}));}async removeCustomHeaderRoutes(){await Promise.all(this.context.pages().map(async t=>{let o=this.customHeaderRouteHandlers.get(t);if(o){this.customHeaderRouteHandlers.delete(t);try{await t.unroute("**/*",o);}catch(n){this.closed||(this.customHeaderRouteHandlers.set(t,o),this.logger.warn({err:n},"Failed to remove browser custom header route"));}}}));}scheduleRemoveUnusedNetworkRoutes(){this.removeUnusedNetworkRoutes().catch(t=>{this.logger.warn({err:t},"Failed to stop browser network debug data recording");});}scheduleEnsureNetworkRoutes(){this.closed||this.ensureNetworkRoutesForOpenPages().catch(t=>{this.logger.warn({err:t},"Failed to resume browser network debug data recording");});}shouldCaptureNetworkLogs(){return this.networkLogCircuitBreaker.isDisabled()?false:!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs}hasActiveRequestInterceptors(){return this.hasActiveRequestRecorders()||Object.keys(this.mocks).length>0}hasActiveRequestRecorders(){return Object.keys(this.requestRecorders).length>0}async handleCollectSvgs(t){}handleFrameNavigationEvent(t){let o=t.url(),n=t.parentFrame()?"has-parent":"no-parent",r=`frame-navigation-handler-${o.slice(0,50)} (${n})`;if(!o||o==="about:blank"||!Bh(o))return;t.parentFrame()||this.rootUrlLastChangedAt.set(t.page(),Date.now());let i=this.recentFrameNavigations[r];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[r]=Date.now(),t.parentFrame()||wTe({logger:this.logger,url:o});let a=async()=>{try{if(t.isDetached())return;await this.loadFrameAndRecordUrl({root:t,codePath:r}),this.handleAvailableTabsChange(),!t.parentFrame()&&!t.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(t);}catch(l){this.logger.warn({err:l},"Failed to collect SVGs on page, continuing...");}})();},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(t));}catch(s){s.name!=="AbortError"&&this.logger.warn({err:s,url:o,codePath:r},"Failed to handle frame navigation event, continuing...");}};this.addToPageLoadPromises(r,a);}async injectKnowledgeBaseIntoBrowser(t){try{if(!this.iconKnowledgeBase||await t.evaluate(()=>!!window._momentic._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let n={};Object.keys(this.iconKnowledgeBase).forEach(r=>{this.iconKnowledgeBase[r]?.description&&(n[r]=this.iconKnowledgeBase[r].description);}),await t.evaluate(r=>{let a=window._momentic;a._MOMENTIC_ICON_KNOWLEDGE_BASE=r;},n);}catch(o){this.logger.warn({err:o},"Failed to inject icon knowledge base into browser, continuing...");}}getBrowserCallbacks(){return {runWithMainFrameNavigationLatch:t=>this.runWithMainFrameNavigationLatch(t),waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:t=>this.waitForUrl(t),waitForStability:t=>this.waitForStability(t),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings,isRemoteBrowser:this.isRemoteBrowser},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(t){this.stateManager.setActiveFrameConfig(t);}async reset(t){if(this.debugData.logsPerPage=[],this.pageLoadPromises={},this.pendingMainFrameNavigationObservations=[],this.traceScreenshotCache.clear(),t.newUrl&&(this.baseUrl=t.newUrl),this.closed){await this.restartBrowser(t);return}try{this.requestRecorders={},this.mocks={},this.customHeaders.length=0,this.offline&&(await this.context.setOffline(!1),this.offline=!1),await Promise.all([this.removeUnusedNetworkRoutes(),this.removeCustomHeaderRoutes()]),await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:this.baseUrl,initialNavigation:!0,loadTimeoutMs:t.timeout}),this.stateManager.reset();}catch(o){if(!this.closed)throw o;await this.restartBrowser(t);}}async restartBrowser(t){if(!this.initOptions)throw new Error("Cannot restart browser: no init options available");this.logger.info("Browser closed, restarting from scratch"),await this.finishPendingPopupDocumentCaptures();try{await this.context.close();}catch{}try{await this.browser?.close();}catch{}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next();let o;try{o=await xq(this.initOptions);}catch(n){throw Iq(n,this.initOptions.userBrowserSettings.browserType)}this.browser=o.browser,this.context=o.context,this.page=o.page,this.viewport=o.viewport,this.properties=o.properties,this.cleanedUp=false,this.contextInitialized=false,this.originsVisited=new Set,this.mocks={},this.requestRecorders={},this.customHeaders=[],this.offline=false,this.harBatcher=void 0,this.popupDocumentAttributionAbortController=new AbortController,this.recentFrameNavigations={},this.pageLoadAbortControllers.forEach(n=>n.abort()),this.pageLoadAbortControllers.clear(),this.pageLoadAbortListenerCleanup=void 0,await this.trackPageVideo(this.page),await this.initialize({grantPermissions:true,permissionsToGrant:this.initOptions.userBrowserSettings.grantedPermissions,runInitScripts:false}),await this.navigate({url:this.baseUrl,initialNavigation:true,loadTimeoutMs:t.timeout}),this.stateManager.reset();}async clearHighlights(){try{await ge(Mq(this.getBrowserCallbacks()),{milliseconds:ko});}catch(t){this.logger.debug({err:t},"Failed to clear highlights, continuing...");}}async cleanup(t={}){this.abortSignal=void 0,this.cleanedUp=true,await this.finishPendingPopupDocumentCaptures(),this.networkLogCircuitBreaker.dispose(),this.consoleLogCircuitBreaker.dispose(),t.saveRemoteVideos??true?this.startPendingRemoteVideoSaves():this.pendingRemoteVideoSaves.splice(0);try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(n=>n.abort()),this.pageLoadAbortControllers.clear(),this.originsVisited.clear(),await this.context.close();}catch(n){this.logger.warn({err:n},"Error cleaning up browser, continuing...");}try{await this.finishPendingRemoteVideoSaves(),await this.browser?.close();}catch(n){this.logger.warn({err:n},"Error cleaning up browser, continuing...");}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next(),this.browser=null;}get closed(){return this.cleanedUp||this.context.pages().every(t=>t.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(t,o,n){return de({name:"browser.ensureMomenticBrowserScriptsLoaded",serviceName:"browser",fn:()=>this.ensureMomenticBrowserScriptsLoadedHelper(t,o,n)})}async ensureMomenticBrowserScriptsLoadedHelper(t,o,n){let r=Date.now(),i=0,a=0;for(;Date.now()-r<Kv;){a++,n?.throwIfAborted();try{if(await Or({fn:()=>{let c=window._momentic;return !!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:ko,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad({signal:n}),root:t,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){o.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await gt(Qr),a%2===0&&o.warn("Still waiting for momentic browser scripts to load...");}throw new Error(`Failed to load momentic browser scripts on page ${t.url()}`)}async html(){let t=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(t,this.logger),Or({root:t,fn:()=>{let n=window._momentic;if(!n.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return n.getFullHtmlTree()},arg:void 0,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let o=window._momentic,n=[],r=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(i=>{r.set(i,{value:i.style.getPropertyValue("caret-color"),priority:i.style.getPropertyPriority("caret-color")}),i.style.setProperty("caret-color","transparent","important");}),n.push(()=>{for(let[i,a]of r)i.style.setProperty("caret-color",a.value,a.priority);}),o._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let i of n)i();delete o._MOMENTIC_SCREENSHOT_CLEANUP;};},void 0,"stabilizing page for screenshot");}catch(t){(!(t instanceof Error)||!t.message.includes("Execution context was destroyed"))&&this.logger.warn({err:t},"Failed to stabilize page before screenshot, continuing...");}}async removeScreenshotStabilization(){return de({name:"browser.removeScreenshotStabilization",serviceName:"browser",fn:()=>this.removeScreenshotStabilizationHelper()})}async removeScreenshotStabilizationHelper(){try{await this.evaluateFunctionInPage(()=>{window._momentic._MOMENTIC_SCREENSHOT_CLEANUP?.();},void 0,"removing screenshot stabilization");}catch{}}async screenshot(t){let o=()=>fi({logger:this.logger,operation:"screenshot",trace:{name:"browser.screenshot"},fn:()=>this.screenshotHelper(t)});return t.traceScreenshotRole?jn().startAsyncSpan("GET_PAGE_SCREENSHOT",o,{}):o()}async screenshotHelper(t){let{retries:o=1,stabilizeBeforeScreenshot:n=false}=t,r=this.page,i=r.url();if(t.traceScreenshotRole==="before"){let s=this.traceScreenshotCache.take({clearHighlights:t.clearHighlights===true,page:r,quality:t.quality,url:i,viewport:this.getViewport()});if(s&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath)return s}else this.traceScreenshotCache.clear();n&&await de({name:"browser.stabilizePageForScreenshot",serviceName:"browser",fn:()=>this.stabilizePageForScreenshot()});let a=Date.now();try{await this.waitForRootNavSettle(),await this.fixViewportForNewHeadless();let s=await this.captureScreenshot({...t,retries:o});if(s.byteLength>5e6)this.logger.warn("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(s.length===0)throw new Error("Got empty screenshot");if(t.traceScreenshotRole==="after"&&r===this.page&&i===r.url()&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath){let l=this.getViewport();this.traceScreenshotCache.store({buffer:s,clearHighlights:t.clearHighlights===!0,page:r,quality:t.quality,url:i,viewport:l});}return s}catch(s){if(o<=0||s.message.includes("has been closed"))throw s;return this.logger.warn({err:s,pageUrl:i},"Failed taking screenshot, retrying..."),await gt(Ap),this.screenshotHelper({...t,retries:o-1})}finally{Date.now()-a>1e3&&this.logger.warn({pageUrl:i,duration:Date.now()-a},"Screenshot took longer than expected"),n&&await this.removeScreenshotStabilization();}}async captureScreenshot({locator:t,quality:o,saveToDiskPath:n,timeout:r,respectActiveFrame:i,clearHighlights:a=false,boundingBoxOverride:s}){a&&await de({name:"browser.screenshot.clearHighlights",serviceName:"browser",fn:()=>this.clearHighlights()}),i&&this.stateManager.frameConfig&&(t=await(await this.getActivePageOrFrame()).frameElement());let l=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:o,optimizeForSpeed:true},timeout:r??Cbe});return de({name:"browser.screenshot.processImage",serviceName:"browser",attributes:{"momentic.screenshot_base64_length":l.data.length},fn:async c=>{let u=await this.processCapturedScreenshotImage({screenshotData:l.data,locator:t,boundingBoxOverride:s,saveToDiskPath:n});return c?.setAttributes({"momentic.screenshot_cropped":u.cropped,"momentic.screenshot_raw_height":u.rawHeight,"momentic.screenshot_raw_width":u.rawWidth,"momentic.screenshot_resized":u.resized,"momentic.screenshot_source":"cdp",...u.viewportHeight===void 0?{}:{"momentic.screenshot_viewport_height":u.viewportHeight},...u.viewportWidth===void 0?{}:{"momentic.screenshot_viewport_width":u.viewportWidth}}),u.buffer}})}async processCapturedScreenshotImage({screenshotData:t,locator:o,boundingBoxOverride:n,saveToDiskPath:r}){try{let i=Buffer.from(t,"base64"),{width:a,height:s}=wD(i),{width:l,height:c}=this.getViewport()??{},u=i,d=a,m=s,p=!1;if(l&&c&&(a!==l||s!==c)&&(u=await QSe(i,{width:l,height:c}),d=l,m=c,p=!0),r&&writeFileSync(r,u),this.lastScreenshotForRecording=u,!o&&!n)return {buffer:u,cropped:!1,rawHeight:s,rawWidth:a,resized:p,viewportHeight:c,viewportWidth:l};let h=n??(o?await o.boundingBox({timeout:ft}):void 0);if(!h)throw new Error("Attempted to screenshot an element that is not visible on the page");if(!h.width||!h.height)throw new Error("Attempted to screenshot an element with zero width or height");let g=Math.max(0,Math.min(Math.floor(h.x),d-1)),f=Math.max(0,Math.min(Math.floor(h.y),m-1)),y=Math.max(1,Math.min(Math.floor(h.width),d-g)),b=Math.max(1,Math.min(Math.floor(h.height),m-f));try{return {buffer:await ZSe(u,{x:g,y:f,width:y,height:b}),cropped:!0,rawHeight:s,rawWidth:a,resized:p,viewportHeight:c,viewportWidth:l}}catch(S){throw new Error(`Failed taking element screenshot at coordinates (${g}, ${f}) with size (${y}, ${b}): ${S}`)}}finally{o&&"dispose"in o&&await o.dispose();}}getViewport(){if(this.viewport)return this.viewport;let t=this.page.viewportSize();return t||null}async getUserAgent(){try{return await Or({root:this.page,fn:()=>navigator.userAgent,arg:void 0,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"reading the browser user agent"})}catch(t){return this.logger.warn({err:t},"Failed to read browser user agent"),pD}}async navigate({url:t,initialNavigation:o=false,loadTimeoutMs:n=this.pageLoadTimeout}){eie(t)&&(t=new URL(t,this.baseUrl).toString());let r=Date.now();o||(await this.waitForPageLoad(),await this.waitForStability());let i=false,a;for(let l=0;l<3;l++)try{await this.page.goto(t,{timeout:n,waitUntil:"domcontentloaded"}),i=!0;break}catch(c){if(a=c,this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(a)){i=true,this.logger.warn({err:a,url:t},"DOMContentLoaded timed out during navigation, continuing due to browser setting");break}let u=a.message.includes("net::ERR_CONNECTION_REFUSED");if(this.logger.warn({err:c},`Error occurred during navigation${l<2&&!u?", retrying...":" (fatal)"}`),u)break;await gt(Qr);try{await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:n});}catch(d){this.logger.warn({err:d},"Page.stopLoading failed during navigation retry");}}if(!i)throw new ne("UserInfrastructureError",a?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:t},`Navigation complete in ${Math.floor(Date.now()-r)}ms`);let s=this.url();if(Obe.has(s))throw new ne("UserInfrastructureError",`${t} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless();}async type(t,o={},n=false){await fi({attributes:uq(t,o),logger:this.logger,operation:"type",targetMode:"focused",trace:{name:"browser.type",attributes:{"momentic.type.text_length":t.length,"momentic.type.delay_ms":o.delay??p_,"momentic.type.clear_content":o.clearContent??false,"momentic.type.press_enter":o.pressEnter??false,"momentic.type.require_active_element":n}},fn:()=>this.directTypeHelper(t,o,n)});}async getActiveElementHandle(t){return t.evaluateHandle(()=>document.activeElement)}async getActiveElement(t){try{return await Or({root:t,fn:()=>{let n=document.activeElement?.textContent??void 0;n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]");let r=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(r=!0);let a=document.activeElement;return a&&"selectionStart"in a&&typeof a.selectionStart=="number"&&typeof a.selectionEnd=="number"&&a.selectionStart!==a.selectionEnd&&(r=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n,hasTextSelected:r}:{hasTextSelected:r}},arg:void 0,timeout:ko,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(o){this.logger.warn({err:o},"Failed to get active element");return}}async directTypeHelper(t,o={},n=false){let r=await this.getActivePageOrFrame();await nTe({root:r,text:t,options:o,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(r);if(n){let l=Date.now();for(;Date.now()-l<this.smartWaitingTimeout&&(!i||i.tag==="body");)await gt(Ap),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(r);i||this.logger.warn("No active element found to type into, attempting anyways");}if(o.fill){await r.locator(":focus").first().fill(t,{force:o.force,timeout:Go}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}let a=o.delay??p_,s=i?.tag==="input"||i?.tag==="textarea";if(o.clearContent)if(s||o.forceClearContent)if(this.properties.isAndroid&&!s&&i?.textContent){this.logger.info("Clearing content using backspaces");let l=0,c=i.textContent?.length;for(;c&&l<50;){l++;let u=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(u),i=await this.getActiveElement(r),c=i?.textContent?.length;}c&&this.logger.warn("Content still remains after clearing existing");}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):this.operatingSystem==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.waitForTimeout(a),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(a);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(t,{delay:a}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();}async scrollIntoViewIfNeeded(t){try{await t.scrollIntoViewIfNeeded({timeout:Go});}catch(o){this.logger.warn({err:o},"Failed to scroll into view, trying with raw JS");try{await t.evaluate(async n=>{let r=n.scrollTop;n.scrollIntoView({block:"nearest"}),await new Promise(a=>setTimeout(a,250));let i=Date.now();for(;Date.now()-i<1e3;){let a=n.scrollTop;if(a===r)break;r=a,await new Promise(s=>setTimeout(s,250));}},void 0,{timeout:Go});}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...");}}}async highlightA11yId(t){try{let{resolution:o}=await this.createTargetFromA11yId({id:t,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(o.locator),!0}catch(o){return this.logger.debug({err:o,id:t},"Failed to highlight target"),false}}async highlight(t){return RD({locator:t,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(t){try{let o=new URL(t).origin;if(o==="null")return;this.originsVisited.add(o);}catch(o){this.logger.warn({err:o},"Failed to record origin visited");}}async waitForPageLoad(t){return de({name:"browser.wait_for_page_load",serviceName:"browser",fn:()=>this.waitForPageLoadHelper(t)})}async runWithMainFrameNavigationLatch({page:t,action:o}){let n=()=>{},r=new Promise(u=>{n=u;}),i=u=>{u.parentFrame()||n(true);};t.on("framenavigated",i);let a;try{a=await o();}catch(u){throw t.off("framenavigated",i),u}if(t.isClosed())return t.off("framenavigated",i),a;let s=performance.now(),l=Promise.race([r,gt(Ap,this.abortSignal).then(()=>false,()=>false)]).then(u=>({observed:u,durationMs:performance.now()-s})).finally(()=>t.off("framenavigated",i)),c={page:t,observation:l};return this.pendingMainFrameNavigationObservations.push(c),t.isClosed()&&(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(u=>u!==c),t.off("framenavigated",i)),a}consumeMainFrameNavigationObservations(t){let o=[],n=[];for(let r of this.pendingMainFrameNavigationObservations)r.page===t?o.push(r.observation):r.page.isClosed()||n.push(r);return this.pendingMainFrameNavigationObservations=n,Promise.all(o)}async settleObservedMainFrameNavigation({observationsPromise:t,signal:o}){let n=performance.now(),r=await t,i=r.some(s=>s.observed),a=0;if(i){let s=performance.now();await this.waitForPageLoad({signal:o}),a=performance.now()-s;}return {observed:i,attributes:{"momentic.stability.navigation_latch_count":r.length,"momentic.stability.navigation_observed":i,"momentic.stability.navigation_detection_duration_ms":Math.max(0,...r.map(s=>s.durationMs)),"momentic.stability.navigation_observation_wait_duration_ms":Math.max(0,performance.now()-n-a),"momentic.stability.navigation_page_load_duration_ms":a}}}async waitForPageLoadHelper(t){let o=t?.signal??this.abortSignal;await this.awaitOutstandingPageLoadPromises(o)&&await this.waitForRootNavSettle(o);}async awaitOutstandingPageLoadPromises(t){return de({name:"browser.awaitOutstandingPageLoadPromises",serviceName:"browser",fn:()=>this.awaitOutstandingPageLoadPromisesHelper(t)})}async awaitOutstandingPageLoadPromisesHelper(t){let o=Date.now(),n=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises),i=-1,a=0;for(;n.length!==0;){if(t?.throwIfAborted(),Date.now()-o>this.pageLoadTimeout){this.logger.warn({outstandingPromiseKeys:r,outstandingPromises:n},"Timed out waiting on page load promises, continuing anyways...");break}if(Date.now()-i<20&&(a++,a>2))return this.logger.error({outstandingPromiseKeys:r,outstandingPromises:n},"Synchronous waiting loop detected, exiting page load wait"),false;i=Date.now(),await Promise.allSettled(n),n=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises);}return true}async clearAuthState(t){await this.context.clearCookies();for(let r of this.originsVisited)this.logger.debug({origin:r},`Clearing data using CDP for origin ${r}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:r,storageTypes:"all"},timeout:ko}),this.originsVisited.delete(r);let o=this.context.pages().indexOf(this.page),n=[...this.context.pages()];for(let r=0;r<n.length;r++){let i=n[r];if(i.isClosed())continue;let a=i.url();try{this.originsVisited.delete(new URL(a).origin);}catch{}await dSe(i,this.logger),r!==o&&t.closeNonActiveTabs&&(this.logger.info(`Closing tab ${r} with URL ${a}`),await i.close());}}async loadAuthState(t){await this.waitForPageLoad(),await this.waitForStability(),!t||Object.keys(t).length===0?await this.clearAuthState({closeNonActiveTabs:false}):await this.loadAuthStateHelper(t),await this.refresh(),await this.waitForStability();}async loadAuthStateHelper(t){let o=[];for(let l of t.cookies??[]){let c=await this.setCookie(l);o=o.concat(c);}this.logger.info(`Loaded ${t.cookies?.length??0} cookies`);let n=0,r=new Map;await this.cdpClient.withDomainEnabled({domain:"DOMStorage",timeout:ko,fn:async()=>{for(let l of t.origins??[])for(let c of l.localStorage)try{await this.cdpClient.send({timeout:ko,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(l.origin).origin,isLocalStorage:!0},key:c.name,value:c.value}}),n++;}catch{let u=new URL(l.origin).origin,d=r.get(u)??[];d.push(c),r.set(u,d);continue}}});for(let[l,c]of r)await this.loadLocalStorageThroughPage({origin:l,entries:c}),n+=c.length;this.logger.info(`Loaded ${n} local storage entries`);let i={},a=0;for(let l of t.origins??[])if(l.sessionStorage&&l.sessionStorage.length>0){let c={};for(let u of l.sessionStorage)c[u.name]=u.value,a++;i[new URL(l.origin).origin]=c;}a>0&&await this.context.addInitScript(({storageByOrigin:l,markerKey:c})=>{let u=window.location.origin,d=l[u];if(d&&!window.sessionStorage.getItem(c)){for(let[m,p]of Object.entries(d))window.sessionStorage.setItem(m,p);window.sessionStorage.setItem(c,"1");}},{storageByOrigin:i,markerKey:Oq}),this.logger.info(`Loaded ${a} session storage entries`);let s=t.idb;s&&Object.keys(s).length>0&&(await uSe(this.page,s,this.logger),this.logger.info(`Loaded ${Object.keys(s??{}).length} indexedDB databases`));}async loadLocalStorageThroughPage({origin:t,entries:o}){let n=await this.context.newPage();try{if(await n.route(`${t}/**`,async r=>{await r.fulfill({status:200,contentType:"text/html",body:"<!doctype html>"});}),await n.goto(t,{waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),new URL(n.url()).origin!==t)throw new Error(`Could not initialize browser storage for ${t}`);await n.evaluate(r=>{for(let{name:i,value:a}of r)window.localStorage.setItem(i,a);},o);}finally{await n.close();}}async saveAuthState(){let o=0,n=null;for(;o<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let r=await this.context.storageState();return r.idb=await cSe(this.page,this.logger),await GSe(this.page,r,this.logger),r}catch(r){if(n=r,o++,o<=2){this.logger.warn({err:r,retryCount:o,maxRetries:2},`Error saving auth state, retrying (${o}/2)...`);let i=Math.pow(2,o)*100;await new Promise(a=>setTimeout(a,i));}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new ne("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(t){return Fq(this.context,{...t,getPageId:o=>this.getPageId(o)})}getPageId(t){let o=this.pageIds.get(t);return o||(o=randomUUID(),this.pageIds.set(t,o)),o}getActivePageIndex(){return this.context.pages().indexOf(this.page)}saveA11yDetailsToCache(t,o){o.content=t.content,o.name=t.name,o.role=t.role,o.numChildren=t.children.length,delete o.serializedForm,delete o.nodeOnlySerializedForm;}async updateCacheWithNewNodeDetails({node:t,target:o,locator:n,originalElementLocationResult:r,allowNotActionableNodesOverride:i,logger:a=this.logger,skipSavingVisualAttributes:s=false,acceptElementMovedError:l=false}){if(t&&this.saveA11yDetailsToCache(t,o),o.frameCache=this.stateManager.saveAutoFrameCacheDetails(o.frameCache),n)try{let c=await this.fetchHtmlAttributes({locator:n,logger:a,originalElementLocationResult:r,allowNotActionableNodesOverride:i});c?(o.generatedSelectors=c.generatedSelectors,o.serializedHtml=c.serializedHtml,o.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,o.hybridSelector=c.hybridSelector,o.svgPathHash=c.svgPathHash):a.warn("Got undefined HTML attributes when trying to update cache");}catch(c){if(c instanceof Mu&&l)a.warn({err:c},"Suppressing ElementMovedError due to acceptElementMovedError");else {if(c instanceof Pb)throw a.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;a.warn({err:c},"Failed to fetch HTML attributes for target, continuing...");}}try{s||await this.saveElementVisualAttributes({target:o,locator:n,originalElementLocationResult:r,logger:a});}catch(c){a.debug({err:c},"Failed to save element visual details, continuing...");}}async saveElementVisualAttributes({target:t,locator:o,logger:n}){if(!o)return;let r=await o.boundingBox({timeout:ko});if(!r||!r.width||!r.height){n.debug("Skipping visual attributes saving for element with no bounding box after action"),t.boundingBox=void 0;return}let i=this.getViewport();if(r.x<0||r.y<0||!i||r.x+r.width>i.width||r.y+r.height>i.height||(t.boundingBox=r,this.userBrowserSettings.disableBrowserMonitoring))return;let a=jn();if(a.parent&&x8(a.parent)&&a.storeTraceAsset){let s=randomUUID();a.parent.elementScreenshotSnapshotId=s,(async()=>{try{let l=await this.screenshot({locator:o,quality:75,retries:0,boundingBoxOverride:r});a.storeTraceAsset?.({snapshotId:s,data:l});}catch(l){this.logger.warn({err:l,screenshotId:s},"Failed to capture element screenshot for trace");}})();}}async resolveAutoFrameCache(t){return this.stateManager.resolveAutoFrameCache(t)}async getElementRequiredValues({logger:t,boundingBox:o,locator:n,requirements:r}){let i={},a=!!r?.position&&r.position!=="irrelevant",s=!!r?.shape&&r.shape!=="irrelevant";if(a||s){if(!o||!o.width||!o.height)throw new ne("ActionFailureError","Element does not have a bounding box as required");s&&(i.shape={width:o.width,height:o.height,tolerance:r.shape}),a&&(i.position={x1:o.x,y1:o.y,x2:o.x+o.width,y2:o.y+o.height,tolerance:r.position});}if(r?.text){let l=await n.evaluate(c=>window._momentic.getElementTextContentForCache(c),void 0,{timeout:ft});l!==void 0&&(i.text=l.trim());}if(r?.attributes&&r.attributes.length>0){let l={};for(let c of r.attributes){let u=c.trim().toLowerCase();if(!(!u||Ic.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await n.getAttribute(u,{timeout:ft});d!==null&&(l[c]=d);}catch(d){t.warn({err:d,attr:c},"Failed to fetch required attribute, continuing...");}}i.attributes=l;}return i}async getAdditionalDetailsForElement({mainLocator:t,mainBoundingBox:o,additionalElement:n,root:r,logger:i}){let a=this.stateManager.a11yIdToNodeMap[n.id];if(!a)return;let s=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:r,node:a});if(t.contentFrame!==s.contentFrame)return;let l=await this.fetchHtmlAttributes({locator:s,logger:i});if(!l?.generatedSelectors||l.generatedSelectors.length===0)return;let c=await s.boundingBox({timeout:ft}),u={selectors:l.generatedSelectors,relativeAngleRadians:VSe(o,c),relativeDistance:WSe(o,c)};return n.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:s,boundingBox:c,requirements:n.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:t,mainLocator:o,mainBoundingBox:n,additionalElements:r,root:i,logger:a}){let s=new Set,l=[];for(let d of r)d.id!==t&&(s.has(d.id)||(s.add(d.id),l.push(d)));let c=await Promise.allSettled(l.map(d=>this.getAdditionalDetailsForElement({mainLocator:o,mainBoundingBox:n,additionalElement:d,root:i,logger:a}))),u=[];for(let[d,m]of c.entries()){let p=l[d];if(p){if(m.status==="fulfilled"){let h=m.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:m.reason,additionalElement:p},"Failed to fetch additional element details, continuing...");}}return u}async updateCacheWithAdditionalRequirements({mainElementId:t,requirements:o,additionalElements:n,target:r,locator:i,root:a,logger:s}){let l=await i.boundingBox({timeout:ft});if(o)try{r.requirements=await this.getElementRequiredValues({logger:s,boundingBox:l,locator:i,requirements:o});}catch(c){s.warn({err:c},"Failed to generate required values for target");}n&&n.length>0&&(r.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:t,mainBoundingBox:l,mainLocator:i,additionalElements:n,root:a,logger:s}));}async createTargetFromA11yId({id:t,description:o,targetSource:n,skipSaveToCache:r,skipSavingVisualAttributes:i,logger:a=this.logger,requirements:s,additionalElements:l,acceptElementMovedError:c}){if(t<0)throw new ne("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let u=this.stateManager.a11yIdToNodeMap[t];if(!u)throw new ne("InternalWebAgentError",`Resolving target failed because id ${t} does not exist on the page. This generally indicates an incorrect element was targeted.`);let d=this.stateManager.frameConfig,m,p,h,g;if(this.userBrowserSettings.autoExpandIframes&&!d&&u.parentFrame){let v=u.parentFrame,{cache:R,config:w}=await this.stateManager.getAutoFrameDetailsFromHandle(v);p=R,h=w,m=w.frame,g="auto iframe";}else u.parentFrame&&d?(h=d,m=await this.getActivePageOrFrame(),g="hardcoded url already on the state manager"):(m=await this.getActivePageOrFrame(),g="should not be possible");let f=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:m,node:u}),y=await f.evaluate((v,{bannedAttributes:R})=>window._momentic.generateCommonLocationResultMetadata(v,{bannedAttributes:R}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:Go}),b={id:t,inputDescription:o??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:fo(a),frameCache:p},S,E=false;r||(h&&(a.info({frameConfigSource:g,frameConfig:bTe(h)},"A11y node was resolved to a target within an iframe"),S=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(h),E=true),await this.updateCacheWithAdditionalRequirements({mainElementId:t,requirements:s,additionalElements:l,target:b,root:m,locator:f,logger:a}),await this.updateCacheWithNewNodeDetails({node:u,target:b,locator:f,logger:a,allowNotActionableNodesOverride:true,skipSavingVisualAttributes:i,originalElementLocationResult:y,acceptElementMovedError:c}));try{return {resolution:{locator:f,a11yNode:u,displayString:u.getNodeOnlySerializedForm(),originalElementLocationResult:y,decisions:[]},target:b,frameConfig:h,frameConfigSource:g}}finally{E&&this.stateManager.setActiveFrameConfig(S);}}async resolveTarget(t,o={}){return fi({logger:this.logger,operation:"resolve_target",trace:{name:"browser.resolve_target"},fn:()=>this.resolveTargetWithRetries(t,o)})}async resolveTargetWithRetries(t,o={}){let{logger:n=this.logger,signal:r=this.abortSignal,stats:i,allowNotActionableNodesOverride:a,skipWaitForPageLoad:s,acceptElementMovedError:l}=o;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,h=false,g=Date.now();for(;Date.now()-g<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),h=!0;break}catch(f){p=f,await gt(Qr,r);}if(!h)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,n,r);let u=Date.now(),d=0,m;for(;Date.now()-u<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),d++,i&&(i.attempts=d);let p=d===2||Date.now()-u>this.smartWaitingTimeout-2e3&&d%2===0;try{m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:!0,shouldLogOnFailure:p,logger:n,allowNotActionableNodesOverride:a,signal:r,skipWaitForPageLoad:s,acceptElementMovedError:l});break}catch(h){if(h instanceof uE)break;r?.throwIfAborted(),p&&n.warn({err:h},`Could not resolve target using primary cache only (x${d})`),await gt(Qr,r);}}return m||(i&&(i.attempts+=1),m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:false,logger:n,signal:r,allowNotActionableNodesOverride:a,acceptElementMovedError:l}),n.info({decisions:m.decisions},"Target resolution succeeded after waiting")),m}async resolveTargetHelper({root:t,target:o,stats:n,primaryOnly:r,logger:i,signal:a,allowNotActionableNodesOverride:s,shouldLogOnFailure:l,skipWaitForPageLoad:c,skipSavingVisualAttributes:u,acceptElementMovedError:d}){let m=[],p;if(c||await this.waitForPageLoad(),!this.userBrowserSettings.visualActions){let g={};await this.stateManager.getFrameTreeAndAddMomenticIds({logger:i,signal:a,logTimings:g}),Object.values(g).some(f=>f>750)&&i.warn({logTimings:g},"Momentic ID attach took a long time");}let h;if(o.generatedSelectors||o.hybridSelector){let g;try{g=await this.resolveTargetWithPrimaryMethods({root:t,target:o,stats:n,logger:i,allowNotActionableNodesOverride:s,shouldLogOnFailure:l,skipSavingVisualAttributes:u,acceptElementMovedError:d});}catch(f){h=f,f instanceof ca&&(m.push(...f.decisions),p=f.cacheMissReason);}if(g)return {...g,decisions:[...m,...g.decisions]};r||(m.push({type:"CSS_SELECTOR",matched:false,reason:h?.message,selectors:cloneDeep(o.generatedSelectors??[])}),o.generatedSelectors=void 0,o.hybridSelector=void 0);}if(r)throw h;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let g=await this.resolveTargetWithSecondaryMethods({root:t,target:o,decisions:m,logger:i,signal:a,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:u,acceptElementMovedError:d});if(g)return o.targetSource="HEURISTIC_HEALED",o.targetUpdateTime=new Date().toISOString(),o.targetUpdateLoggerTags=fo(i),g;p=p??"secondary-resolution-failed";}throw new ca("Could not find any relevant node given target",m,p)}async resolveTargetWithPrimaryMethods({root:t,target:o,stats:n,logger:r,allowNotActionableNodesOverride:i,shouldLogOnFailure:a,skipSavingVisualAttributes:s,acceptElementMovedError:l}){if(!o.nodeOnlySerializedHtml)throw new uE("Insufficient data to resolve target using primary methods (missing node HTML)");let c={x:0,y:0};if(mI(t)){let M=await(await t.frameElement()).boundingBox();M&&(c=M);}let u=this.userControlledBrowserSettings.hybridSelectorMode??Ez,d=o.boundingBox,m=!!d?.width&&!!d?.height,p=m&&d?.x!==void 0&&d?.y!==void 0?{x:d.x,y:d.y,width:d.width,height:d.height}:void 0,h=!i&&m,g={ldistThreshold:Pbe,disableLdistCacheValidation:this.userControlledBrowserSettings.disableLdistCacheValidation,requireBoundingBox:h,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requirements:o.requirements,additionalElements:o.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},rootBoundingBox:c,cachedBoundingBox:p},f={cssParams:{selectors:o.generatedSelectors??[],cachedElementSerialized:o.nodeOnlySerializedHtml,opts:g,svgPathHash:o.svgPathHash??void 0},hybridParams:u&&o.hybridSelector?{nodes:o.hybridSelector,cachedElementSerialized:o.nodeOnlySerializedHtml,opts:g,svgPathHash:o.svgPathHash??void 0}:void 0},{css:y,hybrid:b}=await Or({fn:async M=>{let z=Date.now()+1e3;for(;!document.documentElement&&!(Date.now()>=z);)await new Promise(V=>setTimeout(V,10));return window._momentic.evaluatePrimaryCaches(M)},arg:f,root:t,timeout:ft,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"});n&&(n.evaluationDurationMs+=(y?.evaluationDurationMs??0)+(b?.evaluationDurationMs??0));let S={rootUrl:t.url(),rootType:mI(t)?"frame":"page",frameDetached:mI(t)?t.isDetached():void 0},E=y.error?new Error(y.error):void 0,v=b?.error?new Error(b.error):void 0;E&&r.error({err:E,browserEvaluation:y.diagnostics,...S},"Cache evaluation errored unexpectedly (CSS)"),v&&r.error({err:v,browserEvaluation:b?.diagnostics,...S},"Cache evaluation errored unexpectedly (Hybrid)");let R,w,P=[];if((u==="prefer"||u==="always")&&b?.result){R=b.result;let M={type:"HYBRID_SELECTOR",matched:true,logs:b.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};P.push(M),w="HYBRID_SELECTOR";}else {if(u==="always"&&!b?.result)throw P.push({type:"HYBRID_SELECTOR",matched:false,reason:b?.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:b?.logs}),new ca("Hybrid selector failed to find an element",P,b?.cacheMissReason,v?{cause:v}:void 0);if(y?.result){R=y.result;let M=`${R.workingSelectors.length} CSS selectors matched the following element: ${R.serializedElement}`,z=R.workingSelectors.slice(0,5);P.push({type:"CSS_SELECTOR",matched:true,logs:y.logs,reason:M,selectors:z}),r.debug({reason:M,workingSelectors:z},"Resolved with CSS selectors"),w="CSS_SELECTOR";}else throw P.push({type:"CSS_SELECTOR",matched:false,reason:y.error?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:y.logs}),b&&P.push({type:"HYBRID_SELECTOR",matched:false,reason:b.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:b.logs}),new ca("Cache evaluation failed",P,y.cacheMissReason==="no-selectors"&&b?.cacheMissReason?b.cacheMissReason:y.cacheMissReason,v||E?{cause:v??E}:void 0)}let I,_,O;if(this.userBrowserSettings.visualActions){let M=R.mPath;if(!M)throw new Error("Found element did not have an mPath despite using visual actions");let z=M.join(" > ");I=t.locator(z),_=this.stateManager.getNodeUsingMPathSelector(z);}else if(R.dataMomenticId!==void 0)O=parseInt(R.dataMomenticId),_=this.stateManager.getNodeUsingDataMomenticId(O),I=t.locator(vp(O));else if("workingSelectors"in R)I=t.locator(R.workingSelectors[0]);else throw new ne("InternalWebAgentError","Received an element resolution result with no identifying attributes");let N=cloneDeep(o);await this.updateCacheWithNewNodeDetails({node:_,target:o,locator:I,logger:r,originalElementLocationResult:R,allowNotActionableNodesOverride:i,skipSavingVisualAttributes:s,acceptElementMovedError:l});let D=diff(N,o);return D&&Object.keys(D).length>0&&(o.cacheResolutionUpdateTime=new Date().toISOString(),o.cacheResolutionUpdateLoggerTags=fo(r),o.cacheResolutionUpdateSource=w),{a11yNode:_,displayString:R.serializedElement,locator:I,decisions:P,originalElementLocationResult:R,revalidator:async()=>{await kq({initialLocationResult:R,cacheEvaluationParams:f,locator:I,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}async resolveHardcodedCssSelector(t){let{selector:o,signal:n=this.abortSignal,timeoutMs:r=this.smartWaitingTimeout}=t,i=await this.getActivePageOrFrame(),a=Date.now(),s=0,l,c=[];for(;Date.now()-a<r;){n?.throwIfAborted(),s++;let u=i.locator(o),d;try{await u.waitFor({state:"attached",timeout:ko});let m=await u.evaluate((p,{bannedAttributes:h})=>window._momentic.generateCommonLocationResultMetadata?.(p,{bannedAttributes:h}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:Go});return d=m?.serializedElement??"unknown element",c.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${o} matched an element on the page.`}),{locator:u,originalElementLocationResult:m,displayString:d,decisions:c}}catch(m){let p=m.message;l=new ne("ActionFailureError",`CSS selector '${o}' failed to resolve after ${s} attempts: ${p.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":p}`),await gt(Qr,n);}}throw l}async resolveTargetWithSecondaryMethods(t){if(!t.target.boundingBox)return;let{x:o,y:n,width:r,height:i}=t.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(t);if(!a)return;let s=await a.locator.boundingBox({timeout:ft});if(!s){this.logger.debug({proposedNode:a.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:l,y:c,width:u,height:d}=s;if(Math.abs(u-r)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:r,newH:d,oldH:i,proposedNode:a.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!o||!n||!l||!c){this.logger.debug({oldX:o,oldY:n,newX:l,newY:c,proposedNode:a.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(l-o)>100||Math.abs(c-n)>100){this.logger.debug({newX:l,newY:c,oldX:o,oldY:n,proposedNode:a.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return a}async resolveTargetWithSecondaryMethodsHelper({root:t,target:o,decisions:n,logger:r,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s,acceptElementMovedError:l}){if(o.nodeOnlySerializedHtml&&o.nodeOnlySerializedHtml.trim().length<_be)n.push({type:"HTML_DISTANCE",matched:false,reason:"Refusing to attempt HTML comparison since the saved element is too short."});else if(o.nodeOnlySerializedHtml&&o.nodeOnlySerializedHtml.length>50){let c={x:0,y:0};if(mI(t)){let u=await(await t.frameElement()).boundingBox();u&&(c=u);}try{let u=await Or({fn:d=>window._momentic.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:o.nodeOnlySerializedHtml,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes,requirements:o.requirements,additionalElements:o.additionalElements,rootBoundingBox:c,svgPathHash:o.svgPathHash??void 0},timeout:Go,root:t,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,m,p;if(d)m=this.stateManager.getNodeUsingDataMomenticId(d),p=t.locator(vp(d));else if(u.mPath){let y=u.mPath.join(" > ");m=this.stateManager.getNodeUsingMPathSelector(y),p=t.locator(y);}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;r.warn({result:u,originalTarget:o,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=cloneDeep(o);await this.updateCacheWithNewNodeDetails({node:m,target:o,locator:p,logger:r,originalElementLocationResult:u,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s,acceptElementMovedError:l});let f=diff(g,o);return f&&Object.keys(f).length>0&&(o.cacheResolutionUpdateTime=new Date().toISOString(),o.cacheResolutionUpdateLoggerTags=fo(r),o.cacheResolutionUpdateSource="HTML_DISTANCE",r.info({diffs:f,result:u},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:o.nodeOnlySerializedHtml}),{locator:p,a11yNode:m,displayString:h,decisions:n,originalElementLocationResult:u,revalidator:async()=>{await kq({initialLocationResult:u,locator:p,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){r.info({err:u},"Failed to find closest HTML node using levenshtein distance"),n.push({type:"HTML_DISTANCE",matched:false,reason:`Error finding closest HTML node by string distance: ${u}`});}}}async typeIntoTarget(t,o,n={}){return fi({attributes:uq(t,n),logger:this.logger,operation:"type",targetMode:"element",trace:{name:"browser.type_into_target",attributes:{"momentic.type.force":n.force??false,"momentic.type.has_relative_position":n.relativePosition!==void 0,"momentic.type.text_length":t.length,"momentic.type.delay_ms":n.delay??p_,"momentic.type.clear_content":n.clearContent??false,"momentic.type.press_enter":n.pressEnter??false}},fn:async()=>{if(n.fill){await o.locator.fill(t,{force:n.force,timeout:Go}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}await this.highlight(o.locator);let r;o.originalElementLocationResult?r=o.originalElementLocationResult.importantAttributes.type??"":r=await o.locator.getAttribute("type",{timeout:ko})??"";let i=oTe.some(a=>a===r.toLowerCase());return await Lq({targetingResult:o,options:{force:n.force,relativePosition:n.relativePosition?ua(n.relativePosition):void 0},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false}),await this.page.waitForTimeout(150),this.directTypeHelper(t,n)}})}async click(t,o,n={}){return fi({logger:this.logger,operation:"click",targetMode:"element",trace:{name:"browser.click"},fn:()=>Lq({targetingResult:t,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:o,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false})})}async waitForUrl({beforeUrl:t,matcher:o},n){let r=n?.timeout??this.pageLoadTimeout,i=Date.now(),a=false,s=t;for(;Date.now()-i<r;){if(this.abortSignal?.throwIfAborted(),s=this.url(),wk(s,o,n)){a=true;break}await gt(Qr,this.abortSignal);}if(!a){let l=Dne(o);throw new ne("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${sk(o)} in ${r}ms.${l?`
|
|
7967
7967
|
${l}`:""}
|
|
7968
7968
|
Current tab: ${s}`)}try{await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"wait-for-url-step"});}catch(l){this.logger.warn({err:l},"Failed waiting for page load after URL change, continuing...");}}async dragAndDrop(t,o,n={}){await fi({logger:this.logger,operation:"drag",targetMode:"element",trace:{name:"browser.drag"},fn:()=>this.dragAndDropHelper(t,o,n)});}async dragAndDropHelper(t,o,n={}){let r=n.steps??5,i=Math.min(n.hoverDurationMs??500,Go);if(await this.highlight(t.locator),this.properties.isAndroid){await cTe({page:this.page,fromLocator:t.locator,toLocator:o.locator,stepCount:r,dragDurationMs:n.dragDurationMs??1e3,hoverDurationMs:i}),await this.highlight(o.locator);return}await this.hover(t),await this.page.mouse.down();let a=await o.locator.boundingBox({timeout:ft});if(!a)throw new ne("ActionFailureError","Could not get bounding box of target element");let s=a.x+a.width/2,l=a.y+a.height/2;await this.page.mouse.move(s,l,{steps:r}),await gt(i),await this.highlight(o.locator),await this.page.mouse.up();}async mouseDrag(t,o,n,r){await fi({logger:this.logger,operation:"drag",targetMode:r?"element":"focused",trace:{name:"browser.drag"},fn:()=>this.mouseDragHelper(t,o,n,r)});}async mouseDragHelper(t,o,n,r){r&&await this.hover({locator:r,originalElementLocationResult:void 0,serverSideBoundingBox:null}),await this.page.mouse.down();let i;if(r){let a=await r.boundingBox({timeout:ft});a&&(i={x:a.x+a.width/2,y:a.y+a.height/2});}i||(this.logger.warn("Could not get starting position from fromTarget, falling back to (0,0)"),i={x:0,y:0}),await this.page.mouse.move(i.x+t,i.y+o,{steps:n}),await gt(Ap),await this.page.mouse.up();}async hover(t,o){await fi({logger:this.logger,operation:"hover",targetMode:"element",trace:{name:"browser.hover"},fn:()=>this.hoverHelper(t,o)});}async hoverHelper(t,o){await this.highlight(t.locator),await Gy({func:async n=>{await this.scrollIntoViewIfNeeded(n.locator);let r,i;if(o?.relativePosition)({x:r,y:i}=await Nq({targetingResult:n,relativePosition:o.relativePosition}));else {let a=await n.locator.boundingBox({timeout:ft});if(!a)throw new Error("Attempted to hover over element with no bounding box");r=a.x+a.width/2,i=a.y+a.height/2;}await this.page.mouse.move(r,i,{steps:3});},action:"hovering over element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,targetingResult:t,callbacks:this.getBrowserCallbacks()});}async focus(t){await this.highlight(t.locator),await Gy({func:o=>o.locator.focus({timeout:Go}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:t});}async blur(t){if(!t){let o=await this.getActivePageOrFrame();await Or({fn:()=>{let n=document.activeElement;n&&n.nodeType===1&&n.blur();},root:o,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:ko,codePath:"blurring the active element"});return}await this.highlight(t.locator),await Gy({func:o=>o.locator.blur({timeout:Go}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:t});}async selectOption(t,o,n=false){await fi({logger:this.logger,operation:"select",trace:{name:"browser.select"},fn:()=>this.selectOptionHelper(t,o,n)});}async selectOptionHelper(t,o,n=false){await this.highlight(t.locator),await Gy({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async r=>{if(o.type==="INDEX"){let i=Number(o.index);if(isNaN(i))throw new ne("UserConfigurationError",`Page index ${o.index} is not a number`)}await r.locator.selectOption({value:o.type==="VALUE"?o.value:void 0,label:o.type==="LABEL"?o.label:void 0,index:o.type==="INDEX"?Number(o.index):void 0},{force:n,timeout:ft});},targetingResult:t});}async press(t,o){await this.runWithMainFrameNavigationLatch({page:this.page,action:()=>fi({logger:this.logger,operation:"press",trace:{name:"browser.press"},fn:()=>this.pressHelper(t,o)})}),await this.waitForStability();}async pressHelper(t,o){let n=o.repeat??1;if(o.convertMeta){let r=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});r!==t&&(this.logger.info({key:t,convertedKey:r},"Converted platform dependent keys"),t=r);}for(let r=0;r<n;r++)try{await this.page.keyboard.press(t,{delay:o.delayMs??0});}catch(i){throw vD(i,t)}}async keyDown(t,o){if(o.convertMeta){let n=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});n!==t&&(this.logger.info({keyString:t,convertedKey:n},"Converted platform dependent keys"),t=n);}for(let n of Pq(t))try{await this.page.keyboard.down(n);}catch(r){throw vD(r,n)}}async keyUp(t,o){if(o.convertMeta){let n=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});n!==t&&(this.logger.info({keyString:t,convertedKey:n},"Converted platform dependent keys"),t=n);}for(let n of Pq(t))try{await this.page.keyboard.up(n);}catch(r){throw vD(r,n)}}async refresh(t){let o=t?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let n=0,r=2;for(;n<r;){n++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:o});break}catch(i){if(this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(i)){this.logger.warn({err:i,attempt:n},"DOMContentLoaded timed out during reload, continuing due to browser setting");break}this.logger.warn({err:i,attempt:n},`Failed to reload page${n<r?", retrying...":", continuing..."}`);}}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"reload-step"}),await this.waitForStability();}async getBrowserState(t){let{maxAttempts:o=2,logger:n=this.logger,skipWaitForPageLoad:r,allowNotActionableNodesOverride:i,allowIneligibleTagRedirect:a,showZeroOpacityElementsOverride:s,shouldLogOnFailure:l}=t,c=t.abortSignal??this.abortSignal,u=!i,d=s??(i?true:this.userControlledBrowserSettings.showZeroOpacityElements),m=l?n:ba;r||await this.waitForPageLoad(),t.skipWait||await this.waitForStability({logger:n,signal:c});let p=0,h;for(;p<o;){p++;try{return await ge(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:c,logger:n,filterByViewport:t.filterByViewport,showZeroOpacityElements:d,flagNotActionableNodes:u,allowIneligibleTagRedirect:a,skipPageLoad:t.skipWaitForPageLoad}),{milliseconds:this.pageLoadTimeout*p,signal:c,message:"Getting browser state took too long"})}catch(g){if(c?.throwIfAborted(),h=g instanceof Error?g.message:`${g}`,p>=o)throw g;m.warn({err:g,url:this.url()},"Error getting a11y tree, retrying...");}}throw new ne("ActionFailureError",`Getting page content failed after ${o} attempts. Error: ${h}`)}async getViewportOffsetDetails(t){let[o,n,r,i,a]=await Or({root:t,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:ft,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return {upperBound:o,lowerBound:o+i,leftBound:n,rightBound:n+r,width:r,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??a}}async waitForStability(t){let o=this.consumeMainFrameNavigationObservations(this.page);return de({name:"browser.wait_for_stability",serviceName:"browser",attributes:gD(this.logger),fn:async n=>{if(this.executionMode==="turbo"){let i=await this.settleObservedMainFrameNavigation({observationsPromise:o,signal:t?.signal});n?.setAttributes(i.attributes);return}let r=await this.waitForStabilityWithWebTracer({opts:t,navigationObservationsPromise:o});n?.setAttributes(r);}})}async waitForStabilityWithWebTracer({opts:t,navigationObservationsPromise:o}){return jn().startAsyncSpan("WAIT_FOR_STABILITY",async r=>{let{logger:i=this.logger,timeout:a=this.smartWaitingTimeout,signal:s}=t??{},l={lastAt:Date.now(),eventCount:0},c=()=>{l.lastAt=Date.now(),l.eventCount++;};this.cdpClient.addListener("Page.frameDetached",c),this.cdpClient.addListener("Page.frameStartedLoading",c),this.cdpClient.addListener("Page.navigatedWithinDocument",c),this.cdpClient.addListener("Page.frameRequestedNavigation",c);let u=new Map,d=new Set,m=randomUUID(),p={"momentic.stability.timeout_ms":a,"momentic.stability.dom_tracking_begin_duration_ms":0,"momentic.stability.dom_tracking_end_duration_ms":0};try{let h=performance.now();await this.updateDomMutationTracking("begin",u,d,m),p["momentic.stability.dom_tracking_begin_duration_ms"]=performance.now()-h,Object.assign(p,await this.waitUntilStable({pageActivity:l,domMutationRevisions:u,domMutationFrames:d,domMutationTrackerId:m,logger:i,timeout:a,signal:s,navigationObservationsPromise:o}));}finally{let h=performance.now();await this.updateDomMutationTracking("end",void 0,d,m),p["momentic.stability.dom_tracking_end_duration_ms"]=performance.now()-h,p["momentic.stability.page_activity_event_count"]=l.eventCount,Object.assign(r.attributes,p),this.cdpClient.removeListener("Page.frameDetached",c),this.cdpClient.removeListener("Page.frameStartedLoading",c),this.cdpClient.removeListener("Page.navigatedWithinDocument",c),this.cdpClient.removeListener("Page.frameRequestedNavigation",c);}return p},{})}async waitUntilStable({pageActivity:t,domMutationRevisions:o,domMutationFrames:n,domMutationTrackerId:r,logger:i,timeout:a,signal:s=this.abortSignal,navigationObservationsPromise:l}){let c=false,u=Date.now(),d,m={quality:25,retries:0},p=false,h=true,g={cycleCount:0,intervalSleepDurationMs:0,pageActivityUnstableCycleCount:0,dom:{mutationCycleCount:0,navigationRearmDurationMs:0,trackingReadDurationMs:0},screenshot:{captureCount:0,captureDurationMs:0,changeCycleCount:0,diffDurationMs:0,errorCount:0}},f=async()=>{let v=performance.now();g.screenshot.captureCount++;try{return await this.screenshot(m)}finally{g.screenshot.captureDurationMs+=performance.now()-v;}},y=v=>{g.screenshot.errorCount++,g.screenshot.errorCount%3===0&&i.warn({err:v,screenshotErrors:g.screenshot.errorCount},"Failed to take screenshot for DOM stability check"),s?.throwIfAborted();};try{d=await f();}catch(v){y(v);}let b=await this.settleObservedMainFrameNavigation({observationsPromise:l,signal:s});if(b.observed){let v=performance.now();await this.updateDomMutationTracking("end",void 0,n,r),o.clear(),await this.updateDomMutationTracking("begin",o,n,r),g.dom.navigationRearmDurationMs=performance.now()-v,d=void 0,t.lastAt=Date.now();try{d=await f();}catch(R){y(R);}}let S=Date.now(),E=b.observed?S:u;for(;Date.now()-S<a;){s?.throwIfAborted(),g.cycleCount++;let v=Date.now();if(v-E<Ap){let I=performance.now();await gt(Ap-(v-E),s),g.intervalSleepDurationMs+=performance.now()-I;}if(E=Date.now(),d)try{let I=await f(),_=performance.now(),O;try{O=await eTe(d,I);}finally{g.screenshot.diffDurationMs+=performance.now()-_;}O>1?(d=I,p=!1,g.screenshot.changeCycleCount++):p=!0;}catch(I){y(I);}else try{d=await f();continue}catch(I){y(I);}let R=performance.now(),w=await this.updateDomMutationTracking("read",o,n,r);g.dom.trackingReadDurationMs+=performance.now()-R,h=!w,w&&g.dom.mutationCycleCount++;let P=Date.now()-t.lastAt>=QW;if(P||g.pageActivityUnstableCycleCount++,!(!h||!P||!p)){c=true;break}}return c||i.warn({duration:Date.now()-u,settleDuration:Date.now()-S,stable:{dom:h,navigation:Date.now()-t.lastAt>=QW,screenshot:p}},"Stability wait completed due to timeout, continuing..."),{...b.attributes,"momentic.stability.outcome":c?"stable":"timeout","momentic.stability.duration_ms":Date.now()-u,"momentic.stability.settle_duration_ms":Date.now()-S,"momentic.stability.cycle_count":g.cycleCount,"momentic.stability.interval_sleep_duration_ms":g.intervalSleepDurationMs,"momentic.stability.screenshot_capture_count":g.screenshot.captureCount,"momentic.stability.screenshot_capture_duration_ms":g.screenshot.captureDurationMs,"momentic.stability.screenshot_diff_duration_ms":g.screenshot.diffDurationMs,"momentic.stability.screenshot_error_count":g.screenshot.errorCount,"momentic.stability.screenshot_change_cycle_count":g.screenshot.changeCycleCount,"momentic.stability.dom_tracking_read_duration_ms":g.dom.trackingReadDurationMs,"momentic.stability.dom_tracking_navigation_rearm_duration_ms":g.dom.navigationRearmDurationMs,"momentic.stability.dom_mutation_cycle_count":g.dom.mutationCycleCount,"momentic.stability.page_activity_unstable_cycle_count":g.pageActivityUnstableCycleCount}}async updateDomMutationTracking(t,o,n,r){let i=t==="end"&&n?Array.from(n):this.page.frames(),a=i.map(c=>t==="read"&&!n?.has(c)?"begin":t),s=await Promise.allSettled(i.map((c,u)=>{let d=a[u],m=c.evaluate(({operation:p,trackerId:h})=>{let g=window._momentic;switch(p){case "begin":case "read":return g?.ensureDomMutationTracking?.(h);case "end":g?.endDomMutationTracking?.(h);return}},{operation:d,trackerId:r});return pT({promiseGenerator:()=>m,timeoutMs:ko,codePath:`updateDomMutationTracking.${d}`,logger:this.logger}).catch(p=>{throw d!=="end"&&m.then(async h=>{h?.started&&await c.evaluate(g=>{window._momentic?.endDomMutationTracking?.(g);},r);}).catch(()=>{}),p})})),l=false;for(let[c,u]of s.entries()){let d=i[c],m=a[c];if(t==="end"&&n?.delete(d),u.status!=="fulfilled"||u.value===void 0)continue;m==="begin"&&n?.add(d);let p=o?.get(d);o?.set(d,u.value.revision),t==="read"&&(m==="begin"||u.value.started||p!==u.value.revision)&&(l=true);}return l}async clickUsingVisualCoordinates(t,o){return fi({logger:this.logger,operation:"click",targetMode:"coordinates",trace:{name:"browser.click"},fn:async()=>{let{x:n,y:r}=t;this.logger.debug({x:n,y:r},"Executing mouse click with visual coordinates"),await this.waitForPageLoad(),await this.runWithMainFrameNavigationLatch({page:this.page,action:()=>this.page.mouse.click(n,r,{button:o.rightClick?"right":"left",clickCount:o.iterations??(o.doubleClick?2:1)})});}})}async dragAndDropUsingVisualCoordinates(t,o,n){await fi({logger:this.logger,operation:"drag",targetMode:"coordinates",trace:{name:"browser.drag"},fn:()=>uTe(this.page,t,o,n)});}async mouseDragUsingVisualCoordinates(t){await fi({logger:this.logger,operation:"drag",targetMode:"coordinates",trace:{name:"browser.drag"},fn:async()=>{let{fromTarget:o,...n}=t;await Bq({...n,page:this.page,visualTarget:o,isAndroid:this.properties.isAndroid??false});}});}async hoverUsingVisualCoordinates(t){await fi({logger:this.logger,operation:"hover",targetMode:"coordinates",trace:{name:"browser.hover"},fn:()=>this.page.mouse.move(t.x,t.y,{steps:3})});}async getElementLocation(t){let o=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:true,includePaintOrder:true},timeout:ft}),n=await ge(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:Go});this.operatingSystem==="darwin"&&n===1&&(n=wbe);let r=o.documents[0],i=r.layout,a=r.nodes,s=a.nodeName||[],l=a.backendNodeId||[],c=i.nodeIndex,u=i.bounds,d=-1;for(let b=0;b<s.length;b++)if(l[b]===t){d=c.indexOf(b);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${t}`);let[m=0,p=0,h=0,g=0]=u[d];m/=n,p/=n,h/=n,g/=n;let f=m+h/2,y=p+g/2;return {centerX:f,centerY:y}}async scrollVertical(t){return fi({logger:this.logger,operation:"scroll",trace:{name:"browser.scroll"},fn:async()=>Dq({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:0,directionX:null,deltaY:t?Math.abs(t):null,directionY:t&&t>0?"down":"up",signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})})}async scrollHorizontal(t){return fi({logger:this.logger,operation:"scroll",trace:{name:"browser.scroll"},fn:async()=>Dq({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:t?Math.abs(t):null,directionX:t&&t>0?"right":"left",deltaY:0,directionY:null,signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})})}async goForward(){await this.waitForPageLoad();try{await this.page.goForward({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout});}catch(t){if(this.abortSignal?.throwIfAborted(),!this.shouldIgnorePageLoadTimeout(t))throw t;this.logger.warn({err:t},"DOMContentLoaded timed out during forward navigation, continuing due to browser setting");}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-forward"});}async goBack(){await this.waitForPageLoad();try{await this.page.goBack({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout});}catch(t){if(this.abortSignal?.throwIfAborted(),!this.shouldIgnorePageLoadTimeout(t))throw t;this.logger.warn({err:t},"DOMContentLoaded timed out during back navigation, continuing due to browser setting");}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-back"});}async reinitializeCDPClient(t){if(!await this.cdpClient.reinitialize(t))throw new ne("UserInfrastructureError",`Failed to attach Chrome inspector session to tab (${this.page.url()})`)}async stopScreencast(){if(this.clientCallbacks?.onScreencastFrame)try{await this.cdpClient.send({method:"Page.stopScreencast",params:{}});}catch{}}async changeActivePage(t,o){let n=this.page!==t;n&&await this.stopScreencast(),await t.bringToFront(),n&&(this.recordUrlVisited(t.url()),await this.trackPageVideo(t),await this.callRrweb(this.page,"__momenticRrwebFlush"),this.page=t,await this.callRrweb(t,"__momenticRrwebTakeFullSnapshot")),await this.reinitializeCDPClient(o??this.pageLoadTimeout);}async trackPageVideo(t){if(!this.onVideoPageChange)return;this.lastVideoActivationPage=t;let o=new Date,n=this.trackedVideoNames.get(t);if(n){this.onVideoPageChange({videoName:n,timestamp:o});return}if(!this.isRemoteBrowser){let s=await t.video()?.path();if(s){let l=basename(s);this.trackedVideoNames.set(t,l),this.onVideoPageChange({videoName:l,timestamp:o});}return}let r=t.video();if(!r||!this.videoOutputPath)return;let i=this.videoOutputPath,a=`${Date.now()}-${randomUUID()}.webm`;this.trackedVideoNames.set(t,a),this.onVideoPageChange({videoName:a,timestamp:o}),this.pendingRemoteVideoSaves.push(()=>de({name:"web-agent.video.save_as",serviceName:"browser",attributes:{"momentic.video.name":a,"momentic.video.remote_browser_session":true},fn:()=>r.saveAs(join(i,a))}));}async recordTabActivation(t){!this.onVideoPageChange||t===this.lastVideoActivationPage||await this.trackPageVideo(t);}startPendingRemoteVideoSaves(){let t=this.pendingRemoteVideoSaves.splice(0);if(t.length!==0)for(let o of t)this.activeRemoteVideoSaves.push(o());}async finishPendingRemoteVideoSaves(){let t=this.activeRemoteVideoSaves.splice(0);if(t.length===0)return;let o=await de({name:"web-agent.video.finish_pending_saves",serviceName:"browser",attributes:{"momentic.video.pending_save_count":t.length,"momentic.video.remote_browser_session":this.isRemoteBrowser},fn:()=>Promise.allSettled(t)});for(let n of o)n.status==="rejected"&&this.logger.warn({err:n.reason},"Could not save browser video, continuing...");}async createNewTab(t,o){let n=await this.context.newPage();await this.changeActivePage(n,o?.loadTimeoutMs),await this.navigate({url:t,initialNavigation:true,...o}),this.handleAvailableTabsChange();}async switchToPage(t,o){let n,r=0,i=Date.now(),a=o?.timeoutMs??this.smartWaitingTimeout,s=Math.max(o?.loadTimeoutMs??this.pageLoadTimeout,this.pageLoadTimeout),l=true;for(;l;){try{await this.switchToPageHelper(t,{loadTimeoutMs:s});return}catch(c){this.logger.warn({err:c},"Error switching to page, retrying..."),n=c,r++;}if(l=r<2||o?.retry===true&&Date.now()-i<a,!l)break;await gt(Qr);try{await this.waitForPageLoad();}catch(c){this.logger.warn({err:c},"Error waiting for page load during page switch, retrying...");}}throw n}findMatchingOpenPage(t){let o=this.context.pages().map((r,i)=>({page:r,url:r.url(),index:i})),n;if(t.type==="INDEX"){let r=Number(t.index);if(isNaN(r))throw new ne("UserConfigurationError",`Page index ${t.index} is not a number`);if(r<0||r>=o.length)throw new ne("ActionFailureError",`Page index ${t.index} exceeds the number of available pages: ${JSON.stringify(o.map(i=>i.url))}`);n=o[r];}else {let r=o.filter(i=>t.type==="SUBSTRING"?i.url.includes(t.substring):i.url.match(t.pattern));r.length>1&&this.logger.warn(`More than one page matches the page switch criteria: ${JSON.stringify(r.map(i=>i.url))}`),n=r[r.length-1];}if(!n)throw new ne("ActionFailureError",`Could not find matching page using criteria: ${JSON.stringify(t)}.
|
|
7969
7969
|
Available pages:${JSON.stringify(o.map(r=>r.url))}`);return n}async switchToPageById(t,o){let n=this.context.pages(),r=n.find(i=>this.pageIds.get(i)===t);return r?(await this.activateMatchedPage({page:r,url:r.url(),index:n.indexOf(r)},`tab id ${t}`,o),true):false}async switchToPageHelper(t,o){let n=this.findMatchingOpenPage(t);await this.activateMatchedPage(n,JSON.stringify(t),o);}async activateMatchedPage(t,o,n){if(!Bh(t.url,this.logger)){this.logger.warn(`Refusing to switch to page with invalid URL: ${t.url}`);return}this.logger.info(`Switching to tab ${t.index} with url ${t.url}`),await this.changeActivePage(t.page,n?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:t.page,signal:this.abortSignal,codePath:"switch-to-tab-step",loadTimeoutMs:n?.loadTimeoutMs});let r=t.page.url();if(this.page!==t.page||t.page.isClosed())throw new ne("InvalidBrowserStateError",`Tab switch verification failed. Expected ${o}, active URL is ${r}`);this.handleAvailableTabsChange();}async closePage(t,o){let n,r=0,i=Date.now();for(;r<2||o?.retry&&Date.now()-i<this.smartWaitingTimeout;){try{let a=t.type==="CURRENT"?this.page:this.findMatchingOpenPage(t).page;if(this.context.pages().length<=1)throw new ne("InvalidBrowserStateError","Cannot close last open tab");if(!Bh(a.url(),this.logger))throw new ne("ActionFailureError",`Cannot close page with invalid URL: ${a.url()}`);this.logger.info(`Closing tab with URL: ${a.url()}`),await a.close(),await this.waitForPageLoad(),this.handleAvailableTabsChange();return}catch(a){if(a instanceof ne)throw a;this.logger.warn({err:a},"Error closing page, retrying..."),n=a,r++,await gt(Qr);}try{await this.waitForPageLoad();}catch(a){this.logger.warn({err:a},"Error waiting for page load during tab close, retrying...");}}throw n}async setCookie(t){let o;return typeof t=="string"?o=AP(t):o=[t],await this.context.addCookies(o),o}async setLocalStorage(t,o){let n;for(let r=0;r<2;r++)try{await this.evaluateFunctionInPage(([i,a])=>{i&&localStorage.setItem(i,a||"");},[t,o],`setting local storage key ${t}`);return}catch(i){n=i;}if(n)throw n}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){try{await ge(this.exposeRecordingBindingsHelper(),{milliseconds:this.pageLoadTimeout});}catch(t){t instanceof Error&&t.message.includes("already registered")||this.logger.error({err:t},"Failed to install Momentic libraries for action recording");}}async exposeRecordingBindingsHelper(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0),await this.context.exposeBinding("captureTargetedEvent",({frame:t},o)=>{this.transformer&&ETe({event:o,frame:t,transformer:this.transformer,enricher:this.enricher,lastScreenshotForRecording:this.lastScreenshotForRecording?.toString("base64"),logger:this.logger,autoExpandIframes:!!this.userControlledBrowserSettings.autoExpandIframes});}),await this.context.exposeBinding("captureKeystroke",async(t,o)=>{this.transformer&&this.transformer.recordKeystroke(o);});}async exposeRrwebBinding(){try{await ge(this.context.exposeBinding("__momenticRrwebEmit",(t,o)=>{t.page===this.page&&this.handleRrwebEventsJson(o);}),{milliseconds:this.pageLoadTimeout});}catch(t){t instanceof Error&&t.message.includes("already registered")||this.logger.error({err:t},"Failed to expose rrweb recording binding");}}handleRrwebEventsJson(t){let o=this.clientCallbacks?.rrweb;if(!o)return;let n;try{n=JSON.parse(t);}catch(i){this.logger.warn({err:i},"Dropped an unparseable rrweb event batch");return}let r=z.array(wte).safeParse(n);!r.success||r.data.length===0||o.onEvents(r.data);}async callRrweb(t,o){if(!(!this.clientCallbacks?.rrweb||t.isClosed()))try{await ge(t.evaluate(n=>window[n]?.(),o),{milliseconds:fmt});}catch(n){this.logger.warn({err:n,method:o},"rrweb call in the tab failed");}}async startRecordingCrons(t){if(t.aborted)return;let o,n=(await this.getOpenPages()).map(l=>l.url),r=0,i=false,a=async()=>{if(t.aborted||r>8){clearTimeout(o);return}i=true;let l;try{l=(await this.getOpenPages()).map(u=>u.url),r=0;}catch(u){this.logger.debug({err:u},"Failed getting new open pages during recording tab switch cron, skipping..."),r++;return}let c=this.url();for(let u=l.length-1;u>=n.length;u--){let d=l[u];Bh(d,this.logger)&&d!==c&&this.logger.info({lastActivePages:n,currentUrl:c,newOpenPages:l},"Auto-following new tab during recording"),await this.switchToPage({type:"INDEX",index:String(u)});break}n=l;};o=setInterval(async()=>{if(!i){i=true;try{await a();}catch(l){this.logger.error({err:l},"Error while checking pages during recording");}finally{i=false;}}},Qr);let s=async()=>{clearInterval(o);};t.addEventListener("abort",s,{once:true});}async startRecording(t,o,n){this.logger.debug({isClickToRecord:n},"Starting recording mode in Chrome browser"),await this.startRecordingCrons(t),await this.page.evaluate(i=>{let s=window._momentic;s._MOMENTIC_RECORDING_ACTIVE=true,s._MOMENTIC_CLICK_RECORD_ACTIVE=i;},n),this.transformer=o,await this.injectKnowledgeBaseIntoBrowser(this.page);let r=async()=>{this.transformer=void 0,this.lastScreenshotForRecording=void 0;try{await this.page.evaluate(()=>{let a=window._momentic;a._MOMENTIC_RECORDING_ACTIVE=!1,a._MOMENTIC_CLICK_RECORD_ACTIVE=!1;});}catch{}};t.addEventListener("abort",r,{once:true});}async getSelectOptions(t){return await t.evaluate(n=>Array.from(n.querySelectorAll("option")).map(i=>({value:i.value,label:i.label})),void 0,{timeout:ko})}getActivePage(){return this.page}async getActivePageOrFrame(){return de({name:"browser.getActivePageOrFrame",serviceName:"browser",fn:()=>this.getActivePageOrFrameHelper()})}async getActivePageOrFrameHelper(){let t=await this.stateManager.resolveActiveFrameConfig({});return t?(await this.loadFrameAndRecordUrl({root:t.frame,signal:this.abortSignal,codePath:"get-active-frame-locator"}),t.frame):this.page}async loadFrameAndRecordUrl({root:t,signal:o,codePath:n,loadTimeoutMs:r}){let i=r??this.pageLoadTimeout,a=t.url();if(!a.includes("chrome-error://")){try{await pT({promiseGenerator:async()=>t.waitForLoadState("domcontentloaded",{timeout:i}),signal:o,codePath:`loadFrameAndRecordUrlDomContentLoad-${n}`,logger:this.logger,timeoutMs:i});}catch(s){let l=s;if(o?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(l,true))this.logger.warn({err:l,url:a,codePath:n},"DOMContentLoaded timed out while waiting for frame load, continuing due to browser setting");else {if(l.name==="AbortError")throw new ne("UserInfrastructureError",`The page with URL ${tn(a,50)} did not load within the configured timeout (${i}ms)`);if(!l.message.includes("detached"))throw l}}try{await pT({promiseGenerator:async()=>t.waitForLoadState("load",{timeout:i}),signal:o,codePath:`loadFrameAndRecordUrlPageLoad-${n}`,logger:this.logger,timeoutMs:i});}catch(s){this.logger.warn({err:s,codePath:n,url:a},"Failed waiting for current frame to load, continuing...");}this.recordUrlVisited(t.url());}}async getCondensedHtml(t){let{skipWait:o=false}=t??{};return o||(await this.waitForPageLoad(),await this.waitForStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let t=await this.getRawCondensedHtml();return tmt.html(t,{indent_size:1,indent_with_tabs:false,preserve_newlines:false})}async getRawCondensedHtml(){return jn().startAsyncSpan("GET_PAGE_STATE",()=>fi({logger:this.logger,operation:"read_page",trace:{name:"browser.read_page"},fn:()=>this.getRawCondensedHtmlHelper()}),{})}async getRawCondensedHtmlHelper(){let t=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(t,this.logger,this.abortSignal);let{result:o,error:n}=await Or({fn:({bannedAttributes:r})=>window._momentic.getCondensedHtmlTree({bannedAttributes:r}),root:t,arg:{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},timeout:Go,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!o)throw new ne("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return o}async getRawArchivalHtml(){let t=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(t,this.logger,this.abortSignal);let{result:o,error:n}=await Or({fn:({bannedAttributes:r})=>window._momentic.getArchivalHtmlTree({bannedAttributes:r}),root:t,arg:{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},timeout:Go,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting archival HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!o)throw new ne("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return o}registerDialogHandler(t){let o=async n=>{try{t==="ACCEPT"?await n.accept():await n.dismiss();}catch(r){this.logger.warn({err:r},"Failed to handle dialog");}};this.page.once("dialog",o);}async evaluateFunctionInAllFrames(t,o){return this.stateManager.executeFunctionInAllFrames(t,o)}async evaluateFunctionInPage(t,o,n,r=Go){let i=await this.getActivePageOrFrame();return Or({root:i,fn:t,arg:o,timeout:r,waitForPageLoad:()=>this.waitForPageLoad(),codePath:n})}async evaluateCodeInPage({code:t,fragment:o,context:n,timeoutMs:r=Sh}){let i=ESe(),a={code:t,fragment:o,context:n},{result:s}=await ge(this.page.evaluate(i,a),{milliseconds:r,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new ne("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${r/1e3} seconds`)},signal:this.abortSignal});return s}async getDomNodeFromPixelPosition(t,o){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:Go});let n;try{n=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:t,y:o},timeout:ko});}catch(r){throw this.logger.warn({err:r,x:t,y:o},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return n}async getDomNodeFromPositionPercentages(t,{percentX:o,percentY:n}){if(o<0||o>1||n<0||n>1)throw new ne("UserConfigurationError","Invalid percent passed to percentage location");let{width:r,height:i,upperBound:a,leftBound:s}=await this.getViewportOffsetDetails(t),l=Math.round(a),c=Math.round(s),u=Math.ceil(r*o),d=Math.ceil(i*n),m=u+c,p=d+l;return this.getDomNodeFromPixelPosition(m,p)}async highlightFromPositionPercentages(t){let o=await this.getActivePageOrFrame(),n;try{n=await this.getDomNodeFromPositionPercentages(o,t);}catch{}return n?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:ko,params:{highlightConfig:Hbe,backendNodeId:n.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:ko,method:"Overlay.hideHighlight",params:{backendNodeId:n?.backendNodeId}});}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:ko});}catch{}}async getTargetFromPositionPercentages(t){let o=await this.getActivePageOrFrame(),n=await this.getDomNodeFromPositionPercentages(o,t);return this.getTargetFromBackendNodeId({root:o,backendNodeId:n.backendNodeId,allowNotActionableNodesOverride:t.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:t,backendNodeId:o,allowNotActionableNodesOverride:n}){let r=this.stateManager.domGraph?.backendIdToNode[o];if(!r)throw new Error("No DOM node was found with the given backend ID");let i=r?.attributes[jy],a=parseInt(i??"");if(!i||isNaN(a))throw new Error("No data-momentic-id was found on the DOM node");let s=t.locator(vp(a)),l=await this.fetchHtmlAttributes({locator:s,logger:this.logger,allowNotActionableNodesOverride:n}),c={id:-1,dataMomenticId:a,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...l};return this.logger.debug({target:c},"Tied backend ID to HTML node"),{target:c,locator:s}}async performTargetRedirection(t,o){try{return await fi({logger:o,operation:"locator_redirect",fn:()=>de({name:"browser.target_redirection",attributes:{op:"locator_redirect","momentic.locator_redirect.timeout_ms":ft,...gD(o)},fn:async n=>{try{let r=await ge(this.performTargetRedirectionHelper(t,o),{milliseconds:ft});return n?.setAttribute("momentic.locator_redirect.outcome",r.metadata.outcome),n?.setAttribute("momentic.locator_redirect.timed_out",!1),r}catch(r){throw n?.setAttributes({"momentic.locator_redirect.outcome":"error","momentic.locator_redirect.timed_out":r instanceof zs}),r}}})})}catch(n){return o.warn({err:n},"Error performing target redirection, using original element"),{metadata:{outcome:"error"}}}}async performTargetRedirectionHelper(t,o){let n=Date.now(),{locator:r,originalElementLocationResult:i}=t,a=await r.boundingBox({timeout:ft});if(!a)return o.warn(`Attempted to click on element with no bounding box: ${i?.serializedElement}`),{metadata:{outcome:"no bounding box"}};let{x:s,y:l,width:c,height:u}=a,d=this.getViewport();if(s<0||l<0||!d||s+c>d.width||l+u>d.height)return o.info("Skipping locator redirection because the element is outside the viewport"),{metadata:{outcome:"element outside viewport"}};let m=await this.getActivePageOrFrame(),{dataMomenticId:p,mPathSelector:h,error:g,serializedElement:f,foundElementRelativePoint:y,force:b,logs:S}=await r.evaluate(v=>{let w=window._momentic;if(!w?.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return w.performTargetRedirection(v)},void 0,{timeout:ko}),E=Date.now()-n;return g?(o.warn({err:g,serializedElement:f,duration:E,force:b,logs:S},"Got error from target redirection with bounding box"),{metadata:{outcome:"error",logs:S,serializedElement:f,force:b}}):p?(o.info({newDataMomenticId:p,serializedElement:f,duration:E,force:b,logs:S},"Redirected target to new element with bounding box with data-momentic-id"),{targetingResult:{locator:m.locator(vp(p)),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:y,force:b}},metadata:{outcome:"redirected to new element",logs:S,serializedElement:f,relativeClickPoint:y,force:b}}):h?(o.info({newMPathSelector:h,serializedElement:f,duration:E,force:b,logs:S},"Redirected target to new element with bounding box with mPath"),{targetingResult:{locator:m.locator(h),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:y,force:b}},metadata:{outcome:"redirected to new element",logs:S,serializedElement:f,relativeClickPoint:y,force:b}}):y?(o.info({foundElementRelativePoint:y,serializedElement:f,duration:E,force:b,logs:S},"Chose specific visible point on original element"),{targetingResult:{locator:r,originalElementLocationResult:i,serverSideBoundingBox:await r.boundingBox({timeout:ft}),hints:{relativeXYToLocator:y,force:b}},metadata:{outcome:"specific visible point on original",logs:S,serializedElement:f,relativeClickPoint:y,force:b}}):b?this.userControlledBrowserSettings.forceClickForMissingRedirectElement?(o.info({serializedElement:f,duration:E,force:b,logs:S},"Forcing click on original element"),{targetingResult:{locator:r,serverSideBoundingBox:await r.boundingBox({timeout:ft}),originalElementLocationResult:i,hints:{force:b}},metadata:{outcome:"force click on original",logs:S,serializedElement:f,force:b}}):(o.info({serializedElement:f,duration:E,force:b,logs:S},"No redirect candidates found and forceClickForMissingRedirectElement is off, skipping force click"),{metadata:{outcome:"no action taken"}}):{metadata:{outcome:"no action taken"}}}async fetchHtmlAttributes({locator:t,logger:o=this.logger,originalElementLocationResult:n,allowNotActionableNodesOverride:r}){let{showZeroOpacityElements:i,bannedAttributes:a}=this.userControlledBrowserSettings,s=this.userControlledBrowserSettings.hybridSelectorMode??Ez,l=await t.evaluate((c,u)=>{let m=window._momentic;return m?.generateHtmlCacheAttributes?m.generateHtmlCacheAttributes(c,u):{warnings:[],error:"generateHtmlCacheAttributes is not defined"}},{generateHybridSelector:s==="test"||s==="prefer"||s==="always",originalElementLocationResult:n,showZeroOpacityElements:r?true:i,bannedAttributes:a},{timeout:Go});if("error"in l&&l.error)throw l.error.startsWith(cbe)?new Mu(l.error):l.error.startsWith(ube)?new t_(l.error):new Error(l.error);return l.warnings.length&&o.warn(l,"Got warnings while generating HTML attributes for target"),l.attributes}async moveMouseFromPositionPercentages(t,o){let n=this.getViewport();if(!n)throw new Error("Cannot move mouse using percentages without viewport");let r=Math.ceil(n.width*t),i=Math.ceil(n.height*o);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseMoved",x:r,y:i,button:"left",clickCount:0}}),{x:r,y:i}}async clickMouseFromPositionPercentages(t,o,n){let r=this.getViewport();if(!r)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(r.width*o),a=Math.ceil(r.height*n);await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:t==="down"?"mousePressed":"mouseReleased",x:i,y:a,button:"left",clickCount:t==="down"?1:0},timeout:ko});}async scrollFromPositionPercentages(t,o,n,r){let i=this.getViewport();if(!i)throw new Error("Cannot scroll using percentages without viewport");let a=Math.ceil(i.width*t),s=Math.ceil(i.height*o);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseWheel",deltaX:a,deltaY:s,x:n,y:r}}),{deltaX:a,deltaY:s}}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(t){setTimeout(()=>{try{t.cleanup();}catch(o){this.logger.debug({err:o,filePath:t.filePath},"Failed cleaning up file after upload");}},3e4),await this.setFileChooserHandlerHelper(t);}logToUserConsole(t,o,n,...r){let i=this.context.pages().indexOf(t);i=i===-1?0:i,yq(t,this.debugData,i,{type:o,text:`[MOMENTIC] ${n}`,args:r});}async setFileChooserHandlerHelper({filePath:t,filename:o}){if(!existsSync(t)){let l=`File chooser triggered after the source file ${t} has been cleaned up, ignoring...`;this.logger.warn(l),this.logToUserConsole(this.page,"error",l);return}if(statSync(t).isDirectory())throw new Yp(`The file for the upload step is a directory, not a file: ${t}. Please provide a path to a file.`);let n=o?.trim()||basename(t),r=readFileSync(t),i=extname(t),a=Vw[i];this.page.once("filechooser",async l=>{this.logger.info({filePath:t,fileName:n},"File chooser triggered");try{if(!existsSync(t))throw new Error(`File chooser triggered after the source file ${t} has been cleaned up, ignoring...`);await l.setFiles({name:n,buffer:r,mimeType:mmt.getType(t)||"application/octet-stream"},{timeout:dD});}catch(c){this.logger.error({err:c},"Error handling file chooser"),this.logToUserConsole(this.page,"error",c.message);}});let s=r.toString("base64");await this.evaluateFunctionInPage(({fileName:l,base64Data:c,mimeType:u})=>{let d=window,m=atob(c),p=new Array(m.length);for(let g=0;g<m.length;g++)p[g]=m.charCodeAt(g);let h=new Uint8Array(p);d.showOpenFilePicker=async()=>(console.info("[MOMENTIC] showOpenFilePicker called"),[{kind:"file",name:l,isSameEntry(f){return Promise.resolve(f.name===l)},queryPermission(f){return console.info("[MOMENTIC] MomenticFile.queryPermission called"),Promise.resolve("granted")},async requestPermission(f){return console.info("[MOMENTIC] MomenticFile.requestPermission called"),Promise.resolve("granted")},async getFile(){console.info("[MOMENTIC] MomenticFile.getFile called");let f=new Blob([h],{type:u});return new File([f],l,{type:u})},async createSyncAccessHandle(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")},async createWritable(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}}]);},{fileName:n,base64Data:s,mimeType:a},"set-file-chooser-handler",5e3);}getSerializedFormFromA11yId(t){return this.stateManager.a11yIdToNodeMap[t]?.getNodeOnlySerializedForm()}retrieveAndClearDebugData(){let t={...this.debugData};return this.debugData={logsPerPage:[]},t}async copy(t){try{await this.evaluateFunctionInPage(o=>navigator.clipboard.writeText(o),t,"copying text to clipboard");}catch(o){if(o instanceof Error&&o.message.includes("Document is not focused")){await this.evaluateFunctionInPage(()=>{document.activeElement||document.body.focus();},void 0,"focusing on body element before copying to clipboard"),await this.press("Tab",{}),await this.press("Shift+Tab",{}),await this.evaluateFunctionInPage(n=>navigator.clipboard.writeText(n),t,"copying text to clipboard");return}throw o}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:true});}async registerRequestListener(t){return this.page.waitForResponse(o=>{let n=o.request();return t.matches({url:n.url(),method:n.method()})})}async registerRequestRecorder(t,o){this.requestRecorders[t]=o,await this.ensureNetworkRoutesForOpenPages();}removeRequestRecorder(t){delete this.requestRecorders[t],this.scheduleRemoveUnusedNetworkRoutes();}async setHeader(t,o,n){hSe(t),this.customHeaders.push({key:t.toLowerCase(),value:o,matcher:n}),await this.ensureNetworkRoutesForOpenPages();}async registerMock(t,o,n,r){let i=t??randomUUID();return this.mocks[i]={matcher:o,generateResponse:n,fetchOriginalResponse:r},await this.ensureNetworkRoutesForOpenPages(),i}removeMock(t){if(!t){this.mocks={},this.scheduleRemoveUnusedNetworkRoutes();return}delete this.mocks[t],this.scheduleRemoveUnusedNetworkRoutes();}async setOfflineMode(t){await this.context.setOffline(t),this.offline=t;}get smartWaitingTimeout(){return this.userControlledBrowserSettings.smartWaitingTimeoutMs??Rbe}shouldIgnorePageLoadTimeout(t,o=false){if(!this.userControlledBrowserSettings.ignorePageLoadTimeouts)return false;if(o&&t.name==="AbortError")return true;let n=t.message.toLowerCase();return n.includes("domcontentloaded")&&(n.includes("timeout")||n.includes("exceeded"))}get userBrowserSettings(){return cloneDeep(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??Kv}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let t=TD();for(let o of t)if(!(!existsSync(o)||!statSync(o).isDirectory()||!["new","pending","completed"].some(r=>{let i=join(o,r);return existsSync(i)&&statSync(i).isDirectory()&&readdirSync(i).length>0})))return o}};var Vy=class{constructor(t,o){this.pagesStream=t;this.entriesStream=o;}closed=false;inProgressEntries={};writePage(t){this.closed||this.pagesStream.write(`${JSON.stringify(t)}
|
|
@@ -7980,7 +7980,7 @@ ${e}`;default:return e}}async function kl({frameConfig:e,action:t,browser:o}){le
|
|
|
7980
7980
|
`),c=0,u=[],d=0,m=[],p=[],h=false;for(;c<l.length;){h&&(s.push({ids:m,content:u.join(`
|
|
7981
7981
|
`),tokenLength:d}),u=[],d=0,m=p.length?[p[p.length-1].id]:[],h=false);let g=l[c],f=Rt(g);d+=f,g.length>a&&(g=g.slice(0,a));let S=Array.from(g.matchAll(jTe)).map(M=>M&&M.length>=3?{tagName:M[1],id:M[2]}:void 0).filter(M=>!!M),v=Array.from(g.matchAll($mt)).map(M=>M&&(M[2]||M[4])).filter(M=>!!M);v.reverse();let R=g.replace(/ id="[0-9]+"/g,"");u.push(R);for(let M of S)m.push(M.id),p.push(M);for(let M of v){let z=p[p.length-1];z&&z.tagName===M&&p.pop();}let w=p.some(M=>Vmt.includes(M.tagName)),P=l[c+1]??"",I=Rt(P),O=Array.from(P.matchAll(jTe)).map(M=>M&&M.length>2?M[1]:void 0).filter(M=>!!M),N=O.some(M=>$Te.includes(M)),D=O.some(M=>Gmt.includes(M));d+I>=i&&(h=true),d>=n&&(N&&!w||v.some(M=>Wmt.includes(M)))&&(h=true),d>=r&&D&&!w&&(h=true),c++;}return u.length&&s.push({ids:m,content:u.join(`
|
|
7982
7982
|
`),tokenLength:d}),s.forEach((g,f)=>{let y=g.ids[0],b=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:y,maxId:b},`Chunk for page filtering (index ${f+1}/${s.length})`);}),{chunks:s}}var VTe=5e6,Ymt=1e5,Jmt=3e4,Xmt=6e4,Qmt=1e5;async function Ml(e){let{fixtures:t}=e,{logger:o}=t,n=e.tree,r=e.serializedTree,i=Rt(r);if(i>VTe)throw new ne("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${VTe} tokens.`);if(i>Ymt){let a=GTe({serializedTree:r,options:HTe,logger:o}),s=randomUUID();n=await Zmt({...e,chunks:a.chunks,callId:s}),r=n.serialize();let l=Rt(r);o.info({oldTokens:i,newTokens:l,langfuseCallId:s},"Filtered page using AI chunk ranking");}return r}async function Zmt({type:e,callId:t,chunks:o,description:n,fixtures:r,tree:i}){let{generator:a,signal:s,logger:l}=r,c=await a.rankChunksWithAi({chunks:o,description:n,type:e,softTokenLimit:Jmt,mediumTokenLimit:Xmt,hardTokenLimit:Qmt,callId:t},{abortSignal:s,logger:l,loggerTags:fo(l)}),u=[];return o.forEach((m,p)=>{c.indices.includes(p)&&(u=u.concat(m.ids));}),i.pruneUsingRelevantIds(new Set(u))}function tpt(e,t){return t.markIneligibleElementsInChecks===true&&e.source==="ELEMENT_CHECK"&&e.allowNotActionableNodesOverride===false?true:void 0}async function Gq(e,t){if(!e.description)throw new ne("UserConfigurationError","Cannot locate element with empty description");return kl({action:async()=>qTe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function WTe(e,t){if(e.length===0)return [];if(e.some(s=>s.iframeUrl))throw new ne("UserConfigurationError","Batch element location does not support explicit iframe URLs");let o=e[0],n=e.findIndex(s=>s.allowNotActionableNodesOverride!==o.allowNotActionableNodesOverride||s.allowIneligibleTagRedirect!==o.allowIneligibleTagRedirect||s.showZeroOpacityElementsOverride!==o.showZeroOpacityElementsOverride||s.filterByViewport!==o.filterByViewport||s.skipWait!==o.skipWait);if(n!==-1)throw new ne("UserConfigurationError",`Batch element location requires identical page-capture settings, but target ${n+1} differs from target 1`);let r=await KTe(o,t),i=Promise.resolve(),a=async s=>{let l=i.then(s,s);return i=l.then(()=>{},()=>{}),l};return Promise.allSettled(e.map(s=>qTe(s,t,{...r,materialize:a})))}async function qTe(e,t,o){let{disableCache:n,testContext:r,source:i,memory:a,logger:s,skipSavingVisualAttributes:l,isAutoHeal:c,cacheBustReason:u,acceptElementMovedError:d,pastLocatorMiss:m}=e,{orgId:p,browser:h,codeEvaluator:g,generator:f,abortSignal:y}=t,b=e.description,S=jn(),E=e.useMemory&&!n;r&&(b=await Ma({orgId:p,s:b,context:r,codeEvaluator:g,signal:y,logger:s})),i&&(b=FTe(b,i));let{serializedTree:v,tree:R,screenshotBuff:w}=o??await KTe(e,t);if(m?.serializedTree===v&&m?.screenshotBuff?.equals(w))throw s.info("Skipping AI locate, the page is unchanged since the last miss"),new Jp("Could not find any relevant element: the page has not changed since the last attempt",void 0);let P=v,I=false,O=`data:image/jpeg;base64,${w.toString("base64")}`,N=fo(s);P=await Ml({type:"locator",description:b,screenshot:O,serializedTree:v,tree:R,fixtures:{generator:f,signal:y,logger:s,orgId:p}}),P!==v&&(I=true);let D=await S.startAsyncSpan("AI_LOCATOR_CALL",async k=>{c&&(k.attributes.isAutoHeal=true),u&&(k.attributes.cacheBustReason=u);let Q=await f.getElementLocation({browserState:P,goal:b,screenshot:O,source:i,markIneligibleElementsInChecks:tpt(e,h.userBrowserSettings),memory:E?a:void 0},{disableCache:n,effort:e.effort,onEffectiveEffort:e.onEffectiveEffort,abortSignal:y,logger:s,loggerTags:N,useMemory:E,cacheBustReason:u});if(k.result=Q,E&&(k.attributes.useMemory=true,k.attributes.memoryTraces=Q.rememberedTraces??[],Q.updatedMemory&&(k.attributes.memorySavedNewResult=true)),S.storeTraceAsset){let H=randomUUID();S.storeTraceAsset({snapshotId:H,data:w}),k.screenshotSnapshotId=H;}return Q});if(s.debug({usedRag:I,result:D},"Got locator result"),!(D.id>0))throw m&&(m.serializedTree=v,m.screenshotBuff=w),new Jp(`Could not find any relevant element: ${D.thoughts}`,D.updatedMemory?{type:"GCS_TRACES",traces:D.updatedMemory}:void 0);let z=()=>S.startAsyncSpan("TARGET_RESOLUTION",async k=>{let Q=await h.createTargetFromA11yId({id:D.id,requirements:D.requirements,additionalElements:D.additionalElements,description:b,targetSource:"AI",logger:s,skipSavingVisualAttributes:l,acceptElementMovedError:d});return k.result={serializedElement:Q.target.nodeOnlySerializedHtml??"Unknown HTML element"},Q}),{resolution:J,target:W,frameConfig:V}=o?.materialize?await o.materialize(z):await z();if(J.a11yNode?.properties?.hidden&&J.a11yNode?.properties?.hidden!=="false")throw new ne("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: ${J.displayString}`);return E&&(D.updatedMemory?W.memory={type:"GCS_TRACES",traces:D.updatedMemory}:a&&(W.memory=a)),{thoughts:D.thoughts,target:W,resolution:J,frameConfig:V,screenshot:O}}async function KTe(e,t){let{allowNotActionableNodesOverride:o,allowIneligibleTagRedirect:n,showZeroOpacityElementsOverride:r,filterByViewport:i,skipWait:a,logger:s}=e,{browser:l,abortSignal:c}=t,u=jn(),{serializedTree:d,tree:m}=await u.startAsyncSpan("GET_PAGE_STATE",async()=>Xd(l,{allowNotActionableNodesOverride:o,allowIneligibleTagRedirect:n,showZeroOpacityElementsOverride:r,filterByViewport:i,abortSignal:c,skipWait:a,logger:s}),{}),p=await u.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let h,g=Date.now(),f;for(;!h&&Date.now()-g<3e3;){c.throwIfAborted();try{h=await l.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(y){f=y;}}if(!h)throw new ne("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${f?.message}`);return h});return {serializedTree:d,tree:m,screenshotBuff:p}}var opt=15;async function DD({command:e,logger:t,fixtures:o,useMemory:n,maxRetries:r=opt,recoveryHint:i,effort:a,onEffectiveEffort:s}){if(!e.assertion.trim())throw new ne("ActionFailureError","Assertion command is missing the assertion content");let l=mj.optional().catch(void 0).parse(e.source);e.source&&!l&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let c=jn();return c.startAsyncSpan("AI_ASSERTION_CALL",async u=>{let{browser:d}=o,m=e.timeout?e.timeout*1e3:d.smartWaitingTimeout,p=Zre(m,r-1),h=0,g=Date.now(),f=g+m,y=g,b,S,E;try{await kl({action:()=>d.clearHighlights(),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:d,logger:t});}catch(w){t.warn({err:w},"Failed to clear highlights before AI check, continuing...");}for(;h<r;){o.abortSignal.throwIfAborted();let w=Date.now();if(h>0){if(w>=f)break;let _=f-w,O=y-w,N=Math.min(O,_);N>0&&await gt(N,o.abortSignal);}let P=Date.now();if(h>0&&P>=f)break;let I=false;try{if(b=await kl({action:async()=>{let O=await JTe(d,t,o.abortSignal);return S&&S.serializedTree===O.serializedTree&&S.screenshotBuff.equals(O.screenshotBuff)?(I=!0,b):(S=O,XTe({command:e,state:O,fixtures:o,useMemory:n,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:h,logger:t,source:l,recoveryHint:i,effort:a,onEffectiveEffort:s}))},frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:d}),b?.aiResult.result){b?.updatedMemory&&CR(e,b.updatedMemory,t);break}else throw b?.aiResult.thoughts?new ne("AssertionFailureError",b.aiResult.thoughts):new ne("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(_){o.abortSignal.throwIfAborted(),E=_ instanceof Error?_:new Error(`${_}`),I?t.info(`AI check attempt ${h} failed (re-used previous result)`):t.info({err:_},`AI check assert attempt ${h} failed, retrying...`);}finally{h++,y=P+p;}}if(!b?.aiResult.result){let w=f-Date.now();w>0&&await gt(w,o.abortSignal);}if(!b?.aiResult.result)try{b=await kl({action:async()=>XTe({command:e,state:await JTe(d,t,o.abortSignal),fixtures:o,useMemory:n,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:h,logger:t,recoveryHint:i,effort:a,onEffectiveEffort:s}),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:d});}catch(w){o.abortSignal.throwIfAborted(),E=w instanceof Error?w:new Error(`${w}`);}finally{h++;}b?.updatedMemory&&CR(e,b.updatedMemory,t);let v=b?.afterScreenshotOverride;if(v&&c.storeTraceAsset){let w=randomUUID();c.storeTraceAsset({snapshotId:w,data:v}),u.screenshotSnapshotId=w;}let R=b?.elementScreenshotOverride;if(R&&c.storeTraceAsset){let w=randomUUID();c.storeTraceAsset({snapshotId:w,data:R}),u.elementScreenshotSnapshotId=w;}if(n&&(u.attributes.useMemory=true,u.attributes.memoryTraces=b?.aiResult.rememberedTraces??[],b?.updatedMemory&&(u.attributes.memorySavedNewResult=true)),!b?.aiResult.result){u.result=b?.aiResult??{thoughts:E?.message??"AI check failed after all attempts",result:false};let w=`AI check still failing after ${h} attempts.`;throw E&&(w+=` Latest result: ${E.message}`),new ne("AssertionFailureError",w)}return u.result=b.aiResult,{...b,thoughts:b.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:d.url()}})}async function JTe(e,t,o){await e.waitForPageLoad({signal:o});let[n,r]=await Promise.all([Xd(e,{abortSignal:o,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...n,screenshotBuff:r}}async function XTe({command:e,state:t,fixtures:o,useConsensus:n,useMemory:r,highlightElementsOnFailure:i,attemptNumber:a,source:s,logger:l,recoveryHint:c,effort:u,onEffectiveEffort:d}){let {browser:m,generator:p,abortSignal:h}=o,{serializedTree:f,tree:y}=t,b=t.screenshotBuff,S=b.toString("base64"),E=m.url(),v=e.contextChoice??"MULTIMODAL",R=f;v!=="VISION_ONLY"&&(R=await Ml({type:"assertion",serializedTree:f,tree:y,description:e.assertion,screenshot:S,fixtures:{generator:p,signal:h,logger:l,orgId:o.orgId}}),R);let w={goal:e.assertion,url:E,memory:r?e.cache?.memory:void 0,browserState:R,screenshot:S,contextChoice:v,source:s,recoveryHint:c},I=await(v==="VISION_ONLY"?(O,N)=>p.getVisualAssertionResult(O,N):(O,N)=>p.getAssertionResult(O,N))(w,{useConsensus:n,attemptNumber:a,useMemory:r,disableCache:!!e.disableCache,effort:u,onEffectiveEffort:d,abortSignal:h,logger:l,loggerTags:fo(l)}),_;if((I.result||i)&&I.relevantElements?.length){I.relevantElements.map(O=>m.getSerializedFormFromA11yId(O)).filter(O=>!!O);try{let O=I.relevantElements[0],{resolution:N}=await m.createTargetFromA11yId({id:O,description:null,targetSource:"AI",skipSaveToCache:!0});_=await m.screenshot({locator:N.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(O){l.debug({err:O},"Failed to capture element screenshot for trace, continuing...");}await npt(I.relevantElements,m,l);}return {aiResult:I,afterScreenshotOverride:b,elementScreenshotOverride:_,updatedMemory:r?I.updatedMemory:void 0}}async function npt(e,t,o){let n=Date.now();for(let r of e){if(Date.now()-n>2e3){o.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await ge(t.highlightA11yId(r),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}});}catch(i){o.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}async function ZTe(e){let{command:t,logger:o,fixtures:n,disableCache:r,autoExpandIframes:i}=e,{browser:a,generator:s,abortSignal:l}=n;if(!t.goal.trim())throw new ne("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let m=Rte(t.schema);if(m)throw new ne("UserConfigurationError",m)}let c;i&&!t.iframeUrl?c=(await a.evaluateFunctionInAllFrames(rpt,{bannedAttributes:a.userBrowserSettings.bannedAttributes})).join(`
|
|
7983
|
-
`):c=await a.getCondensedHtml();let u=await a.screenshot({retries:2,respectActiveFrame:true}),d=jn();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async m=>{let p=await s.getTextExtraction({goal:t.goal,browserState:c,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${u.toString("base64")}`},{disableCache:r,abortSignal:l,loggerTags:fo(o)});if(m.result=p,ipt({tracer:d,span:m,screenshot:u,htmlState:c,logger:o}),p.result==="NOT_FOUND")throw new ne("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new ne("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:a.url()}})}catch(m){let p=G(m);throw p.includes("MaxGenerationLengthExceededError")?new ne("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 ne("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:m}}):m}}function rpt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function ipt(e){let{tracer:t,span:o,screenshot:n,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:n}),o.screenshotSnapshotId=a;let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:Buffer.from(r),extension:"html"}),o.browserStateSnapshotId=s;}catch(a){i.debug({err:a},"Failed to store extraction trace assets");}}var eve=500;async function tve(e,t){let{logger:o}=e,{abortSignal:n,browser:r}=t,i=Date.now();try{await apt(i,e,t);}catch(a){if(hm(a)||n.aborted)return;o.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=r.smartWaitingTimeout-(Date.now()-i);s>0&&await gt(s,n);}finally{o.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function apt(e,t,o){let{abortSignal:n,browser:r}=o;if(r.smartWaitingTimeout<3e3){await gt(r.smartWaitingTimeout,n);return}if(!t.description)throw new ne("UserConfigurationError","Cannot locate element with empty description");await ge(spt(e,t,o),{milliseconds:r.smartWaitingTimeout});}async function spt(e,t,o){let{logger:n,iframeUrl:r,testContext:i}=t,{abortSignal:a,browser:s,codeEvaluator:l,orgId:c}=o,u=i?await Ma({orgId:c,s:t.description,context:i,codeEvaluator:l,signal:a,logger:n}):t.description,d;for(;Date.now()-e<s.smartWaitingTimeout;){let m=Date.now();if(await kl({action:async()=>{let g=await lpt(u,t,o,d);return d=g.notReadyScreenshot,g.isReady},frameConfig:r?{type:"url",url:r}:void 0,browser:s,logger:n}))return;let h=Date.now()-m;h<eve&&await gt(eve-h,a);}}async function lpt(e,t,o,n){let{logger:r}=t,{browser:i,abortSignal:a,generator:s}=o;a.throwIfAborted();let l;try{l=await i.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(m){throw new ne("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: ${m instanceof Error?m.message:m}`)}if(n?.equals(l))return r.debug("Skipping smart waiting AI call, the page is unchanged"),{isReady:false,notReadyScreenshot:n};let u=`data:image/jpeg;base64,${l.toString("base64")}`;a.throwIfAborted();let d=await s.getSmartWaitingDecision({description:e,screenshot:u},{abortSignal:a,loggerTags:fo(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var cpt=3e4;function upt({command:e,originalCache:t,cacheToUse:o,keepMemory:n}){if(o){if(n){let r=e1(t,o);return o.target=r.target,o.updatedAt=r.updatedAt,o}if(!t){let r=Xu(e);r!=="NEGATED_CHECK"&&r!=="NEGATED_ELEMENT_VISIBLE_CHECK"&&(e.cache=void 0);return}return o.target=t.target,o.updatedAt=t.updatedAt,o}}async function rve(e){return jn().startAsyncSpan("ELEMENT_ASSERTION",async o=>dpt(e,o),{name:"Element check"})}async function dpt(e,t){let{command:o,timeoutMs:n,fixtures:r,disableCache:i}=e,{abortSignal:a}=r,s=()=>d_(o.cache)?o.cache:void 0,l=s(),c=!i&&!!l?.target&&kb(l.target),u=cloneDeep(l),d=(v=false)=>{l=upt({command:o,originalCache:u,cacheToUse:s(),keepMemory:v});},m={},p=Date.now(),h=c?Math.max(n/10,cpt):0,g=p,f=0,y,b=500,S=false;for(;f<2||Date.now()-p<n;){f++,f>1&&await gt(b,a),a?.throwIfAborted(),l=s();let v=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:P}=await ove({cacheToUse:l,skipAISmartWaiting:!v,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,S=S||P,w.success)break;d(),b=Math.min(b*1.25,1e4);}if(!y)throw new ne("InternalPlatformError",`Failed to evaluate manual element assertion in ${n}ms.`);if(a?.throwIfAborted(),!y.success){let v=s(),R=v?.target?.memory?{target:{id:-1,memory:v.target.memory}}:void 0,{result:w,elementWasFound:P}=await ove({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,S=S||P,y.success||d(true);}let E=s();return y.success&&E?.target&&!S&&(E.target=Fh(E.target),E.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function ove({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:o,pastLocatorMiss:n,params:r}){let{command:i,disableCache:a,fixtures:s,tracer:l,targetingWrapper:c}=r,{logger:u}=s;if(i.target&&!Fc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Une(i.assertion),m=mpt(i.assertion),p,h=false,g=cloneDeep(e);try{let{elementInteractedDisplayString:f,result:y,thoughts:b}=await c({tracer:l,command:i,target:i.target,cache:g?.target,action:async S=>ppt(S.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:a,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:Xu(i),skipAISmartWaiting:t,targetName:"target",pastLocatorMiss:n},retriesWithAI:o?1:0});return p={success:y.success,data:y.data,err:y.err,elementInteractedDisplayString:f,thoughts:b},h=!0,y.success||(u.warn({aiThoughts:b,elementString:f,err:y.err},"Element check found an element but failed"),p={...y,thoughts:b}),{result:p,elementWasFound:h}}catch(f){if(d)return p={success:true,thoughts:`The element described does not exist on the page: ${f.message}`,err:void 0,data:void 0},{result:p,elementWasFound:h};if(!(f instanceof ne)||f.reason!="ActionFailureError")throw f;return p={success:false,err:f,data:void 0,thoughts:void 0},u.warn({err:f},"Element check did not find an element and failed"),{result:p,elementWasFound:h}}}function mpt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function ppt(e,{command:t,fixtures:o}){return await o.browser.highlight(e),await hpt(e,t.assertion)}async function hpt(e,t){let o=true,n,r;switch(t.type){case "ELEMENT_CONTENT":{let a=await e.textContent()??"";if(r={elementTextContent:tn(a,500,true)},!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,n=new ne("AssertionFailureError",`The content ${s} '${t.value}': ${a}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:tn(await e.evaluate(s=>s.cloneNode(false).outerHTML),500,true)};let a=null;try{a=await e.getAttribute(t.attr,{timeout:3e3});}catch(s){n=new ne("AssertionFailureError",G(s)),o=false;break}if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,t.operation==="EXISTS"?n=new ne("AssertionFailureError",`The attribute ${t.attr} ${s}`):n=new ne("AssertionFailureError",`The attribute ${t.attr} ${s} '${t.value}': ${a}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{o=await e.evaluate(async(s,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return true}return false},jl*1e3);break}case "EDITABLE":{o=await e.isEditable({timeout:jl*1e3});break}case "EXISTS":{o=true;break}case "ENABLED":{o=await e.isEnabled({timeout:jl*1e3});break}case "FOCUSED":{o=await e.evaluate(s=>s===document.activeElement);break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(o=t.negated?!o:o,!o){let a=iT(t);n=new ne("AssertionFailureError",`The element ${a}`);}break}case "ELEMENT_NAME":{let a=await e.evaluate(s=>s.tagName);if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let s=iT(t);o=false,n=new ne("AssertionFailureError",`The element tag name ${s} '${t.value}': ${a}`);}break}case "ELEMENT_STYLE":{let a=await e.evaluate((s,l)=>window.getComputedStyle(s).getPropertyValue(l),t.property);if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,t.operation==="EXISTS"?n=new ne("AssertionFailureError",`The style property ${t.property} ${s}`):n=new ne("AssertionFailureError",`The style property ${t.property} ${s} '${t.value}': ${a}`);}break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:o,data:r,err:n}}function ive(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function pI(e,t){let o=await e.screenshot(t),{width:n,height:r}=wD(o);return {buffer:o,width:Math.ceil(n),height:Math.ceil(r)}}async function sve(e){let{command:t,browser:o,logger:n}=e;if(t.target&&!Fc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await o.waitForStability({logger:n}),jn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let a=await fpt(e);return i.result={success:!a.fail,message:a.thoughts},a}catch(a){throw a instanceof ne&&(i.result={success:false,message:a.message}),a}},{name:"Compare against golden"})}async function fpt({tracer:e,command:t,disableCache:o,browser:n,targetingWrapper:r,logger:i,screenshotStorage:a}){let s={clearHighlights:true,hideCaret:true},l=t.target&&Fc(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=>pI(n,{locator:O.locator,...s}),options:{...t,disableCache:o,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await pI(n,s);let u=await a.prepareGoldenScreenshotForComparison(i,t,c);if((c.height!==u.height||c.width!==u.width)&&i.warn({currHeight:c.height,currWidth:c.width,savedHeight:u.height,savedWidth:u.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(c.height-u.height)>10||Math.abs(c.width-u.width)>10){let _=`${c.width}x${c.height}`,O=`${u.width}x${u.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:u.buffer,afterScreenshotOverride:c.buffer,succeedImmediately:false,urlAfterCommand:n.url()}}let d=await Jimp.fromBuffer(c.buffer),m={width:c.width,height:c.height},p=await Jimp.fromBuffer(u.buffer),h={width:u.width,height:u.height},g,f=m.width*m.height,y=h.width*h.height,b=Math.abs(m.height-h.height),S=Math.abs(m.width-h.width);if(f>y){let _=d.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 _=p.cover({w:m.width,h:m.height});u.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,w=Adt(Vq.decode(u.buffer).data,Vq.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,P=w>v*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${P?"over":"under"} the threshold of ${v*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${S} pixels.`),P)throw new ne("ActionFailureError",I);return {fail:P,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:Vq.encode(E,75).data,succeedImmediately:false,urlAfterCommand:n.url()}}var ypt=3e4;function bpt(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(([o,n])=>{t.append(o,n);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function lve({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??ypt/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),a=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{a.append(h,g);});let s=a.toString(),l;if(gT(e.url)&&(l=e.url),o&&fT(e.url,o)&&(l=new URL(e.url,o).toString()),!l)throw new ne("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:s,headers:i,body:e.body,method:e.method},"Making HTTP request");let d=await ge((async()=>{let h=s?`${c}?${s}`:c;try{let g=bpt(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await n(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new ne("ActionFailureError",`Failed to make HTTP request: ${G(g)}`,{errOptions:{cause:g}})}})(),{milliseconds:r*1e3,fallback:()=>{throw new ne("ActionFailureError",`Fetch request timed out after ${r} seconds`)}});if(!d.ok){let h;try{h=await d.text();}catch(g){h=`Failed to read response body: ${g}`;}throw new ne("ActionFailureError",`Fetch request failed with status ${d.status}: ${h}`)}let m={};d.headers.forEach((h,g)=>{m[g]=h;});let p={status:d.status,headers:m,request:{url:d.url,method:e.method,headers:i}};if(e.body?.type==="json"&&e.body.content)try{p.request.json=JSON.parse(e.body.content);}catch{}if(d.headers.get("content-type")?.includes("json"))try{p.json=await d.json();}catch{}else d.headers.get("content-type")?.includes("text")&&(p.text=await d.text());return p}var Spt=5e3;async function FD({timeout:e=jl,...t}){let o=Date.now(),n=e*1e3,r=n+1e4,i,a=0,s=500;for(;a-o<n;){if(Date.now()-o>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await cve(t),a=Date.now();let c=a-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await gt(s,t.signal),s=Math.min(Math.floor(s*1.5),Spt);else return i}return i=await cve(t),i}async function cve(e){return jn().startAsyncSpan("PAGE_ASSERTION",async o=>{let n=await Tpt(e);return o.result={success:n.success,message:n.err?.message},n},{name:"Page check"})}async function Tpt({assertion:e,browser:t,autoExpandIframes:o}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,a;try{let s;if(o){let l=await t.evaluateFunctionInAllFrames(uve,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),s=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:s}=await t.evaluateFunctionInPage(uve,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Fm.CONTAINS:Bm.CONTAINS;a=new ne("AssertionFailureError",`The page ${l} '${e.value}'.`),r=s;}}catch(s){a=new ne("AssertionFailureError",`Failed to evaluate page content assertion: ${s instanceof Error?s.message:`${s}`}`);}return {success:i,err:a,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 uve({value:e,negated:t,returnHtml:o}){let n=document.body.innerHTML,r=n.includes(e)===!t;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&o?n:void 0}}var vpt=3e4;async function dve({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??vpt/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(gT(e.url)&&(s=e.url),o&&fT(e.url,o)&&(s=new URL(e.url,o).toString()),!s)throw new ne("ActionFailureError",`Invalid URL: ${e.url}`);let c=await ge((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(d){throw new Error(`Failed to make HTTP request: ${d}`,{cause:d})}})(),{milliseconds:r*1e3});if(!c)throw new ne("ActionFailureError",`GraphQL request timed out after ${r} seconds`);if(!c.ok){let d,m=await c.text();try{d=JSON.parse(m);}catch{throw new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${d.errors[0].message}`):new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}let u={};return c.headers.forEach((d,m)=>{u[m]=d;}),{status:c.status,headers:u,json:await c.json()}}var Xv=class{orgId;options;storage;codeEvaluator;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];stepSequenceActive=false;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:o,logger:n,storage:r,orgId:i,codeEvaluator:a,uploadedFileStorage:s,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=s,this.visualDiffScreenshotStorage=l,this.codeEvaluator=a,this.generator=o,this.logger=n;}setOpen(){this.closed&&this.resetAbortController();}resetAbortController(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal);}async resetSession(t){this.registeredListeners={},this.recordedRequests={},await this.browser.reset(t);}setClosed(){this.executeAbortController.abort();}bindCancellation(t){if(t.aborted)return this.setClosed(),()=>{};let o=()=>this.setClosed();return t.addEventListener("abort",o,{once:true}),()=>t.removeEventListener("abort",o)}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,o){this.executionOptionsStack.push(t);try{return await o()}finally{this.executionOptionsStack.pop();}}async withExclusiveStepSequence(t){if(this.stepSequenceActive)throw new Error("Another step sequence is already active.");this.stepSequenceActive=true;try{return await t()}finally{this.stepSequenceActive=false;}}getCurrentExecutionOptions(){return this.executionOptionsStack[this.executionOptionsStack.length-1]??{}}async evaluateAiAction({goal:t,startingScreenshot:o,history:n,disableCache:r,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[l,c]=await Promise.all([Xd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${c.toString("base64")}`,d=await Ml({type:"ai-action",description:t,screenshot:u,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:o,history:n,goal:t,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...fo(s)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:o,history:n,actionHint:r,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let l=this.browser.url(),[c,u]=await Promise.all([Xd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Ml({type:"ai-action",description:t,screenshot:d,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:l,browserState:m,startingScreenshot:o,history:n,goal:t,actionHint:r,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...fo(a)},langfuseSessionId:s})}catch(h){throw new ne("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Xd(this.browser,t)}async locateElement(t){return await Gq(t,this.getControllerFixtures())}async locateMultipleElements(t){return WTe(t,this.getControllerFixtures())}async locateElementWithSelector(t,o){return kl({action:async()=>{let n=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:n}},frameConfig:o?{type:"url",url:o}: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,codeEvaluator:this.codeEvaluator,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:n,descriptions:r,caches:i,action:a,options:s,retriesWithAI:l=1}){let c=[];for(let u=0;u<r.length;u++){let d=r[u],m=await this.wrapElementTargetingCommand({tracer:t,command:o,target:d,cache:i[u],action:async p=>p,options:{...s,targetName:n[u]}});c.push(m);}try{let u=await a(...c.map(p=>p.result)),d=p=>p==="fromTarget"?"From Target":p==="toTarget"?"To Target":"Target",m=c.map((p,h)=>p.thoughts?`${d(n[h])}: ${p.thoughts}`:void 0).filter(p=>!!p).join(" -------------- ")||void 0;return {result:u,elementInteractedDisplayStrings:c.map(p=>p.elementInteractedDisplayString),thoughts:m}}catch(u){if(this.throwIfClosed(),l>0)return this.logger.warn({err:u},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:n,descriptions:r,caches:r.map(()=>{}),action:a,options:s,retriesWithAI:l-1});throw new ne("ActionFailureError",u.message,{errOptions:{cause:u}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:o,options:n,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:a}=n;if(t.type!=="description")throw new ne("ActionFailureError","Cannot use selector with non-description target");let s,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let u=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:a,logger:i});return {result:await o({locator:u.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:u.displayString}}catch(u){if(u.name==="AbortError")throw u;s=u,i.warn({err:u},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await gt(500);}}throw s}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:o,disableGlobalLocatorRedirect:n,logger:r}=t,i=jn(),a=!n&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||a)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(o.locator);});let s;return a&&(s=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:u}=await this.browser.performTargetRedirection(o,r);if(l.result=u,u.outcome==="redirected to new element"&&c&&i.storeTraceAsset&&!this.browser.userBrowserSettings.disableBrowserMonitoring){let d=randomUUID();(async()=>{try{let m=await this.browser.screenshot({locator:c.locator,clearHighlights:!0,boundingBoxOverride:c.serverSideBoundingBox??void 0});i.storeTraceAsset?.({snapshotId:d,data:m});}catch(m){r.debug({err:m},"Failed to capture element screenshot for redirect trace");}})(),l.elementScreenshotSnapshotId=d;}return c})),s||(s={locator:o.locator,serverSideBoundingBox:await o.locator.boundingBox({timeout:ft}),originalElementLocationResult:o.originalElementLocationResult}),s}async resolveCachedTargetForAction(t){let{cache:o,options:n,logger:r}=t,a=await jn().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=o.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;let c={attempts:0,evaluationDurationMs:0};try{let u=await this.browser.resolveTarget(o,{allowNotActionableNodesOverride:n.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...n.resolveTargetOptions,stats:c,acceptElementMovedError:n.force});l.attributes.targetDisplayString=u.displayString,l.attributes.decisions=u.decisions;let d=u.decisions.find(m=>m.matched);return d&&(l.resolutionMethod=d.type),u}catch(u){throw u instanceof ca&&(l.cacheMissReason=u.cacheMissReason,l.attributes.decisions=u.decisions),u}finally{c.attempts>0&&(l.resolutionAttempts=c.attempts,l.evaluationDurationMs=c.evaluationDurationMs);}}),s=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:a,disableGlobalLocatorRedirect:n.disableGlobalLocatorRedirect,logger:r});return n.force||await a.revalidator?.(),{resolutionResult:a,finalTarget:s}}async wrapElementTargetingCommand(t){return await kl({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:o,target:n,action:r,options:i,command:a,finalAttempt:s=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:u,useSelector:d,targetName:m}=i,p=jn(),h=this.logger.child({commandId:a.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!U5(n))throw new ne("ActionFailureError","Cannot target element with no cached data or element descriptor");if(d)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,b;u&&(h.info("Cache explicitly disabled for this step"),y=true,b="Cache explicitly disabled",f=void 0);let S=zTe({cache:f,description:n.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=S.cache,y=y||S.cacheBustedBeforeAction,!b&&S.cacheBustReason&&(b=S.cacheBustReason);let E=true,v=i.memory??f?.memory;if(!UTe(f))return c--,E=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:o,target:n,options:{...i,memory:v},command:a,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:y,cacheBustReason:b});try{let{resolutionResult:R,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),P=await r(w);if(uo.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.58.0"]),dk({cmd:a,key:m,newTarget:f,logger:h,updatedWithAI:!1}),E){let I=R.decisions.filter(_=>_.matched);if(I.length!==1)h.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let _=I[0].type;o.recordTargetAutoHeal({healType:_});}}return {result:P,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=YU(R);if(w&&!s)return h.warn({err:R},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:o,command:a,target:n,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(R instanceof ne&&!w)throw h.warn({err:R},"Failed to execute command with target (fatal)"),R;if(c>0&&n){h.info({err:R,cacheDecisions:R instanceof ca?LTe(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),uo.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.58.0",`missReason:${R instanceof ca?R.cacheMissReason:"unknown"}`]);let P;f.memory&&c_(f.memory)&&(P=f.memory);let I=R instanceof ca&&R.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:o,command:a,target:n,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:P,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new ne("ActionFailureError",`Failed to execute interactive command: ${R instanceof Error?R.message:`${R}`}`,{errOptions:{cause:R}})}}async executeTargetingCommandWithAI(t){let{tracer:o,stepTracer:n,target:r,options:i,command:a,action:s,originalCache:l,logger:c,useMemory:u,cacheBustedBeforeAction:d,cacheBustReason:m,skipInitialLocateWait:p}=t;c.info({description:r.elementDescriptor,targetHealingInProgress:i.targetHealingInProgress,cacheBustedBeforeAction:d,memory:i.memory,useMemory:u},"Prompting AI for an updated element location");let h=this.browser.executionMode==="turbo"||this.getCurrentExecutionOptions().skipAISmartWaiting||i.skipAISmartWaiting,g=false;(d||!l)&&!h?(await o.startAsyncSpan("SMART_WAITING",async()=>await tve({description:r.elementDescriptor,iframeUrl:i.iframeUrl,source:i.source,logger:c,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride},this.getControllerFixtures())),g=true):(d||!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 f=2;for(let y=1;y<=f;y++){let b=false,S=this.browser.getActiveFrameConfig(),E=i.force||y>1;try{let v;try{v=await Gq({description:r.elementDescriptor,disableCache:!!i.disableCache,effort:i.effort,onEffectiveEffort:i.onEffectiveEffort,iframeUrl:i.iframeUrl,source:i.source,useMemory:u,memory:u?i.memory:void 0,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride,allowIneligibleTagRedirect:i.allowIneligibleTagRedirect,showZeroOpacityElementsOverride:i.showZeroOpacityElementsOverride,logger:c,skipWait:g||h||p,isAutoHeal:!!i.targetHealingInProgress,cacheBustReason:m,acceptElementMovedError:E,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(P){if(P instanceof Jp&&P.updatedLocatorMemory){let I={id:-1,...l,memory:P.updatedLocatorMemory};dk({cmd:a,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw P}v.frameConfig&&(this.browser.setActiveFrameConfig(v.frameConfig),b=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:v.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await s(R);return dk({cmd:a,key:i.targetName,newTarget:v.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(n.recordTargetAutoHeal({healType:"AI"}),v.target.targetSource="AI_HEALED",v.target.targetUpdateTime=new Date().toUTCString(),v.target.targetUpdateLoggerTags=fo(c)),{result:w,elementInteractedDisplayString:v.resolution.displayString,thoughts:v.thoughts}}catch(v){if(b&&this.browser.setActiveFrameConfig(S),this.throwIfClosed(),y<f&&YU(v)){c.warn({err:v,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw v instanceof ne?v:new ne("ActionFailureError",v.message,{errOptions:{cause:v}})}}throw new ne("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return pI(this.browser,t)}async executePresetCommand(t,o,n,r,i,a,s){this.options?.slowMoMs&&await gt(this.options.slowMoMs);let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(o,n);}catch(d){throw this.throwIfClosed(),new ne("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await de({name:`cli.command.${o.type}`,attributes:{"momentic.command_type":o.type,"momentic.command_id":o.id},fn:()=>this.executePresetCommandHelper(t,o,n,r,i,a,s)});return this.options?.autoFollowNewTabs&&await BTe({beforeUrl:c,command:o,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){if(d.name!=="AbortError"){let m=cf(d,Jp)?"warn":"error";this.logger[m]({err:d},"Error thrown in action controller");}throw d}finally{kTe(o,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>gq(t)}}async traceBrowserInteraction(t,o,n){return jn().startAsyncSpan("BROWSER_INTERACTION",async i=>o(i),{name:t,...n})}async resolveCommandTemplateStrings(t,o){return ND({obj:t,context:o,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,codeEvaluator:this.codeEvaluator})}async executePresetCommandHelper(t,o,n,r,i,a,s){r=r||"disableCache"in o&&!!o.disableCache;let l=this.logger.child({commandId:o.id}),c=u=>this.wrapElementTargetingCommand({...u,options:{...u.options,effort:a,onEffectiveEffort:s}});switch(o.type){case "SUCCESS":{let u=o.condition;return u?.assertion.trim()?DD({command:u,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!o.assertion.trim())throw new ne("ActionFailureError","Missing assertion");if(o.timeout&&o.timeout>1800)throw new ne("AssertionFailureError",`AI check timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);return DD({command:o,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s})}case "AI_EXTRACT":return kl({action:()=>ZTe({command:o,logger:l,fixtures:this.getControllerFixtures(),disableCache:r,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:o.iframeUrl?{type:"url",url:o.iframeUrl}:void 0,browser:this.browser,logger:l});case "NAVIGATE":if(!gT(o.url)&&!fT(o.url,this.browser.baseUrl))throw new ne("ActionFailureError",`Invalid URL provided to navigate command: ${o.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:o.url,loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(o.action);break;case "CAPTCHA":throw new ne("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 u,d;if(o.target&&Bu(o.target)){let h=ua(o.target.pixels);await this.browser.hoverUsingVisualCoordinates(h);}else if(o.target&&o.target.elementDescriptor.trim()){let{elementInteractedDisplayString:h,thoughts:g}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:f=>this.browser.hover(f),options:{...o,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});u=h,d=g;}let m=this.browser.getViewport()?.height??qi.height,p=this.browser.getViewport()?.width??qi.width;switch(o.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(o.deltaY??m)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(o.deltaY??m));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(o.deltaX??p)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(o.deltaX??p));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "WAIT_FOR_URL":{if(o.timeout&&o.timeout>1800)throw new ne("UserConfigurationError",`Wait for URL timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);let u=o.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:u},{timeout:o.timeout?o.timeout*1e3:void 0,negated:o.negated,caseInsensitive:o.caseInsensitive});break}case "WAIT":{if(o.delay>1800)throw new ne("UserConfigurationError",`Wait timeout of ${o.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=o.delay*1e3;await gt(u,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0}));break;case "CLICK":{if(Bu(o.target)){let g=ua(o.target.pixels),f={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0};await this.traceBrowserInteraction("Click",()=>this.browser.clickUsingVisualCoordinates(g,f),{coordinates:g});break}let u=this.browser.url(),{elementInteractedDisplayString:d,result:m,thoughts:p}=await c({tracer:t,target:o.target,command:o,cache:o.cache?.target,action:g=>this.traceBrowserInteraction("Click",async f=>{let y={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0},b=await this.browser.click(g,this.createCallbacksForBrowser(this.orgId),y);return b.coordinates&&(f.coordinates=b.coordinates),b},{selector:g.locator.toString()}),options:{...o,targetName:"target",disableCache:r}}),h={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:p,data:m.downloadedFile?{downloadedFile:m.downloadedFile}:void 0};return Rk(u,h.urlAfterCommand)&&(h.succeedImmediately=true,h.succeedImmediatelyReason="URL changed"),h}case "COPY":return await this.browser.copy(o.value),{succeedImmediately:false,data:o.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(Bu(o.fromTarget)&&Bu(o.toTarget)){let m=ua(o.fromTarget.pixels),p=ua(o.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(Bu(o.fromTarget)||Bu(o.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:u,thoughts:d}=await this.wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:["fromTarget","toTarget"],descriptions:[o.fromTarget,o.toTarget],caches:[o.cache?.fromTarget,o.cache?.toTarget],action:(m,p)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0,steps:o.steps})),options:{...o,disableCache:r,effort:a,onEffectiveEffort:s}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u[0],thoughts:d}}case "MOUSE_DRAG":{let u=parseInt(o.deltaX),d=parseInt(o.deltaY),m=o.steps??5;if(isNaN(u)||isNaN(d))throw new ne("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${o.deltaX}, ${o.deltaY})`);if(o.target&&Bu(o.target)){let g=ua(o.target.pixels);await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDragUsingVisualCoordinates({deltaX:u,deltaY:d,steps:m,fromTarget:g}),{coordinates:g});break}let p,h;if(o.target?.elementDescriptor){let{elementInteractedDisplayString:g,thoughts:f}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:async y=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,y.locator,{force:o.force})),options:{...o,targetName:"target",disableCache:r}});p=g,h=f;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,void 0,{force:o.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:h}}case "SELECT_OPTION":{if(!Fc(o.target))throw new Error("Select with x/y is not supported yet");let u=o.target.elementDescriptor,d=o.choice,{elementInteractedDisplayString:m,thoughts:p}=await c({tracer:t,command:o,target:{type:"description",elementDescriptor:u},cache:o.cache?.target,action:h=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(h,d,o.force),{value:d.type==="LABEL"?d.label:d.type==="VALUE"?d.value:d.index}),options:{...o,targetName:"target",disableCache:r,source:Xu(o)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:p}}case "TAB":{let u=o.timeout===void 0?void 0:o.timeout*1e3,d=o.loadTimeout??o.timeout,m={loadTimeoutMs:d===void 0?void 0:d*1e3,timeoutMs:u,retry:true};await this.browser.switchToPage(o.action,m);break}case "NEW_TAB":await this.browser.createNewTab(o.url,{loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(o.action,{retry:true});break;case "COOKIE":{if(!o.value)break;let u=await this.browser.setCookie(o.value);l.debug({results:u},"Set cookies");break}case "LOCAL_STORAGE":if(!o.value||!o.key)break;await this.browser.setLocalStorage(o.key,o.value);break;case "JAVASCRIPT":{let u;try{o.environment==="BROWSER"?(u=await this.browser.evaluateCodeInPage({code:o.code,fragment:o.fragment??!1,context:n.toObjectCopy(),timeoutMs:o.timeout?o.timeout*1e3:void 0}),l.info({result:u},"Executed JavaScript in browser")):u=await Ug({orgId:this.orgId,code:o.code,fragment:!!o.fragment,context:n,timeoutMs:o.timeout?o.timeout*1e3:void 0,logger:l,codeEvaluator:this.codeEvaluator,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async d=>{if(!this.options?.scratchPadId){l.warn({updates:d},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:d,logger:l});}}});}catch(d){throw this.throwIfClosed(),new ne("ActionFailureError",d instanceof Error?d.message:`${d}`,{errOptions:{cause:d}})}try{JSON.stringify(u);}catch(d){throw new ne("ActionFailureError",`Return value is not serializable: ${d instanceof Error?d.message:`${d}`}`,{errOptions:{cause:d}})}return {urlAfterCommand:this.browser.url(),succeedImmediately:false,data:u}}case "TYPE":{if(o.target&&Bu(o.target)){let f=ua(o.target.pixels),y={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(f,y),await this.traceBrowserInteraction("Type",()=>this.browser.type(o.value,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,fill:o.fill},true),{value:o.value});break}let u=this.browser.url(),d,m,p=cloneDeep(o.target),h=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(p){let{elementInteractedDisplayString:f,thoughts:y}=await c({tracer:t,command:o,target:p,cache:o.cache?.target,action:b=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(o.value,b,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,relativePosition:o.relativePosition,fill:o.fill}),{value:o.value,selector:b.locator.toString()}),options:{...o,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!h,source:Xu(o)}});d=f,m=y;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(o.value,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,fill:o.fill},true),{value:o.value});let g={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:m};return Rk(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(Bu(o.target)){let m=ua(o.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(m),{coordinates:m});break}let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:m=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(m,{relativePosition:o.relativePosition?ua(o.relativePosition):void 0}),{selector:m.locator.toString()}),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "FOCUS":{if(!Fc(o.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:m=>this.browser.focus(m),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "BLUR":{if(o.target&&!Fc(o.target))throw new Error("Blur with x/y is not supported yet");if(!o.target||!o.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,target:o.target,command:o,cache:o.cache?.target,action:m=>this.browser.blur(m),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "PRESS":{let u=this.browser.url();await this.traceBrowserInteraction("Press key",()=>this.browser.press(o.value,{repeat:o.repeat,convertMeta:o.convertMeta??true,delayMs:o.delayMs??this.browser.userBrowserSettings.pressDelayMs}),{value:o.value});let d={urlAfterCommand:this.browser.url(),succeedImmediately:false};return Rk(u,d.urlAfterCommand)&&(d.succeedImmediately=true,d.succeedImmediatelyReason="URL changed"),d}case "KEY_DOWN":return await this.browser.keyDown(o.value,{convertMeta:o.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(o.value,{convertMeta:o.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let u=new CookieJar,d=Ept(fetch,u),m;try{m=new URL(o.url).hostname;}catch{}let p=await lve({command:o,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:wE.parse({...p,cookies:m8(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await dve({command:o,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return sve({tracer:t,command:o,disableCache:r,browser:this.browser,logger:l,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:c});case "FILE_UPLOAD":{let u,d;if(o.fileSource.type==="URL"?(d=o.fileSource.url,u=await sSe({uri:o.fileSource.url,logger:l,orgId:this.orgId})):o.fileSource.type==="USER_FILE"&&(d=o.fileSource.name,u=await this.uploadedFileStorage?.getFileForUpload(o.fileSource.name,this.orgId)),!u)throw new ne("UserConfigurationError",`Attempted to use non-existent file for upload step: ${d}`);await this.browser.setFileChooserHandler({...u,filename:o.filename});break}case "AUTH_SAVE":{let u=await this.browser.saveAuthState();if(o.storageState&&Vh(o.storageState)){let d=mn__default.resolve(o.storageState);nn__default.mkdirSync(mn__default.dirname(d),{recursive:true}),nn__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
|
|
7983
|
+
`):c=await a.getCondensedHtml();let u=await a.screenshot({retries:2,respectActiveFrame:true}),d=jn();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async m=>{let p=await s.getTextExtraction({goal:t.goal,browserState:c,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${u.toString("base64")}`},{disableCache:r,abortSignal:l,loggerTags:fo(o)});if(m.result=p,ipt({tracer:d,span:m,screenshot:u,htmlState:c,logger:o}),p.result==="NOT_FOUND")throw new ne("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new ne("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:a.url()}})}catch(m){let p=G(m);throw p.includes("MaxGenerationLengthExceededError")?new ne("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 ne("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:m}}):m}}function rpt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function ipt(e){let{tracer:t,span:o,screenshot:n,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:n}),o.screenshotSnapshotId=a;let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:Buffer.from(r),extension:"html"}),o.browserStateSnapshotId=s;}catch(a){i.debug({err:a},"Failed to store extraction trace assets");}}var eve=500;async function tve(e,t){let{logger:o}=e,{abortSignal:n,browser:r}=t,i=Date.now();try{await apt(i,e,t);}catch(a){if(hm(a)||n.aborted)return;o.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=r.smartWaitingTimeout-(Date.now()-i);s>0&&await gt(s,n);}finally{o.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function apt(e,t,o){let{abortSignal:n,browser:r}=o;if(r.smartWaitingTimeout<3e3){await gt(r.smartWaitingTimeout,n);return}if(!t.description)throw new ne("UserConfigurationError","Cannot locate element with empty description");await ge(spt(e,t,o),{milliseconds:r.smartWaitingTimeout});}async function spt(e,t,o){let{logger:n,iframeUrl:r,testContext:i}=t,{abortSignal:a,browser:s,codeEvaluator:l,orgId:c}=o,u=i?await Ma({orgId:c,s:t.description,context:i,codeEvaluator:l,signal:a,logger:n}):t.description,d;for(;Date.now()-e<s.smartWaitingTimeout;){let m=Date.now();if(await kl({action:async()=>{let g=await lpt(u,t,o,d);return d=g.notReadyScreenshot,g.isReady},frameConfig:r?{type:"url",url:r}:void 0,browser:s,logger:n}))return;let h=Date.now()-m;h<eve&&await gt(eve-h,a);}}async function lpt(e,t,o,n){let{logger:r}=t,{browser:i,abortSignal:a,generator:s}=o;a.throwIfAborted();let l;try{l=await i.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2});}catch(m){throw new ne("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: ${m instanceof Error?m.message:m}`)}if(n?.equals(l))return r.debug("Skipping smart waiting AI call, the page is unchanged"),{isReady:false,notReadyScreenshot:n};let u=`data:image/jpeg;base64,${l.toString("base64")}`;a.throwIfAborted();let d=await s.getSmartWaitingDecision({description:e,screenshot:u},{abortSignal:a,loggerTags:fo(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var cpt=3e4;function upt({command:e,originalCache:t,cacheToUse:o,keepMemory:n}){if(o){if(n){let r=e1(t,o);return o.target=r.target,o.updatedAt=r.updatedAt,o}if(!t){let r=Xu(e);r!=="NEGATED_CHECK"&&r!=="NEGATED_ELEMENT_VISIBLE_CHECK"&&(e.cache=void 0);return}return o.target=t.target,o.updatedAt=t.updatedAt,o}}async function rve(e){return jn().startAsyncSpan("ELEMENT_ASSERTION",async o=>dpt(e,o),{name:"Element check"})}async function dpt(e,t){let{command:o,timeoutMs:n,fixtures:r,disableCache:i}=e,{abortSignal:a}=r,s=()=>d_(o.cache)?o.cache:void 0,l=s(),c=!i&&!!l?.target&&kb(l.target),u=cloneDeep(l),d=(v=false)=>{l=upt({command:o,originalCache:u,cacheToUse:s(),keepMemory:v});},m={},p=Date.now(),h=c?Math.max(n/10,cpt):0,g=p,f=0,y,b=500,S=false;for(;f<2||Date.now()-p<n;){f++,f>1&&await gt(b,a),a?.throwIfAborted(),l=s();let v=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:P}=await ove({cacheToUse:l,skipAISmartWaiting:!v,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,S=S||P,w.success)break;d(),b=Math.min(b*1.25,1e4);}if(!y)throw new ne("InternalPlatformError",`Failed to evaluate manual element assertion in ${n}ms.`);if(a?.throwIfAborted(),!y.success){let v=s(),R=v?.target?.memory?{target:{id:-1,memory:v.target.memory}}:void 0,{result:w,elementWasFound:P}=await ove({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,S=S||P,y.success||d(true);}let E=s();return y.success&&E?.target&&!S&&(E.target=Fh(E.target),E.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function ove({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:o,pastLocatorMiss:n,params:r}){let{command:i,disableCache:a,fixtures:s,tracer:l,targetingWrapper:c}=r,{logger:u}=s;if(i.target&&!Fc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Une(i.assertion),m=mpt(i.assertion),p,h=false,g=cloneDeep(e);try{let{elementInteractedDisplayString:f,result:y,thoughts:b}=await c({tracer:l,command:i,target:i.target,cache:g?.target,action:async S=>ppt(S.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:a,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:Xu(i),skipAISmartWaiting:t,targetName:"target",pastLocatorMiss:n},retriesWithAI:o?1:0});return p={success:y.success,data:y.data,err:y.err,elementInteractedDisplayString:f,thoughts:b},h=!0,y.success||(u.warn({aiThoughts:b,elementString:f,err:y.err},"Element check found an element but failed"),p={...y,thoughts:b}),{result:p,elementWasFound:h}}catch(f){if(d)return p={success:true,thoughts:`The element described does not exist on the page: ${f.message}`,err:void 0,data:void 0},{result:p,elementWasFound:h};if(!(f instanceof ne)||f.reason!="ActionFailureError")throw f;return p={success:false,err:f,data:void 0,thoughts:void 0},u.warn({err:f},"Element check did not find an element and failed"),{result:p,elementWasFound:h}}}function mpt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function ppt(e,{command:t,fixtures:o}){return await o.browser.highlight(e),await hpt(e,t.assertion)}async function hpt(e,t){let o=true,n,r;switch(t.type){case "ELEMENT_CONTENT":{let a=await e.textContent()??"";if(r={elementTextContent:tn(a,500,true)},!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,n=new ne("AssertionFailureError",`The content ${s} '${t.value}': ${a}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:tn(await e.evaluate(s=>s.cloneNode(false).outerHTML),500,true)};let a=null;try{a=await e.getAttribute(t.attr,{timeout:3e3});}catch(s){n=new ne("AssertionFailureError",G(s)),o=false;break}if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,t.operation==="EXISTS"?n=new ne("AssertionFailureError",`The attribute ${t.attr} ${s}`):n=new ne("AssertionFailureError",`The attribute ${t.attr} ${s} '${t.value}': ${a}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{o=await e.evaluate(async(s,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return true}return false},jl*1e3);break}case "EDITABLE":{o=await e.isEditable({timeout:jl*1e3});break}case "EXISTS":{o=true;break}case "ENABLED":{o=await e.isEnabled({timeout:jl*1e3});break}case "FOCUSED":{o=await e.evaluate(s=>s===document.activeElement);break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(o=t.negated?!o:o,!o){let a=iT(t);n=new ne("AssertionFailureError",`The element ${a}`);}break}case "ELEMENT_NAME":{let a=await e.evaluate(s=>s.tagName);if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let s=iT(t);o=false,n=new ne("AssertionFailureError",`The element tag name ${s} '${t.value}': ${a}`);}break}case "ELEMENT_STYLE":{let a=await e.evaluate((s,l)=>window.getComputedStyle(s).getPropertyValue(l),t.property);if(!ER(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=iT(t);o=false,t.operation==="EXISTS"?n=new ne("AssertionFailureError",`The style property ${t.property} ${s}`):n=new ne("AssertionFailureError",`The style property ${t.property} ${s} '${t.value}': ${a}`);}break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:o,data:r,err:n}}function ive(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function pI(e,t){let o=await e.screenshot(t),{width:n,height:r}=wD(o);return {buffer:o,width:Math.ceil(n),height:Math.ceil(r)}}async function sve(e){let{command:t,browser:o,logger:n}=e;if(t.target&&!Fc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await o.waitForStability({logger:n}),jn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let a=await fpt(e);return i.result={success:!a.fail,message:a.thoughts},a}catch(a){throw a instanceof ne&&(i.result={success:false,message:a.message}),a}},{name:"Compare against golden"})}async function fpt({tracer:e,command:t,disableCache:o,browser:n,targetingWrapper:r,logger:i,screenshotStorage:a}){let s={clearHighlights:true,hideCaret:true},l=t.target&&Fc(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=>pI(n,{locator:O.locator,...s}),options:{...t,disableCache:o,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await pI(n,s);let u=await a.prepareGoldenScreenshotForComparison(i,t,c);if((c.height!==u.height||c.width!==u.width)&&i.warn({currHeight:c.height,currWidth:c.width,savedHeight:u.height,savedWidth:u.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(c.height-u.height)>10||Math.abs(c.width-u.width)>10){let _=`${c.width}x${c.height}`,O=`${u.width}x${u.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:u.buffer,afterScreenshotOverride:c.buffer,succeedImmediately:false,urlAfterCommand:n.url()}}let d=await Jimp.fromBuffer(c.buffer),m={width:c.width,height:c.height},p=await Jimp.fromBuffer(u.buffer),h={width:u.width,height:u.height},g,f=m.width*m.height,y=h.width*h.height,b=Math.abs(m.height-h.height),S=Math.abs(m.width-h.width);if(f>y){let _=d.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 _=p.cover({w:m.width,h:m.height});u.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,w=Adt(Vq.decode(u.buffer).data,Vq.decode(c.buffer).data,E.data,c.width,c.height,{threshold:v,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,P=w>v*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${P?"over":"under"} the threshold of ${v*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${S} pixels.`),P)throw new ne("ActionFailureError",I);return {fail:P,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:Vq.encode(E,75).data,succeedImmediately:false,urlAfterCommand:n.url()}}var ypt=3e4;function bpt(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(([o,n])=>{t.append(o,n);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function lve({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??ypt/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),a=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{a.append(h,g);});let s=a.toString(),l;if(gT(e.url)&&(l=e.url),o&&fT(e.url,o)&&(l=new URL(e.url,o).toString()),!l)throw new ne("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:s,headers:i,body:e.body,method:e.method},"Making HTTP request");let d=await ge((async()=>{let h=s?`${c}?${s}`:c;try{let g=bpt(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await n(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new ne("ActionFailureError",`Failed to make HTTP request: ${G(g)}`,{errOptions:{cause:g}})}})(),{milliseconds:r*1e3,fallback:()=>{throw new ne("ActionFailureError",`Fetch request timed out after ${r} seconds`)}});if(!d.ok){let h;try{h=await d.text();}catch(g){h=`Failed to read response body: ${g}`;}throw new ne("ActionFailureError",`Fetch request failed with status ${d.status}: ${h}`)}let m={};d.headers.forEach((h,g)=>{m[g]=h;});let p={status:d.status,headers:m,request:{url:d.url,method:e.method,headers:i}};if(e.body?.type==="json"&&e.body.content)try{p.request.json=JSON.parse(e.body.content);}catch{}if(d.headers.get("content-type")?.includes("json"))try{p.json=await d.json();}catch{}else d.headers.get("content-type")?.includes("text")&&(p.text=await d.text());return p}var Spt=5e3;async function FD({timeout:e=jl,...t}){let o=Date.now(),n=e*1e3,r=n+1e4,i,a=0,s=500;for(;a-o<n;){if(Date.now()-o>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await cve(t),a=Date.now();let c=a-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await gt(s,t.signal),s=Math.min(Math.floor(s*1.5),Spt);else return i}return i=await cve(t),i}async function cve(e){return jn().startAsyncSpan("PAGE_ASSERTION",async o=>{let n=await Tpt(e);return o.result={success:n.success,message:n.err?.message},n},{name:"Page check"})}async function Tpt({assertion:e,browser:t,autoExpandIframes:o}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,a;try{let s;if(o){let l=await t.evaluateFunctionInAllFrames(uve,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),s=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:s}=await t.evaluateFunctionInPage(uve,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Fm.CONTAINS:Bm.CONTAINS;a=new ne("AssertionFailureError",`The page ${l} '${e.value}'.`),r=s;}}catch(s){a=new ne("AssertionFailureError",`Failed to evaluate page content assertion: ${s instanceof Error?s.message:`${s}`}`);}return {success:i,err:a,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 uve({value:e,negated:t,returnHtml:o}){let n=document.body.innerHTML,r=n.includes(e)===!t;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&o?n:void 0}}var vpt=3e4;async function dve({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??vpt/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(gT(e.url)&&(s=e.url),o&&fT(e.url,o)&&(s=new URL(e.url,o).toString()),!s)throw new ne("ActionFailureError",`Invalid URL: ${e.url}`);let c=await ge((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(d){throw new Error(`Failed to make HTTP request: ${d}`,{cause:d})}})(),{milliseconds:r*1e3});if(!c)throw new ne("ActionFailureError",`GraphQL request timed out after ${r} seconds`);if(!c.ok){let d,m=await c.text();try{d=JSON.parse(m);}catch{throw new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${d.errors[0].message}`):new ne("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}let u={};return c.headers.forEach((d,m)=>{u[m]=d;}),{status:c.status,headers:u,json:await c.json()}}var Xv=class{orgId;options;storage;codeEvaluator;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];stepSequenceActive=false;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:o,logger:n,storage:r,orgId:i,codeEvaluator:a,uploadedFileStorage:s,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=s,this.visualDiffScreenshotStorage=l,this.codeEvaluator=a,this.generator=o,this.logger=n;}setOpen(){this.closed&&this.resetAbortController();}resetAbortController(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal);}async resetSession(t){this.registeredListeners={},this.recordedRequests={},await this.browser.reset(t);}setClosed(){this.executeAbortController.abort();}bindCancellation(t){if(t.aborted)return this.setClosed(),()=>{};let o=()=>this.setClosed();return t.addEventListener("abort",o,{once:true}),()=>t.removeEventListener("abort",o)}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,o){this.executionOptionsStack.push(t);try{return await o()}finally{this.executionOptionsStack.pop();}}async withExclusiveStepSequence(t){if(this.stepSequenceActive)throw new Error("Another step sequence is already active.");this.stepSequenceActive=true;try{return await t()}finally{this.stepSequenceActive=false;}}getCurrentExecutionOptions(){return this.executionOptionsStack[this.executionOptionsStack.length-1]??{}}async evaluateAiAction({goal:t,startingScreenshot:o,history:n,disableCache:r,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[l,c]=await Promise.all([Xd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${c.toString("base64")}`,d=await Ml({type:"ai-action",description:t,screenshot:u,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:o,history:n,goal:t,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...fo(s)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:o,history:n,actionHint:r,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let l=this.browser.url(),[c,u]=await Promise.all([Xd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Ml({type:"ai-action",description:t,screenshot:d,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:l,browserState:m,startingScreenshot:o,history:n,goal:t,actionHint:r,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...fo(a)},langfuseSessionId:s})}catch(h){throw new ne("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Xd(this.browser,t)}async locateElement(t){return await Gq(t,this.getControllerFixtures())}async locateMultipleElements(t){return WTe(t,this.getControllerFixtures())}async locateElementWithSelector(t,o){return kl({action:async()=>{let n=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:n}},frameConfig:o?{type:"url",url:o}: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,codeEvaluator:this.codeEvaluator,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:n,descriptions:r,caches:i,action:a,options:s,retriesWithAI:l=1}){let c=[];for(let u=0;u<r.length;u++){let d=r[u],m=await this.wrapElementTargetingCommand({tracer:t,command:o,target:d,cache:i[u],action:async p=>p,options:{...s,targetName:n[u]}});c.push(m);}try{let u=await a(...c.map(p=>p.result)),d=p=>p==="fromTarget"?"From Target":p==="toTarget"?"To Target":"Target",m=c.map((p,h)=>p.thoughts?`${d(n[h])}: ${p.thoughts}`:void 0).filter(p=>!!p).join(" -------------- ")||void 0;return {result:u,elementInteractedDisplayStrings:c.map(p=>p.elementInteractedDisplayString),thoughts:m}}catch(u){if(this.throwIfClosed(),l>0)return this.logger.warn({err:u},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:n,descriptions:r,caches:r.map(()=>{}),action:a,options:s,retriesWithAI:l-1});throw new ne("ActionFailureError",u.message,{errOptions:{cause:u}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:o,options:n,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:a}=n;if(t.type!=="description")throw new ne("ActionFailureError","Cannot use selector with non-description target");let s,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let u=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:a,logger:i});return {result:await o({locator:u.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:u.displayString}}catch(u){if(u.name==="AbortError")throw u;s=u,i.warn({err:u},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await gt(500);}}throw s}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:o,disableGlobalLocatorRedirect:n,logger:r}=t,i=jn(),a=!n&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||a)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(o.locator);});let s;return a&&(s=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:u}=await this.browser.performTargetRedirection(o,r);if(l.result=u,u.outcome==="redirected to new element"&&c&&i.storeTraceAsset&&!this.browser.userBrowserSettings.disableBrowserMonitoring){let d=randomUUID();(async()=>{try{let m=await this.browser.screenshot({locator:c.locator,clearHighlights:!0,boundingBoxOverride:c.serverSideBoundingBox??void 0});i.storeTraceAsset?.({snapshotId:d,data:m});}catch(m){r.debug({err:m},"Failed to capture element screenshot for redirect trace");}})(),l.elementScreenshotSnapshotId=d;}return c})),s||(s={locator:o.locator,serverSideBoundingBox:await o.locator.boundingBox({timeout:ft}),originalElementLocationResult:o.originalElementLocationResult}),s}async resolveCachedTargetForAction(t){let{cache:o,options:n,logger:r}=t,a=await jn().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=o.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;let c={attempts:0,evaluationDurationMs:0};try{let u=await this.browser.resolveTarget(o,{allowNotActionableNodesOverride:n.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...n.resolveTargetOptions,stats:c,acceptElementMovedError:n.force});l.attributes.targetDisplayString=u.displayString,l.attributes.decisions=u.decisions;let d=u.decisions.find(m=>m.matched);return d&&(l.resolutionMethod=d.type),u}catch(u){throw u instanceof ca&&(l.cacheMissReason=u.cacheMissReason,l.attributes.decisions=u.decisions),u}finally{c.attempts>0&&(l.resolutionAttempts=c.attempts,l.evaluationDurationMs=c.evaluationDurationMs);}}),s=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:a,disableGlobalLocatorRedirect:n.disableGlobalLocatorRedirect,logger:r});return n.force||await a.revalidator?.(),{resolutionResult:a,finalTarget:s}}async wrapElementTargetingCommand(t){return await kl({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:o,target:n,action:r,options:i,command:a,finalAttempt:s=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:u,useSelector:d,targetName:m}=i,p=jn(),h=this.logger.child({commandId:a.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!U5(n))throw new ne("ActionFailureError","Cannot target element with no cached data or element descriptor");if(d)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,b;u&&(h.info("Cache explicitly disabled for this step"),y=true,b="Cache explicitly disabled",f=void 0);let S=zTe({cache:f,description:n.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=S.cache,y=y||S.cacheBustedBeforeAction,!b&&S.cacheBustReason&&(b=S.cacheBustReason);let E=true,v=i.memory??f?.memory;if(!UTe(f))return c--,E=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:o,target:n,options:{...i,memory:v},command:a,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:y,cacheBustReason:b});try{let{resolutionResult:R,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),P=await r(w);if(uo.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.58.1"]),dk({cmd:a,key:m,newTarget:f,logger:h,updatedWithAI:!1}),E){let I=R.decisions.filter(_=>_.matched);if(I.length!==1)h.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else {let _=I[0].type;o.recordTargetAutoHeal({healType:_});}}return {result:P,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=YU(R);if(w&&!s)return h.warn({err:R},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:o,command:a,target:n,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(R instanceof ne&&!w)throw h.warn({err:R},"Failed to execute command with target (fatal)"),R;if(c>0&&n){h.info({err:R,cacheDecisions:R instanceof ca?LTe(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),uo.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.58.1",`missReason:${R instanceof ca?R.cacheMissReason:"unknown"}`]);let P;f.memory&&c_(f.memory)&&(P=f.memory);let I=R instanceof ca&&R.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:o,command:a,target:n,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:P,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new ne("ActionFailureError",`Failed to execute interactive command: ${R instanceof Error?R.message:`${R}`}`,{errOptions:{cause:R}})}}async executeTargetingCommandWithAI(t){let{tracer:o,stepTracer:n,target:r,options:i,command:a,action:s,originalCache:l,logger:c,useMemory:u,cacheBustedBeforeAction:d,cacheBustReason:m,skipInitialLocateWait:p}=t;c.info({description:r.elementDescriptor,targetHealingInProgress:i.targetHealingInProgress,cacheBustedBeforeAction:d,memory:i.memory,useMemory:u},"Prompting AI for an updated element location");let h=this.browser.executionMode==="turbo"||this.getCurrentExecutionOptions().skipAISmartWaiting||i.skipAISmartWaiting,g=false;(d||!l)&&!h?(await o.startAsyncSpan("SMART_WAITING",async()=>await tve({description:r.elementDescriptor,iframeUrl:i.iframeUrl,source:i.source,logger:c,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride},this.getControllerFixtures())),g=true):(d||!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 f=2;for(let y=1;y<=f;y++){let b=false,S=this.browser.getActiveFrameConfig(),E=i.force||y>1;try{let v;try{v=await Gq({description:r.elementDescriptor,disableCache:!!i.disableCache,effort:i.effort,onEffectiveEffort:i.onEffectiveEffort,iframeUrl:i.iframeUrl,source:i.source,useMemory:u,memory:u?i.memory:void 0,allowNotActionableNodesOverride:i.allowNotActionableNodesOverride,allowIneligibleTagRedirect:i.allowIneligibleTagRedirect,showZeroOpacityElementsOverride:i.showZeroOpacityElementsOverride,logger:c,skipWait:g||h||p,isAutoHeal:!!i.targetHealingInProgress,cacheBustReason:m,acceptElementMovedError:E,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(P){if(P instanceof Jp&&P.updatedLocatorMemory){let I={id:-1,...l,memory:P.updatedLocatorMemory};dk({cmd:a,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw P}v.frameConfig&&(this.browser.setActiveFrameConfig(v.frameConfig),b=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:v.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await s(R);return dk({cmd:a,key:i.targetName,newTarget:v.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(n.recordTargetAutoHeal({healType:"AI"}),v.target.targetSource="AI_HEALED",v.target.targetUpdateTime=new Date().toUTCString(),v.target.targetUpdateLoggerTags=fo(c)),{result:w,elementInteractedDisplayString:v.resolution.displayString,thoughts:v.thoughts}}catch(v){if(b&&this.browser.setActiveFrameConfig(S),this.throwIfClosed(),y<f&&YU(v)){c.warn({err:v,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw v instanceof ne?v:new ne("ActionFailureError",v.message,{errOptions:{cause:v}})}}throw new ne("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return pI(this.browser,t)}async executePresetCommand(t,o,n,r,i,a,s){this.options?.slowMoMs&&await gt(this.options.slowMoMs);let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(o,n);}catch(d){throw this.throwIfClosed(),new ne("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await de({name:`cli.command.${o.type}`,attributes:{"momentic.command_type":o.type,"momentic.command_id":o.id},fn:()=>this.executePresetCommandHelper(t,o,n,r,i,a,s)});return this.options?.autoFollowNewTabs&&await BTe({beforeUrl:c,command:o,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){if(d.name!=="AbortError"){let m=cf(d,Jp)?"warn":"error";this.logger[m]({err:d},"Error thrown in action controller");}throw d}finally{kTe(o,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>gq(t)}}async traceBrowserInteraction(t,o,n){return jn().startAsyncSpan("BROWSER_INTERACTION",async i=>o(i),{name:t,...n})}async resolveCommandTemplateStrings(t,o){return ND({obj:t,context:o,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,codeEvaluator:this.codeEvaluator})}async executePresetCommandHelper(t,o,n,r,i,a,s){r=r||"disableCache"in o&&!!o.disableCache;let l=this.logger.child({commandId:o.id}),c=u=>this.wrapElementTargetingCommand({...u,options:{...u.options,effort:a,onEffectiveEffort:s}});switch(o.type){case "SUCCESS":{let u=o.condition;return u?.assertion.trim()?DD({command:u,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!o.assertion.trim())throw new ne("ActionFailureError","Missing assertion");if(o.timeout&&o.timeout>1800)throw new ne("AssertionFailureError",`AI check timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);return DD({command:o,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s})}case "AI_EXTRACT":return kl({action:()=>ZTe({command:o,logger:l,fixtures:this.getControllerFixtures(),disableCache:r,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:o.iframeUrl?{type:"url",url:o.iframeUrl}:void 0,browser:this.browser,logger:l});case "NAVIGATE":if(!gT(o.url)&&!fT(o.url,this.browser.baseUrl))throw new ne("ActionFailureError",`Invalid URL provided to navigate command: ${o.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:o.url,loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(o.action);break;case "CAPTCHA":throw new ne("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 u,d;if(o.target&&Bu(o.target)){let h=ua(o.target.pixels);await this.browser.hoverUsingVisualCoordinates(h);}else if(o.target&&o.target.elementDescriptor.trim()){let{elementInteractedDisplayString:h,thoughts:g}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:f=>this.browser.hover(f),options:{...o,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});u=h,d=g;}let m=this.browser.getViewport()?.height??qi.height,p=this.browser.getViewport()?.width??qi.width;switch(o.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(o.deltaY??m)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(o.deltaY??m));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(o.deltaX??p)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(o.deltaX??p));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "WAIT_FOR_URL":{if(o.timeout&&o.timeout>1800)throw new ne("UserConfigurationError",`Wait for URL timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);let u=o.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:u},{timeout:o.timeout?o.timeout*1e3:void 0,negated:o.negated,caseInsensitive:o.caseInsensitive});break}case "WAIT":{if(o.delay>1800)throw new ne("UserConfigurationError",`Wait timeout of ${o.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=o.delay*1e3;await gt(u,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0}));break;case "CLICK":{if(Bu(o.target)){let g=ua(o.target.pixels),f={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0};await this.traceBrowserInteraction("Click",()=>this.browser.clickUsingVisualCoordinates(g,f),{coordinates:g});break}let u=this.browser.url(),{elementInteractedDisplayString:d,result:m,thoughts:p}=await c({tracer:t,target:o.target,command:o,cache:o.cache?.target,action:g=>this.traceBrowserInteraction("Click",async f=>{let y={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0},b=await this.browser.click(g,this.createCallbacksForBrowser(this.orgId),y);return b.coordinates&&(f.coordinates=b.coordinates),b},{selector:g.locator.toString()}),options:{...o,targetName:"target",disableCache:r}}),h={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:p,data:m.downloadedFile?{downloadedFile:m.downloadedFile}:void 0};return Rk(u,h.urlAfterCommand)&&(h.succeedImmediately=true,h.succeedImmediatelyReason="URL changed"),h}case "COPY":return await this.browser.copy(o.value),{succeedImmediately:false,data:o.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(Bu(o.fromTarget)&&Bu(o.toTarget)){let m=ua(o.fromTarget.pixels),p=ua(o.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(Bu(o.fromTarget)||Bu(o.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:u,thoughts:d}=await this.wrapMultiElementTargetingCommand({tracer:t,command:o,targetNames:["fromTarget","toTarget"],descriptions:[o.fromTarget,o.toTarget],caches:[o.cache?.fromTarget,o.cache?.toTarget],action:(m,p)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0,steps:o.steps})),options:{...o,disableCache:r,effort:a,onEffectiveEffort:s}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u[0],thoughts:d}}case "MOUSE_DRAG":{let u=parseInt(o.deltaX),d=parseInt(o.deltaY),m=o.steps??5;if(isNaN(u)||isNaN(d))throw new ne("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${o.deltaX}, ${o.deltaY})`);if(o.target&&Bu(o.target)){let g=ua(o.target.pixels);await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDragUsingVisualCoordinates({deltaX:u,deltaY:d,steps:m,fromTarget:g}),{coordinates:g});break}let p,h;if(o.target?.elementDescriptor){let{elementInteractedDisplayString:g,thoughts:f}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:async y=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,y.locator,{force:o.force})),options:{...o,targetName:"target",disableCache:r}});p=g,h=f;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,void 0,{force:o.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:h}}case "SELECT_OPTION":{if(!Fc(o.target))throw new Error("Select with x/y is not supported yet");let u=o.target.elementDescriptor,d=o.choice,{elementInteractedDisplayString:m,thoughts:p}=await c({tracer:t,command:o,target:{type:"description",elementDescriptor:u},cache:o.cache?.target,action:h=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(h,d,o.force),{value:d.type==="LABEL"?d.label:d.type==="VALUE"?d.value:d.index}),options:{...o,targetName:"target",disableCache:r,source:Xu(o)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:p}}case "TAB":{let u=o.timeout===void 0?void 0:o.timeout*1e3,d=o.loadTimeout??o.timeout,m={loadTimeoutMs:d===void 0?void 0:d*1e3,timeoutMs:u,retry:true};await this.browser.switchToPage(o.action,m);break}case "NEW_TAB":await this.browser.createNewTab(o.url,{loadTimeoutMs:o.loadTimeout?o.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(o.action,{retry:true});break;case "COOKIE":{if(!o.value)break;let u=await this.browser.setCookie(o.value);l.debug({results:u},"Set cookies");break}case "LOCAL_STORAGE":if(!o.value||!o.key)break;await this.browser.setLocalStorage(o.key,o.value);break;case "JAVASCRIPT":{let u;try{o.environment==="BROWSER"?(u=await this.browser.evaluateCodeInPage({code:o.code,fragment:o.fragment??!1,context:n.toObjectCopy(),timeoutMs:o.timeout?o.timeout*1e3:void 0}),l.info({result:u},"Executed JavaScript in browser")):u=await Ug({orgId:this.orgId,code:o.code,fragment:!!o.fragment,context:n,timeoutMs:o.timeout?o.timeout*1e3:void 0,logger:l,codeEvaluator:this.codeEvaluator,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async d=>{if(!this.options?.scratchPadId){l.warn({updates:d},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:d,logger:l});}}});}catch(d){throw this.throwIfClosed(),new ne("ActionFailureError",d instanceof Error?d.message:`${d}`,{errOptions:{cause:d}})}try{JSON.stringify(u);}catch(d){throw new ne("ActionFailureError",`Return value is not serializable: ${d instanceof Error?d.message:`${d}`}`,{errOptions:{cause:d}})}return {urlAfterCommand:this.browser.url(),succeedImmediately:false,data:u}}case "TYPE":{if(o.target&&Bu(o.target)){let f=ua(o.target.pixels),y={...o,relativePosition:o.relativePosition?ua(o.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(f,y),await this.traceBrowserInteraction("Type",()=>this.browser.type(o.value,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,fill:o.fill},true),{value:o.value});break}let u=this.browser.url(),d,m,p=cloneDeep(o.target),h=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(p){let{elementInteractedDisplayString:f,thoughts:y}=await c({tracer:t,command:o,target:p,cache:o.cache?.target,action:b=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(o.value,b,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,relativePosition:o.relativePosition,fill:o.fill}),{value:o.value,selector:b.locator.toString()}),options:{...o,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!h,source:Xu(o)}});d=f,m=y;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(o.value,{force:o.force,clearContent:o.clearContent,forceClearContent:o.forceClearContent,delay:o.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:o.pressEnter,fill:o.fill},true),{value:o.value});let g={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:m};return Rk(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(Bu(o.target)){let m=ua(o.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(m),{coordinates:m});break}let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:m=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(m,{relativePosition:o.relativePosition?ua(o.relativePosition):void 0}),{selector:m.locator.toString()}),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "FOCUS":{if(!Fc(o.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:o,target:o.target,cache:o.cache?.target,action:m=>this.browser.focus(m),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "BLUR":{if(o.target&&!Fc(o.target))throw new Error("Blur with x/y is not supported yet");if(!o.target||!o.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,target:o.target,command:o,cache:o.cache?.target,action:m=>this.browser.blur(m),options:{...o,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "PRESS":{let u=this.browser.url();await this.traceBrowserInteraction("Press key",()=>this.browser.press(o.value,{repeat:o.repeat,convertMeta:o.convertMeta??true,delayMs:o.delayMs??this.browser.userBrowserSettings.pressDelayMs}),{value:o.value});let d={urlAfterCommand:this.browser.url(),succeedImmediately:false};return Rk(u,d.urlAfterCommand)&&(d.succeedImmediately=true,d.succeedImmediatelyReason="URL changed"),d}case "KEY_DOWN":return await this.browser.keyDown(o.value,{convertMeta:o.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(o.value,{convertMeta:o.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let u=new CookieJar,d=Ept(fetch,u),m;try{m=new URL(o.url).hostname;}catch{}let p=await lve({command:o,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:wE.parse({...p,cookies:m8(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await dve({command:o,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return sve({tracer:t,command:o,disableCache:r,browser:this.browser,logger:l,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:c});case "FILE_UPLOAD":{let u,d;if(o.fileSource.type==="URL"?(d=o.fileSource.url,u=await sSe({uri:o.fileSource.url,logger:l,orgId:this.orgId})):o.fileSource.type==="USER_FILE"&&(d=o.fileSource.name,u=await this.uploadedFileStorage?.getFileForUpload(o.fileSource.name,this.orgId)),!u)throw new ne("UserConfigurationError",`Attempted to use non-existent file for upload step: ${d}`);await this.browser.setFileChooserHandler({...u,filename:o.filename});break}case "AUTH_SAVE":{let u=await this.browser.saveAuthState();if(o.storageState&&Vh(o.storageState)){let d=mn__default.resolve(o.storageState);nn__default.mkdirSync(mn__default.dirname(d),{recursive:true}),nn__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
|
|
7984
7984
|
`,"utf8");}return {data:u,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AUTH_LOAD":{let u;if(Vh(o.storageState))try{u=JSON.parse(nn__default.readFileSync(mn__default.resolve(o.storageState),"utf8"));}catch(m){throw new ne("UserConfigurationError",`Failed to read auth state from '${o.storageState}': ${G(m)}`,{errOptions:{cause:m}})}else if(!o.storageState.trim())u=void 0;else if(u=await Ug({orgId:this.orgId,code:o.storageState,fragment:false,context:n,logger:l,codeEvaluator:this.codeEvaluator,signal:this.executeAbortController.signal}),typeof u!="object")throw new ne("ActionFailureError",`Credentials must evaluate to an object (received ${typeof u} instead)`);let d;try{d=EP.optional().parse(u);}catch(m){throw new ne("ActionFailureError",`Credentials provided do not follow the required format: ${m}`)}await this.browser.loadAuthState(d);break}case "ELEMENT_CHECK":{let u=(o.timeout??this.browser.userBrowserSettings.elementCheckTimeoutSeconds??jl)*1e3,d=this.generator.getAgentConfig()?.assertion;if(ive(o.assertion)&&!o.useSelector&&o.target.type==="description"&&d&&d!=="v1"){let p={id:o.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: ${o.target.elementDescriptor}`,iframeUrl:o.iframeUrl,timeout:o.timeout??this.browser.userBrowserSettings.elementCheckTimeoutSeconds,source:"NEGATED_CHECK",cache:o.cache&&"memory"in o.cache?{memory:o.cache?.memory}:void 0};try{let h=await DD({command:p,logger:l,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),effort:a,onEffectiveEffort:s});return {succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${h.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:h.afterScreenshotOverride}}finally{p.cache?.memory&&CR(o,p.cache?.memory.traces,l);}}let m=await rve({command:o,tracer:t,timeoutMs:u,targetingWrapper:c,fixtures:this.getControllerFixtures(),disableCache:r});return {fail:!m.success,data:m.data,elementInteracted:m.elementInteractedDisplayString,thoughts:m.err?.message??m.thoughts??`Element assertion ${m.success?"succeeded":"failed"}.`,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "PAGE_CHECK":{let u=await kl({action:async()=>FD({assertion:o.assertion,browser:this.browser,logger:l,timeout:o.timeout,signal:this.executeAbortController.signal,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:o.iframeUrl?{type:"url",url:o.iframeUrl}:void 0,browser:this.browser,logger:l});return {fail:!u.success,data:u.data,thoughts:u.success?"Page assertion passed.":u.err?.message??`Page assertion still failing after ${o.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:false}}case "REGISTER_REQUEST_LISTENER":{let u=new Lg(o.requestMatcher),d=this.browser.registerRequestListener(u);return this.registeredListeners[o.key]=d.then(async m=>await vq(m)).catch(m=>{l.error({err:m},"Failed to get request listener response");}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AWAIT_LISTENER":{let u=this.registeredListeners[o.key];if(!u)throw new ne("ActionFailureError",`No listener registered with key: ${o.key}`);let d=o.timeout??10;return {data:await ge(u,{milliseconds:d*1e3,message:`Request listener timed out after ${d} seconds`}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "RECORD_REQUESTS":{let u=new Lg(o.requestMatcher);return this.recordedRequests[o.key]={},await this.browser.registerRequestRecorder(o.key,{matches:d=>u.matches({url:d.request.url,method:d.request.method}),onRequestStart:(d,m)=>{this.recordedRequests[o.key][d]=SD(m);},onRequestComplete:(d,m)=>{this.recordedRequests[o.key]?.[d]&&(this.recordedRequests[o.key][d]=SD(m));}}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GET_RECORDED_REQUESTS":{let u=this.recordedRequests[o.key];if(!u)throw new ne("ActionFailureError",`No recorder registered with key: ${o.key}`);return this.browser.removeRequestRecorder(o.key),delete this.recordedRequests[o.key],{data:Object.values(u),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "SET_HEADER":{let u;return o.requestMatcher&&(u=new Lg(o.requestMatcher)),await this.browser.setHeader(o.name,o.value,u),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "MOCK_ROUTE":return {data:{key:await this.browser.registerMock(o.key,new Lg(o.requestMatcher),async(d,m)=>{let p=await Ug({orgId:this.orgId,code:o.responseGenerator,fragment:false,context:n,timeoutMs:void 0,logger:l,codeEvaluator:this.codeEvaluator,mock:{request:d,response:m},disallowVariableUpdates:true,responseSerialization:"RESPONSE"}),h=B8.parse(p);return new Response(h.body,{status:h.status,headers:h.headers})},o.fetchOriginalResponse??false)},succeedImmediately:false,urlAfterCommand:this.browser.url()};case "REMOVE_ROUTE_MOCK":return this.browser.removeMock(o.key),{succeedImmediately:false,urlAfterCommand:this.browser.url()};case "OFFLINE_MODE":return await this.browser.setOfflineMode(o.enable),{succeedImmediately:false,urlAfterCommand:this.browser.url()};default:return (d=>{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:o,disableCache:n,screenshot:r}){return (await this.generator.getReverseMappedDescription({browserState:t,target:o,screenshot:r},{disableCache:n,abortSignal:this.executeAbortController.signal,loggerTags:fo(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights();}async startRecordMode({params:t,abortController:o,isClickToRecord:n}){this.recordAbortController=o;let r=new ID({signal:o.signal,...t});return await this.browser.startRecording(this.recordAbortController.signal,r,n),r}async runSectionAutohealing(t){return this.generator.getAutohealingProposal(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:fo(this.logger)})}async getFailureRecoveryPlan(t,o){return this.generator.getFailureRecoveryPlan(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:fo(o??this.logger)})}};var UD=class{constructor(t){this.logger=t;this.directory=nn__default.mkdtempSync(mn__default.join(Nm.tmpdir(),"momentic-explore-network-")),this.entriesFilePath=mn__default.join(this.directory,"har-entries.log"),this.pagesStream=nn__default.createWriteStream(mn__default.join(this.directory,"har-pages.log")),this.entriesStream=nn__default.createWriteStream(this.entriesFilePath);for(let o of [this.pagesStream,this.entriesStream])o.on("error",n=>{this.logger.warn({err:n,directory:this.directory},"Explore network log stream failed");});this.writer=new Vy(this.pagesStream,this.entriesStream);}directory;entriesFilePath;writer;pagesStream;entriesStream;onNetworkPage=t=>{this.writer.writePage(t);};onNetworkLogs=t=>{this.writer.writeEntries(t);};async finalize(){let t=Promise.all([pve(this.entriesStream),pve(this.pagesStream)]);this.writer.close(),await t;}remove(){try{nn__default.rmSync(this.directory,{recursive:!0,force:!0});}catch(t){this.logger.warn({err:t,directory:this.directory},"Failed to remove explore network log directory");}}close(){this.writer.close(),this.remove();}};function pve(e){return e.writableFinished?Promise.resolve():once$2(e,"finish").then(()=>{},()=>{})}var Sve="No browser session is recording network traffic right now. Open or re-open the browser and retry.",hve=30,Yq=40,gve=4e3,Ipt=2e4,xpt=`Search the network requests the browser has made so far, newest first, as compact summaries (no bodies). Filter by URL, HTTP method, status range, resource type, or how recently the request started; minStatus also matches flushed entries with no recorded response/status. Then use ${Va} with a returned index to inspect one request in full. In-flight requests do not appear. Supplemental confirmation only \u2014 see the bug-finding guidance for when to use it.`,_pt=`Inspect a single network request in full (headers and, optionally, request/response bodies) by the index returned from ${fa}. Bodies are already size-limited by the recorder and are further truncated here; raise maxBodyChars to see more.`,Ppt=z.object({...iI,sinceSecondsAgo:z.number().positive().optional().describe("Optional: only include requests that started within this many seconds ago. Useful right after an action to see just the requests it triggered."),limit:z.int().min(1).max(rI).optional().default(hve).describe(`Maximum number of requests to return (newest first). Defaults to ${hve}.`),beforeIndex:z.int().min(0).optional().describe("Optional: only include requests with an index below this value, to page further back in time.")}),Opt=z.object({index:z.int().min(0).describe(`The index of a request as returned by ${fa}.`),includeRequestBody:z.boolean().optional().default(false).describe("Include the request body (if any). Defaults to false."),includeResponseBody:z.boolean().optional().default(true).describe("Include the response body (if any). Defaults to true."),maxBodyChars:z.int().min(1).max(Ipt).optional().default(gve).describe(`Maximum characters of each included body to return. Defaults to ${gve}.`)}),Tve=e=>{if(!Ave(e))return;let t=tool({description:xpt,inputSchema:Ppt,toModelOutput:({output:o})=>o,execute:async o=>{let n;try{n={...iD({input:o}),sinceMs:o.sinceSecondsAgo!==void 0?Date.now()-o.sinceSecondsAgo*1e3:void 0};}catch(a){return Y(L({text:`Invalid urlRegex "${o.urlRegex}": ${G(a)}. Provide a valid JavaScript regular expression and try again.`,section:"Network requests"}))}let r=await Eve(e);if(!r)return Y(L({text:Sve,section:"Network requests"}));let i=await abe({...r,filter:n,limit:o.limit,beforeIndex:o.beforeIndex});return Y(L({text:kpt(i.summaries,{totalEntries:i.totalEntries,totalMatched:i.totalMatched,hasMoreOlder:i.hasMoreOlder}),section:"Network requests"}))}});return {name:fa,tool:t}},vve=e=>{if(!Ave(e))return;let t=tool({description:_pt,inputSchema:Opt,toModelOutput:({output:o})=>o,execute:async o=>{let n=await Eve(e);if(!n)return Y(L({text:Sve,section:"Network request detail"}));let r=await sbe({...n,index:o.index}),i=r?Mpt(r,o):`No network request found at index ${o.index}. It may not have completed yet, or the index is out of range \u2014 search again to get current indices.`;return Y(L({text:i,section:"Network request detail"}))}});return {name:Va,tool:t}};function Ave(e){return !!(e.networkLogEntriesPath||e.openNetworkLogEntries)}async function Eve(e){if(e.openNetworkLogEntries){let o=await e.openNetworkLogEntries();return o?{stream:o}:void 0}let t=e.networkLogEntriesPath?.();return t?{filePath:t}:void 0}function kpt(e,t){if(e.length===0)return t.totalEntries===0?"No network requests have been recorded yet.":`No requests matched (${t.totalEntries} recorded in total). Loosen the filter.`;let o=e.map(a=>{let s=a.status!==void 0?String(a.status):"(pending)",l=a.durationMs!==void 0?`${Math.round(a.durationMs)}ms`:"-",c=a.resourceType??"-",u=a.mocked?" [mocked]":"";return `#${a.index} ${s} ${a.method} ${a.url} \xB7 ${c} \xB7 ${l} \xB7 ${a.startedDateTime}${u}`}),n=e[e.length-1],r=`
|
|
7985
7985
|
|
|
7986
7986
|
Showing ${e.length} of ${t.totalMatched} matching requests (${t.totalEntries} recorded in total).`,i=t.hasMoreOlder&&n?`${r} Page older with beforeIndex=${n.index}.`:r;return `${o.join(`
|
|
@@ -9039,7 +9039,7 @@ to pick which of these modules are relevant:
|
|
|
9039
9039
|
|
|
9040
9040
|
`;let m=aTt(c);d+=m;let p=streamObject({schema:qK,model:u("claude-sonnet-4-5-20250929"),system:iTt,messages:[{role:"user",content:d}],providerOptions:{anthropic:Zs}}),h=[];for await(let S of p.textStream)h.push(S);let g=h.join(""),f;try{let S=JSON.parse(g);f=qK.parse(S);}catch(S){r.error({rawResponse:g,parseError:S},"Failed to parse AI response as JSON"),o.addError(`Failed to parse AI response: ${G(S)}. Raw response: ${g}`);return}let y=new Set(c.map(S=>S.moduleId)),b=f.recommendations.filter(S=>y.has(S.moduleId)?!0:(r.warn({moduleId:S.moduleId,moduleName:S.moduleName},"AI recommended a module that doesn't exist"),!1));o.addPartFromText(JSON.stringify({recommendations:b,totalModulesAnalyzed:c.length},null,2));}catch(c){r.error({err:c},"Error in module recommendation"),o.addError(`Failed to recommend modules: ${G(c)}`);}}}),KF=[lTt,nTt];var cTt=1e4,KK=new WeakSet;async function sb({response:e,extra:t,sessionId:o,toolName:n,attributes:r,operation:i}){let a=Au({response:e,sessionId:o,toolName:n});if(a)try{await YK({session:a,signal:t?.signal,operation:()=>uTt({extra:t,session:a,toolName:n,attributes:r,operation:i})});}catch(s){e.addError(G(s));}}async function uTt({extra:e,session:t,toolName:o,attributes:n,operation:r}){if(ei.getSession(t.sessionId)!==t||t.cleanupInProgress)throw new Error(`Session '${t.sessionId}' is no longer active.`);t.controller.setOpen();let i=e?.signal?t.controller.bindCancellation(e.signal):void 0,a;try{e?.signal?.throwIfAborted(),a=de({name:o,root:t.shareDiagnostics,attributes:{"momentic.org_id":t.orgId,"momentic.session_id":t.sessionId,"momentic.test_id":t.testId,...n},fn:()=>r(t)}),await JK({signal:e?.signal,operation:async()=>await a});}catch(s){if(e?.signal?.aborted&&a){let l,c=await Promise.race([a.then(()=>true,()=>true),new Promise(u=>{l=setTimeout(()=>u(false),cTt);})]);l&&clearTimeout(l),c||ei.killSession(t.sessionId,"cancelled MCP operation did not stop");}throw s}finally{i?.();}}async function YK({session:e,signal:t,operation:o}){if(t?.throwIfAborted(),KK.has(e))throw new Error("Another browser operation is already active for this session. Wait for it to finish or cancel it before retrying.");KK.add(e);try{return await o()}finally{KK.delete(e);}}async function JK({signal:e,operation:t}){return e?.throwIfAborted(),e?await new Promise((o,n)=>{let r=()=>n(e.reason??new Error("MCP tool call cancelled."));e.addEventListener("abort",r,{once:true}),t().then(o,n).finally(()=>{e.removeEventListener("abort",r);});}):await t()}function YF({signal:e,onCancellation:t}){if(!(!e||!t)){if(e.aborted){t();return}return e.addEventListener("abort",t,{once:true}),()=>e.removeEventListener("abort",t)}}var dTt=Object.getPrototypeOf(async function(){}).constructor;async function SRe({code:e,page:t,signal:o}){return await new dTt("page","signal",`"use strict"; return await (${e})(page, signal);
|
|
9041
9041
|
//# sourceURL=momentic-mcp/run-playwright-unsafe.js`)(t,o)}var mTt=1e5,TRe=ir({schema:{name:LE,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. ${Pr}`,inputSchema:{sessionId:z.string().describe("The session id to query."),returnBrowserState:z.boolean().default(false).describe("Include the serialized browser snapshot. Default false. Set to true when you need the browser snapshot for element targeting or page structure."),returnScreenshot:z.boolean().default(true).describe("Include a screenshot. Default true. Set to false if you already have a screenshot of the present state and don't need a new one. EX: you just previewed a step and see that the page is too complicated and need the browser snapshot."),hint:z.string().optional().describe("Short natural-language description of what you need from the page (e.g. the action you are about to take or the element you are looking for). Required when returnBrowserState=true and the page is large: the hint is fed into an AI page-filtering step that returns only the most relevant sections of the accessibility tree, keeping the snapshot under the per-tool token budget.")}},handle:async(e,t,o,n)=>{await sb({response:o,extra:n,sessionId:t.sessionId,toolName:LE,operation:async r=>{let i=await $K({browser:r.controller.browser,isRemoteBrowser:r.isRemoteBrowser,supportsFileOutput:e.supportsFileOutput,returnBrowserState:t.returnBrowserState,returnScreenshot:t.returnScreenshot,tokenLimit:mTt,hint:t.hint,filtering:{generator:e.generator,orgId:e.orgId,logger:e.logger,signal:r.controller.executeAbortController.signal}});o.addContentParts(i);}});}}),vRe=ir({schema:{name:NE,description:`${Yb} ${Pr}`,inputSchema:{sessionId:z.string(),filters:z.array(z.string().trim().min(1)).min(1).optional().describe(Jb)}},handle:async(e,t,o)=>{let n=Au({response:o,sessionId:t.sessionId,toolName:NE});if(!n)return;let r=await vu({testContext:n.context,supportsFileOutput:e.supportsFileOutput,filters:t.filters});o.addContentParts(r);}}),ARe=ir({schema:{name:yz,description:"UNSAFE escape hatch for running raw Playwright code against the current active Momentic session only. This tool is exposed only when the MCP server starts with --enable-unsafe-full-access. It executes arbitrary JavaScript in the MCP server process and is RCE-equivalent. Code, stateful setup, and handlers registered through this tool are not saved into the Momentic test and will not be available when the test runs later. Do not use this tool to build durable test workflows. Use it only for temporary test-data setup, debugging, custom interactive-session reset logic, or registering handlers needed during the current session when structured Momentic tools cannot express the operation. Do not use it for normal page interactions such as clicking, typing, navigation, element location, or assertions; those bypass Momentic's caches, waits, traces, and authored-step behavior. The function receives the active Playwright Page and an AbortSignal; access its BrowserContext with page.context().",inputSchema:{sessionId:z.string().describe("The active Momentic session id."),code:z.string().trim().min(1).describe("An async JavaScript function invoked with the active Playwright Page and an AbortSignal, for example: async (page, signal) => { signal.throwIfAborted(); await page.context().clearCookies(); return page.url(); }. Return a JSON-serializable value. Await all setup work that must finish before the next tool call. Event and route handlers registered on the page or its context remain active for the session.")}},handle:async(e,t,o,n)=>{await sb({response:o,extra:n,sessionId:t.sessionId,toolName:yz,operation:async r=>{let i=YF({signal:n?.signal,onCancellation:()=>{ei.killSession(t.sessionId,"unsafe MCP tool cancelled");}});try{let a=await SRe({code:t.code,page:r.controller.browser.getActivePage(),signal:n?.signal}),s=JSON.stringify({result:a??null},null,2);o.addPartFromText(s);}finally{i?.();}}});}});var ERe=ir({schema:{name:nh,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. ${QC} 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 ${Si} to inspect persisted test state by id or path, especially for a different test.`,inputSchema:{testId:z.string().describe("The test id to target when starting a session."),envName:z.string().optional().describe("Optional environment override (matches CLI --env behavior). Defaults to the test's default env when omitted."),projectConfigPath:z.string().optional().describe("Optional path to a momentic.config.yaml file (matches CLI --config)."),projectNameFilter:z.string().optional().describe("Optional project name filter for workspace configs (matches CLI --filter)."),headfulBrowser:z.boolean().optional().describe("Whether to launch a headful browser for the session. When omitted, uses the MCP server default if configured."),video:z.boolean().optional().describe("Whether to record a video of the browser session. When omitted, uses the MCP server default if configured. When the session is terminated, the response will include the path to the video output directory."),shareDiagnostics:z.boolean().optional().describe("Share local session diagnostics using the configured OpenTelemetry exporter."),turbo:z.boolean().optional().describe("Prioritize speed over human-like interactions by skipping selected browser readiness and stability waits, at the expense of accuracy on complex or highly dynamic sites.")}},handle:async(e,t,o,n)=>{let{logger:r}=e,i=t.shareDiagnostics??e.shareDiagnostics??false;await sc({serviceName:"mcp",enabled:i});let a=t.video??e.videoDefault??false,s;a&&(nr(e.project.rootDir),s=rr({rootDir:e.project.rootDir,entity:"video",ext:"d"}),mkdirSync(s,{recursive:true}));let l;try{let m=Nn();if(!m){o.addError("API client is not initialized; cannot start MCP session.");return}let p=await fs({project:await Ro({configFilePath:t.projectConfigPath??e.project.configFilePath,nameFilter:t.projectNameFilter,skipExitOnError:!0}),apiClient:m}),h=new Dl(m,e.orgId,p),g;t.turbo===!0?g="turbo":t.turbo===!1&&(g="standard"),l=await ei.startSession({logger:r,storage:h,testId:t.testId,idleTimeoutMs:e.sessionIdleTimeoutMs,runner:"mcp",envName:t.envName,headfulOverride:t.headfulBrowser??e.headfulDefault??!0,customHeaders:e.customHeaders,devicePixelRatio:e.devicePixelRatio,videoOutputDir:s,browserExecutionMode:g,shareDiagnostics:i,abortSignal:n?.signal});}catch(m){o.addError(G(m));return}let c=n?.signal?l.controller.bindCancellation(n.signal):void 0;c&&o.addCleanupCallback(c);let u=YF({signal:n?.signal,onCancellation:()=>{ei.killSession(l.sessionId,"MCP session start cancelled");}});u&&o.addCleanupCallback(u),n?.signal.throwIfAborted(),Nl({type:"mcp:session_started",test_platform:"web"});let d=l.controller.browser.getViewport();o.addPartFromText(JSON.stringify({sessionId:l.sessionId,testId:l.testId,testFileAbsolutePath:l.testFileAbsolutePath,projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:Bv(),createdAt:l.createdAt,expiresAt:l.idleTimeoutMs===void 0?void 0:l.lastAccessedAt+l.idleTimeoutMs,idleTimeoutMinutes:l.idleTimeoutMs===void 0?void 0:l.idleTimeoutMs/(60*1e3),envName:l.envName,baseUrl:l.baseUrl,viewport:d,browserExecutionMode:l.controller.browser.executionMode,authoringStrategy:"Prefer momentic_preview_steps for known adjacent steps. Use momentic_locate_multiple_elements first only when future targets are already present and earlier interactions will not replace or materially change them. CacheIds are optional; persist cacheless steps unchanged."},null,2)),o.addContentParts(await rye({projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:Bv(),stepSchema:Pa(),stepSchemaTitle:"Step schema",supportsFileOutput:e.supportsFileOutput}));try{let m=await Gg({project:l.storage.getProject(),storage:l.storage,selector:{id:l.testId},envName:l.envName,logger:r,mutableStepState:l.mutableStepState,includeCache:!1,hydrateStepIdentity:!0,supportsFileOutput:e.supportsFileOutput});o.addContentParts(m);}catch(m){r.warn({sessionId:l.sessionId,err:m},"Session started but resolved test content could not be loaded");}try{o.addContentParts(await vs({browser:l.controller.browser,supportsFileOutput:e.supportsFileOutput}));}catch(m){r.warn({sessionId:l.sessionId,err:m},"Session started but initial screenshot capture failed"),o.addPartFromText(JSON.stringify({warning:"Session started successfully, but initial screenshot capture failed.",screenshotError:G(m)},null,2));}s&&o.addContentParts(L({text:Dn({filePath:s,title:"Video output directory"}),section:"Video Output"}));}}),wRe=ir({schema:{name:fz,description:"Update settings for an active browser session without resetting its page state, cookies, tabs, or caches. Use standard execution when turbo has trouble with a complex or highly dynamic site; switch back to turbo when speed is preferred.",inputSchema:{sessionId:z.string().describe("The session id to update."),settings:z.object({browserExecutionMode:z.enum(["standard","turbo"]).describe("Turbo skips selected browser readiness and stability waits; standard restores the full waiting behavior.")})}},handle:async(e,t,o,n)=>{await sb({response:o,extra:n,sessionId:t.sessionId,toolName:fz,attributes:{"momentic.browser_execution_mode":t.settings.browserExecutionMode},operation:async r=>{let i=r.controller.browser.updateRuntimeSettings({executionMode:t.settings.browserExecutionMode});o.addPartFromText(JSON.stringify({sessionId:r.sessionId,settings:{browserExecutionMode:i.executionMode}},null,2));}});}}),RRe=ir({schema:{name:E_,description:`Kill a granular browser session by sessionId. Returns available session ids if the target is missing. ${Pr}`,inputSchema:{sessionId:z.string().describe("The session id to terminate.")}},handle:async(e,t,o)=>{let{sessionId:n}=t;try{let r=ei.getSession(n),i=r?.videoOutputDir,a=await ei.killSession(t.sessionId,"explicit kill");if(a.killed&&Nl({type:"mcp:session_killed",test_platform:"web",reason:"explicit kill"}),!a.killed){r?o.addError(`Failed to terminate session '${t.sessionId}'.`):o.addError(JSON.stringify({message:`No active session found for id '${t.sessionId}'.`,availableSessionIds:ei.listSessionIds()},null,2));return}o.addPartFromText(JSON.stringify({sessionId:t.sessionId,killed:!0},null,2));let s=await iye({killResult:a,rootDir:e.project.rootDir});s&&o.addContentParts(L({text:Dn({filePath:s.filePath,title:"Session span report"}),section:"Session Spans"})),i&&o.addContentParts(L({text:Dn({filePath:i,title:"Video output directory"}),section:"Video Output"}));}catch(r){o.addError(G(r));}}});var XK=async({steps:e,fromStep:t,toStep:o,tracer:n,collectStepScreenshots:r,controller:i,executionOptions:a,storage:s,codeEvaluator:l,logger:c,socket:u,testContext:d,orgId:m,sessionId:p,usageTracker:h,apiClient:g})=>{let f={controller:i,storage:s,codeEvaluator:l,logger:c,context:d,usageTracker:h},y=n??(u?new _p({orgId:m,parentStep:null,parentTracer:null,socket:u}):new iR),b={results:[],asyncTasks:[],state:{autoHealingDisabled:true,failureRecoveryDisabled:true,failureRecoveryAttempts:0},...t&&{fastForwardingToStep:true}},S=()=>(i.setOpen(),Ll({listParams:{containerName:"agent-step-list",steps:e,tracer:y},fixtures:f,options:{collectDebugData:false,collectStepScreenshots:r,reinitializeBrowser:false,disableHealing:true},inputs:{orgId:m,userId:Xpe(),runId:randomUUID(),sessionId:p,steps:e,testMetadata:null,orgSettings:{},fromStep:t,toStep:o},callbacks:{test:{},step:{}},runParams:g?{apiClient:g}:null,work:b}));return i.withExclusiveStepSequence(()=>a?i.withExecutionOptions(a,S):S())},mA=async({step:e,controller:t,executionOptions:o,storage:n,codeEvaluator:r,logger:i,socket:a,testContext:s,orgId:l,sessionId:c,usageTracker:u,apiClient:d})=>{let m;try{m=await XK({steps:[e],controller:t,executionOptions:o,storage:n,codeEvaluator:r,logger:i,socket:a,testContext:s,orgId:l,sessionId:c,usageTracker:u,apiClient:d});}finally{u.flushEvents(i);}return m.results[0]};async function HI({step:e,project:t,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f}){let y=await GC(e,{project:t,logger:o,tempCaches:d});switch(y.type){case "PRESET_ACTION":return gTt({step:y,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});case "AI_ACTION_DYNAMIC":return fTt({step:y,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});case "RESOLVED_MODULE":return yTt({step:y,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});default:{let[b,S]=await Promise.all([vs({browser:r.browser,supportsFileOutput:u}),vu({testContext:c,supportsFileOutput:u})]);return [...L({text:`Preview for step type ${y.type} is not supported. Only PRESET_ACTION, RESOLVED_MODULE, and AI_ACTION_DYNAMIC are supported.`,section:"Error"}),...b,...S]}}}async function CRe({steps:e,project:t,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h}){let g=[],f=0,y;for(let b=0;b<e.length;b++){g.push(...pEe({index:b,rawStep:e[b]}));let S;try{let E=await HI({step:e[b],project:t,logger:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,tempCaches:d,includeBrowserState:!1,skipAISmartWaiting:b===0,onStepResult:v=>{S=v,h?.(v);}});g.push(...E);}catch(E){r.executeAbortController.signal.throwIfAborted(),o.error({err:E,stepIndex:b+1},"Batch preview step execution errored"),g.push(...L({text:`Step Execution errored: ${G(E)}`,section:"Error"})),y=b+1;break}if(!S||S.status!=="SUCCESS"){y=b+1;break}f++;}g.push(...gEe({completedSteps:f,failedStep:y})),r.executeAbortController.signal.throwIfAborted();try{g.push(...await JF({controller:r,supportsFileOutput:u,testContext:c}));}catch(b){o.warn({err:b},"Batch preview completed but final browser state capture failed"),g.push(...L({text:`Final browser state capture failed: ${G(b)}`,section:"Error"}));}return {parts:g,successful:y===void 0}}async function IRe({steps:e,project:t,logger:o,controller:n,testContext:r,tempCaches:i}){let a=await Promise.all(e.map(l=>GC(l,{project:t,logger:o,tempCaches:i}))),s=a.findIndex(l=>l.type!=="PRESET_ACTION");if(s>=0)throw new Error(`Step ${s+1} must be a supported single-target CLICK, TYPE, HOVER, BLUR, or SELECT_OPTION step with a description`);return fEe({steps:a.map(l=>{if(l.type!=="PRESET_ACTION")throw new Error(`Unsupported step type ${l.type}`);return l}),rawSteps:e,logger:o,controller:n,testContext:r,tempCaches:i})}async function gTt({step:e,logger:t,storage:o,controller:n,codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,supportsFileOutput:c,tempCaches:u,usageTracker:d,apiClient:m,onStepResult:p,includeBrowserState:h=true,skipAISmartWaiting:g=true}){let f=await mA({step:e,logger:t,storage:o,controller:n,executionOptions:{skipAISmartWaiting:g},codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,usageTracker:d,apiClient:m});f&&p?.(f);let y=[];return f?.status==="SUCCESS"&&mK({logger:t,tempCaches:u,command:e.command,parts:y}),y.push(...hEe({result:f})),h&&y.push(...await JF({controller:n,supportsFileOutput:c,testContext:l})),y}async function JF({controller:e,supportsFileOutput:t,testContext:o}){await e.browser.waitForStability();let[n,r]=await Promise.all([vs({browser:e.browser,supportsFileOutput:t}),vu({testContext:o,supportsFileOutput:t})]);return [...n,...r]}async function fTt({step:e,logger:t,storage:o,controller:n,codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,supportsFileOutput:c,usageTracker:u,apiClient:d,onStepResult:m,includeBrowserState:p=true,skipAISmartWaiting:h=true}){let g=await mA({step:e,logger:t,storage:o,controller:n,executionOptions:{skipAISmartWaiting:h},codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,usageTracker:u,apiClient:d});g&&m?.(g);let f=[];return g?g.status==="SUCCESS"?f.push(...L({text:`AI action completed successfully: ${g.message??"Goal achieved"}`,section:"Successful Result"})):f.push(...L({text:`AI action failed: ${g.message??"Unknown error while previewing AI action"}`,section:"Error"})):f.push(...L({text:"AI action executed with unknown result.",section:"Error"})),p&&f.push(...await JF({controller:n,supportsFileOutput:c,testContext:l})),f}async function yTt({step:e,logger:t,storage:o,controller:n,codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,supportsFileOutput:c,usageTracker:u,apiClient:d,onStepResult:m,includeBrowserState:p=true,skipAISmartWaiting:h=true}){let g=await mA({step:e,logger:t,storage:o,controller:n,executionOptions:{skipAISmartWaiting:h},codeEvaluator:r,socket:i,orgId:a,sessionId:s,testContext:l,usageTracker:u,apiClient:d});g&&m?.(g);let f=[];return g?g.status==="SUCCESS"?f.push(...L({text:`Module executed successfully: ${g.message}`,section:"Successful Result"})):f.push(...L({text:`Module execution failed: ${g.message}`,section:"Error"})):f.push(...L({text:"Module execution errored for an unknown reason.",section:"Error"})),p&&f.push(...await JF({controller:n,supportsFileOutput:c,testContext:l})),f}var xRe=({steps:e,fromStep:t,toStep:o})=>{let n={total:0,fastForwardingToStep:true},r=(i,a)=>{if(i.skipped)return false;let s=a.map(c=>c.id),l=RI(i.id,s,t.fromStepId,t.parentStepIdChain);if(n.fastForwardingToStep){if(!l)return false;n.fastForwardingToStep=false;}return n.total+=1,!!(o&&RI(i.id,s,o.toStepId,o.parentStepIdChain))};return as({steps:e,earlyStop:true,onPresetAction:(i,a)=>r(i,a.parentChain),onConditional:(i,a)=>{if(i.skipped)return false;let s=a.parentChain.map(c=>c.id),l=RI(i.id,s,t.fromStepId,t.parentStepIdChain);if(n.fastForwardingToStep){if(!l)return false;n.fastForwardingToStep=false;}return !!(o&&RI(i.id,s,o.toStepId,o.parentStepIdChain))},onSimpleStepContainer:(i,a)=>r(i,a.parentChain)}),n.total};var STt="Cannot add a module step inside another module. Modules cannot be nested.";function QK(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 TTt(e,t,o){let n=QK(e,t);if(!o?.length)return n;let r=jne(n,o);if(!r)throw new Error(`No step found with parent chain [${o.join(", ")}] in ${t} section, or parent does not support nested steps`);return r}function _Re(e,t){let o=t.moduleId,n=r=>{r.type!=="RESOLVED_MODULE"||r.moduleId!==o||(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])as({steps:r,onPresetAction:n,onConditional:n,onSimpleStepContainer:n});}async function XF({project:e,storage:t,orgId:o,logger:n,testPath:r,saveChangesToDisk:i,supportsFileOutput:a,tempCaches:s,mutableStepState:l,onStepSplice:c,params:u,envName:d}){let m=mn__default.join(e.rootDir,r),p=await t.getTestByPath({relativeTestPath:r,logger:n}),h=l?.stepLists??p,g=cloneDeep({steps:h.steps??[],beforeSteps:h.beforeSteps??[],afterSteps:h.afterSteps??[]}),f=cloneDeep(g),y;try{y=await Promise.all(u.steps.map(_=>GC(_,{project:e,logger:n,tempCaches:s})));}catch(_){return Y(L({text:`Error parsing steps: ${G(_)}`,section:"Error"}))}let b=cloneDeep(y),S=u.parentStepIdChain,E;try{E=TTt(f,u.targetSection,S);}catch(_){return Y(L({text:`Error: ${G(_)}`,section:"Error"}))}if(u.startIndex<0||u.startIndex>E.length)return Y(L({text:`Error: Invalid startIndex ${u.startIndex} for splicing ${u.targetSection} section with ${E.length} steps (must be 0-${E.length})`,section:"Error"}));let v=y.length,R=u.deleteCount,w=cloneDeep(E.slice(u.startIndex,u.startIndex+R)),P=[];if(S?.length){let _=Hne(QK(f,u.targetSection),S,u.targetSection);if(P.push(..._),_.some(N=>N.type==="RESOLVED_MODULE")&&y.some(N=>N.type==="RESOLVED_MODULE"))return Y(L({text:`Error: ${STt}`,section:"Error"}))}E.splice(u.startIndex,u.deleteCount,...y);for(let _ of y)_.type==="RESOLVED_MODULE"&&_Re(f,_);for(let _ of P)_.type==="RESOLVED_MODULE"&&_Re(f,_);if(l&&(l.stepLists=f),c?.({targetSection:u.targetSection,parentStepIdChain:S??[],startIndex:u.startIndex,deletedSteps:w,insertedSteps:b}),i){let _=await t.updateTestByPath({logger:n,relativeTestPath:r,stepLists:f,schemaVersion:Ct});n.info({testPath:r,testFilePath:m,projectFileFormat:e.config.fileFormat,moduleUpdateCount:_.moduleUpdates.length,snapshotCacheCount:_.snapshotCachesToSave.length},"MCP splice persisted test changes to disk");}else n.info({testPath:r,testFilePath:m,projectFileFormat:e.config.fileFormat},"MCP splice skipped disk persistence");let I=[...L({text:`Successfully spliced ${v} step(s) at index ${u.startIndex} in the ${u.targetSection} section, removing ${R} step(s).`,section:"Result"})];return I.push(...await ETt({logger:n,project:e,orgId:o,testId:p.id,environment:d,originalSteps:g,updatedSteps:f})),I.push(...await mEe({rootDir:e.rootDir,supportsFileOutput:a,deletedStepRefs:w.map((_,O)=>({id:_.id,index:u.startIndex+O})),insertedStepRefs:b.map((_,O)=>({id:_.id,index:u.startIndex+O})),deletedSteps:zh(w,{includeCache:false}),insertedSteps:zh(b,{includeCache:false}),metadata:{section:u.targetSection,parentStepIdChain:S??[],startIndex:u.startIndex,deleteCount:R,insertedCount:v},artifactEntity:"splice-restoration-payload"})),u.returnTest&&I.push(...L({text:JSON.stringify(await $F({project:e,storage:t,selector:{path:r},envName:d,logger:n,mutableStepState:l,supportsFileOutput:a,hydrateStepIdentity:false}),null,2),section:"Test Content"})),Y(I)}async function QF({project:e,logger:t,testPath:o,storage:n,controller:r,codeEvaluator:i,socket:a,orgId:s,sessionId:l,envName:c,testContext:u,tracer:d,params:m,tokenLimit:p,supportsFileOutput:h,usageTracker:g,mutableStepState:f,apiClient:y,disableCache:b,collectStepScreenshots:S,abortSignal:E}){let{fromStep:v,toStep:R,targetSection:w}=m,P=await n.getTestByPath({relativeTestPath:o,logger:t}),{alwaysSaveCache:I,noCache:_}=hu(),O=await La({logger:t,orgId:s,project:e,alwaysSaveCache:I,noCache:_||b===true}),N=f?.stepLists??{beforeSteps:P.beforeSteps??[],afterSteps:P.afterSteps??[],steps:P.steps};await O.resolveStepCacheEntries({logger:t,schemaVersion:P.schemaVersion,stepLists:N,testId:P.id,environment:c,useSnapshotIdentityCache:!f&&e.config.fileFormat==="v2"}),f&&(f.stepLists=N);let D=b?cloneDeep(N):N;b&&vTt(D);let M=QK(D,w),z=cloneDeep({steps:D.steps,beforeSteps:D.beforeSteps,afterSteps:D.afterSteps}),{result:J}=Zc(M,v.fromStepId,v.parentStepIdChain);if(!J)return Y(L({text:`Error: No step found with id "${v.fromStepId}" and parent chain [${v.parentStepIdChain.join(", ")}] in ${w} section.`,section:"Error"}));if(R){let{result:ee}=Zc(M,R.toStepId,R.parentStepIdChain);if(!ee)return Y(L({text:`Error: No step found with id "${R.toStepId}" and parent chain [${R.parentStepIdChain.join(", ")}] in ${w} section.`,section:"Error"}))}if(d?.setProgressTotal){let ee=xRe({steps:M,fromStep:v,toStep:R});d.setProgressTotal(ee);}PRe({controller:r,abortSignal:E});let W;try{W=await XK({steps:M,controller:r,storage:n,codeEvaluator:i,logger:t,socket:a,orgId:s,sessionId:l,testContext:u,fromStep:v,toStep:R,tracer:d,collectStepScreenshots:S,usageTracker:g,apiClient:y});}finally{g.flushEvents(t);}let{results:V}=W;if(!V||V.length===0)return Y(L({text:"Error: No steps were executed.",section:"Error"}));let k=V.at(-1);if(!k)return Y(L({text:"Error: No steps were executed.",section:"Error"}));let Q={logger:t,cacheStorage:O,orgId:s,testId:P.id,environment:c,originalStepsWithCaches:z,updatedStepsWithCaches:{steps:D.steps,beforeSteps:D.beforeSteps??[],afterSteps:D.afterSteps??[]}},H=k.status!=="SUCCESS";await qf({logger:t,cacheStorage:O,orgId:s,testId:P.id,environment:c,stepLists:Q.updatedStepsWithCaches,useSnapshotIdentityCache:e.config.fileFormat==="v2"}),H?k.status==="FAILED"&&await uT(Q):await Kf(Q);let $=w==="main"?"":` in ${w}`,oe=ee=>{let Z="fromStepId"in ee?ee.fromStepId:ee.toStepId;return ee.parentStepIdChain.length>0?`id "${Z}" (parent chain [${ee.parentStepIdChain.join(", ")}])`:`id "${Z}"`},ie=v?oe(v):"beginning",Pe=R?`Steps from ${ie} through ${oe(R)}${$}`:`Steps from ${ie} to end${$}`,Ne=[];if(H)Ne.push(...L({text:`Error: step with id ${k.id} failed: ${k.message}`,section:"Error"}));else {PRe({controller:r,abortSignal:E});let ee=`${Pe} executed successfully.`;Ne.push(...L({text:ee,section:"Result"})),k.data&&Ne.push(...L({text:`Data: ${JSON.stringify(k.data,null,2)}`,section:"Result Data"}));}let[Fe,at]=await Promise.all([vs({browser:r.browser,supportsFileOutput:h}),vu({testContext:u,supportsFileOutput:h,limits:{tokenLimit:p}})]);return Y([...Ne,...Fe,...at])}function PRe({controller:e,abortSignal:t}){t?.throwIfAborted(),e.setOpen();}function vTt(e){for(let t of [e.steps,e.beforeSteps,e.afterSteps])t&&ATt(t);}function ATt(e){as({steps:e,earlyStop:false,onPresetAction:t=>($r(t.command)&&delete t.command.cache,false),onSimpleStepContainer:()=>false,onConditional:()=>false});}async function ETt({logger:e,project:t,orgId:o,testId:n,environment:r,originalSteps:i,updatedSteps:a}){let s=[];try{let{alwaysSaveCache:l,noCache:c}=hu(),u=await La({logger:e,orgId:o,project:t,alwaysSaveCache:l,noCache:c});await qf({logger:e,cacheStorage:u,orgId:o,testId:n,environment:r,stepLists:a,useSnapshotIdentityCache:t.config.fileFormat==="v2"}),await Kf({logger:e,cacheStorage:u,orgId:o,testId:n,environment:r,originalStepsWithCaches:i,updatedStepsWithCaches:a});}catch(l){e.warn({err:l},"Failed to save step caches after execution, future runs may be slower"),s.push(...L({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 s}var ZK=class{constructor(t,o,n,r){this.reporter=t;this.step=o;this.parentStepIdChain=n;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 ZF(this.reporter,this.parentStepIdChain.concat(this.step.id),this.setTotal)}},ZF=class{constructor(t,o=[],n){this.reporter=t;this.parentStepIdChain=o;this.setTotal=n;}loggerBindings;setProgressTotal(t){this.setTotal(t);}async getScreenshot(t,o){}async getHtmlSnapshot(t,o){}flushResults(t){}async startStep(t,o){return this.reporter.onStepStart(t.step),new ZK(this.reporter,t.step,this.parentStepIdChain,this.setTotal)}};function ORe(e,t,o,n,r){let i=wI(e),a={completed:0,total:0},s=new AbortController,l=false,c=p=>{i&&WAe(e,a,p,t,s,o);},u=()=>{i&&(l||(l=true,c("Starting step execution...")));},d=p=>{!Number.isFinite(p)||p<0||(a.total=p);},m={onStepStart:p=>{u(),a.total===a.completed&&(a.total+=1);let h=on(p);r&&(r.currentStep=h),c(`Starting: ${h}`);},onStepComplete:p=>{n(),u(),a.completed+=1,a.total<a.completed&&(a.total=a.completed);let h=on(p);r&&(r.currentStep=void 0,r.lastCompletedStep=h),c(`Completed: ${h}`);}};return new ZF(m,[],d)}var e0=`CLI-style step definition. Use the Step Authoring Guide artifact returned from ${nh} when you start your session to get the full step schema.`,wTt=ir({schema:{name:N6,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:uH},handle:async(e,t,o,n)=>{try{let r=await e.storage.createTest(t);Nl({type:"mcp:test_create",test_platform:"web"}),o.addPartFromText(JSON.stringify(r,null,2));}catch(r){o.addError(G(r));return}}}),RTt=ir({schema:{name:Si,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 ${Zb}, 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. ${Pr}`,inputSchema:{testId:z.string().optional().describe(`Id of the test to fetch. If you do not already know it, list project tests with ${gz}. Either testId or testPath is required.`),testPath:z.string().optional().describe("Path to the test file, relative to the project root or absolute. When provided, skips the entity-registry lookup. Either testId or testPath is required.")}},handle:async(e,t,o,n)=>{try{let r=t.testId?{id:t.testId}:t.testPath?{path:t.testPath}:void 0;if(!r){o.addError("Either testId or testPath is required.");return}let i=await Gg({project:e.project,storage:e.storage,selector:r,envName:void 0,logger:e.logger,includeCache:!1,hydrateStepIdentity:!0,supportsFileOutput:e.supportsFileOutput});o.addContentParts(i);}catch(r){o.addError(G(r));return}}}),kRe=ir({schema:{name:A_,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 ${oh}. Returns updated Test Content with step ids for the active session. ${Pr}`,inputSchema:{sessionId:z.string().describe("The active session whose bound test should be reloaded.")}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:A_});if(!r)return;let i=r.storage.getProject();if(i.config.fileFormat!=="v2"){o.addError(`${A_} is only available for v2 file-format projects.`);return}let a=await r.storage.getTestByPath({relativeTestPath:r.relativeTestPath,logger:e.logger}),s={beforeSteps:a.beforeSteps,steps:a.steps,afterSteps:a.afterSteps},{alwaysSaveCache:l,noCache:c}=hu(),u=await La({logger:e.logger,orgId:r.orgId,project:i,alwaysSaveCache:l,noCache:c});r.mutableStepState.testId=a.id;let{stepListsWithCaches:d}=await uc({cacheStorage:u,logger:e.logger,schemaVersion:a.schemaVersion,stepLists:s,testId:a.id,environment:r.envName,useSnapshotIdentityCache:true});r.mutableStepState.stepLists=d,o.addContentParts(L({text:`Reloaded test ${a.id} from disk into session ${r.sessionId}.`,section:"Result"})),o.addContentParts(await Gg({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}));}}),CTt={...kRe,addToolToMcpServer:(e,t)=>{e.project.config.fileFormat==="v2"&&kRe.addToolToMcpServer(e,t);}},ITt=ir({schema:{name:gz,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. ${QC} 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,o,n)=>{let{project:r,logger:i}=e,a=[],s=[];try{let[c,u]=await Promise.all([e.storage.listTests(),e.storage.listModules()]),d=c.map(p=>({id:p.id,name:p.name,description:p.description,testFileAbsolutePath:p.fullFilePath,labels:p.labels||[]}));a.push({title:"Tests",entity:"test-list",payload:{tests:d}});let m=u.map(p=>({id:p.id,name:p.name,description:p.description,fullFilePath:p.fullFilePath,type:p.type}));a.push({title:"Modules",entity:"module-list",payload:{modules:m}});}catch(c){s.push(`Tests and modules discovery failed: ${G(c)}`);}try{let c=e.storage.listEnvironments(i);a.push({title:"Environments",entity:"environment-list",payload:{environments:c}});}catch(c){s.push(`Environments discovery failed: ${G(c)}`);}let l=await aye({artifacts:a,rootDir:r.rootDir,supportsFileOutput:e.supportsFileOutput,projectRootAbsolutePath:r.rootDir,projectConfigAbsolutePath:r.configFilePath,cwd:Bv()});o.addContentParts(l),s.length>0&&o.addContentParts(L({section:"Discovery Errors",text:s.map(c=>`- ${c}`).join(`
|
|
9042
|
-
`)}));}}),MRe=ir({schema:{name:rh,description:`Execute one preset, AI Action, or module step without adding it to the test. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),step:z.string().describe(e0),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:rh});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:rh,run:()=>eY({session:r,response:o,extra:n,operation:async()=>{let a=!1;return {parts:await HI({project:r.storage.getProject(),step:t.step,logger:e.logger,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,usageTracker:r.usageTracker,apiClient:Nn(),onStepResult:l=>{a=l.status==="SUCCESS";}}),isError:!a}}})});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),LRe=ir({schema:{name:bz,description:`Locate targets for multiple future preset steps against one captured browser state. Locator requests run concurrently and successful results return CacheIds that can be supplied to matching steps with --cache-id. Steps using --disable-cache are located without saving or returning a CacheId. This tool does not execute any interaction. Use it only when the planned interactions before each target are not expected to remove, replace, or materially change those future targets. If an interaction may change the relevant UI, locate that target after the interaction instead. ${Pr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(e0)).min(1).max(20)}},handle:async(e,t,o,n)=>{await sb({response:o,extra:n,sessionId:t.sessionId,toolName:bz,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await IRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});o.addContentParts(i);}});}}),NRe=ir({schema:{name:DE,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${rh}, stopping at the first failure. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(e0)).min(1).max(20),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:DE});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:DE,run:()=>eY({session:r,response:o,extra:n,operation:async()=>{let a=await CRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,usageTracker:r.usageTracker,apiClient:Nn()});return {parts:a.parts,isError:!a.successful}}})});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function eY({session:e,response:t,extra:o,operation:n}){return YK({session:e,signal:o?.signal,operation:async()=>{if(ei.getSession(e.sessionId)!==e||e.cleanupInProgress)throw new Error(`Session '${e.sessionId}' is no longer active.`);e.controller.setOpen();let r=o?.signal?e.controller.bindCancellation(o.signal):void 0;r&&t.addCleanupCallback(r),o?.signal.throwIfAborted();try{return await n()}finally{r?.();}}})}async function tY({session:e,response:t,stepRunnerId:o,timeoutSeconds:n}){let r=await uK({runs:e.runStepRuns,stepRunnerId:o,timeoutMs:n*1e3});dK({result:r,response:t,statusToolName:ME});}var DRe=ir({schema:{name:Zb,description:`Insert, delete, or replace steps in the active session's test by index. Cache IDs are optional and must only be included when a preview or locate tool returned one for that exact step. Many steps do not support caches and successful previews will not return a CacheId; splice those CLI steps unchanged without --cache-id. 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. ${Pr}`,inputSchema:{sessionId:z.string(),startIndex:z.number(),deleteCount:z.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z.array(z.string()).describe(e0),targetSection:wm.default("main"),parentStepIdChain:z.array(z.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:Zb});if(!r)return;let i=await XF({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&&Nl({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let a=i.value.map(s=>s.type==="media"?{type:"media",data:s.data,mediaType:"image/jpeg"}:s);o.addContentParts(a);}}),FRe=ir({schema:{name:oh,description:`${v_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),fromStep:V_,toStep:W_.optional(),targetSection:wm.default("main"),resetSession:z.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z.boolean().default(false).describe("Run this invocation without reading or writing step caches."),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:oh});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:oh,run:a=>eY({session:r,response:o,extra:n,operation:()=>xTt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:a})}).then(s=>({parts:s}))});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function xTt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:i}){t.resetSession&&await GF({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,controller:r.controller,testContext:r.context,codeEvaluator:r.codeEvaluator,envName:r.envName,urlOverride:r.urlOverride,testInputs:r.testInputs,supportsFileOutput:e.supportsFileOutput,isRemoteBrowser:r.isRemoteBrowser});let a=ORe(n,e.logger,o,()=>ei.touchSession(r.sessionId),aEe({runs:r.runStepRuns,stepRunnerId:i})),s=await QF({project:r.storage.getProject(),logger:e.logger,testPath:r.relativeTestPath,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,tracer:a,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:Nn(),disableCache:t.disableCache});return Nl({type:"mcp:run_step_completed",test_platform:"web",status:"completed"}),s.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l)}var BRe=ir({schema:{name:ME,description:`Check active or finished ${rh}, ${DE}, and ${oh} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${cK} seconds per poll. ${Pr}`,inputSchema:{sessionId:z.string(),stepRunnerId:z.string().optional().describe("Scope the poll to one preview or run. Recommended for most polls."),timeoutSeconds:z.number().min(0).max(cK).default(0).describe("How long to wait for the identified preview or run. 0 responds immediately. Ignored without stepRunnerId.")}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:ME});if(!r)return;let i=await JK({signal:n?.signal,operation:()=>uK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});dK({result:i,response:o,statusToolName:ME});}}),URe=[ITt,wTt,RTt,CTt];var zRe=[TRe,vRe,ERe,wRe,RRe,LRe,MRe,NRe,FRe,BRe,DRe];async function OTt({testPath:e,logger:t,project:o,storage:n,orgId:r,mutableStepState:i}){let a=await n.getTestByPath({relativeTestPath:e,logger:t}),s=a.envs?.find(d=>d.default)?.name;if(i&&i.testId!==a.id)throw new Error(`Cannot extract a module from test ${a.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:a.steps,beforeSteps:a.beforeSteps??void 0,afterSteps:a.afterSteps??void 0},c=await La({logger:t,orgId:r,project:o}),{stepListsWithCaches:u}=await uc({cacheStorage:c,logger:t,schemaVersion:a.schemaVersion,stepLists:l,testId:a.id,environment:s,useSnapshotIdentityCache:o.config.fileFormat==="v2"});return {availableSteps:u.steps,baseState:{steps:u.steps,beforeSteps:u.beforeSteps??[],afterSteps:u.afterSteps??[]},cacheSaveContext:{testId:a.id,environment:s,stepCacheStorage:c}}}async function t0({project:e,storage:t,logger:o,relativeTestPath:n,saveChangesToDisk:r,mutableStepState:i,params:a}){let s=xr();Gu(a.name);let l=await t.scanEntities(),c;a.startIndex!==void 0&&n!==void 0&&(c=await OTt({testPath:n,logger:o,project:e,storage:t,orgId:s,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=yEe({moduleName:a.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...a,parameterNames:a.parameters,testPath:n,availableSteps:c?.availableSteps,containsNestedModuleStep:zne}),{module:p}=await t.createModule({name:a.name,description:a.description??"",enabled:a.enabled??true,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,steps:u,subDir:a.subDir,momenticFiles:l});if(a.startIndex===void 0)return {module:p};if(!n||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(a.moduleInputs??{}).length>0,g=(p.parameters?.length??0)>0,f;h?f=a.moduleInputs:g?f={}:f=void 0;let y={...p,type:"RESOLVED_MODULE",id:randomUUID(),steps:p.steps,inputs:f},b=cloneDeep(c.baseState);b.steps.splice(d,m-d,y),i&&(i.stepLists=b);let{environment:S,stepCacheStorage:E,testId:v}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:P}=await Cn({stepLists:b,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:s,testId:v,environment:S}});return R&&await E.saveSnapshotCacheEntries({logger:o,entries:P}),await E.saveStepCacheEntries({logger:o,entries:w}),r&&await t.updateTestByPath({logger:o,relativeTestPath:n,stepLists:b,schemaVersion:Ct}),{module:p}}var jRe=ir({schema:{name:M6,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z.string().describe(Nf),description:z.string(),enabled:z.boolean().default(true),parameters:z.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z.record(z.string(),z.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z.record(z.string(),z.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z.record(z.string(),z.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,o,n)=>{let{testPath:r,...i}=t;try{let a=che({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),s=await t0({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:a,saveChangesToDisk:e.saveChangesToDisk,params:i});o.addPartFromText(JSON.stringify(s.module,null,2));}catch(a){o.addError(G(a));}}});var o0=[...URe,...KF,...zRe,jRe,Lye,dAe,OAe,gAe,$ye,xAe,Zve,sAe,qye];function n0({enableUnsafeFullAccess:e=false}={}){return e?[...o0,ARe]:o0}async function HRe(e){let{project:t,applicationName:o,daemonPort:n,daemonToken:r,daemonSessionId:i,logger:a,cliVersion:s}=e,l=t.configFilePath,c=VRe(e);await VF(e);let{context:u}=WF({...e,logger:a.child({daemonSessionId:i}),applicationName:`${o}-daemon`,serverId:i});await eEe({adapter:{getTool:d=>{let m=c.get(d);if(!m)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(c.keys()).join(", ")}`);return {name:m.schema.name,execute:async({input:p,extra:h})=>await XAe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ei,daemonPort:n,daemonToken:r,daemonId:i,cliVersion:s,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:WK(e)*2,onShutdown:()=>{dp();}});}async function oY(e){let{project:t,logger:o,apiKey:n,serverUrl:r,cliVersion:i,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p}=e,h=t.configFilePath;return VAe({workerType:"momentic-web-mcp",configPath:h,apiKey:n,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:o,buildDaemonArgs:({entryScript:g})=>LTt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function $Re(e){let{logger:t,applicationName:o,cliVersion:n,serverUrl:r}=e,i=GRe(e);cp(r),await oY(e);let{info:a,mcpLogger:s}=VK({logger:t,applicationName:`${o}-daemon-proxy`,cliVersion:n});return iF({context:{logger:s},info:a,tools:QAe({tools:i,resolveDaemonStateForCall:()=>oY(e),logger:s})})}var MTt=30*6e4;async function nY({options:e,toolName:t,input:o,timeoutMs:n=MTt}){cp(e.serverUrl);let r=VRe(e),i=r.get(t);if(!i)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(r.keys()).join(", ")}`);let a=i.schema.inputSchema.parse(o),s=typeof a.sessionId=="string"?a.sessionId:void 0,l;if(s?l=await AI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:s,logger:e.logger}):l=await oY(e),!l)throw new Error(`No active session found for id '${s}'.`);return sK({state:l,toolName:t,input:a,timeoutMs:n})}function LTt({entryScript:e,serverUrl:t,configPath:o,alwaysSaveCache:n,noCache:r,videoDefault:i,headfulDefault:a,devicePixelRatio:s,sessionIdleTimeoutMinutes:l,shareDiagnostics:c,enableUnsafeFullAccess:u}){let d=[e,"mcp","--server",t,"--daemon","--config",o,"--headful-browser",a?"true":"false","--video",i?"true":"false"];return n&&d.push("--save-cache"),r&&d.push("--disable-cache"),d.push("--pixel-ratio",String(s)),l!==void 0&&d.push("--session-idle-timeout-minutes",String(l)),c&&d.push("--share-diagnostics"),u&&d.push("--enable-unsafe-full-access"),d}function GRe(e){return n0(e).map(t=>t.tool)}function VRe(e){return new Map(GRe(e).map(t=>[t.schema.name,t]))}var rY=async(e,t)=>{try{let{killed:o,failed:n}=await ei.killAllSessions(e);n.length>0?t.warn({failed:n,reason:e},"Some browser sessions failed to terminate on shutdown"):o.length>0&&t.info({killedCount:o.length,reason:e},"Terminated browser sessions on shutdown");}catch(o){t.warn({err:o,reason:e},"Failed to terminate browser sessions on shutdown");}};async function iY(e){let{daemon:t,logger:o}=e,n=GAe.safeParse(process.env);if(t&&n.success&&n.data[nF]==="momentic-web-mcp")return HRe({...e,daemonPort:n.data[tF],daemonToken:n.data[oF],daemonSessionId:n.data[rF]});if(_h(o,true),t)return await $Re(e);await VF(e);let{context:r,info:i}=WF(e);return iF({context:r,info:i,tools:n0(e),shutdownHandlers:[rY,dp,async()=>{await jF();}]})}var $I="3.58.0",pn=VS({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:$I});(async()=>{try{let e=await Ac(pn);e.gitBranchName&&pn.addBinding("branch",e.gitBranchName);}catch{}})();var qg=Router();async function i0(e,t){let o=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await G1({momenticFiles:e,moduleHandles:o,logger:pn})).filter(i=>t===void 0||t.has(i.moduleId)).map(i=>{let a=e.modules[i.moduleId];if(!a){C.warn(`Found a dangling module with ID ${i.moduleId} that could not be found on disk.`);return}return {...a,content:i}}).filter(i=>i!==void 0)}qg.get("/",Vt(async(e,t)=>{let o=xt(),n=await El(o),r=await i0(n);t.status(200).json(r);}));qg.post("/",Vt(async(e,t)=>{let o;try{o=R9.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Gu(o.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let n=xt(),r=await tt(n),i=r.modules;if(Object.values(i).find(l=>l.name===o.name)){t.status(400).send(`A module with the name "${o.name}" already exists. Please choose a different name.`);return}let a=mn__default.join(n.rootDir,o.folderPath??mn__default.dirname(o.testFilePath));if(!nn__default.existsSync(a)||!nn__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let s=await Qk({...o,folder:a,project:n,momenticFiles:r});t.status(201).json(s);}));qg.get("/:moduleId/tests",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=xt(),n=await tt(o),r=e.params.moduleId;if(!n.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let s of Object.values(n.tests))W1(s.fullFilePath,n).has(r)&&i.push({id:s.id,name:s.name,relativePath:s.relativePath});let a={tests:i};t.status(200).json(a);}));qg.get("/:moduleId",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=await El(xt()),n=o.modules[e.params.moduleId];if(!n){t.status(404).json({error:"Module not found."});return}try{let r=await vd({modHandle:n,momenticFiles:o,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));qg.post("/:moduleId/duplicate",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=w9.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gu(o.name);}catch(h){t.status(400).json({error:h.message});return}let n=xt(),r=await tt(n),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===o.name)){t.status(400).send(`A module with the name "${o.name}" already exists. Please choose a different name.`);return}let a=o.sourceModuleContent;if(a.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let s=mn__default.join(n.rootDir,mn__default.dirname(i.relativePath));if(!nn__default.existsSync(s)||!nn__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let l=vn(o.name),c=mn__default.join(s,`${l}.module.yaml`),u=Sd({projectConfig:n.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Cn({stepLists:{steps:a.steps},createNewCacheIds:true}),m={fileType:De.MODULE,schemaVersion:Ct,moduleId:u,name:o.name,description:"",enabled:true,steps:d.steps,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,defaultCacheKey:a.defaultCacheKey,defaultCacheTtl:a.defaultCacheTtl,defaultCacheAllInvocations:a.defaultCacheAllInvocations,autoAuth:a.autoAuth,advanced:a.advanced,defaultRetries:a.defaultRetries};pc({module:m,filePath:c,projectConfig:n.config,momenticFiles:r});let p={relativeFilePath:mn__default.relative(n.rootDir,c)};t.status(201).json(p);}));qg.patch("/:moduleId/move",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=I9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${G(i)}`});return}let n=xt();if(!(await El(n)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await jae({moduleId:e.params.moduleId,targetFolderRelativePath:o.folderPath,project:n}),t.status(200).json({message:"ok"});}));qg.patch("/:moduleId/metadata",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=C9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let n=xt(),r=await El(n);await Hae({moduleId:e.params.moduleId,content:o,momenticFiles:r,logger:C,project:n}),t.status(201).json({message:"ok"});}));var WRe=qg;var gA=Router();gA.get("/",Vt(async(e,t)=>{let o=xt(),n=await tt(o),r=new Set;n?.tests&&Object.values(n.tests).forEach(c=>{c.labels?.forEach(u=>r.add(u));});let i=Array.from(r).sort(),a=Object.values(n.tests),s=await i0(n),l={labels:i,tests:a,modules:s};t.status(200).json(l);}));gA.get("/folders",Vt(async(e,t)=>{let o=xt(),n=await Iae(o);t.status(200).json(n);}));gA.get("/summary",Vt(async(e,t)=>{let o=xt(),r={hasEntities:await Cae(o,[De.TEST,De.TEST_V2,De.MODULE,De.MODULE_V2])};t.status(200).json(r);}));gA.get("/labels",Vt(async(e,t)=>{let o=xt(),n=await tt(o),r=new Set;for(let a of Object.values(n.tests))a.labels?.forEach(s=>r.add(s));let i=Array.from(r).sort();t.status(200).json(i);}));gA.post("/in-folder",Vt(async(e,t)=>{let o=S9.safeParse(e.body);if(!o.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${o.error.message}`});return}let{pathSegments:n}=o.data,r=xt(),i=await Rae(r,n),a=Object.values(i.tests),s=new Set(Object.keys(i.modules)),l=[];if(s.size>0){let u=await El(r);l=await i0(u,s);}let c={tests:a,modules:l};t.status(200).json(c);}));var qRe=gA;var aY=Router();aY.get("/",Vt((e,t)=>{let o=iM(xt(),pn);t.status(200).json(o);}));aY.get("/names",Vt((e,t)=>{let n=xt().config.environments?.map(r=>r.name)??[];t.status(200).json(n);}));var KRe=aY;var YRe=Router();YRe.get("/",Vt((e,t)=>{let o={userId:Ld(),orgId:xr(),email:yv(),name:Qpe(),pylonEmailHash:Zpe(),cliVersion:$I};t.status(200).json(o);}));var JRe=YRe;var sY="mcp-session-id",XRe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",a0=Router();function $Tt(){let e=process.env[XRe];if(!e)return ab*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(pn.warn({envVar:XRe,rawValue:e,fallback:ab},"Invalid MCP session idle timeout env var; falling back to default"),ab*60*1e3):t*60*1e3}function GTt(e){let{headfulDefault:t,supportsFileOutput:o}={},n={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:$I},r=xt(),i=up(),a=Pl(),s=pn.child({orgId:xr(),userId:Ld(),...n}),l=new Nt({baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),c=zw(process.env.MOMENTIC_HEADFUL_BROWSER),u=new Cr(r.config.ai?.agentConfig,{baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),d=xr(),m=new Dl(l,d,r);return {context:{project:r,orgId:d,logger:s,generator:u,apiClient:l,storage:m,serverId:n.serverId,extractBaseDir:bu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:o??true,knowledgeRetrievalResults:wo,knowledgeCitations:[],sessionIdleTimeoutMs:$Tt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Is},info:n}}var Op={};a0.post("/",async(e,t)=>{let o=String(e.headers[sY]??"");try{if(o&&Op[o]){await Op[o].handleRequest(e,t,e.body);return}if(!o&&isInitializeRequest(e.body)){let{context:n,info:r}=GTt(),i=lK(n,r,o0),a=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{Op[s]=a;}});a.onclose=()=>{let s=a.sessionId;s&&Op[s]&&delete Op[s],i.close().catch(()=>{});},await i.connect(a),await a.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});}});a0.get("/",async(e,t)=>{let o=String(e.headers[sY]??"");if(!o||!Op[o]){t.status(400).send("Invalid or missing session ID");return}await Op[o].handleRequest(e,t);});a0.delete("/",async(e,t)=>{let o=String(e.headers[sY]??"");if(!o||!Op[o]){t.status(400).send("Invalid or missing session ID");return}let n=Op[o];try{await n.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var ZRe=a0;var eCe=Router();eCe.get("/:id",Vt(async(e,t)=>{let{id:o}=e.params;if(!o){t.status(400).json({error:"Missing ID"});return}let n=Nn();if(!n){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await n.fetchOnDemandScreenshot(o);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){pn.error({err:r,screenshotId:o},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var tCe=eCe;var lY=Router(),oCe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});lY.get("/",Vt(async(e,t)=>{let o=xt(),n=new Map;for(let i of await Y1())n.set(i.configFilePath,i);n.set(o.configFilePath,o);let r={projects:[...n.values()].map(oCe),current:oCe(o)};t.status(200).json(r);}));lY.post("/set",Vt(async(e,t)=>{let o;try{o=P9.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}pn.info("Setting local project");try{let n=await Ro({configFilePath:o.configFilePath}),r=Nn();if(!r)throw new Error("API client is not initialized.");await bv({project:n,apiClient:r});}catch(n){t.status(400).json({error:`Error setting project: ${n}`});return}t.sendStatus(204);}));var nCe=lY;var rCe=Router();rCe.get("/",Vt((e,t)=>{let o=xt(),n={ai:o.config.ai,browser:o.config.browser,displayRoot:o.config.displayRoot};t.status(200).json(n);}));var iCe=rCe;var Qd=Router();Qd.post("/",Vt(async(e,t)=>{let o;try{o=A9.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=xt(),r=await jI({project:n,input:o});Nl({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(n){if(n instanceof $t){t.status(400).json({error:n.message});return}throw n}}));Qd.get("/:testPath",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=await El(n),i;try{i=await $s(mn__default.join(n.rootDir,o),pn,r),await(await La({logger:pn,orgId:xr(),project:n})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(s=>s.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:pn,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),t.status(200).json(i);}catch(a){t.status(400).send({error:a.message});return}(async()=>{try{await nM({relativeTestPath:o,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:Ct,momenticFiles:r,project:n});}catch(a){pn.error({err:a},"Failed to save migrated test to disk after initial fetch");}})();}));Qd.get("/:testPath/metadata",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=mn__default.join(n.rootDir,o);if(!nn__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=nn__default.statSync(r),a=await Ac(pn),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};t.status(200).json(s);}));Qd.patch("/:testPath/metadata",Vt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=v9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:VR(e.params.testPath,o,xt()).newRelativeTestPath};t.status(200).json(r);}));Qd.patch("/:testPath",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=T9.parse(e.body);}catch(p){pn.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}pn.info({testPath:o},"Save received");let r=xt(),i=await El(r),a;try{a=nu(o,r);}catch(p){t.status(400).json({error:`Existing test file on disk is invalid: ${p}`});return}let s=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:u,snapshotCachesToSave:d}=await Cn({stepLists:n.stepLists,useSnapshotIdentityCache:s,cacheCreationParams:{orgId:xr(),testId:a.id,environment:a.envs?.find(p=>p.default)?.name}}),m=await La({logger:pn,orgId:xr(),project:r});s&&await m.saveSnapshotCacheEntries({logger:pn,entries:d}),await m.saveStepCacheEntries({logger:pn,entries:u}),await V1({relativeTestPath:o,stepsToSave:l,moduleUpdates:c,schemaVersion:n.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Qd.patch("/:testPath/environments",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=_9.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}VR(o,{envs:n.defaultEnv?[{name:n.defaultEnv,default:true}]:[]},xt()),t.status(201).json({message:"ok"});}));Qd.patch("/:testPath/move",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=x9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${G(i)}`});return}let r=xt();if(!nn__default.existsSync(mn__default.join(r.rootDir,o))){t.status(404).json({error:"Test not found."});return}await $ae({relativeTestPath:o,targetFolderRelativePath:n.folderPath,project:r}),t.status(200).json({message:"ok"});}));Qd.delete("/:testPath",Vt((e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=mn__default.join(n.rootDir,o);if(!nn__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}nn__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Qd.post("/:testPath/duplicate",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=E9.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gu(n.name);}catch(h){t.status(400).json({error:h.message});return}let r=xt(),i=mn__default.join(r.rootDir,o);if(!nn__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let a=await tt(r),s;try{s=await $s(i,pn,a);}catch(h){t.status(400).send({error:h.message});return}let l=Sd({projectConfig:r.config,momenticFiles:a,entityType:"test"}),c=Wn.parse({...s,name:n.name,id:l}),{stepsToSave:u}=await Cn({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:true}),d=mn__default.dirname(i),m=mn__default.join(d,`${n.name}.test.yaml`);hc({test:{fileType:De.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:a});let p={relativeFilePath:mn__default.relative(r.rootDir,m)};Nl({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var aCe=Qd;var sCe=15e4,As={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function Zd(){return {openai:{reasoningEffort:Dz,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:Dz,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var JTt="about:blank",XTt=[".webm",".mp4"];function dY(e){return e?nn__default.mkdtempSync(mn__default.join(Nm.tmpdir(),"momentic-explore-video-")):void 0}async function Eu(e){let{sessionManager:t,storage:o,logger:n,owner:r,signal:i,timelineLane:a}=e,s=dY(a),l=new UD(n),c=await t.startTestlessSession({logger:n,storage:o,baseUrl:JTt,runner:"explore",disableConsoleLogs:true,callbacks:{onNetworkPage:l.onNetworkPage,onNetworkLogs:l.onNetworkLogs},videoOutputDir:s}).catch(m=>{throw l.close(),m}),u=c.controller.bindCancellation(i),d=async m=>{if(u(),!t.getSession(c.sessionId)){await l.finalize(),l.remove();return}!(await t.killSession(c.sessionId,`${r} browser session completed`)).killed&&t.getSession(c.sessionId)!==void 0&&m.warn({sessionId:c.sessionId,owner:r},"Explore agent did not clean up its browser session"),await l.finalize(),await mY({logger:m,timelineLane:a,videoOutputDir:s,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await QTt({logger:m,timelineLane:a,entriesFilePath:l.entriesFilePath}),l.remove();};return {context:{controller:c.controller,testContext:c.context,codeEvaluator:c.codeEvaluator,tempCaches:c.tempCaches,usageTracker:c.usageTracker,relativeTestPath:c.relativeTestPath,envName:c.envName,isRemoteBrowser:c.isRemoteBrowser,conversationTokenTarget:sCe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function mY({logger:e,timelineLane:t,videoOutputDir:o,videoStartTimes:n,videoActivations:r,finishedAt:i}){if(!(!t||!o))try{for(let a of await nn__default.promises.readdir(o)){if(!XTt.includes(mn__default.extname(a)))continue;let s=r?.filter(l=>l.videoName===a).map(l=>l.timestamp).sort((l,c)=>l-c);await t.attachVideo({sourcePath:mn__default.join(o,a),startedAt:n?.get(a),finishedAt:i,activations:s?.length?s:void 0});}}catch(a){e.warn({err:a,videoOutputDir:o},"Failed to attach explore browser videos to timeline");}}async function QTt({logger:e,timelineLane:t,entriesFilePath:o}){if(t)try{if((await nn__default.promises.stat(o)).size===0)return;await t.attachNetworkLog({sourcePath:o});}catch(n){e.warn({err:n,entriesFilePath:o},"Failed to attach explore network log to timeline");}}var evt=2/3;function lCe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*evt)}}function yA(e,t){if(!e?.aborted)return G(t);let o=e.reason;return o instanceof Error&&o.name==="TimeoutError"?"AI explore exceeded its --timeout budget before completing":"AI explore was cancelled before completing"}function cCe(e){let t=e.filter(o=>o!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function kp(e,t){try{await vV.rm(e,{recursive:!0,force:!0});}catch(o){t.warn({err:o,spoolDir:e},"Failed to clean up explorer spool dir");}}async function hY(e){return await tvt(e),await ovt(e),await nvt(e)}async function tvt(e){try{await f2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${G(t)}).`,{cause:t})}}async function ovt(e){let t;try{t=await f2(e).checkIsRepo();}catch(o){throw new Error(`Failed to determine whether ${e} is a git repository: ${G(o)}`,{cause:o})}if(!t)throw new Error(`${e} is not inside a git repository. Run 'momentic ai explore' from inside a git repository.`)}async function nvt(e){let t=f2(e);try{let o=(await t.revparse(["--show-toplevel"])).trim();if(o.length===0)throw new Error("git rev-parse --show-toplevel returned an empty path.");return o}catch(o){throw new Error(`Failed to resolve git repository toplevel from ${e}: ${G(o)}`,{cause:o})}}z.object({testIds:z.array(z.string().min(1)).optional().describe("Stable test ids for pending in-memory test creates or updates. Omit, or pass an empty list together with moduleIds, to target every pending test."),moduleIds:z.array(z.string().min(1)).optional().describe("Stable module ids for pending in-memory module creates or updates. Omit, or pass an empty list together with testIds, to target every pending module.")});var Mp=class extends Dl{overlay;diskProject;writtenFilePaths=new Set;constructor(t,o,n){let r=new Wk(pt);super(t,o,n,r),this.overlay=r,this.diskProject=n;}hasPendingDrafts(){return this.overlay.hasPendingChanges()}listWrittenFilePaths(){return [...this.writtenFilePaths]}async listDraftTests(t){return this.collectDraftTests(t)}async listDraftModules(t){return this.collectDraftModules(t)}async acceptDrafts(t,o){let n=s0(await this.collectDraftTests(t),o.testIds,u=>u.test.id,"test"),r=s0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module");if(n.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await tt(this.diskProject,true);this.assertModuleRefsSatisfied(n,r,i);let a=[];try{for(let u of [...r,...n])this.overlay.materialize(u.entity.fullFilePath),u.kind==="create"&&a.push(u.entity.fullFilePath);}catch(u){for(let d of a)rvt(d);throw new Error("Failed to persist pending changes to disk",{cause:u})}let s=[];for(let u of [...r,...n])this.overlay.discard(u.entity.fullFilePath),u.kind!=="delete"&&(this.writtenFilePaths.add(u.entity.fullFilePath),s.push(u.entity.fullFilePath));NT(s,this.diskProject.config);let l=r.map(u=>({moduleId:u.module.moduleId,relativeFilePath:u.entity.relativePath}));return {acceptedTests:n.map(u=>({testId:u.test.id,relativeFilePath:u.entity.relativePath})),acceptedModules:l}}async rejectDrafts(t,o){let n=await this.collectDraftTests(t),r=s0(n,o.testIds,u=>u.test.id,"test"),i=s0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module"),a=new Set(r.map(u=>u.test.id)),s=[];for(let u of i){let d=u.module.moduleId,m=[];for(let p of n)a.has(p.test.id)||p.kind!=="delete"&&uCe(p.test).has(d)&&m.push(p.test.name);m.length!==0&&s.push(`Cannot reject module "${d}" because it is still referenced by pending test(s) ${m.map(p=>`"${p}"`).join(", ")}.`);}if(s.length>0)throw new $t(s.join(`
|
|
9042
|
+
`)}));}}),MRe=ir({schema:{name:rh,description:`Execute one preset, AI Action, or module step without adding it to the test. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),step:z.string().describe(e0),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:rh});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:rh,run:()=>eY({session:r,response:o,extra:n,operation:async()=>{let a=!1;return {parts:await HI({project:r.storage.getProject(),step:t.step,logger:e.logger,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,usageTracker:r.usageTracker,apiClient:Nn(),onStepResult:l=>{a=l.status==="SUCCESS";}}),isError:!a}}})});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),LRe=ir({schema:{name:bz,description:`Locate targets for multiple future preset steps against one captured browser state. Locator requests run concurrently and successful results return CacheIds that can be supplied to matching steps with --cache-id. Steps using --disable-cache are located without saving or returning a CacheId. This tool does not execute any interaction. Use it only when the planned interactions before each target are not expected to remove, replace, or materially change those future targets. If an interaction may change the relevant UI, locate that target after the interaction instead. ${Pr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(e0)).min(1).max(20)}},handle:async(e,t,o,n)=>{await sb({response:o,extra:n,sessionId:t.sessionId,toolName:bz,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await IRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});o.addContentParts(i);}});}}),NRe=ir({schema:{name:DE,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${rh}, stopping at the first failure. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(e0)).min(1).max(20),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:DE});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:DE,run:()=>eY({session:r,response:o,extra:n,operation:async()=>{let a=await CRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,supportsFileOutput:e.supportsFileOutput,tempCaches:r.tempCaches,usageTracker:r.usageTracker,apiClient:Nn()});return {parts:a.parts,isError:!a.successful}}})});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function eY({session:e,response:t,extra:o,operation:n}){return YK({session:e,signal:o?.signal,operation:async()=>{if(ei.getSession(e.sessionId)!==e||e.cleanupInProgress)throw new Error(`Session '${e.sessionId}' is no longer active.`);e.controller.setOpen();let r=o?.signal?e.controller.bindCancellation(o.signal):void 0;r&&t.addCleanupCallback(r),o?.signal.throwIfAborted();try{return await n()}finally{r?.();}}})}async function tY({session:e,response:t,stepRunnerId:o,timeoutSeconds:n}){let r=await uK({runs:e.runStepRuns,stepRunnerId:o,timeoutMs:n*1e3});dK({result:r,response:t,statusToolName:ME});}var DRe=ir({schema:{name:Zb,description:`Insert, delete, or replace steps in the active session's test by index. Cache IDs are optional and must only be included when a preview or locate tool returned one for that exact step. Many steps do not support caches and successful previews will not return a CacheId; splice those CLI steps unchanged without --cache-id. 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. ${Pr}`,inputSchema:{sessionId:z.string(),startIndex:z.number(),deleteCount:z.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z.array(z.string()).describe(e0),targetSection:wm.default("main"),parentStepIdChain:z.array(z.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:Zb});if(!r)return;let i=await XF({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&&Nl({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let a=i.value.map(s=>s.type==="media"?{type:"media",data:s.data,mediaType:"image/jpeg"}:s);o.addContentParts(a);}}),FRe=ir({schema:{name:oh,description:`${v_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z.string(),fromStep:V_,toStep:W_.optional(),targetSection:wm.default("main"),resetSession:z.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z.boolean().default(false).describe("Run this invocation without reading or writing step caches."),timeoutSeconds:aF}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:oh});if(!r)return;let i=sF({runs:r.runStepRuns,toolName:oh,run:a=>eY({session:r,response:o,extra:n,operation:()=>xTt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:a})}).then(s=>({parts:s}))});await tY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function xTt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:i}){t.resetSession&&await GF({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,controller:r.controller,testContext:r.context,codeEvaluator:r.codeEvaluator,envName:r.envName,urlOverride:r.urlOverride,testInputs:r.testInputs,supportsFileOutput:e.supportsFileOutput,isRemoteBrowser:r.isRemoteBrowser});let a=ORe(n,e.logger,o,()=>ei.touchSession(r.sessionId),aEe({runs:r.runStepRuns,stepRunnerId:i})),s=await QF({project:r.storage.getProject(),logger:e.logger,testPath:r.relativeTestPath,storage:r.storage,controller:r.controller,codeEvaluator:r.codeEvaluator,orgId:r.orgId,sessionId:r.sessionId,testContext:r.context,tracer:a,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:Nn(),disableCache:t.disableCache});return Nl({type:"mcp:run_step_completed",test_platform:"web",status:"completed"}),s.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l)}var BRe=ir({schema:{name:ME,description:`Check active or finished ${rh}, ${DE}, and ${oh} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${cK} seconds per poll. ${Pr}`,inputSchema:{sessionId:z.string(),stepRunnerId:z.string().optional().describe("Scope the poll to one preview or run. Recommended for most polls."),timeoutSeconds:z.number().min(0).max(cK).default(0).describe("How long to wait for the identified preview or run. 0 responds immediately. Ignored without stepRunnerId.")}},handle:async(e,t,o,n)=>{let r=Au({response:o,sessionId:t.sessionId,toolName:ME});if(!r)return;let i=await JK({signal:n?.signal,operation:()=>uK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});dK({result:i,response:o,statusToolName:ME});}}),URe=[ITt,wTt,RTt,CTt];var zRe=[TRe,vRe,ERe,wRe,RRe,LRe,MRe,NRe,FRe,BRe,DRe];async function OTt({testPath:e,logger:t,project:o,storage:n,orgId:r,mutableStepState:i}){let a=await n.getTestByPath({relativeTestPath:e,logger:t}),s=a.envs?.find(d=>d.default)?.name;if(i&&i.testId!==a.id)throw new Error(`Cannot extract a module from test ${a.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:a.steps,beforeSteps:a.beforeSteps??void 0,afterSteps:a.afterSteps??void 0},c=await La({logger:t,orgId:r,project:o}),{stepListsWithCaches:u}=await uc({cacheStorage:c,logger:t,schemaVersion:a.schemaVersion,stepLists:l,testId:a.id,environment:s,useSnapshotIdentityCache:o.config.fileFormat==="v2"});return {availableSteps:u.steps,baseState:{steps:u.steps,beforeSteps:u.beforeSteps??[],afterSteps:u.afterSteps??[]},cacheSaveContext:{testId:a.id,environment:s,stepCacheStorage:c}}}async function t0({project:e,storage:t,logger:o,relativeTestPath:n,saveChangesToDisk:r,mutableStepState:i,params:a}){let s=xr();Gu(a.name);let l=await t.scanEntities(),c;a.startIndex!==void 0&&n!==void 0&&(c=await OTt({testPath:n,logger:o,project:e,storage:t,orgId:s,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=yEe({moduleName:a.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...a,parameterNames:a.parameters,testPath:n,availableSteps:c?.availableSteps,containsNestedModuleStep:zne}),{module:p}=await t.createModule({name:a.name,description:a.description??"",enabled:a.enabled??true,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,steps:u,subDir:a.subDir,momenticFiles:l});if(a.startIndex===void 0)return {module:p};if(!n||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(a.moduleInputs??{}).length>0,g=(p.parameters?.length??0)>0,f;h?f=a.moduleInputs:g?f={}:f=void 0;let y={...p,type:"RESOLVED_MODULE",id:randomUUID(),steps:p.steps,inputs:f},b=cloneDeep(c.baseState);b.steps.splice(d,m-d,y),i&&(i.stepLists=b);let{environment:S,stepCacheStorage:E,testId:v}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:P}=await Cn({stepLists:b,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:s,testId:v,environment:S}});return R&&await E.saveSnapshotCacheEntries({logger:o,entries:P}),await E.saveStepCacheEntries({logger:o,entries:w}),r&&await t.updateTestByPath({logger:o,relativeTestPath:n,stepLists:b,schemaVersion:Ct}),{module:p}}var jRe=ir({schema:{name:M6,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z.string().describe(Nf),description:z.string(),enabled:z.boolean().default(true),parameters:z.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z.record(z.string(),z.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z.record(z.string(),z.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z.record(z.string(),z.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,o,n)=>{let{testPath:r,...i}=t;try{let a=che({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),s=await t0({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:a,saveChangesToDisk:e.saveChangesToDisk,params:i});o.addPartFromText(JSON.stringify(s.module,null,2));}catch(a){o.addError(G(a));}}});var o0=[...URe,...KF,...zRe,jRe,Lye,dAe,OAe,gAe,$ye,xAe,Zve,sAe,qye];function n0({enableUnsafeFullAccess:e=false}={}){return e?[...o0,ARe]:o0}async function HRe(e){let{project:t,applicationName:o,daemonPort:n,daemonToken:r,daemonSessionId:i,logger:a,cliVersion:s}=e,l=t.configFilePath,c=VRe(e);await VF(e);let{context:u}=WF({...e,logger:a.child({daemonSessionId:i}),applicationName:`${o}-daemon`,serverId:i});await eEe({adapter:{getTool:d=>{let m=c.get(d);if(!m)throw new Error(`Unknown web MCP tool '${d}'. Known tools: ${Array.from(c.keys()).join(", ")}`);return {name:m.schema.name,execute:async({input:p,extra:h})=>await XAe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ei,daemonPort:n,daemonToken:r,daemonId:i,cliVersion:s,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:WK(e)*2,onShutdown:()=>{dp();}});}async function oY(e){let{project:t,logger:o,apiKey:n,serverUrl:r,cliVersion:i,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p}=e,h=t.configFilePath;return VAe({workerType:"momentic-web-mcp",configPath:h,apiKey:n,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:o,buildDaemonArgs:({entryScript:g})=>LTt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function $Re(e){let{logger:t,applicationName:o,cliVersion:n,serverUrl:r}=e,i=GRe(e);cp(r),await oY(e);let{info:a,mcpLogger:s}=VK({logger:t,applicationName:`${o}-daemon-proxy`,cliVersion:n});return iF({context:{logger:s},info:a,tools:QAe({tools:i,resolveDaemonStateForCall:()=>oY(e),logger:s})})}var MTt=30*6e4;async function nY({options:e,toolName:t,input:o,timeoutMs:n=MTt}){cp(e.serverUrl);let r=VRe(e),i=r.get(t);if(!i)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(r.keys()).join(", ")}`);let a=i.schema.inputSchema.parse(o),s=typeof a.sessionId=="string"?a.sessionId:void 0,l;if(s?l=await AI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:s,logger:e.logger}):l=await oY(e),!l)throw new Error(`No active session found for id '${s}'.`);return sK({state:l,toolName:t,input:a,timeoutMs:n})}function LTt({entryScript:e,serverUrl:t,configPath:o,alwaysSaveCache:n,noCache:r,videoDefault:i,headfulDefault:a,devicePixelRatio:s,sessionIdleTimeoutMinutes:l,shareDiagnostics:c,enableUnsafeFullAccess:u}){let d=[e,"mcp","--server",t,"--daemon","--config",o,"--headful-browser",a?"true":"false","--video",i?"true":"false"];return n&&d.push("--save-cache"),r&&d.push("--disable-cache"),d.push("--pixel-ratio",String(s)),l!==void 0&&d.push("--session-idle-timeout-minutes",String(l)),c&&d.push("--share-diagnostics"),u&&d.push("--enable-unsafe-full-access"),d}function GRe(e){return n0(e).map(t=>t.tool)}function VRe(e){return new Map(GRe(e).map(t=>[t.schema.name,t]))}var rY=async(e,t)=>{try{let{killed:o,failed:n}=await ei.killAllSessions(e);n.length>0?t.warn({failed:n,reason:e},"Some browser sessions failed to terminate on shutdown"):o.length>0&&t.info({killedCount:o.length,reason:e},"Terminated browser sessions on shutdown");}catch(o){t.warn({err:o,reason:e},"Failed to terminate browser sessions on shutdown");}};async function iY(e){let{daemon:t,logger:o}=e,n=GAe.safeParse(process.env);if(t&&n.success&&n.data[nF]==="momentic-web-mcp")return HRe({...e,daemonPort:n.data[tF],daemonToken:n.data[oF],daemonSessionId:n.data[rF]});if(_h(o,true),t)return await $Re(e);await VF(e);let{context:r,info:i}=WF(e);return iF({context:r,info:i,tools:n0(e),shutdownHandlers:[rY,dp,async()=>{await jF();}]})}var $I="3.58.1",pn=VS({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:$I});(async()=>{try{let e=await Ac(pn);e.gitBranchName&&pn.addBinding("branch",e.gitBranchName);}catch{}})();var qg=Router();async function i0(e,t){let o=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await G1({momenticFiles:e,moduleHandles:o,logger:pn})).filter(i=>t===void 0||t.has(i.moduleId)).map(i=>{let a=e.modules[i.moduleId];if(!a){C.warn(`Found a dangling module with ID ${i.moduleId} that could not be found on disk.`);return}return {...a,content:i}}).filter(i=>i!==void 0)}qg.get("/",Vt(async(e,t)=>{let o=xt(),n=await El(o),r=await i0(n);t.status(200).json(r);}));qg.post("/",Vt(async(e,t)=>{let o;try{o=R9.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{Gu(o.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let n=xt(),r=await tt(n),i=r.modules;if(Object.values(i).find(l=>l.name===o.name)){t.status(400).send(`A module with the name "${o.name}" already exists. Please choose a different name.`);return}let a=mn__default.join(n.rootDir,o.folderPath??mn__default.dirname(o.testFilePath));if(!nn__default.existsSync(a)||!nn__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let s=await Qk({...o,folder:a,project:n,momenticFiles:r});t.status(201).json(s);}));qg.get("/:moduleId/tests",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=xt(),n=await tt(o),r=e.params.moduleId;if(!n.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let s of Object.values(n.tests))W1(s.fullFilePath,n).has(r)&&i.push({id:s.id,name:s.name,relativePath:s.relativePath});let a={tests:i};t.status(200).json(a);}));qg.get("/:moduleId",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=await El(xt()),n=o.modules[e.params.moduleId];if(!n){t.status(404).json({error:"Module not found."});return}try{let r=await vd({modHandle:n,momenticFiles:o,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));qg.post("/:moduleId/duplicate",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=w9.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gu(o.name);}catch(h){t.status(400).json({error:h.message});return}let n=xt(),r=await tt(n),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===o.name)){t.status(400).send(`A module with the name "${o.name}" already exists. Please choose a different name.`);return}let a=o.sourceModuleContent;if(a.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let s=mn__default.join(n.rootDir,mn__default.dirname(i.relativePath));if(!nn__default.existsSync(s)||!nn__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let l=vn(o.name),c=mn__default.join(s,`${l}.module.yaml`),u=Sd({projectConfig:n.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Cn({stepLists:{steps:a.steps},createNewCacheIds:true}),m={fileType:De.MODULE,schemaVersion:Ct,moduleId:u,name:o.name,description:"",enabled:true,steps:d.steps,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,defaultCacheKey:a.defaultCacheKey,defaultCacheTtl:a.defaultCacheTtl,defaultCacheAllInvocations:a.defaultCacheAllInvocations,autoAuth:a.autoAuth,advanced:a.advanced,defaultRetries:a.defaultRetries};pc({module:m,filePath:c,projectConfig:n.config,momenticFiles:r});let p={relativeFilePath:mn__default.relative(n.rootDir,c)};t.status(201).json(p);}));qg.patch("/:moduleId/move",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=I9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${G(i)}`});return}let n=xt();if(!(await El(n)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await jae({moduleId:e.params.moduleId,targetFolderRelativePath:o.folderPath,project:n}),t.status(200).json({message:"ok"});}));qg.patch("/:moduleId/metadata",Vt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=C9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let n=xt(),r=await El(n);await Hae({moduleId:e.params.moduleId,content:o,momenticFiles:r,logger:C,project:n}),t.status(201).json({message:"ok"});}));var WRe=qg;var gA=Router();gA.get("/",Vt(async(e,t)=>{let o=xt(),n=await tt(o),r=new Set;n?.tests&&Object.values(n.tests).forEach(c=>{c.labels?.forEach(u=>r.add(u));});let i=Array.from(r).sort(),a=Object.values(n.tests),s=await i0(n),l={labels:i,tests:a,modules:s};t.status(200).json(l);}));gA.get("/folders",Vt(async(e,t)=>{let o=xt(),n=await Iae(o);t.status(200).json(n);}));gA.get("/summary",Vt(async(e,t)=>{let o=xt(),r={hasEntities:await Cae(o,[De.TEST,De.TEST_V2,De.MODULE,De.MODULE_V2])};t.status(200).json(r);}));gA.get("/labels",Vt(async(e,t)=>{let o=xt(),n=await tt(o),r=new Set;for(let a of Object.values(n.tests))a.labels?.forEach(s=>r.add(s));let i=Array.from(r).sort();t.status(200).json(i);}));gA.post("/in-folder",Vt(async(e,t)=>{let o=S9.safeParse(e.body);if(!o.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${o.error.message}`});return}let{pathSegments:n}=o.data,r=xt(),i=await Rae(r,n),a=Object.values(i.tests),s=new Set(Object.keys(i.modules)),l=[];if(s.size>0){let u=await El(r);l=await i0(u,s);}let c={tests:a,modules:l};t.status(200).json(c);}));var qRe=gA;var aY=Router();aY.get("/",Vt((e,t)=>{let o=iM(xt(),pn);t.status(200).json(o);}));aY.get("/names",Vt((e,t)=>{let n=xt().config.environments?.map(r=>r.name)??[];t.status(200).json(n);}));var KRe=aY;var YRe=Router();YRe.get("/",Vt((e,t)=>{let o={userId:Ld(),orgId:xr(),email:yv(),name:Qpe(),pylonEmailHash:Zpe(),cliVersion:$I};t.status(200).json(o);}));var JRe=YRe;var sY="mcp-session-id",XRe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",a0=Router();function $Tt(){let e=process.env[XRe];if(!e)return ab*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(pn.warn({envVar:XRe,rawValue:e,fallback:ab},"Invalid MCP session idle timeout env var; falling back to default"),ab*60*1e3):t*60*1e3}function GTt(e){let{headfulDefault:t,supportsFileOutput:o}={},n={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:$I},r=xt(),i=up(),a=Pl(),s=pn.child({orgId:xr(),userId:Ld(),...n}),l=new Nt({baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),c=zw(process.env.MOMENTIC_HEADFUL_BROWSER),u=new Cr(r.config.ai?.agentConfig,{baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),d=xr(),m=new Dl(l,d,r);return {context:{project:r,orgId:d,logger:s,generator:u,apiClient:l,storage:m,serverId:n.serverId,extractBaseDir:bu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:o??true,knowledgeRetrievalResults:wo,knowledgeCitations:[],sessionIdleTimeoutMs:$Tt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Is},info:n}}var Op={};a0.post("/",async(e,t)=>{let o=String(e.headers[sY]??"");try{if(o&&Op[o]){await Op[o].handleRequest(e,t,e.body);return}if(!o&&isInitializeRequest(e.body)){let{context:n,info:r}=GTt(),i=lK(n,r,o0),a=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{Op[s]=a;}});a.onclose=()=>{let s=a.sessionId;s&&Op[s]&&delete Op[s],i.close().catch(()=>{});},await i.connect(a),await a.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});}});a0.get("/",async(e,t)=>{let o=String(e.headers[sY]??"");if(!o||!Op[o]){t.status(400).send("Invalid or missing session ID");return}await Op[o].handleRequest(e,t);});a0.delete("/",async(e,t)=>{let o=String(e.headers[sY]??"");if(!o||!Op[o]){t.status(400).send("Invalid or missing session ID");return}let n=Op[o];try{await n.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var ZRe=a0;var eCe=Router();eCe.get("/:id",Vt(async(e,t)=>{let{id:o}=e.params;if(!o){t.status(400).json({error:"Missing ID"});return}let n=Nn();if(!n){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await n.fetchOnDemandScreenshot(o);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){pn.error({err:r,screenshotId:o},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var tCe=eCe;var lY=Router(),oCe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});lY.get("/",Vt(async(e,t)=>{let o=xt(),n=new Map;for(let i of await Y1())n.set(i.configFilePath,i);n.set(o.configFilePath,o);let r={projects:[...n.values()].map(oCe),current:oCe(o)};t.status(200).json(r);}));lY.post("/set",Vt(async(e,t)=>{let o;try{o=P9.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}pn.info("Setting local project");try{let n=await Ro({configFilePath:o.configFilePath}),r=Nn();if(!r)throw new Error("API client is not initialized.");await bv({project:n,apiClient:r});}catch(n){t.status(400).json({error:`Error setting project: ${n}`});return}t.sendStatus(204);}));var nCe=lY;var rCe=Router();rCe.get("/",Vt((e,t)=>{let o=xt(),n={ai:o.config.ai,browser:o.config.browser,displayRoot:o.config.displayRoot};t.status(200).json(n);}));var iCe=rCe;var Qd=Router();Qd.post("/",Vt(async(e,t)=>{let o;try{o=A9.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=xt(),r=await jI({project:n,input:o});Nl({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(n){if(n instanceof $t){t.status(400).json({error:n.message});return}throw n}}));Qd.get("/:testPath",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=await El(n),i;try{i=await $s(mn__default.join(n.rootDir,o),pn,r),await(await La({logger:pn,orgId:xr(),project:n})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(s=>s.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:pn,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),t.status(200).json(i);}catch(a){t.status(400).send({error:a.message});return}(async()=>{try{await nM({relativeTestPath:o,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:Ct,momenticFiles:r,project:n});}catch(a){pn.error({err:a},"Failed to save migrated test to disk after initial fetch");}})();}));Qd.get("/:testPath/metadata",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=mn__default.join(n.rootDir,o);if(!nn__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=nn__default.statSync(r),a=await Ac(pn),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};t.status(200).json(s);}));Qd.patch("/:testPath/metadata",Vt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=v9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:VR(e.params.testPath,o,xt()).newRelativeTestPath};t.status(200).json(r);}));Qd.patch("/:testPath",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=T9.parse(e.body);}catch(p){pn.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}pn.info({testPath:o},"Save received");let r=xt(),i=await El(r),a;try{a=nu(o,r);}catch(p){t.status(400).json({error:`Existing test file on disk is invalid: ${p}`});return}let s=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:u,snapshotCachesToSave:d}=await Cn({stepLists:n.stepLists,useSnapshotIdentityCache:s,cacheCreationParams:{orgId:xr(),testId:a.id,environment:a.envs?.find(p=>p.default)?.name}}),m=await La({logger:pn,orgId:xr(),project:r});s&&await m.saveSnapshotCacheEntries({logger:pn,entries:d}),await m.saveStepCacheEntries({logger:pn,entries:u}),await V1({relativeTestPath:o,stepsToSave:l,moduleUpdates:c,schemaVersion:n.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Qd.patch("/:testPath/environments",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=_9.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}VR(o,{envs:n.defaultEnv?[{name:n.defaultEnv,default:true}]:[]},xt()),t.status(201).json({message:"ok"});}));Qd.patch("/:testPath/move",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=x9.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${G(i)}`});return}let r=xt();if(!nn__default.existsSync(mn__default.join(r.rootDir,o))){t.status(404).json({error:"Test not found."});return}await $ae({relativeTestPath:o,targetFolderRelativePath:n.folderPath,project:r}),t.status(200).json({message:"ok"});}));Qd.delete("/:testPath",Vt((e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=xt(),r=mn__default.join(n.rootDir,o);if(!nn__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}nn__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Qd.post("/:testPath/duplicate",Vt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=E9.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{Gu(n.name);}catch(h){t.status(400).json({error:h.message});return}let r=xt(),i=mn__default.join(r.rootDir,o);if(!nn__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let a=await tt(r),s;try{s=await $s(i,pn,a);}catch(h){t.status(400).send({error:h.message});return}let l=Sd({projectConfig:r.config,momenticFiles:a,entityType:"test"}),c=Wn.parse({...s,name:n.name,id:l}),{stepsToSave:u}=await Cn({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:true}),d=mn__default.dirname(i),m=mn__default.join(d,`${n.name}.test.yaml`);hc({test:{fileType:De.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:a});let p={relativeFilePath:mn__default.relative(r.rootDir,m)};Nl({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var aCe=Qd;var sCe=15e4,As={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function Zd(){return {openai:{reasoningEffort:Dz,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:Dz,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var JTt="about:blank",XTt=[".webm",".mp4"];function dY(e){return e?nn__default.mkdtempSync(mn__default.join(Nm.tmpdir(),"momentic-explore-video-")):void 0}async function Eu(e){let{sessionManager:t,storage:o,logger:n,owner:r,signal:i,timelineLane:a}=e,s=dY(a),l=new UD(n),c=await t.startTestlessSession({logger:n,storage:o,baseUrl:JTt,runner:"explore",disableConsoleLogs:true,callbacks:{onNetworkPage:l.onNetworkPage,onNetworkLogs:l.onNetworkLogs},videoOutputDir:s}).catch(m=>{throw l.close(),m}),u=c.controller.bindCancellation(i),d=async m=>{if(u(),!t.getSession(c.sessionId)){await l.finalize(),l.remove();return}!(await t.killSession(c.sessionId,`${r} browser session completed`)).killed&&t.getSession(c.sessionId)!==void 0&&m.warn({sessionId:c.sessionId,owner:r},"Explore agent did not clean up its browser session"),await l.finalize(),await mY({logger:m,timelineLane:a,videoOutputDir:s,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await QTt({logger:m,timelineLane:a,entriesFilePath:l.entriesFilePath}),l.remove();};return {context:{controller:c.controller,testContext:c.context,codeEvaluator:c.codeEvaluator,tempCaches:c.tempCaches,usageTracker:c.usageTracker,relativeTestPath:c.relativeTestPath,envName:c.envName,isRemoteBrowser:c.isRemoteBrowser,conversationTokenTarget:sCe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function mY({logger:e,timelineLane:t,videoOutputDir:o,videoStartTimes:n,videoActivations:r,finishedAt:i}){if(!(!t||!o))try{for(let a of await nn__default.promises.readdir(o)){if(!XTt.includes(mn__default.extname(a)))continue;let s=r?.filter(l=>l.videoName===a).map(l=>l.timestamp).sort((l,c)=>l-c);await t.attachVideo({sourcePath:mn__default.join(o,a),startedAt:n?.get(a),finishedAt:i,activations:s?.length?s:void 0});}}catch(a){e.warn({err:a,videoOutputDir:o},"Failed to attach explore browser videos to timeline");}}async function QTt({logger:e,timelineLane:t,entriesFilePath:o}){if(t)try{if((await nn__default.promises.stat(o)).size===0)return;await t.attachNetworkLog({sourcePath:o});}catch(n){e.warn({err:n,entriesFilePath:o},"Failed to attach explore network log to timeline");}}var evt=2/3;function lCe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*evt)}}function yA(e,t){if(!e?.aborted)return G(t);let o=e.reason;return o instanceof Error&&o.name==="TimeoutError"?"AI explore exceeded its --timeout budget before completing":"AI explore was cancelled before completing"}function cCe(e){let t=e.filter(o=>o!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function kp(e,t){try{await vV.rm(e,{recursive:!0,force:!0});}catch(o){t.warn({err:o,spoolDir:e},"Failed to clean up explorer spool dir");}}async function hY(e){return await tvt(e),await ovt(e),await nvt(e)}async function tvt(e){try{await f2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${G(t)}).`,{cause:t})}}async function ovt(e){let t;try{t=await f2(e).checkIsRepo();}catch(o){throw new Error(`Failed to determine whether ${e} is a git repository: ${G(o)}`,{cause:o})}if(!t)throw new Error(`${e} is not inside a git repository. Run 'momentic ai explore' from inside a git repository.`)}async function nvt(e){let t=f2(e);try{let o=(await t.revparse(["--show-toplevel"])).trim();if(o.length===0)throw new Error("git rev-parse --show-toplevel returned an empty path.");return o}catch(o){throw new Error(`Failed to resolve git repository toplevel from ${e}: ${G(o)}`,{cause:o})}}z.object({testIds:z.array(z.string().min(1)).optional().describe("Stable test ids for pending in-memory test creates or updates. Omit, or pass an empty list together with moduleIds, to target every pending test."),moduleIds:z.array(z.string().min(1)).optional().describe("Stable module ids for pending in-memory module creates or updates. Omit, or pass an empty list together with testIds, to target every pending module.")});var Mp=class extends Dl{overlay;diskProject;writtenFilePaths=new Set;constructor(t,o,n){let r=new Wk(pt);super(t,o,n,r),this.overlay=r,this.diskProject=n;}hasPendingDrafts(){return this.overlay.hasPendingChanges()}listWrittenFilePaths(){return [...this.writtenFilePaths]}async listDraftTests(t){return this.collectDraftTests(t)}async listDraftModules(t){return this.collectDraftModules(t)}async acceptDrafts(t,o){let n=s0(await this.collectDraftTests(t),o.testIds,u=>u.test.id,"test"),r=s0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module");if(n.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await tt(this.diskProject,true);this.assertModuleRefsSatisfied(n,r,i);let a=[];try{for(let u of [...r,...n])this.overlay.materialize(u.entity.fullFilePath),u.kind==="create"&&a.push(u.entity.fullFilePath);}catch(u){for(let d of a)rvt(d);throw new Error("Failed to persist pending changes to disk",{cause:u})}let s=[];for(let u of [...r,...n])this.overlay.discard(u.entity.fullFilePath),u.kind!=="delete"&&(this.writtenFilePaths.add(u.entity.fullFilePath),s.push(u.entity.fullFilePath));NT(s,this.diskProject.config);let l=r.map(u=>({moduleId:u.module.moduleId,relativeFilePath:u.entity.relativePath}));return {acceptedTests:n.map(u=>({testId:u.test.id,relativeFilePath:u.entity.relativePath})),acceptedModules:l}}async rejectDrafts(t,o){let n=await this.collectDraftTests(t),r=s0(n,o.testIds,u=>u.test.id,"test"),i=s0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module"),a=new Set(r.map(u=>u.test.id)),s=[];for(let u of i){let d=u.module.moduleId,m=[];for(let p of n)a.has(p.test.id)||p.kind!=="delete"&&uCe(p.test).has(d)&&m.push(p.test.name);m.length!==0&&s.push(`Cannot reject module "${d}" because it is still referenced by pending test(s) ${m.map(p=>`"${p}"`).join(", ")}.`);}if(s.length>0)throw new $t(s.join(`
|
|
9043
9043
|
`));for(let u of [...r,...i])this.overlay.discard(u.entity.fullFilePath);let l=r.map(u=>({testId:u.test.id,name:u.test.name})),c=i.map(u=>({moduleId:u.module.moduleId,name:u.module.name}));return {rejectedTests:l,rejectedModules:c}}async collectDraftTests(t){let o=await this.scanEntities({disableLogging:true}),n=[];for(let r of Object.values(o.tests)){if(!this.overlay.hasPendingWrite(r.fullFilePath))continue;let i=await $s(r.fullFilePath,t,o,this.overlay);n.push({entity:r,test:i,kind:this.overlay.isCreate(r.fullFilePath)?"create":"update"});}return n.push(...(await this.collectDeletedEntities(t)).tests),n}async collectDraftModules(t){let o=await this.scanEntities({disableLogging:true}),n=[];for(let r of Object.values(o.modules)){if(!this.overlay.hasPendingWrite(r.fullFilePath))continue;let i=await vd({modHandle:r,momenticFiles:o,logger:t,fileSystem:this.overlay});n.push({entity:r,module:i,kind:this.overlay.isCreate(r.fullFilePath)?"create":"update"});}return n.push(...(await this.collectDeletedEntities(t)).modules),n}async collectDeletedEntities(t){let o=this.overlay.tombstonePaths();if(o.length===0)return {tests:[],modules:[]};let n=new Set(o.map(s=>mn__default.resolve(s))),r=await tt(this.diskProject,true),i=[];for(let s of Object.values(r.tests)){if(!n.has(mn__default.resolve(s.fullFilePath)))continue;let l=await $s(s.fullFilePath,t,r,pt);i.push({entity:s,test:l,kind:"delete"});}let a=[];for(let s of Object.values(r.modules)){if(!n.has(mn__default.resolve(s.fullFilePath)))continue;let l=await vd({modHandle:s,momenticFiles:r,logger:t,fileSystem:pt});a.push({entity:s,module:l,kind:"delete"});}return {tests:i,modules:a}}assertModuleRefsSatisfied(t,o,n){let r=new Set(Object.keys(n.modules)),i=new Set(o.filter(l=>l.kind==="delete").map(l=>l.module.moduleId)),a=new Set(o.filter(l=>l.kind!=="delete").map(l=>l.module.moduleId)),s=[];for(let l of t)if(l.kind!=="delete")for(let c of uCe(l.test)){if(i.has(c)){s.push(`Cannot accept test "${l.test.name}" (${l.test.id}) because it references module "${c}" which is being deleted in the same call.`);continue}r.has(c)||a.has(c)||s.push(`Cannot accept test "${l.test.name}" (${l.test.id}) because it references pending module "${c}". Accept that module in the same call or reject the test first.`);}if(s.length>0)throw new $t(s.join(`
|
|
9044
9044
|
`))}};function s0(e,t,o,n){return !t||t.length===0?e:t.flatMap(r=>{let i=e.filter(a=>o(a)===r);if(i.length===0)throw new $t(`No pending draft ${n} with id "${r}".`);return i})}function uCe(e){let t=new Set;return as({steps:[...e.beforeSteps??[],...e.steps??[],...e.afterSteps??[]],onPresetAction:()=>{},onConditional:()=>{},onSimpleStepContainer:o=>{o.type==="RESOLVED_MODULE"&&t.add(o.moduleId);}}),t}function rvt(e){try{pt.unlinkSync(e);}catch{}}var avt=["**/pnpm-lock.yaml","**/yarn.lock","**/package-lock.json","**/Cargo.lock","**/Gemfile.lock","**/poetry.lock","**/uv.lock","**/go.sum","**/composer.lock"],svt=["**/__generated__/**","**/dist/**","**/build/**","**/.next/**","**/.nuxt/**","**/out/**","**/coverage/**","**/*.snap"],lvt=["**/*.{test,spec}.{ts,tsx,js,jsx,mjs,cjs,py,go,rs,rb,java,kt}","**/__tests__/**","**/test/**","**/tests/**","**/e2e/**","**/cypress/**","**/playwright/**"],cvt=["**/*.md","**/*.mdx","**/*.rst","**/docs/**","**/README*","**/CHANGELOG*","**/LICENSE*"],uvt=["**/*.json","**/*.yaml","**/*.yml","**/*.toml","**/*.ini","**/*.env*","**/*.config.{ts,js,mjs,cjs}","**/.eslintrc*","**/.prettierrc*","**/.editorconfig","**/tsconfig*.json","**/Dockerfile*","**/Makefile","**/.gitignore","**/.dockerignore"],dvt=[".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java",".kt",".swift",".cs",".rb",".php",".cpp",".cc",".c",".h",".hpp",".scala",".clj",".ex",".exs",".vue",".svelte",".html",".css",".scss",".sass",".less",".sql",".graphql",".gql",".sh",".bash",".zsh"];function VI(e){return n_e([...e],{dot:true})}var mvt=VI(avt),pvt=VI(svt),hvt=VI(lvt),gvt=VI(cvt),fvt=VI(uvt);function dCe(e,t){if(mvt(e))return "lockfile";if(pvt(e))return "generated";if(t===true)return "binary";if(hvt(e))return "test";if(gvt(e))return "docs";if(fvt(e))return "config";let o=e.toLowerCase();for(let n of dvt)if(o.endsWith(n))return "code";return "other"}var bvt={minCombinedScore:.05,maxResults:8,maxTokens:2e3},mCe={minCombinedScore:.05,maxResults:5,maxTokens:1500},Svt=5,Tvt=12;async function pCe({client:e,manifest:t,customPrompt:o,logger:n,abortSignal:r}){let i=vvt({manifest:t,customPrompt:o});if(!i)return wo;try{return await ge(cc({client:e,query:i,config:bvt,logger:n,clientName:"explorer",agentSubtype:"explorer",abortSignal:r}),{milliseconds:js})}catch(a){if(r.aborted)throw a;return n.warn({err:a},"Knowledge retrieval failed during explorer setup"),wo}}function vvt({manifest:e,customPrompt:t}){let o=[],n=t?.trim();n&&o.push(`User guidance: ${n}`);let r=e.commits.map(a=>a.subject.trim()).filter(a=>a.length>0).slice(0,Svt);if(r.length>0){o.push("Commit subjects:");for(let a of r)o.push(`- ${a}`);}let i=Avt(e.files);if(i.length>0){o.push("Changed UI-relevant files:");for(let a of i)o.push(`- ${a.path}`);}if(o.length!==0)return o.join(`
|
|
9045
9045
|
`)}function Avt(e){return e.filter(o=>Evt(o.category)).sort((o,n)=>n.insertions+n.deletions-(o.insertions+o.deletions)||o.path.localeCompare(n.path)).slice(0,Tvt)}function Evt(e){switch(e){case "code":case "config":case "docs":return true;case "test":case "lockfile":case "generated":case "binary":case "other":return false}}var wvt=oS.filter(e=>e!=="CONDITIONAL"),hCe=_t`
|
|
@@ -10487,7 +10487,7 @@ ${a.length===0?"(none)":m}
|
|
|
10487
10487
|
`);}var Ru="/v1/app-graph",Qg=class{constructor(t,o){this.apiClient=t;this.logger=o;}async reportBillableEvents(t,o){await this.apiClient.reportBillableEvents(t,o);}async claim(t){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return qJ.parse(o)}async getPlan(t){let o=new URLSearchParams({repository:t.repository,headSha:t.headSha}),n=await this.apiClient.sendRequest(`${Ru}/ai-select/plan?${o.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return YJ.parse(n)}async finalize(t){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return KJ.parse(o)}async release(t){await this.apiClient.sendRequest(`${Ru}/ai-select/release`,{method:"POST",body:{selectionPlanKey:t},retries:1,requestTimeoutMs:5e3}).catch(o=>{this.logger.warn({err:o,selectionPlanKey:t},"Failed to release ai-select lock");});}async searchObservedTests(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/search/observed-tests`,{signal:o,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return ej.parse(n)}async searchSegments(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/search/segments`,{signal:o,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return ej.parse(n)}async getObservedTest(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/observed-tests/${encodeURIComponent(t)}`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return JJ.parse(n)}async getSegment(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/segments/${encodeURIComponent(t)}`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return XJ.parse(n)}async listObservedTestsForSegment(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return QJ.parse(n)}async getCodeInsights(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/code-insights`,{signal:o,method:"POST",body:{repository:t.repository,folderPaths:t.folderPaths},retries:1,requestTimeoutMs:1e4});return ZJ.parse(n).insights}async createCodeInsight(t,o){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/code-insight`,{signal:o,method:"POST",body:t,retries:1,requestTimeoutMs:15e3});return eX.parse(n)}},mx=class extends Qg{billingReporter;constructor({billingReporter:t,logger:o}){let n={sendRequest:async()=>({})};super(n,o),this.billingReporter=t;}async reportBillableEvents(t,o){await this.billingReporter.reportBillableEvents(t,o);}async searchObservedTests(t){return {results:[]}}async searchSegments(t){return {results:[]}}async getObservedTest(t){return {testId:t,name:"",testPath:null,goal:null,description:null,latestPassed:false,latestQuarantined:false,evidenceCount:0,lastObservedAt:null,lastObservedCommitSha:null,matchedSegments:[],coverageEdges:[]}}async getSegment(t){return {id:t,name:"",description:null,realizations:[],features:[]}}async listObservedTestsForSegment(t){return {observedTests:[]}}async getCodeInsights(){return []}async createCodeInsight(){return {id:"noop"}}},wxt=2e3,Y_e=12e4;async function J_e(e){let t=Date.now()+(e.timeoutMs??Y_e),o=0;for(;;){o+=1;let n=await e.client.claim(e.claim);if(n.status==="claimed")return {kind:"claimed",selectionPlanKey:n.selectionPlanKey,trackId:n.trackId};if(n.status==="ready")return {kind:"ready",plan:n.plan,planId:n.planId};if(Date.now()>=t)throw new Error(`ai-select: timed out waiting for plan after ${e.timeoutMs??Y_e}ms`);e.logger.info({attempt:o,claimedBy:n.claimedBy},"ai-select plan computing on another shard; polling"),await gt(n.retryAfterMs??wxt);}}async function Cxt(e){try{return await Xg({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return t3({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function X_e({params:e,reason:t}){let o=e.config?.onBaseUnavailable??"use-head";switch(o){case "fail":throw new Bp(`AI selection base unavailable and ai.select.onBaseUnavailable is "fail": ${t}`);case "run-all":return {diff:null,reason:t};case "use-head":{let n=await Cxt(e);return n?{diff:n,reason:t}:{diff:null,reason:`Could not assemble diff against the HEAD commit's parent: ${t}`}}default:return Xe(o)}}async function C3(e){return de({name:"ai_select.resolve_plan",root:true,attributes:{"momentic.repository":e.repository},fn:()=>Ixt(e)})}async function Ixt(e){let t=new Qg(e.apiClient,e.logger),o=e.agentOutputStream?qe(e.agentOutputStream):qe();e.agentOutputStream&&e.agentOutputStream.write(`
|
|
10488
10488
|
`);let n;try{n=await de({name:"ai_select.assemble_diff",attributes:{"momentic.explicit_base":e.explicitBase??"auto"},fn:()=>mo({text:"Analyzing code changes...",screen:o},()=>Xg({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger}))});}catch(m){let p=m instanceof Bp?m.message:`Could not assemble diff against base ref: ${G(m)}.`,h=Hxe({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),g=h?await t3({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:h,logger:e.logger}):null;if(g)n=g;else {let f=await X_e({params:e,reason:p});if(f.diff===null)return {kind:"run-all",reason:f.reason,diff:null};n=f.diff;}}if(n.baseSha===n.headSha){let m=`Base ref "${n.baseRef}" resolves to HEAD (${n.headSha}); applying ai.select.onBaseUnavailable fallback behavior.`,p=await X_e({params:e,reason:m});if(p.diff===null)return {kind:"run-all",reason:p.reason,diff:null};n=p.diff;}if(e.logger.info({changedFiles:n.changedFiles.length},"Diff assembled"),n.changedFiles.length===0)return {kind:"run-none",reason:"No source-code changes detected between base and head.",diff:n};let r=createHash("sha256").update(e.candidateTests.map(m=>m.testPath).sort().join(`
|
|
10489
10489
|
`)).digest("hex").slice(0,12),i=await V0({client:e.apiClient,query:G0({...e,diff:n}),environmentName:e.environmentName,logger:e.logger}),a=xxt({headSha:n.headSha,suiteHash:r,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription,budgetCap:e.budgetCap,knowledgeBaseRules:i}),s=n.repoRoot,l=mn__default.relative(s,e.repoRoot),c=l?e.candidateTests.map(m=>({...m,testPath:mn__default.posix.join(l.split(mn__default.sep).join("/"),m.testPath)})):e.candidateTests;if(e.dryRun){let m=await FA({apiClient:t,remoteGitClient:e.apiClient,knowledgeBaseRules:i,generator:e.generator,logger:e.logger,orgId:e.orgId,repository:e.repository,repoRoot:s,projectRoot:e.repoRoot,diff:n,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:pb(s),agentOutputStream:e.agentOutputStream,budgetCap:e.budgetCap,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription});return m.fallbackToRunAll?{kind:"run-all",reason:m.userSummary,diff:n}:{kind:"ready",plan:{version:2,userSummary:m.userSummary,toolCallCount:m.toolCallCount,selectedTests:m.selectedTests,anchorSegmentIds:m.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap??null},generatedAt:new Date().toISOString()},planId:`dry-run-${a}`,mode:"SELECTED",diff:n}}let u=await J_e({client:t,claim:{repository:e.repository,headSha:a,baseRef:n.baseRef,changedFiles:n.changedFiles.map(m=>m.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(u.kind==="ready"){e.logger.info({planId:u.planId,planSize:u.plan.selectedTests.length,suiteHash:r},"ai-select: reusing cached plan from server");let m=e.logger.bindings().sessionId??randomUUID();return await Zm({reporter:e.apiClient,logger:e.logger,feature:"select",cached:true,result:"success",sessionId:m,agentInvocationId:m,transactionId:`ai-agent-invocation:select:${m}`}),{kind:"ready",plan:u.plan,planId:u.planId,mode:"SELECTED",diff:n}}let d=await FA({apiClient:t,remoteGitClient:e.apiClient,knowledgeBaseRules:i,generator:e.generator,logger:e.logger,orgId:e.orgId,repository:e.repository,repoRoot:s,projectRoot:e.repoRoot,diff:n,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:pb(s),agentOutputStream:e.agentOutputStream,budgetCap:e.budgetCap,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription});if(d.fallbackToRunAll)return await t.release(u.selectionPlanKey),{kind:"run-all",reason:d.userSummary,diff:n};try{e.logger.info({selectedCount:d.selectedTests.length,durationMs:d.totalDurationMs,suiteHash:r},"ai-select: computed fresh plan");let m=await t.finalize({selectionPlanKey:u.selectionPlanKey,repository:e.repository,headSha:a,mode:"SELECTED",userSummary:d.userSummary,toolCallCount:d.toolCallCount,selectedTests:d.selectedTests,anchorSegmentIds:d.anchorSegmentIds,budget:{source:e.budgetSource,cap:e.budgetCap}});return {kind:"ready",plan:m.plan,planId:m.planId,mode:"SELECTED",diff:n}}catch(m){return e.logger.error({err:m},"ai-select finalize failed; falling back to run-all"),await t.release(u.selectionPlanKey),{kind:"run-all",reason:`Could not record selection plan: ${G(m)}.`,diff:n}}}function xxt({headSha:e,suiteHash:t,customPrompt:o,changeRequestDescription:n,budgetCap:r,knowledgeBaseRules:i}){let a=[`${e}:${t}`];if(o!==void 0){let s=createHash("sha256").update(o).digest("hex").slice(0,12);a.push(`prompt-${s}`);}if(n!==void 0&&n.trim().length>0){let s=createHash("sha256").update(n).digest("hex").slice(0,12);a.push(`description-${s}`);}return r!==null&&a.push(`budget-${r}`),i&&a.push(`kb-${createHash("sha256").update(i).digest("hex").slice(0,12)}`),a.join(":")}async function Z_e({test:e,fragment:t,entities:o,client:n,logger:r,yes:i}){gt$1(t.schemaVersion,Ct)&&(C.error(`Patch schema version (${t.schemaVersion}) is newer than this CLI supports. Update to the latest CLI and retry.`),process.exit(1)),Gne(t.steps).forEach(f=>{o.modules[f]||(C.error(`Patch references module ${f} which is not in this project. The patch or your local files may be out of date.`),process.exit(1));}),t.createdAt.getTime()<Date.now()-7*PS&&!i&&!await Kr("The test patch you are applying is more than 7 days old. Are you sure you want to continue?")&&process.exit(1);let s=e.lastModified.getTime();t.createdAt.getTime()+60*60*1e3<s&&!i&&!await Kr("The test patch you are applying was created before the test was last updated. Are you sure you want to continue?")&&process.exit(1);let l=qm(e.fullFilePath),c=l.steps;if(!Array.isArray(c))throw new Error(`Test ${e.fullFilePath} is missing steps array`);let u,d;if(t.schemaVersion!==Ct){let{steps:f,newVersion:y}=await Sl({metadata:{id:t.id,schemaVersion:t.schemaVersion},steps:t.steps,logger:C});u=y,d=lo.array().parse(f);}else d=lo.array().parse(t.steps);let{stepsToSave:m}=await Cn({stepLists:{steps:d}});m.beforeSteps=l.beforeSteps??void 0,m.afterSteps=l.afterSteps??void 0;let p=Gf(ds.stringify(c),ds.stringify(m),{n_surrounding:5}),h=qe(),g=Je(h);C.info(""),C.info(g.bold("Patch preview")),C.info(""),C.info(g.code(e.relativePath));for(let f of _L(p,g))C.info(` ${f}`);C.info(""),u&&C.warn(`If this patch is applied, your test will also be automatically upgraded to the latest schema version (${u}). Schema upgrades have no impact on functionality, although you may notice minor differences in the test YAML.`),!i&&!await Kr("Do you want to apply this patch?")&&(C.dimmed("Cancelled."),process.exit(1)),oy({relativeTestPath:e.relativePath,steps:m,schemaVersion:u??t.schemaVersion,project:o.project,momenticFiles:o}),C.success("Patch applied."),await n.patchTestFragment(t.id,{applied:true,appliedAt:new Date});}function Oxt(e){switch(e){case "SUCCESS":return "passed";case "CANCELLED":return "skipped";case "FAILED":case "IDLE":case "RUNNING":return "failed";default:return Xe(e)}}function kxt(e){switch(e){case "PASSED":return "passed";case "CANCELLED":return "skipped";case "FAILED":case "PENDING":case "RETRYING":case "RUNNING":case "WAITING_FOR_USER":return "failed";default:return Xe(e)}}async function Mxt(e){let{step:t,logger:o,debugDataStorage:n,folder:r,beforeSnapshot:i,afterSnapshot:a}=e,s=await X0({logger:o,debugDataStorage:n,folder:r,label:"before",snapshotId:i});s&&t.attachments.push({name:"Screenshot before step",source:s,type:"image/jpeg"});let l=await X0({logger:o,debugDataStorage:n,folder:r,label:"after",snapshotId:a});l&&t.attachments.push({name:"Screenshot after step",source:l,type:"image/jpeg"});}function Lxt(e,t,o){let n=z.union([z.looseObject({}),z.array(z.unknown().optional())]).safeParse(o).success,r=`output-attachment-${randomUUID()}.json`;nn__default.writeFileSync(mn__default.join(t,r),JSON.stringify(o,null,2)),e.attachments.push({name:"Step output data",source:r,type:n?"application/json":"text/plain"});}function Nxt(e){let{step:t,folder:o,beforeTestContext:n,afterTestContext:r}=e;if(n){let i=`before-context-${randomUUID()}.json`;writeFileSync(mn__default.join(o,i),tPe(n.env)),t.attachments.push({name:"Test context before step",source:i,type:"application/json"});}if(r){let i=`after-context-${randomUUID()}.json`;writeFileSync(mn__default.join(o,i),tPe(r.env)),t.attachments.push({name:"Test context after step",source:i,type:"application/json"});}}function Dxt(e){let t=[{name:"suite",value:e.suiteName},{name:"host",value:hostname()},{name:"platform",value:"momentic"},{name:"attempts",value:e.attempts.toString()}];return e.runId&&t.push({name:"runUrl",value:`https://app.momentic.ai/runs/${e.runId}`}),e.quarantined&&t.push({name:"quarantined",value:"true"}),e.quarantinedReason&&t.push({name:"quarantinedReason",value:e.quarantinedReason}),e.quarantinedAt&&t.push({name:"quarantinedAt",value:e.quarantinedAt.toISOString()}),t}async function X0(e){let{logger:t,debugDataStorage:o,folder:n,label:r,snapshotId:i}=e;if(!i)return;let a=await o.getScreenshot(t,i);if(!a)return;let s=`screenshot-${r}-${i}.jpeg`;return nn__default.writeFileSync(mn__default.join(n,s),a),s}async function Fxt(e,t,o,n){let r=o.folder,i={uuid:n.runAttemptId??randomUUID(),historyId:n.runId??randomUUID(),testCaseId:n.test.id,fullName:n.test.name,name:vn(n.test.name),status:kxt(n.status),start:n.lastAttemptStartedAt.getTime(),stop:n.finishedAt.getTime(),parameters:[],labels:Dxt({suiteName:o.suiteName,attempts:n.attempts,runId:n.runId,quarantined:n.quarantined,quarantinedReason:n.quarantinedMetadata?.quarantinedReason,quarantinedAt:n.quarantinedMetadata?.quarantinedAt}),steps:[]};for(let[l,c]of Object.entries(n.parameters))c!=null&&i.parameters.push({name:l,value:JSON.stringify(c)});n.results&&await I3(e,t,o.folder,i.steps,n.results);let a=Bxt(t,r,n.runAttemptId);a.length>0&&(i.attachments=a);let s=`${n.runAttemptId}-result.json`;nn__default.writeFileSync(mn__default.join(r,s),JSON.stringify(i,void 0,2));}async function J0(e,t,o,n){let r={name:on(n),start:n.startedAt.getTime(),stop:n.finishedAt.getTime(),status:Oxt(n.status),labels:[],steps:[],attachments:[]};if(n.beforeUrl&&r.labels.push({name:"URL before step",value:n.beforeUrl}),n.afterUrl&&r.labels.push({name:"URL after step",value:n.afterUrl}),await Mxt({step:r,logger:e,debugDataStorage:t,folder:o,beforeSnapshot:n.beforeSnapshot,afterSnapshot:n.afterSnapshot}),n.message&&(r.statusDetails={message:n.message}),n.data)if(wE.safeParse(n.data).success){let i=wE.parse(n.data),a=i.request,s={...i,request:void 0},l=`output-attachment-api-request-${randomUUID()}.json`,c=`output-attachment-api-response-${randomUUID()}.json`;nn__default.writeFileSync(mn__default.join(o,l),JSON.stringify(a,null,2)),nn__default.writeFileSync(mn__default.join(o,c),JSON.stringify(s,null,2)),r.attachments.push({name:"API request details",source:l,type:"application/json"}),r.attachments.push({name:"API response details",source:c,type:"application/json"});}else Lxt(r,o,n.data);return r}async function I3(e,t,o,n,r){for(let i of r){let a;switch(i.type){case "PRESET_ACTION":{a=await J0(e,t,o,i);break}case "CONDITIONAL":{a=await J0(e,t,o,i),a.steps=[],i.assertionResult&&a.steps.push(await J0(e,t,o,i.assertionResult)),await I3(e,t,o,a.steps,i.results);break}case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "SECTION":case "WHILE_LOOP":case "MODULE":{if(a=await J0(e,t,o,i),await I3(e,t,o,a.steps,i.results),i.type==="MODULE"&&i.inputs){a.parameters=[];for(let[s,l]of Object.entries(i.inputs))a.parameters.push({name:s,value:l});}break}}if(!a){e.warn({result:i},"Failed to convert Momentic result to Allure step");continue}a.attachments||(a.attachments=[]),Nxt({step:a,folder:o,beforeTestContext:i.beforeTestContext,afterTestContext:i.afterTestContext}),n.push(a);}}async function oPe(e,t,o,n,r){for(let i of r){if(!i.runId||!i.runAttemptId)throw new Error(`Missing runId/runAttemptId for Allure report generation for test '${i.test.name}'`);let a=t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId);try{await Fxt(e,a,{folder:o,suiteName:n.suiteName},i);}finally{a.close();}}}function tPe(e){try{return JSON.stringify(e,void 0,2)??JSON.stringify({value:null},void 0,2)}catch(t){let o=t instanceof Error?t.message:"unknown error";return JSON.stringify({error:o},void 0,2)}}function Bxt(e,t,o){let n=e.listVideoAssetPaths();if(n.length===0)return [];let r=[];for(let i of n){let a=mn__default.basename(i),s=o?`${o}-${a}`:a;try{nn__default.copyFileSync(i,mn__default.join(t,s));}catch{continue}let l,c=mn__default.extname(i).toLowerCase();c===".webm"?l="video/webm":c===".mp4"?l="video/mp4":l="application/octet-stream",r.push({name:a,source:s,type:l});}return r}function Q0(e){if(e.status!=="FAILED")return "none";switch(e.failureReason){case "SetupFailureError":return "setup";case "TeardownFailureError":return "teardown";default:return "main"}}function zxt(e){switch(e){case "PASSED":return "passed";case "FAILED":return "failed";case "CANCELLED":return "skipped";case "RETRYING":case "WAITING_FOR_USER":case "PENDING":case "RUNNING":return "unknown";default:return Xe(e)}}function aPe(e){let t=mn__default.relative(".",e);return t===""?e:t}function nPe(e,t){return Math.max(0,(e.getTime()-t.getTime())/1e3)}function jxt(e,t,o){let n=nPe(t,e),r=nPe(o,e);return {start_at:n,end_at:r,duration:Math.max(0,r-n)}}function sPe(e){let t=e.reduce((o,[n,r])=>(!r||Object.keys(o).length>=10||(o[n]=r),o),{});return Object.keys(t).length>0?t:void 0}function Hxt(e){if(e.status!=="FAILED"||!e.failureReason)return;let t=ku({failureReason:e.failureReason,classification:e.failureDetails?.classification,manualClassification:e.failureDetails?.manualClassification,errorMessage:e.failureDetails?.errorMessage});if(!(t.title==null||t.description==null))return `${t.title}: ${t.description}`}function $xt(e){if(e.status!=="FAILED")return;let t=[e.failureDetails?.classification?.summary,e.failureDetails?.classification?.rootCause,e.failureDetails?.errorMessage].filter(n=>!!n),o=e.failureDetails?.errorStack?.split(`
|
|
10490
|
-
`).map(n=>n.trim()).filter(Boolean)||[];if(!(t.length===0&&o.length===0))return [{expanded:t,backtrace:o}]}function Gxt(e){let t=e.status==="FAILED"?Q0(e):void 0;return sPe([["attempts",e.attempts.toString()],["run_url",e.runId?`https://app.momentic.ai/runs/${e.runId}`:void 0],["failure_section",t],["quarantined",e.quarantined?"true":"false"],["failure_recovery",e.failureRecoveryDetails?.attempts?"true":"false"]])}function Vxt(e,t,o){let n=aPe(o.filePath);return {id:o.runId||randomUUID(),scope:e,name:o.testName,location:n,file_name:mn__default.basename(n),result:zxt(o.status),failure_reason:Hxt(o),failure_expanded:$xt(o),history:jxt(t,o.lastAttemptStartedAt,o.finishedAt),tags:Gxt(o)}}function rPe(e,t,o,n,r){let i=aPe(t);return {id:randomUUID(),scope:e,name:o,location:i,file_name:mn__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:sPe([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function Wxt(e,t){let o=t.map(i=>Vxt(e.suiteName,e.startedAt,i)),n=e.testsToSkip.map(i=>rPe(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>rPe(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...o,...n,...r]}function lPe(e,t,o){let n=Wxt(t,o);nn__default.writeFileSync(mn__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(n,null,2));}function UA(e){return {testName:e.test.name,testId:e.test.id,filePath:e.filePath,labels:e.test.labels,baseUrl:e.baseUrl,runId:e.runId,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata,status:e.status,failureRecoveryDetails:e.failureRecoveryDetails,failureDetails:e.failureDetails,failureReason:e.failureReason,finishedAt:e.finishedAt,lastAttemptStartedAt:e.lastAttemptStartedAt,attempts:e.attempts,parameters:e.parameters}}function uPe(e,t,o){let n=_3(t,o);nn__default.writeFileSync(mn__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(n,null,2));}function _3(e,t){let o=t.map(Kxt),n=[...e.testsToSkip.map(r=>cPe(r,false)),...e.quarantinedTestsToSkip.map(r=>cPe(r,true))];return fX.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:Yxt(o,n),runs:o,skipped:n})}function Kxt(e){let t=e.status==="PASSED"&&(e.failureRecoveryDetails?.attempts??0)>0,o=e.failureDetails?.manualClassification??e.failureDetails?.classification,n=e.status==="FAILED"?{reason:e.failureReason,message:e.failureDetails?.errorMessage}:null;return {runId:e.runId,testId:e.testId,testName:e.testName,filePath:mn__default.relative(".",e.filePath),labels:e.labels,status:e.status,startedAt:e.lastAttemptStartedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.lastAttemptStartedAt.getTime(),attempts:e.attempts,quarantined:e.quarantined??false,recovered:t,parameters:e.parameters,failure:n,classification:o?{reasoning:o.summary,category:o.reason,citations:o.citations}:null}}function cPe(e,t){return {testId:e.id,testName:e.name,filePath:mn__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function Yxt(e,t){return {total:e.length+t.length,executed:e.length,skipped:t.length,passed:e.filter(o=>o.status==="PASSED").length,failed:e.filter(o=>o.status==="FAILED").length,cancelled:e.filter(o=>o.status==="CANCELLED").length,quarantined:e.filter(o=>o.quarantined).length+t.filter(o=>o.quarantined).length,recovered:e.filter(o=>o.recovered).length}}function dPe(e,t){e.property("quarantined","true"),e.property("dd_tags[quarantined]","true"),t.quarantinedReason&&(e.property("quarantined_reason",t.quarantinedReason),e.property("dd_tags[quarantined_reason]",t.quarantinedReason)),t.quarantinedAt&&(e.property("quarantined_at",t.quarantinedAt.toISOString()),e.property("dd_tags[quarantined_at]",t.quarantinedAt.toISOString()));}function Xxt(e,t){let o=Q0(e);if(t.name(e.testName).className(e.testName).file(mn__default.relative(".",e.filePath)).property("id",e.testId).property("dd_tags[id]",e.testId),e.labels&&(t.property("labels",e.labels.join(",")),e.labels.forEach(n=>{t.property("dd_tags[label]",n);})),e.baseUrl&&(t.property("base_url",e.baseUrl),t.property("dd_tags[base_url]",e.baseUrl)),e.runId&&(t.property("run_url",`https://app.momentic.ai/runs/${e.runId}`),t.property("dd_tags[run_url]",`https://app.momentic.ai/runs/${e.runId}`)),e.quarantinedMetadata&&dPe(t,e.quarantinedMetadata),o==="setup"&&(t.property("setup_failed","true"),t.property("dd_tags[setup_failed]","true")),o==="main"&&(t.property("main_failed","true"),t.property("dd_tags[main_failed]","true")),o==="teardown"&&(t.property("teardown_failed","true"),t.property("dd_tags[teardown_failed]","true")),e.status==="FAILED"){let n=ku({failureReason:e.failureReason,classification:e.failureDetails?.classification,manualClassification:e.failureDetails?.manualClassification});if(n.title){let{description:r}=n;e.runId&&(r+=` Visit https://app.momentic.ai/runs/${e.runId} for more details.`),t.failure(r,n.title);}e.failureDetails?.errorStack&&t.stacktrace(e.failureDetails.errorStack);}else e.status==="CANCELLED"&&t.skipped();return t.time((e.finishedAt.getTime()-e.lastAttemptStartedAt.getTime())/1e3).property("started_at",e.lastAttemptStartedAt.toISOString()).property("dd_tags[started_at]",e.lastAttemptStartedAt.toISOString()).property("finished_at",e.finishedAt.toISOString()).property("dd_tags[finished_at]",e.finishedAt.toISOString()),t.property("attempts",e.attempts.toString()).property("dd_tags[attempts]",e.attempts.toString()),e.parameters?.envName&&(t.property("environment",e.parameters.envName),t.property("dd_tags[environment]",e.parameters.envName)),e.parameters?.urlOverride&&t.property("url_override",e.parameters.urlOverride),t}function Qxt(e,t,o){let{suiteId:n,suiteName:r,startedAt:i,finishedAt:a,testsToSkip:s,quarantinedTestsToSkip:l,quarantinedTestsMetadata:c}=t,u=e.testSuite().name(r);n&&u.property("id",n),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",a.toISOString()).time((a.getTime()-i.getTime())/1e3);for(let d of o){let m=u.testCase();Xxt(d,m);}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(mn__default.relative(".",d.relativeFilePath)).property("id",d.id),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(p=>{m.property("dd_tags[label]",p);})),m.skipped();}for(let d of l){let m=u.testCase();m.name(d.name).className(d.name).file(mn__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&dPe(m,p),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(h=>{m.property("dd_tags[label]",h);})),m.skipped();}return u}function mPe(e,t,o){let n=Jxt.newBuilder();Qxt(n,t,o),n.writeTo(mn__default.join(e,`${t.suiteName}.xml`));}var Zxt="insights-collector.newrelic.com",e_t="insights-collector.eu01.nr-data.net",t_t=4e3;async function P3({logger:e,config:t,params:o,runs:n,runGroupId:r,envName:i,appUrl:a,gitMetadata:s}){let l=t.licenseKey??process.env.NEW_RELIC_LICENSE_KEY??"";if(!l){e.error("New Relic reporter is enabled but no license key was found. Set reporting.newrelic.licenseKey in momentic.config.yaml or the NEW_RELIC_LICENSE_KEY environment variable.");return}let c=n.map(UA),u=_3(o,c),d=pPe({...t.attributes,runGroupId:r,environment:i,suiteName:o.suiteName,gitBranch:s.gitBranchName,gitCommit:s.gitCommitSha,gitRepository:s.githubRepository??s.gitOriginUrl,ciRunUrl:o_t()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...pPe({runId:g.runId,testId:g.testId,testName:g.testName,filePath:g.filePath,status:g.status,startedAt:g.startedAt,finishedAt:g.finishedAt,durationMs:g.durationMs,attempts:g.attempts,quarantined:g.quarantined,recovered:g.recovered,labels:g.labels?.join(","),baseUrl:c[f]?.baseUrl,failureReason:g.failure?.reason,failureMessage:g.failure?.message,classificationCategory:g.classification?.category,classificationReasoning:g.classification?.reasoning,runUrl:g.runId?`${a}/runs/${g.runId}`:void 0})}));m.push({...d,eventType:"MomenticRunGroup",timestamp:new Date(o.finishedAt).getTime(),startedAt:o.startedAt.toISOString(),finishedAt:o.finishedAt.toISOString(),durationMs:u.runGroup.durationMs,runGroupUrl:`${a}/run-groups/${r}`,...u.summary,passRate:u.summary.executed>0?u.summary.passed/u.summary.executed:0});let h=`https://${t.region==="EU"?e_t:Zxt}/v1/accounts/${t.accountId}/events`;try{let g=await fetch(h,{method:"POST",headers:{"Content-Type":"application/json","Api-Key":l},body:JSON.stringify(m)});if(!g.ok){let f=await g.text();e.error(`Failed to send test results to New Relic: ${g.status} ${f}`);return}e.info(`Sent ${m.length} events to New Relic account ${t.accountId}`);}catch(g){e.error(`Failed to send test results to New Relic: ${G(g)}`);}}function pPe(e){let t={};for(let[o,n]of Object.entries(e))n==null||n===""||(t[o]=typeof n=="string"?n.slice(0,t_t):n);return t}function o_t(){let e=process.env;return e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:e.CI_JOB_URL??e.BUILDKITE_BUILD_URL??e.CIRCLE_BUILD_URL??void 0}function hPe(e){return {title:on(e),duration:e.finishedAt.getTime()-e.startedAt.getTime(),error:e.status==="FAILED"?{value:e.failureReason}:void 0,steps:e.results&&e.type!=="PRESET_ACTION"?e.results.map(hPe):[]}}async function i_t(e,t,o,n){if(n.results?.length){let r=await X0({logger:e,debugDataStorage:t,folder:o,label:"final-state",snapshotId:n.results[n.results.length-1].afterSnapshot});return r?[{name:"Final state screenshot",path:r,contentType:"image/jpeg"}]:[]}return []}async function a_t(e,t,o,n){let r;if(n.status==="FAILED"&&n.failureReason){let i=ku({failureReason:n.failureReason,classification:n.failureDetails?.classification,manualClassification:n.failureDetails?.manualClassification});r={value:n.failureDetails?.classification?.reason??n.failureReason,message:i.description};}return {status:n.status==="PASSED"?"passed":n.status==="CANCELLED"?"interrupted":"failed",duration:n.finishedAt.getTime()-n.lastAttemptStartedAt.getTime(),error:r,retry:n.attempts-1,steps:n.results?.map(hPe)||[],startTime:n.lastAttemptStartedAt.toISOString(),attachments:await i_t(e,t,o,n)}}async function s_t(e,t,o,n){return {expectedStatus:"passed",status:n.status==="PASSED"?"expected":"unexpected",results:[await a_t(e,t,o,n)]}}async function l_t(e,t,o,n){return {tags:[],title:n.test.name,ok:n.status==="PASSED",tests:[await s_t(e,t,o,n)],id:n.runId,file:n.filePath}}function O3(e,t){return e.reduce((o,n)=>t(n)?o+1:o,0)}async function c_t(e,t,o,n,r){return {suites:[{title:n.suiteName,file:n.projectConfigPath,specs:await Promise.all(r.map(async i=>{let a=i.runId&&i.runAttemptId?t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId):new $w;try{return await l_t(e,a,o,i)}finally{a.close();}}))}],errors:[],stats:{startTime:n.startedAt.toISOString(),duration:n.finishedAt.getTime()-n.startedAt.getTime(),expected:O3(r,i=>i.status==="PASSED"),unexpected:O3(r,i=>i.status!=="PASSED"),flaky:O3(r,i=>!!i.isFlake),skipped:0}}}async function gPe(e,t,o,n,r){let i=await c_t(e,t,o,n,r);nn__default.writeFileSync(mn__default.join(o,`${n.suiteName}.json`),JSON.stringify(i,null,2));}async function fPe({logger:e,callbacks:t,format:o,params:n,runs:r,folder:i}){switch(existsSync(i)&&!statSync(i).isDirectory()&&(C.error(`The specified reporter output directory '${i}' exists on disk but is not a folder. Please move or delete the existing object or specify a different reporter path.`),process.exit(1)),mkdirSync(i,{recursive:true}),o){case "json":{let a=r.map(UA);uPe(i,n,a);return}case "junit":{let a=r.map(UA);mPe(i,n,a);return}case "buildkite-json":{let a=r.map(UA);lPe(i,n,a);return}case "allure":case "allure-json":await oPe(e,t,i,n,r);return;case "playwright-json":await gPe(e,t,i,n,r);return;default:throw new Error(`Unknown reporter format requested: '${o}'`)}}function bb(e){let t=e??y_t();return yPe()&&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 y_t(){let e=yPe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var yPe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function tB(e,t=true,o=false){let n=v_t(e),r=await S_t.which(n[0],true),i=n.slice(1),a=b_t.exec(T_t(r),i,{delay:100,silent:o});if(t)return a;a.catch(s=>{C.warn({err:s},`Background command exited with an error: ${e}`);});}var bPe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function A_t(e,{context:t}){return e instanceof zo?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${bPe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${G(e)}`}function SPe(e){return e instanceof zo?e.rawError.includes("Resource not accessible by integration")?bPe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":G(e)}function TPe(e,t){C.error(A_t(e,t));}function oB(e){return vPe(e,"runs","run")}function k3(e){return vPe(e,"run-groups","run group")}function vPe(e,t,o){let n=e.trim(),r=/^https?:\/\//i.test(n)?w_t(n,t,o):n;if(!z.guid().safeParse(r).success)throw new Error(`Invalid ${o} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function w_t(e,t,o){let n;try{n=new URL(e);}catch{throw new Error(`Invalid ${o} URL: ${e}`)}let r=n.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${o} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function nB(e){return new Promise((t,o)=>{let n=[];createReadStream(e).pipe(R_t()).on("data",r=>n.push(r)).on("end",()=>t(n)).on("error",r=>o(r));})}var Wt="3.58.0",APe={packageName:"momentic",currentVersion:Wt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade",runUpgrade:pq__default.existsSync(rp.join(process.cwd(),"package.json"))?e=>installPackage(`momentic@${e}`,{silent:false,dev:true}):void 0},{checkCLIVersion:ti,getLatestCLIVersion:EPe}=Zme(APe),wPe=e=>Mpe({...APe,logger:e});bmt("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:am,setAnalyticsIdentity:rB,shutdownAnalytics:RPe}=dO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Hpe});var O_t=3e3,iB=new Set;function CPe(e){iB.add(e),e.finally(()=>iB.delete(e));}async function IPe(){if(iB.size!==0)try{await ge(Promise.allSettled([...iB]),{milliseconds:O_t});}catch{}}async function it(){try{await ge(Promise.all([IPe(),cO(),uo.flush(),RPe(),wO(),oW()]),{milliseconds:5e3});}catch{}}async function _Pe({momenticFiles:e,project:t,logger:o}){let n;try{n=await Xg({repoRoot:t.rootDir??process.cwd(),mainBranch:t.config.gitMainBranch,logger:o});}catch(i){let a="Make sure the checkout has enough git history to reach the base ref (CI checkouts are often shallow by default).";throw i instanceof Bp?new ue(`Could not determine the base ref to diff against for --changed. ${a}`):new ue(`--changed could not compute the git diff: ${G(i)}. ${a}`)}let r=k_t({changedFiles:n.changedFiles,repoRoot:n.repoRoot,momenticFiles:e});return C.log(r.length===0?`No changed tests or modules vs ${n.baseRef}.`:`${r.length} changed test(s) vs ${n.baseRef}.`),r.map(i=>i.fullFilePath)}function k_t({changedFiles:e,repoRoot:t,momenticFiles:o}){let n=e.filter(u=>u.status!=="D"),r=n.filter(u=>u.path.endsWith(".test.yaml")),i=n.filter(u=>u.path.endsWith(".module.yaml")),a=Object.values(o.tests),s=new Map(a.map(u=>[u.fullFilePath,u])),l=new Map;for(let u of r){let d=s.get(rp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=M_t({momenticFiles:o,changedModuleFullPaths:i.map(u=>rp.resolve(t,u.path))});if(c.size>0)for(let u of a){if(l.has(u.id))continue;let d=WR(u.fullFilePath,o);for(let m of d)if(c.has(m)){l.set(u.id,{fullFilePath:u.fullFilePath,relativePath:u.relativePath,reason:"module-changed"});break}}return Array.from(l.values())}function M_t({momenticFiles:e,changedModuleFullPaths:t}){let o=new Set(t),n=new Set;for(let[a,s]of Object.entries(e.modules))o.has(s.fullFilePath)&&n.add(a);if(n.size===0)return n;let r=new Map;for(let[a,s]of Object.entries(e.modules))r.set(a,WR(s.fullFilePath,e));let i=true;for(;i;){i=false;for(let[a,s]of r)if(!n.has(a)){for(let l of s)if(n.has(l)){n.add(a),i=true;break}}}return n}async function Zg({tests:e,changed:t,momenticFiles:o,project:n,yes:r,include:i,exclude:a,labels:s,logger:l}){let c=new Set;if(t)(await _Pe({momenticFiles:o,project:n,logger:fe})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>nn__default.existsSync(p)),m=cwd();d?(m!==n.rootDir&&l.warn(`Test paths resolve against the current directory ('${m}'), not the project root ('${n.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!nn__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=nn__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=mn__default.resolve(p);Object.values(o.tests).filter(f=>h?Dte(f.fullFilePath,g):f.fullFilePath===g).forEach(f=>{c.add(f.fullFilePath);});})):Object.values(o.tests).forEach(p=>{e.some(h=>p.relativePath.includes(h))&&c.add(p.fullFilePath);});}else !r&&!await Kr("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),process.exit(1)),Object.values(o.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=mn__default.relative(n.rootDir,d);i&&!i.some(p=>new RegExp(p).test(m))&&c.delete(d),a&&a.some(p=>new RegExp(p).test(m))&&c.delete(d);}let u=Array.from(c).map(async d=>{try{let m=await $s(d,fe,o);if(lp.gt(m.schemaVersion,Ct)&&Eoe(l,`Test ${d} has schema version ${m.schemaVersion}, which is newer than this version of the CLI supports. Update your momentic package to avoid unexpected behavior.`,"newer-schema-version"),s&&s.length>0){let p=m.labels||[];if(!s.some(g=>p.includes(g)))return null}return {...m,fullFilePath:d,relativeFilePath:mn__default.relative(n.rootDir,d),testBundleHash:rM({absoluteTestFilePath:d,momenticFiles:o,logger:fe})}}catch(m){l.error(`Failed to read and resolve test at '${d}': ${G(m)}`),process.exit(1);}});return compact(await Promise.all(u))}function OPe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:o=false,skipQuarantined:n=false}){let[r,i]=partition(e,l=>l.disabled),[a,s]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:n?a:[],testsToRun:o?[]:s,quarantinedTestsToRun:n?[]:a}}function kPe({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:o,testInputMatrix:n}){let r=[],i=(a,s,l)=>{n?n.forEach((c,u)=>{r.push({inputs:c,inputIndex:u,testDefinition:a,quarantined:s,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:a,quarantined:s,quarantinedMetadata:l});};return e.forEach(a=>i(a,false)),t.forEach(a=>i(a,true,o[a.id])),r}var MPe=()=>process.exit(130),LPe=()=>process.exit(143);process.on("SIGINT",MPe);process.on("SIGTERM",LPe);function zA(){process.off("SIGINT",MPe),process.off("SIGTERM",LPe);}async function NPe({orgId:e,codeEvaluator:t,logger:o,outputDefinitions:n,testContext:r}){let i={};for(let a of n){let{name:s,value:l}=a;i[s]=await Ma({orgId:e,s:l,codeEvaluator:t,logger:o,context:r});}return i}var sB=z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),N3=sB,B_t=N3.array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).refine(e=>e.every((t,o)=>o===0||e[o-1]<t),{message:"service IDs must be sorted"}),aB=z.discriminatedUnion("mode",[z.object({mode:z.literal("playwright")}).strict(),z.object({mode:z.literal("private-service"),connectorId:sB,serviceIds:B_t.optional()}).strict()]),FPe=z.record(z.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z.string()),D3=z.union([z.guid(),z.string().regex(/^[a-f0-9]{64}$/)]),F3=z.object({allocationRequestId:z.guid().default(randomUUID$1),concurrencyKey:z.string().regex(/^[A-Za-z0-9][A-Za-z0-9:_-]{0,255}$/).optional(),maxConcurrentSessions:z.number().int().positive().optional(),maxSessionTtlSeconds:z.number().int().min(1).max(3600).default(3600),metadata:FPe.optional(),network:aB.default({mode:"playwright"}),principalId:D3,tokenVersion:z.literal(2)}).strict(),BPe=z.object({accessToken:z.string().min(1),expiresAt:z.iso.datetime(),tokenType:z.literal("Bearer")}),DPe=z.object({host:z.string().trim().min(1).max(253),port:z.number().int().min(1).max(65535)}).strict(),U_t=z.object({browserAddress:DPe,id:N3,target:DPe}).strict(),z_t=z.object({id:N3,mode:z.literal("localhost")}).strict(),j_t=z.union([U_t,z_t]),UPe=z.object({services:j_t.array().min(1).max(32)}).strict().superRefine(({services:e},t)=>{let o=e.filter(n=>"mode"in n);new Set(e.map(({id:n})=>n)).size!==e.length&&t.addIssue({code:"custom",message:"service IDs must be unique"}),o.length>1&&t.addIssue({code:"custom",message:"only one localhost namespace service is allowed"}),o.length===1&&e.length>1&&t.addIssue({code:"custom",message:"localhost cannot be combined with explicit services"});}),H_t=z.object({algorithm:z.literal("RSA-OAEP-256"),chunks:z.string().min(1).array().min(1).max(128)});F3.omit({tokenVersion:true}).partial({principalId:true});var zPe=z.object({metadata:FPe.optional(),browser:z.literal("chromium").default("chromium"),network:aB.default({mode:"playwright"}),playwrightVersion:z.string().default("1.60"),ttlSeconds:z.number().int().min(1).max(3600).default(3600),waitTimeoutMs:z.number().int().min(0).max(1e4).default(5e3)}).strict(),$_t=z.discriminatedUnion("mode",[aB.options[0].strip(),aB.options[1].strip()]),B3=z.object({id:z.string(),status:z.string(),browser:z.string().optional(),playwrightVersion:z.string().optional(),network:$_t.default({mode:"playwright"}),connectToken:z.string().optional(),connectTokenExpiresAt:z.string().optional(),wsEndpoint:z.string().optional(),statusUrl:z.string().optional(),createdAt:z.string().optional(),queuedAt:z.string().nullable().optional(),assignedAt:z.string().nullable().optional(),readyAt:z.string().nullable().optional(),connectedAt:z.string().nullable().optional(),expiresAt:z.string().nullable().optional(),endedAt:z.string().nullable().optional(),failureCode:z.string().nullable().optional(),terminalReason:z.string().nullable().optional()}),jPe=B3.extend({connectToken:z.string(),status:z.literal("READY"),wsEndpoint:z.string()}),HPe=z.object({connectorId:z.string(),state:z.string()}),$Pe=z.object({encryptedEnrollmentCredential:H_t});var zp=class extends Error{constructor(o,n,r){super(`Browser Fleet request failed (${n??"HTTP_ERROR"}, ${o})`);this.status=o;this.code=n;this.retryAfterMs=r;this.name="BrowserFleetAPIError";}},Sb=class extends Error{constructor(t){super("Browser Fleet request failed",{cause:t}),this.name="BrowserFleetConnectionError";}},lB=class extends Error{constructor(o){super(`Browser Fleet session ${o.id} did not become ready (${o.failureCode??o.status})`);this.session=o;this.name="BrowserFleetSessionError";}},Na=class extends Error{constructor(o,n){super(o);this.sessionId=n;this.name="BrowserFleetResponseError";}},cB=class extends Error{constructor(o){super(`Browser Fleet Connector did not become active (${o.state})`);this.connector=o;this.name="BrowserFleetConnectorError";}};function uB(e){return `/v1/private-connectors/${encodeURIComponent(sB.parse(e))}`}function GPe(e){let t=HPe.safeParse(e);if(!t.success)throw new Na("Browser Fleet returned a malformed Connector response");return t.data}var dB=class{constructor(t,o){this.transport=t;this.principalId=o;}async reconcile(t,o,n={}){let r=o.principalId===void 0?this.principalId:o.principalId,i=await this.transport.request(uB(t),{body:JSON.stringify(UPe.parse(o.desiredState)),headers:{"Content-Type":"application/json",...r?{"X-Browser-Fleet-Principal-Id":D3.parse(r)}:{}},method:"PUT"},n,true);return GPe(i.body)}async retrieve(t,o={}){let n=await this.transport.request(uB(t),{},o,true);return GPe(n.body)}async waitUntilActive(t,o={}){let n=o.timeoutMs===null?void 0:AbortSignal.timeout(o.timeoutMs??45e3),r=o.signal&&n?AbortSignal.any([o.signal,n]):o.signal??n;for(;;){r?.throwIfAborted();let i=await this.retrieve(t,{...o,signal:r});if(i.state==="ACTIVE")return i;if(i.state!=="PROVISIONING")throw new cB(i);await setTimeout$1(500,void 0,{signal:r});}}async createEnrollmentCredential(t,o,n={}){let r=await this.transport.request(`${uB(t)}/enrollment-credentials`,{body:JSON.stringify(o),headers:{"Content-Type":"application/json"},method:"POST"},n,true),i=$Pe.safeParse(r.body);if(!i.success)throw new Na("Browser Fleet returned a malformed enrollment response");return i.data.encryptedEnrollmentCredential}async delete(t,o={}){await this.transport.request(uB(t),{method:"DELETE"},o,true);}};var W_t=z.object({id:z.string()}),q_t=1e4,K_t=2e4;function qPe(e){return e+Math.random()*Math.min(250,e/4)}var mB=class{constructor(t,o){this.transport=t;this.accessToken=o;}async create(t={},o={}){return (await this.createResponse(this.creationParams(t),{...o,idempotencyKey:this.idempotencyKey(o)})).session}async retrieve(t,o={}){return (await this.requestSession(`/${encodeURIComponent(t)}`,{},o)).session}async delete(t,o={}){await this.transport.request(`/v1/sessions/${encodeURIComponent(t)}`,{method:"DELETE"},o);}async createAndWait(t={},o={}){o.signal?.throwIfAborted();let n=this.creationParams(t),r={...o,idempotencyKey:this.idempotencyKey(o)},i=o.allocationTimeoutMs??9e4,a=Date.now()+i,s=new AbortController,l=setTimeout(()=>s.abort(new DOMException("Browser Fleet allocation timed out","TimeoutError")),i),c=o.signal?AbortSignal.any([o.signal,s.signal]):s.signal,u={...r,signal:c},d;try{let m=await this.retry(()=>this.createResponse(n,u),a,c);for(d=m.session;(d.status==="QUEUED"||d.status==="PROVISIONING")&&Date.now()<a&&(await setTimeout$1(Math.min(qPe(m.retryAfterMs),a-Date.now()),void 0,{signal:c}),!(Date.now()>=a));){let h=d.id;m=await this.retry(()=>this.requestSession(`/${encodeURIComponent(h)}`,{},u),a,c),d=m.session;}if(c.throwIfAborted(),d.status!=="READY")throw new lB(d);let p=jPe.safeParse(d);if(!p.success)throw new Na("Browser Fleet returned a malformed session response",d.id);return p.data}catch(m){let p=d?.id??(m instanceof Na?m.sessionId:void 0);if(!p&&c.aborted)try{p=(await this.createResponse(n,{...r,signal:AbortSignal.timeout(K_t)})).session.id;}catch(h){h instanceof Na&&(p=h.sessionId);}throw p&&await this.delete(p,{signal:AbortSignal.timeout(q_t)}).catch(()=>{}),m}finally{clearTimeout(l);}}idempotencyKey(t){if(t.idempotencyKey!==void 0)return t.idempotencyKey;if(typeof this.accessToken=="object")return this.accessToken.allocationRequestId;if(this.accessToken)throw new Error("Pass the token object or an explicit idempotencyKey when using a raw access token");return randomUUID$1()}creationParams(t){let o=typeof this.accessToken=="object"?this.accessToken:void 0;return zPe.parse({...t,network:t.network===void 0?o?.network:t.network,ttlSeconds:t.ttlSeconds===void 0?o?.maxSessionTtlSeconds:t.ttlSeconds})}createResponse(t,o){return this.requestSession("",{body:JSON.stringify(t),headers:{"Content-Type":"application/json","Idempotency-Key":o.idempotencyKey},method:"POST"},o)}async requestSession(t,o,n){let r=await this.transport.request(`/v1/sessions${t}`,o,n),i=B3.safeParse(r.body);if(!i.success)throw new Na("Browser Fleet returned a malformed session response",W_t.safeParse(r.body).data?.id);return {session:i.data,retryAfterMs:r.retryAfterMs}}async retry(t,o,n){for(;;)try{return await t()}catch(r){if(n.throwIfAborted(),!(r instanceof Sb||r instanceof zp&&(r.status===408||r.status===429||r.status>=500))||Date.now()>=o)throw r;let a=r instanceof zp?r.retryAfterMs:500;await setTimeout$1(Math.min(qPe(a),o-Date.now()),void 0,{signal:n});}}};var pB=class{constructor(t,o={}){this.transport=t;this.defaults=o;}async create({principalId:t=this.defaults.principalId,concurrencyKey:o=this.defaults.concurrencyKey,maxConcurrentSessions:n=this.defaults.maxConcurrentSessions,...r}={},i={}){let{concurrencyKey:a,maxConcurrentSessions:s,...l}=F3.parse({...r,principalId:t,concurrencyKey:o,maxConcurrentSessions:n,tokenVersion:2}),c=m=>this.transport.request("/v1/token",{body:JSON.stringify({...l,metadata:m}),headers:{"Content-Type":"application/json",...a===void 0?{}:{"X-Browser-Fleet-Concurrency-Key":a},...s===void 0?{}:{"X-Browser-Fleet-Max-Concurrent-Sessions":String(s)}},method:"POST"},i),u;try{u=await c(l.metadata);}catch(m){if(!(m instanceof zp)||m.status!==400||!l.metadata)throw m;u=await c(void 0);}let d=BPe.safeParse(u.body);if(!d.success)throw new Na("Browser Fleet returned a malformed token response");return {...d.data,allocationRequestId:l.allocationRequestId,network:l.network,maxSessionTtlSeconds:l.maxSessionTtlSeconds}}};var KPe=64*1024;function J_t(e){if(!e)return 500;let t=Number(e);if(Number.isFinite(t)&&t>=0)return t*1e3;let o=Date.parse(e);return Number.isNaN(o)?500:Math.max(0,o-Date.now())}async function YPe(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>KPe)throw await e.body?.cancel(),new Na("Browser Fleet response is too large");if(!e.body)return;let o=e.body.getReader(),n=[],r=0;for(let i=await o.read();!i.done;i=await o.read()){if(r+=i.value.byteLength,r>KPe)throw await o.cancel(),new Na("Browser Fleet response is too large");n.push(i.value);}if(r!==0)return JSON.parse(new TextDecoder().decode(Buffer$1.concat(n,r)))}var hB=class{baseUrl;authorization;controlAuthorization;fetch;requestTimeoutMs;constructor({accessToken:t,apiKey:o=process.env.BROWSER_FLEET_API_KEY,baseUrl:n=process.env.BROWSER_FLEET_BASE_URL,controlApiKey:r,fetch:i=globalThis.fetch,requestTimeoutMs:a=15e3}){if(!n)throw new Error("Browser Fleet base URL is not configured");this.baseUrl=n.replace(/\/$/,"");let s=(typeof t=="object"?t.accessToken:t)??o;this.authorization=s?`Bearer ${s}`:void 0,this.controlAuthorization=r?`Bearer ${r}`:void 0,this.fetch=i,this.requestTimeoutMs=a;}async request(t,o,n={},r=false){let i=r?this.controlAuthorization:this.authorization;if(!i)throw new Error(`Browser Fleet ${r?"control":"session"} API key is not configured`);let a=n.timeoutMs===void 0?this.requestTimeoutMs:n.timeoutMs,s=a===null?void 0:AbortSignal.timeout(a),l=n.signal&&s?AbortSignal.any([n.signal,s]):n.signal??s;l?.throwIfAborted();let c;try{c=await this.fetch(`${this.baseUrl}${t}`,{...o,headers:{...o.headers,Authorization:i},redirect:"error",signal:l});}catch(d){throw n.signal?.aborted?d:new Sb(d)}let u=J_t(c.headers.get("Retry-After"));if(!c.ok){let d=await YPe(c).catch(()=>{});n.signal?.throwIfAborted();let m=typeof d=="object"&&d!==null&&"code"in d&&typeof d.code=="string"?d.code:void 0;throw new zp(c.status,m,u)}try{return {body:await YPe(c),retryAfterMs:u}}catch(d){throw n.signal?.aborted||d instanceof Na?d:new Sb(d)}}};var px=class{baseUrl;sessions;tokens;privateConnectors;constructor(t={}){let o=new hB(t);this.baseUrl=o.baseUrl,this.sessions=new mB(o,t.accessToken),this.tokens=new pB(o,{principalId:t.principalId,concurrencyKey:t.concurrencyKey,maxConcurrentSessions:t.maxConcurrentSessions}),this.privateConnectors=new dB(o,t.principalId);}};var JPe=new Set;function XPe(e){return de({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let o=await X_t(e);return t?.setAttribute("momentic.browser_execution_mode",o.controller.browser.executionMode),o}})}async function X_t({baseUrl:e,envName:t,devicePixelRatio:o,apiClient:n,test:r,storageClient:i,codeEvaluator:a,generator:s,orgId:l,variables:c,logger:u,customHeaders:d,testInputs:m,localBrowserConfig:p,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:y,runAttemptId:b,runGroupId:S,browserTypeOverride:E,attemptedRemoteBrowserProviders:v,abortSignal:R}){let w={baseUrl:n.baseUrl,apiKey:n.apiKey,logger:fe,mode:n.mode,runner:n.runner},{controller:P,context:I}=await DI({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:a,storage:i,enricher:new ep(w,s),generator:s,visualDiffScreenshotStorage:g,devicePixelRatio:o,browserTypeOverride:E,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:O})=>{f.setActiveVideo(_,O);}}:void 0,validateBrowserType:_=>{xh(_)||(fe.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!JPe.has(_)&&(JPe.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${sh(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),O,N=v?.slice(-1),D=crypto.randomUUID(),M=async()=>{let z=await n.createRemoteBrowserConnection({attemptedProviders:N,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name});return O=z.provider,z.provider&&v?.push(z.provider),z};try{if(N?.includes("SELF_HOSTED"))return await M();let z=await n.tryCreateBrowserFleetAccessToken({allocationRequestId:D,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name},R);if(!z)return await M();O=z.provider,v?.push(z.provider);let J=await new px({accessToken:z.accessToken,baseUrl:z.fleetApiUrl,requestTimeoutMs:15e3}).sessions.createAndWait({network:z.network,ttlSeconds:3600,waitTimeoutMs:1e4},{allocationTimeoutMs:9e4,idempotencyKey:D,signal:R});return {accessToken:J.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:z.provider,wsEndpoint:J.wsEndpoint}}catch(z){throw R?.aborted?z:new Nc("Browser Fleet session allocation failed",{cause:z})}finally{uo.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${O??"unknown"}`]);}}:void 0});try{await BI({orgId:l,test:r,testInputs:m,codeEvaluator:a,logger:u,context:I});}catch(_){try{await P.browser.cleanup();}catch(O){u.error({err:O},"Failed to clean up browser after test input resolution failed");}throw _ instanceof FI&&(C.error(_.message),process.exit(1)),_}return {controller:P,context:I}}function QPe({testAdvancedSettings:e,orgSettings:t,logger:o}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!is){let n="This test is ineligible for failure recovery since this does not appear to be a CI environment";return o.warn(n),C.debug(n),false}return true}async function ZPe({attemptInputs:e,attemptFixtures:t,attemptMetadata:o,runFixtures:n,recordVideo:r,stepCallbacks:i}){let{orgId:a,userId:s,runId:l}=o,{runTracer:c,runGroupTracer:u,project:d,apiClient:m}=n,{controller:p,context:h,codeEvaluator:g,storageClient:f,cacheStorage:y,logger:b,usageTracker:S,tracer:E}=t,{test:v,orgSettings:R}=e;b.info(`Running test '${v.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:p,storage:f,cacheStorage:y,usageTracker:S,context:h,logger:b,codeEvaluator:g},P={orgId:a,userId:s,runId:l,testMetadata:v,steps:v.steps,beforeSteps:v.beforeSteps,afterSteps:v.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await QPe({testAdvancedSettings:v.advanced,orgSettings:R.ai,logger:b})};return zwe({fixtures:w,inputs:P,options:I,callbacks:{step:i??{},test:{onTestComplete:async O=>{await p.browser.cleanup({saveRemoteVideos:r!=="on-fail"||O?.status!=="PASSED"}),await g.dispose();}}},testParams:{attemptTracer:E},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:am,abortSignal:n.abortSignal}})}async function eOe(e){let{testDefinition:t,traceMetadata:o}=e;return de({name:"cli.test_run",newTrace:true,serviceName:"cli",attributes:{"momentic.org_id":e.orgId,"momentic.run_group_id":o.runGroupId,"momentic.run_id":e.runId,"momentic.test_id":t.id,"momentic.parallel":o.parallel,"momentic.worker_count":o.workerCount,"momentic.worker_index":o.workerIndex,"momentic.remote_browser_run":o.remoteBrowser},fn:async n=>{let r=await ePt(e);return n?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function ePt(e){let{testDefinition:t,logger:o}=e,n=new Date;try{return await tPt(e)}catch(r){Ch(r);let{customHeaders:i,envName:a,testInputs:s,urlOverride:l}=e,c={customHeaders:i,envName:a,testInputs:s,urlOverride:l},u="Fatal error running test";return o.error({err:r},u),C.error({err:r},u),tOe({err:ri(r),parameters:c,test:t,failureReason:ne.reasonFor(r,"UnknownError"),startedAt:n,lastAttemptStartedAt:n,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function tPt(e){let{testDefinition:t,snapshot:o,project:n,apiClient:r,orgId:i,userId:a,urlOverride:s,runGroupTracer:l,logger:c,gitMetadata:u,cacheOptions:d,runId:m,testInputs:p,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=o?{...n.config,...o.metadata.config}:n.config,b=new YT(r,i),S=np({logger:c,orgId:i,client:r,gitMetadata:u,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:o?true:d.noCache,isolateCachesByEnvironment:n.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),E,v,R;o?(E={envName:o.metadata.environment.envName,resolvedEnv:o.metadata.environment.resolvedEnv,environmentVariables:{...o.metadata.environment.variables},baseUrl:o.metadata.environment.baseUrl},v={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(E=Ty({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:k=>gc(k,n,c)}),{stepListsWithCaches:v,restoredStepLists:R}=await uc({cacheStorage:S,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:E.envName,useSnapshotIdentityCache:n.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:P,environmentVariables:I,baseUrl:_}=E,O=v.steps,N=v.beforeSteps??void 0,D=v.afterSteps??void 0,M=lw(t),z=M||(e.recordVideo??false);M&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let J=await l.startRun({logger:c,runId:m,originalSteps:R??{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:_,environmentName:w,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,resolvedInputs:p,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai,recordVideoOverride:M?true:void 0}),W=c.child(J.loggerBindings||{});Object.entries(J.envVarBindings||{}).forEach(([k,Q])=>{I[k]=Q;});let V=await nPt({...e,recordVideo:z,effectiveConfig:y,variables:I,envName:w,resolvedEnv:P,baseUrl:_,storageClient:b,tracer:J,runGroupTracer:l,logger:W,cacheStorage:S,stepsWithCaches:O,beforeStepsWithCaches:N,afterStepsWithCaches:D,usageTracker:f});return await J.finish({logger:c,status:V.status,finishedAt:V.finishedAt,failureDetails:V.failureDetails,failureReason:V.failureReason,isFlake:V.isFlake,failureRecoveryDetails:V.failureRecoveryDetails,runAssertionResults:V.runAssertionResults}),oPt({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:V.status,logger:W}),{runId:J.runId,...V}}function oPt({apiClient:e,classificationEnabled:t,runId:o,environment:n,status:r,logger:i}){if(!t||r!=="PASSED"&&r!=="FAILED")return;let a=e.recordRunOutcomeForFailureRate({runId:o,environment:n,status:r==="PASSED"?"PASSED":"FAILED"}).catch(s=>{i.debug({err:s,runId:o},"Failed to report run outcome for failure rate");});CPe(a);}async function nPt(e){let{testDefinition:t,effectiveConfig:o,stepsWithCaches:n,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:a,regenerateGoldenFiles:s,apiClient:l,generator:c,baseUrl:u,storageClient:d,orgId:m,userId:p,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:b,resolvedEnv:S,retriesOverride:E,devicePixelRatio:v,logUpdate:R,tracer:w,runGroupTracer:P,logger:I,cacheStorage:_,gitMetadata:O,quarantined:N,quarantinedMetadata:D,usageTracker:M}=e,z=o,J=z.ai?.aiFailureAnalysis??false,W=new Date,V=new QT(a,l,s),k={envName:h,urlOverride:g,customHeaders:f,testInputs:y},Q={...z.browser||{},...S?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},H=Q.remoteBrowser===true,$=[],oe,ie=Math.abs(E??t.retries??o.retries??1),Pe=[],Ne=[];I.info({...O,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Fe=0;Fe<=ie;Fe++){let at=randomUUID(),ee=await w.startAttempt(at),Z=I.child(ee.loggerBindings||{}),Se={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Fe!==0&&R("RETRY",`attempt ${Fe+1}/${ie+1}`);let Tt=new Date,Ke=Wy({tools:new op({httpClient:new ms({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Z,mode:l.mode,runner:l.runner}),fakerSeed:z.advanced?.fakerConstantSeed?jw:void 0})}),Re;try{let{controller:dt,context:Mt}=await XPe({tracer:ee,runId:w.runId,runAttemptId:at,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:v,logger:Z,storageClient:d,codeEvaluator:Ke,test:Se,generator:c,orgId:m,variables:b,customHeaders:f,testInputs:y,localBrowserConfig:Q,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:$,abortSignal:e.abortSignal,aiSettings:{...z.ai||{},...Se.advanced||{}},visualDiffScreenshotStorage:V});e.abortSignal&&(e.abortSignal.aborted?dt.executeAbortController.abort():(Re=()=>{dt.executeAbortController.abort();},e.abortSignal.addEventListener("abort",Re,{once:!0}))),oe=await ZPe({attemptMetadata:{attemptNumber:Fe+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:Z,storageClient:d,cacheStorage:_,usageTracker:M,codeEvaluator:Ke,context:Mt,controller:dt,tracer:ee},attemptInputs:{test:Se,orgSettings:z},runFixtures:{runTracer:w,runGroupTracer:P,project:a,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let vo=new Date,et={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:Se.steps,beforeSteps:Se.beforeSteps,afterSteps:Se.afterSteps}};await qf({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:et.updatedStepsWithCaches,useSnapshotIdentityCache:a.config.fileFormat==="v2"}),oe?.status==="PASSED"||oe?.status==="CANCELLED"&&o.advanced?.saveCacheOnCancel?await Kf(et):oe?.status==="FAILED"&&Fe===ie&&await uT(et),await ee.finish({logger:Z,result:oe});let Qe;if(oe.status==="PASSED"&&lw(t)){e.onStepStart?.(cX);let It=await bEe({runAssertions:t.runAssertions??[],orgId:m,project:a,generator:c,apiClient:l,runTracer:w,runGroupTracer:P,logger:Z,testPlatform:"web",captureEvent:am,abortSignal:e.abortSignal});vo=new Date,It&&(Ne.push(It),Qe=uX(It.evaluations));}let qt=Ne.length>0?{attempts:Ne}:void 0;Pe.unshift(Qe!==void 0?"FAILED":oe.status);let Qo=await NPe({orgId:m,codeEvaluator:Ke,logger:Z,outputDefinitions:t.outputs??[],testContext:Mt}),rn=hX(Pe),al=Fe+1;if(oe.status!=="FAILED"&&Qe===void 0)return {...oe,runAttemptId:at,parameters:k,test:Se,filePath:Se.relativeFilePath,startedAt:W,lastAttemptStartedAt:Tt,finishedAt:vo,attempts:al,baseUrl:u,outputs:Qo,isFlake:rn,runAssertionResults:qt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:H};let Bl=oe.failedStepResult,zi=Qe??(Bl?.message||"Unknown failure"),la=Qe?"AssertionFailureError":Bl?.failureReason??o_(zi)??"UnknownError",ar=Z.child({failureReason:la,errorMessage:zi,numAttempts:(ie+1).toString(),name:Se.name});if(Fe<ie){ar.warn(`Retrying failed execution attempt for run: ${zi}`);continue}ar.error({usedRemoteBrowser:H},`Test failed after all exhausting attempts: ${zi}`);let U=new Error(zi),we={errorMessage:zi,errorStack:U.stack},yt;if(z.ai?.classification?.enabled===!0){let It=Bl?.failureClassification;It||(e.onStepStart?.(pm),It=await cF({runTracer:w,runGroupTracer:P,outputDir:e.outputDir,orgId:m,project:a,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:z.ai,captureEvent:am,abortSignal:e.abortSignal,failedStepMessage:Qe??Bl?.message,runAssertionResults:qt})),It&&(yt=It.classification.category,la=It.classification.category,we.classification={reason:It.classification.category,secondaryCategories:It.classification.secondaryCategories,summary:It.classification.reasoning,recoverable:It.classification.recoverable,confidence:It.classification.confidence,action:It.action,citations:It.classification.citations,cache:It.classification.cache,source:"v2"});}else if(J){let It;try{if(oe.results&&oe.results.length>0){e.onStepStart?.(pm);let{classification:eo,aiFailureReason:um}=await tie({logger:Z,browserStateStorage:ee,generator:c,fullResults:oe,failureReason:la,error:U,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});It=eo,yt=um;}}catch(eo){Z.warn({err:eo},"Failed to classify test results");}It&&(we.classification=It,la=yt??la,we.classification.source="v1");}return {...oe,status:"FAILED",runAttemptId:at,parameters:k,failureDetails:we,failureReason:la,test:Se,filePath:Se.relativeFilePath,startedAt:W,lastAttemptStartedAt:Tt,finishedAt:vo,attempts:Fe+1,baseUrl:u,outputs:Qo,runAssertionResults:qt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:H}}catch(dt){let Mt=`Encountered fatal platform error while running test '${Se.name}'`;return Z.error({err:dt},Mt),C.error({err:dt},Mt),await ee.finish({logger:Z,result:{status:"FAILED"}}),tOe({err:ri(dt),parameters:k,test:Se,failureReason:ne.reasonFor(dt,"InternalPlatformError"),startedAt:W,lastAttemptStartedAt:Tt,attempts:Fe+1,quarantined:N,quarantinedMetadata:D,runAttemptId:at,baseUrl:u,usedRemoteBrowser:H})}finally{Re&&e.abortSignal?.removeEventListener("abort",Re);}}throw new Error("This code should not be reachable")}function tOe({err:e,parameters:t,test:o,failureReason:n,startedAt:r,lastAttemptStartedAt:i,attempts:a,quarantined:s,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}){return {status:"FAILED",results:[],parameters:t,test:o,filePath:o.relativeFilePath,failureReason:n,failureDetails:{errorMessage:e.message,errorStack:e.stack},startedAt:r,lastAttemptStartedAt:i,finishedAt:new Date,attempts:a,outputs:{},quarantined:s,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}}var oOe=3e4;async function $A({timeoutMinutes:e,cancel:t,run:o}){let n=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");zA(),process.once("SIGINT",n),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 o()}finally{process.off("SIGINT",n),process.off("SIGTERM",r),clearTimeout(i);}}var HA=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,o=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();o&&await ge(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:oOe}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${oOe}ms reached while waiting for running tests to settle.`);});let n=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||n.has(r.activeRun.runId))continue;let{activeRun:i}=r,a={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,a);}}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:o,reporter:n,runGroupTracer:r,runGroupLogger:i,logger:a,project:s,client:l,generator:c,orgId:u,userId:d,devicePixelRatio:m,outputDir:p,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,gitMetadata:S,cacheOptions:E,browserTypeOverride:v,remoteBrowserOverride:R,onResult:w,onFatal:P}=this.params,I=0,_=true;for(;_;){let O=Object.values(this.runQueue);if(O.length===o&&await Promise.race(O.map(J=>J.promise)),this.cancelled){_=false;continue}let N=await t();if(N===void 0){_=false;continue}let D=`test-${I++}`,M={...N,startedAt:new Date},z=new AbortController;this.runQueue[D]={done:false,activeRun:M,abortController:z,promise:(async({inputs:J,quarantined:W,quarantinedMetadata:V,testDefinition:k,snapshot:Q,runId:H})=>{let $=k.relativeFilePath.includes("..")?k.fullFilePath:k.relativeFilePath;n.onTestBegin($);let oe=i.child({testId:k.id,runId:H}),ie=new $m({logger:oe,reporter:new Qm(l),runType:"test-run",platform:"WEB",runId:H,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:k,suiteMetadata:void 0,runner:"test-runner"});try{let Pe=await eOe({testDefinition:k,snapshot:Q,project:s,testInputs:J,quarantined:W,quarantinedMetadata:V,orgId:u,userId:d,runId:H,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,logUpdate:(Ne,Fe)=>n.onTestStatus($,Ne,Fe),...wpe(n,$),logger:oe,gitMetadata:S,cacheOptions:E,usageTracker:ie,browserTypeOverride:v,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:z.signal,traceMetadata:this.params.traceMetadata});n.onTestEnd($,Pe.status,{recovered:Pe.status==="PASSED"&&!!Pe.failureRecoveryDetails?.attempts}),this.runResults.push(Pe),w?.(Pe);}catch(Pe){let Ne=`Encountered unexpected fatal error when running test '${k.name}'`;oe.error({err:Pe},Ne),C.error({err:Pe},Ne),Ch(Pe),P?.(Pe),await this.cancel("Fatal error occurred",false);}finally{let Pe=this.runQueue[D];Pe&&(Pe.done=true),await ie.flush(a),delete this.runQueue[D];}})(M)};}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 gB(e){return createHash("sha1").update(e).digest("hex")}var iPt=["tab","view","mode","step"],aPt=[/^[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 sPt(e){return aPt.some(t=>t.test(e))}function nOe(e,t={}){let o;try{o=new URL(e);}catch{return e}let n=new Set(t.queryAllowlist??iPt),i=o.pathname.split("/").map(c=>c.length>0&&sPt(c)?"{id}":c).join("/"),a=[],s=Array.from(o.searchParams.keys()).sort();for(let c of s){if(!n.has(c))continue;let u=o.searchParams.getAll(c).sort();for(let d of u)a.push(`${encodeURIComponent(c)}=${encodeURIComponent(d)}`);}let l=a.length>0?`?${a.join("&")}`:"";return `${o.protocol}//${o.host}${i}${l}`}var U3=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),lPt=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,cPt=[/\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],rOe=new Set(["h1","h2","h3","h4","h5","h6"]),uPt=new Set(["input","select","textarea"]);function dPt(e){let t=e;for(let o of cPt)t=t.replace(o,"{id}");return t}function iOe(e){return dPt(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function mPt(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 pPt(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":lPt.test(t)?"@gen":iOe(t)}function aOe(e,t,o){let n=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),a=`<${n}@${i}`;if(r!==void 0&&(a+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>U3.has(c.toLowerCase())).sort();for(let c of l){let u=c.toLowerCase();if(u==="role")continue;let d=e.attributes[c];if(d===void 0)continue;let m=pPt(u,d);a+=` ${u}=${m}`;}}o.tokens.push(a);let s=e.text?.trim();s!==void 0&&s.length>0&&(r==="button"||r==="link"||r==="heading"||n==="button"||n==="a"||n==="label"||rOe.has(n)?o.tokens.push(`label=${iOe(s)}`):o.tokens.push(mPt(s))),(n==="button"||r==="button")&&(o.counts.buttons+=1),(n==="a"||r==="link")&&(o.counts.links+=1),(uPt.has(n)||r==="textbox"||r==="combobox")&&(o.counts.formFields+=1),(rOe.has(n)||r==="heading")&&(o.counts.headings+=1);for(let l of e.children??[])aOe(l,t+1,o);}function sOe(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return aOe(e,0,t),{tokens:t.tokens,counts:t.counts}}function lOe(e,t){let o=new TextEncoder().encode(e),n=o.length,r=Math.floor(n/4),i=t>>>0,a=3432918353,s=461845907;for(let d=0;d<r;d++){let m=d*4,p=o[m]|o[m+1]<<8|o[m+2]<<16|o[m+3]<<24;p=Math.imul(p,a),p=p<<15|p>>>17,p=Math.imul(p,s),i^=p,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=n&3,u=r*4;return c===3&&(l^=o[u+2]<<16),c>=2&&(l^=o[u+1]<<8),c>=1&&(l^=o[u],l=Math.imul(l,a),l=l<<15|l>>>17,l=Math.imul(l,s),i^=l),i^=n,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var fB=128,hPt=4294967295,gPt=(()=>{let e=[];for(let t=0;t<fB;t++)e.push(lOe(`perm:${t}`,0));return e})();function cOe(e){let t=new Uint32Array(fB);for(let n=0;n<fB;n++)t[n]=hPt;let o=new Set(e);for(let n of o)for(let r=0;r<fB;r++){let i=lOe(n,gPt[r]);i<t[r]&&(t[r]=i);}return t}var yPt=32;function yB(e){let t=nOe(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:o,counts:n}=sOe(e.dom),r=[`url:${t}`,`counts:buttons=${n.buttons}`,`counts:links=${n.links}`,`counts:formFields=${n.formFields}`,`counts:headings=${n.headings}`,...o],i=cOe(r),a=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(a).digest("hex").slice(0,yPt),minhash:Array.from(i),canonicalUrl:t}}var bPt=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",F;(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";})(F||(F={}));var ws={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function bB(e){return e>=55296&&e<=57343}function uOe(e){return e>=56320&&e<=57343}function dOe(e,t){return (e-55296)*1024+9216+t}function SB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function TB(e){return e>=64976&&e<=65007||bPt.has(e)}var he;(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";})(he||(he={}));var TPt=65536,vB=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=TPt,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,o){let{line:n,col:r,offset:i}=this,a=r+o,s=i+o;return {code:t,startLine:n,endLine:n,startCol:a,endCol:a,startOffset:s,endOffset:s}}_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 o=this.html.charCodeAt(this.pos+1);if(uOe(o))return this.pos++,this._addGap(),dOe(t,o)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,F.EOF;return this._err(he.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,o){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=o;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,o){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(o)return this.html.startsWith(t,this.pos);for(let n=0;n<t.length;n++)if((this.html.charCodeAt(this.pos+n)|32)!==t.charCodeAt(n))return false;return true}peek(t){let o=this.pos+t;if(o>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let n=this.html.charCodeAt(o);return n===F.CARRIAGE_RETURN?F.LINE_FEED:n}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,F.EOF;let t=this.html.charCodeAt(this.pos);return t===F.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,F.LINE_FEED):t===F.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,bB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===F.LINE_FEED||t===F.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){SB(t)?this._err(he.controlCharacterInInputStream):TB(t)&&this._err(he.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var Mo;(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";})(Mo||(Mo={}));function AB(e,t){for(let o=e.attrs.length-1;o>=0;o--)if(e.attrs[o].name===t)return e.attrs[o].value;return null}var APt=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 mOe(e){return e>=55296&&e<=57343||e>1114111?65533:APt.get(e)??e}function pOe(e){let t=atob(e),o=t.length&-2,n=new Uint16Array(o/2);for(let r=0,i=0;r<o;r+=2){let a=t.charCodeAt(r),s=t.charCodeAt(r+1);n[i++]=a|s<<8;}return n}var z3=pOe("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var Da;(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";})(Da||(Da={}));var hr;(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";})(hr||(hr={}));var hOe=32;function j3(e){return e>=hr.ZERO&&e<=hr.NINE}function EPt(e){return e>=hr.UPPER_A&&e<=hr.UPPER_F||e>=hr.LOWER_A&&e<=hr.LOWER_F}function wPt(e){return e>=hr.UPPER_A&&e<=hr.UPPER_Z||e>=hr.LOWER_A&&e<=hr.LOWER_Z||j3(e)}function RPt(e){return e===hr.EQUALS||wPt(e)}var Ui;(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";})(Ui||(Ui={}));var sm;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(sm||(sm={}));var EB=class{decodeTree;emitCodePoint;errors;constructor(t,o,n){this.decodeTree=t,this.emitCodePoint=o,this.errors=n;}state=Ui.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=sm.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ui.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,o){switch(this.state){case Ui.EntityStart:return t.charCodeAt(o)===hr.NUM?(this.state=Ui.NumericStart,this.consumed+=1,this.stateNumericStart(t,o+1)):(this.state=Ui.NamedEntity,this.stateNamedEntity(t,o));case Ui.NumericStart:return this.stateNumericStart(t,o);case Ui.NumericDecimal:return this.stateNumericDecimal(t,o);case Ui.NumericHex:return this.stateNumericHex(t,o);case Ui.NamedEntity:return this.stateNamedEntity(t,o)}}stateNumericStart(t,o){return o>=t.length?-1:(t.charCodeAt(o)|hOe)===hr.LOWER_X?(this.state=Ui.NumericHex,this.consumed+=1,this.stateNumericHex(t,o+1)):(this.state=Ui.NumericDecimal,this.stateNumericDecimal(t,o))}stateNumericHex(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(j3(n)||EPt(n)){let r=n<=hr.NINE?n-hr.ZERO:(n|hOe)-hr.LOWER_A+10;this.result=this.result*16+r,this.consumed++,o++;}else return this.emitNumericEntity(n,3)}return -1}stateNumericDecimal(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(j3(n))this.result=this.result*10+(n-hr.ZERO),this.consumed++,o++;else return this.emitNumericEntity(n,2)}return -1}emitNumericEntity(t,o){if(this.consumed<=o)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===hr.SEMI)this.consumed+=1;else if(this.decodeMode===sm.Strict)return 0;return this.emitCodePoint(mOe(this.result),this.consumed),this.errors&&(t!==hr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,o){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14;for(;o<t.length;){if(i===0&&r&Da.FLAG13){let s=(r&Da.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Da.JUMP_TABLE;if(t.charCodeAt(o)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();o++,this.excess++,this.runConsumed++;}for(;this.runConsumed<s;){if(o>=t.length)return -1;let l=this.runConsumed-1,c=n[this.treeIndex+1+(l>>1)],u=l%2===0?c&255:c>>8&255;if(t.charCodeAt(o)!==u)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();o++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(s>>1),r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14;}if(o>=t.length)break;let a=t.charCodeAt(o);if(a===hr.SEMI&&i!==0&&r&Da.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=CPt(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===sm.Attribute&&(i===0||RPt(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14,i!==0){if(a===hr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==sm.Strict&&!(r&Da.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}o++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:o}=this,n=(o[t]&Da.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,n,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,o,n){let{decodeTree:r}=this;return this.emitCodePoint(o===1?r[t]&~(Da.VALUE_LENGTH|Da.FLAG13):r[t+1],n),o===3&&this.emitCodePoint(r[t+2],n),n}end(){switch(this.state){case Ui.NamedEntity:return this.result!==0&&(this.decodeMode!==sm.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ui.NumericDecimal:return this.emitNumericEntity(0,2);case Ui.NumericHex:return this.emitNumericEntity(0,3);case Ui.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ui.EntityStart:return 0}}};function CPt(e,t,o,n){let r=(t&Da.BRANCH_LENGTH)>>7,i=t&Da.JUMP_TABLE;if(r===0)return i!==0&&n===i?o:-1;if(i){let c=n-i;return c<0||c>=r?-1:e[o+c]-1}let a=r+1>>1,s=0,l=r-1;for(;s<=l;){let c=s+l>>>1,u=c>>1,m=e[o+u]>>(c&1)*8&255;if(m<n)s=c+1;else if(m>n)l=c-1;else return e[o+a+c]}return -1}var Ie;(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/";})(Ie||(Ie={}));var jp;(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";})(jp||(jp={}));var Rs;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Rs||(Rs={}));var ae;(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";})(ae||(ae={}));var T;(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";})(T||(T={}));var IPt=new Map([[ae.A,T.A],[ae.ADDRESS,T.ADDRESS],[ae.ANNOTATION_XML,T.ANNOTATION_XML],[ae.APPLET,T.APPLET],[ae.AREA,T.AREA],[ae.ARTICLE,T.ARTICLE],[ae.ASIDE,T.ASIDE],[ae.B,T.B],[ae.BASE,T.BASE],[ae.BASEFONT,T.BASEFONT],[ae.BGSOUND,T.BGSOUND],[ae.BIG,T.BIG],[ae.BLOCKQUOTE,T.BLOCKQUOTE],[ae.BODY,T.BODY],[ae.BR,T.BR],[ae.BUTTON,T.BUTTON],[ae.CAPTION,T.CAPTION],[ae.CENTER,T.CENTER],[ae.CODE,T.CODE],[ae.COL,T.COL],[ae.COLGROUP,T.COLGROUP],[ae.DD,T.DD],[ae.DESC,T.DESC],[ae.DETAILS,T.DETAILS],[ae.DIALOG,T.DIALOG],[ae.DIR,T.DIR],[ae.DIV,T.DIV],[ae.DL,T.DL],[ae.DT,T.DT],[ae.EM,T.EM],[ae.EMBED,T.EMBED],[ae.FIELDSET,T.FIELDSET],[ae.FIGCAPTION,T.FIGCAPTION],[ae.FIGURE,T.FIGURE],[ae.FONT,T.FONT],[ae.FOOTER,T.FOOTER],[ae.FOREIGN_OBJECT,T.FOREIGN_OBJECT],[ae.FORM,T.FORM],[ae.FRAME,T.FRAME],[ae.FRAMESET,T.FRAMESET],[ae.H1,T.H1],[ae.H2,T.H2],[ae.H3,T.H3],[ae.H4,T.H4],[ae.H5,T.H5],[ae.H6,T.H6],[ae.HEAD,T.HEAD],[ae.HEADER,T.HEADER],[ae.HGROUP,T.HGROUP],[ae.HR,T.HR],[ae.HTML,T.HTML],[ae.I,T.I],[ae.IMG,T.IMG],[ae.IMAGE,T.IMAGE],[ae.INPUT,T.INPUT],[ae.IFRAME,T.IFRAME],[ae.KEYGEN,T.KEYGEN],[ae.LABEL,T.LABEL],[ae.LI,T.LI],[ae.LINK,T.LINK],[ae.LISTING,T.LISTING],[ae.MAIN,T.MAIN],[ae.MALIGNMARK,T.MALIGNMARK],[ae.MARQUEE,T.MARQUEE],[ae.MATH,T.MATH],[ae.MENU,T.MENU],[ae.META,T.META],[ae.MGLYPH,T.MGLYPH],[ae.MI,T.MI],[ae.MO,T.MO],[ae.MN,T.MN],[ae.MS,T.MS],[ae.MTEXT,T.MTEXT],[ae.NAV,T.NAV],[ae.NOBR,T.NOBR],[ae.NOFRAMES,T.NOFRAMES],[ae.NOEMBED,T.NOEMBED],[ae.NOSCRIPT,T.NOSCRIPT],[ae.OBJECT,T.OBJECT],[ae.OL,T.OL],[ae.OPTGROUP,T.OPTGROUP],[ae.OPTION,T.OPTION],[ae.P,T.P],[ae.PARAM,T.PARAM],[ae.PLAINTEXT,T.PLAINTEXT],[ae.PRE,T.PRE],[ae.RB,T.RB],[ae.RP,T.RP],[ae.RT,T.RT],[ae.RTC,T.RTC],[ae.RUBY,T.RUBY],[ae.S,T.S],[ae.SCRIPT,T.SCRIPT],[ae.SEARCH,T.SEARCH],[ae.SECTION,T.SECTION],[ae.SELECT,T.SELECT],[ae.SOURCE,T.SOURCE],[ae.SMALL,T.SMALL],[ae.SPAN,T.SPAN],[ae.STRIKE,T.STRIKE],[ae.STRONG,T.STRONG],[ae.STYLE,T.STYLE],[ae.SUB,T.SUB],[ae.SUMMARY,T.SUMMARY],[ae.SUP,T.SUP],[ae.TABLE,T.TABLE],[ae.TBODY,T.TBODY],[ae.TEMPLATE,T.TEMPLATE],[ae.TEXTAREA,T.TEXTAREA],[ae.TFOOT,T.TFOOT],[ae.TD,T.TD],[ae.TH,T.TH],[ae.THEAD,T.THEAD],[ae.TITLE,T.TITLE],[ae.TR,T.TR],[ae.TRACK,T.TRACK],[ae.TT,T.TT],[ae.U,T.U],[ae.UL,T.UL],[ae.SVG,T.SVG],[ae.VAR,T.VAR],[ae.WBR,T.WBR],[ae.XMP,T.XMP]]);function Tb(e){var t;return (t=IPt.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var Be=T,gOe={[Ie.HTML]:new Set([Be.ADDRESS,Be.APPLET,Be.AREA,Be.ARTICLE,Be.ASIDE,Be.BASE,Be.BASEFONT,Be.BGSOUND,Be.BLOCKQUOTE,Be.BODY,Be.BR,Be.BUTTON,Be.CAPTION,Be.CENTER,Be.COL,Be.COLGROUP,Be.DD,Be.DETAILS,Be.DIR,Be.DIV,Be.DL,Be.DT,Be.EMBED,Be.FIELDSET,Be.FIGCAPTION,Be.FIGURE,Be.FOOTER,Be.FORM,Be.FRAME,Be.FRAMESET,Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6,Be.HEAD,Be.HEADER,Be.HGROUP,Be.HR,Be.HTML,Be.IFRAME,Be.IMG,Be.INPUT,Be.LI,Be.LINK,Be.LISTING,Be.MAIN,Be.MARQUEE,Be.MENU,Be.META,Be.NAV,Be.NOEMBED,Be.NOFRAMES,Be.NOSCRIPT,Be.OBJECT,Be.OL,Be.P,Be.PARAM,Be.PLAINTEXT,Be.PRE,Be.SCRIPT,Be.SECTION,Be.SELECT,Be.SOURCE,Be.STYLE,Be.SUMMARY,Be.TABLE,Be.TBODY,Be.TD,Be.TEMPLATE,Be.TEXTAREA,Be.TFOOT,Be.TH,Be.THEAD,Be.TITLE,Be.TR,Be.TRACK,Be.UL,Be.WBR,Be.XMP]),[Ie.MATHML]:new Set([Be.MI,Be.MO,Be.MN,Be.MS,Be.MTEXT,Be.ANNOTATION_XML]),[Ie.SVG]:new Set([Be.TITLE,Be.FOREIGN_OBJECT,Be.DESC]),[Ie.XLINK]:new Set,[Ie.XML]:new Set,[Ie.XMLNS]:new Set},hx=new Set([Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6]);new Set([ae.STYLE,ae.SCRIPT,ae.XMP,ae.IFRAME,ae.NOEMBED,ae.NOFRAMES,ae.PLAINTEXT]);var j;(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";})(j||(j={}));var Fa={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function _Pt(e){return e>=F.DIGIT_0&&e<=F.DIGIT_9}function gx(e){return e>=F.LATIN_CAPITAL_A&&e<=F.LATIN_CAPITAL_Z}function PPt(e){return e>=F.LATIN_SMALL_A&&e<=F.LATIN_SMALL_Z}function ef(e){return PPt(e)||gx(e)}function fOe(e){return ef(e)||_Pt(e)}function wB(e){return e+32}function bOe(e){return e===F.SPACE||e===F.LINE_FEED||e===F.TABULATION||e===F.FORM_FEED}function yOe(e){return bOe(e)||e===F.SOLIDUS||e===F.GREATER_THAN_SIGN}function OPt(e){return e===F.NULL?he.nullCharacterReference:e>1114111?he.characterReferenceOutsideUnicodeRange:bB(e)?he.surrogateCharacterReference:TB(e)?he.noncharacterCharacterReference:SB(e)||e===F.CARRIAGE_RETURN?he.controlCharacterReference:null}var fx=class{constructor(t,o){this.options=t,this.handler=o,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=j.DATA,this.returnState=j.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new vB(o),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new EB(z3,(n,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(n);},o.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(he.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:n=>{this._err(he.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n);},validateNumericCharacterReference:n=>{let r=OPt(n);r&&this._err(r,1);}}:void 0);}_err(t,o=0){var n,r;(r=(n=this.handler).onParseError)===null||r===void 0||r.call(n,this.preprocessor.getError(t,o));}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,o,n){this.active=true,this.preprocessor.write(t,o),this._runParsingLoop(),this.paused||n?.();}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 o=0;o<t;o++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,o){return this.preprocessor.startsWith(t,o)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:Mo.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:Mo.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:Mo.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:Mo.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,o){this.currentCharacterToken={type:t,chars:o,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,o;let n=this.currentToken;if(AB(n,this.currentAttr.name)===null){if(n.attrs.push(this.currentAttr),n.location&&this.currentLocation){let r=(t=(o=n.location).attrs)!==null&&t!==void 0?t:o.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(he.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=Tb(t.tagName),t.type===Mo.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(he.endTagWithAttributes),t.selfClosing&&this._err(he.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 Mo.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Mo.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Mo.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:Mo.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,o){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=o;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,o);}_emitCodePoint(t){let o=bOe(t)?Mo.WHITESPACE_CHARACTER:t===F.NULL?Mo.NULL_CHARACTER:Mo.CHARACTER;this._appendCharToCurrentCharacterToken(o,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(Mo.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?sm.Attribute:sm.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case j.DATA:{this._stateData(t);break}case j.RCDATA:{this._stateRcdata(t);break}case j.RAWTEXT:{this._stateRawtext(t);break}case j.SCRIPT_DATA:{this._stateScriptData(t);break}case j.PLAINTEXT:{this._statePlaintext(t);break}case j.TAG_OPEN:{this._stateTagOpen(t);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case j.TAG_NAME:{this._stateTagName(t);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case j.BOGUS_COMMENT:{this._stateBogusComment(t);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case j.COMMENT_START:{this._stateCommentStart(t);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case j.COMMENT:{this._stateComment(t);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case j.COMMENT_END:{this._stateCommentEnd(t);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case j.DOCTYPE:{this._stateDoctype(t);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case j.CDATA_SECTION:{this._stateCdataSection(t);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitCodePoint(t);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case F.AMPERSAND:{this._startCharacterReference();break}case F.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(ef(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case F.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case F.QUESTION_MARK:{this._err(he.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(ef(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.GREATER_THAN_SIGN:{this._err(he.missingEndTagName),this.state=j.DATA;break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.tagName+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:o.tagName+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateRcdataLessThanSign(t){t===F.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){ef(t)?(this.state=j.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,false))return !this._ensureHibernation();this._createEndTagToken();let o=this.currentToken;switch(o.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case F.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case F.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===F.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){ef(t)?(this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case F.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case F.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){ef(t)?(this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===F.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:ef(t)?(this._emitChars("<"),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagOpen(t){ef(t)?(this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(ws.SCRIPT,false)&&yOe(this.preprocessor.peek(ws.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ws.SCRIPT.length;o++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===F.SOLIDUS?(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(ws.SCRIPT,false)&&yOe(this.preprocessor.peek(ws.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ws.SCRIPT.length;o++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._err(he.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:{this._err(he.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.name+=$n;break}default:this.currentAttr.name+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateAfterAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case F.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:case F.EQUALS_SIGN:case F.GRAVE_ACCENT:{this._err(he.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case F.GREATER_THAN_SIGN:{let o=this.currentToken;o.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this.emitCurrentComment(o),this._emitEOFToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.data+=$n;break}default:o.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(ws.DASH_DASH,true)?(this._createCommentToken(ws.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(ws.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(ws.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(ws.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(he.cdataInHtmlContent),this._createCommentToken(ws.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(he.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA;let o=this.currentToken;this.emitCurrentComment(o);break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateComment(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case F.LESS_THAN_SIGN:{o.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.data+=$n;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let o=this.currentToken;switch(t){case F.EXCLAMATION_MARK:{o.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case F.LESS_THAN_SIGN:{o.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==F.GREATER_THAN_SIGN&&t!==F.EOF&&this._err(he.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case F.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case F.HYPHEN_MINUS:{o.data+="-";break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{o.data+="--!",this.state=j.COMMENT_END_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(gx(t))this._createDoctypeToken(String.fromCharCode(wB(t))),this.state=j.DOCTYPE_NAME;else switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.NULL:{this._err(he.unexpectedNullCharacter),this._createDoctypeToken($n),this.state=j.DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeName),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=j.DOCTYPE_NAME;}}_stateDoctypeName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.name+=$n;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.name+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateAfterDoctypeName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(ws.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(ws.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(he.invalidCharacterSequenceAfterDoctypeName),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.publicId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let o=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.publicId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.systemId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let o=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.systemId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.NULL:{this._err(he.unexpectedNullCharacter);break}case F.EOF:{this.emitCurrentDoctype(o),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case F.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case F.EOF:{this._err(he.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===F.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA;break}case F.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.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(F.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&fOe(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){fOe(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===F.SEMICOLON&&this._err(he.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var AOe=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),SOe=new Set([...AOe,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),RB=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),kPt=new Set([...RB,T.OL,T.UL]),MPt=new Set([...RB,T.BUTTON]),TOe=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),vOe=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),LPt=new Set([T.TR,T.TEMPLATE,T.HTML]),NPt=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),DPt=new Set([T.TABLE,T.TEMPLATE,T.HTML]),FPt=new Set([T.TD,T.TH]),CB=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,o,n){this.treeAdapter=o,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=T.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===T.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===Ie.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,o){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=o,this.currentTagId=o,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,o,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,o){let n=this._indexOf(t);this.items[n]=o,n===this.stackTop&&(this.current=o);}insertAfter(t,o,n){let r=this._indexOf(t)+1;this.items.splice(r,0,o),this.tagIDs.splice(r,0,n),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 o=this.stackTop+1;do o=this.tagIDs.lastIndexOf(t,o-1);while(o>0&&this.treeAdapter.getNamespaceURI(this.items[o])!==Ie.HTML);this.shortenToLength(Math.max(o,0));}shortenToLength(t){for(;this.stackTop>=t;){let o=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(o,this.stackTop<t);}}popUntilElementPopped(t){let o=this._indexOf(t);this.shortenToLength(Math.max(o,0));}popUntilPopped(t,o){let n=this._indexOfTagNames(t,o);this.shortenToLength(Math.max(n,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(hx,Ie.HTML);}popUntilTableCellPopped(){this.popUntilPopped(FPt,Ie.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,o){for(let n=this.stackTop;n>=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===o)return n;return -1}clearBackTo(t,o){let n=this._indexOfTagNames(t,o);this.shortenToLength(n+1);}clearBackToTableContext(){this.clearBackTo(DPt,Ie.HTML);}clearBackToTableBodyContext(){this.clearBackTo(NPt,Ie.HTML);}clearBackToTableRowContext(){this.clearBackTo(LPt,Ie.HTML);}remove(t){let o=this._indexOf(t);o>=0&&(o===this.stackTop?this.pop():(this.items.splice(o,1),this.tagIDs.splice(o,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===T.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let o=this._indexOf(t)-1;return o>=0?this.items[o]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===T.HTML}hasInDynamicScope(t,o){for(let n=this.stackTop;n>=0;n--){let r=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case Ie.HTML:{if(r===t)return true;if(o.has(r))return false;break}case Ie.SVG:{if(vOe.has(r))return false;break}case Ie.MATHML:{if(TOe.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,RB)}hasInListItemScope(t){return this.hasInDynamicScope(t,kPt)}hasInButtonScope(t){return this.hasInDynamicScope(t,MPt)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let o=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Ie.HTML:{if(hx.has(o))return true;if(RB.has(o))return false;break}case Ie.SVG:{if(vOe.has(o))return false;break}case Ie.MATHML:{if(TOe.has(o))return false;break}}}return true}hasInTableScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Ie.HTML)switch(this.tagIDs[o]){case t:return true;case T.TABLE:case T.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===Ie.HTML)switch(this.tagIDs[t]){case T.TBODY:case T.THEAD:case T.TFOOT:return true;case T.TABLE:case T.HTML:return false}return true}hasInSelectScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Ie.HTML)switch(this.tagIDs[o]){case t:return true;case T.OPTION:case T.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&AOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&SOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&SOe.has(this.currentTagId);)this.pop();}};var Cu;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cu||(Cu={}));var EOe={type:Cu.Marker},IB=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,o){let n=[],r=o.length,i=this.treeAdapter.getTagName(t),a=this.treeAdapter.getNamespaceURI(t);for(let s=0;s<this.entries.length;s++){let l=this.entries[s];if(l.type===Cu.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===a){let u=this.treeAdapter.getAttrList(c);u.length===r&&n.push({idx:s,attrs:u});}}return n}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let o=this.treeAdapter.getAttrList(t),n=this._getNoahArkConditionCandidates(t,o);if(n.length<3)return;let r=new Map(o.map(a=>[a.name,a.value])),i=0;for(let a=0;a<n.length;a++){let s=n[a];s.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(s.idx,1));}}insertMarker(){this.entries.unshift(EOe);}pushElement(t,o){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cu.Element,element:t,token:o});}insertElementAfterBookmark(t,o){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:Cu.Element,element:t,token:o});}removeEntry(t){let o=this.entries.indexOf(t);o!==-1&&this.entries.splice(o,1);}clearToLastMarker(){let t=this.entries.indexOf(EOe);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let o=this.entries.find(n=>n.type===Cu.Marker||this.treeAdapter.getTagName(n.element)===t);return o&&o.type===Cu.Element?o:null}getElementEntry(t){return this.entries.find(o=>o.type===Cu.Element&&o.element===t)}};var Iu={createDocument(){return {nodeName:"#document",mode:Rs.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,o){return {nodeName:e,tagName:e,attrs:o,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,o){let n=e.childNodes.indexOf(o);e.childNodes.splice(n,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,o,n){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=o,r.systemId=n;else {let i={nodeName:"#documentType",name:t,publicId:o,systemId:n,parentNode:null};Iu.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 o=e.childNodes[e.childNodes.length-1];if(Iu.isTextNode(o)){o.value+=t;return}}Iu.appendChild(e,Iu.createTextNode(t));},insertTextBefore(e,t,o){let n=e.childNodes[e.childNodes.indexOf(o)-1];n&&Iu.isTextNode(n)?n.value+=t:Iu.insertBefore(e,Iu.createTextNode(t),o);},adoptAttributes(e,t){let o=new Set(e.attrs.map(n=>n.name));for(let n=0;n<t.length;n++)o.has(t[n].name)||e.attrs.push(t[n]);},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 ROe="html",BPt="about:legacy-compat",UPt="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",COe=["+//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//"],zPt=[...COe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],jPt=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),IOe=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],HPt=[...IOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function wOe(e,t){return t.some(o=>e.startsWith(o))}function xOe(e){return e.name===ROe&&e.publicId===null&&(e.systemId===null||e.systemId===BPt)}function _Oe(e){if(e.name!==ROe)return Rs.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===UPt)return Rs.QUIRKS;let{publicId:o}=e;if(o!==null){if(o=o.toLowerCase(),jPt.has(o))return Rs.QUIRKS;let n=t===null?zPt:COe;if(wOe(o,n))return Rs.QUIRKS;if(n=t===null?IOe:HPt,wOe(o,n))return Rs.LIMITED_QUIRKS}return Rs.NO_QUIRKS}var POe={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},GPt="definitionurl",VPt="definitionURL",WPt=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])),qPt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Ie.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Ie.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Ie.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Ie.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Ie.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Ie.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Ie.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Ie.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Ie.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Ie.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Ie.XMLNS}]]),KPt=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])),YPt=new Set([T.B,T.BIG,T.BLOCKQUOTE,T.BODY,T.BR,T.CENTER,T.CODE,T.DD,T.DIV,T.DL,T.DT,T.EM,T.EMBED,T.H1,T.H2,T.H3,T.H4,T.H5,T.H6,T.HEAD,T.HR,T.I,T.IMG,T.LI,T.LISTING,T.MENU,T.META,T.NOBR,T.OL,T.P,T.PRE,T.RUBY,T.S,T.SMALL,T.SPAN,T.STRONG,T.STRIKE,T.SUB,T.SUP,T.TABLE,T.TT,T.U,T.UL,T.VAR]);function OOe(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:n})=>n===jp.COLOR||n===jp.SIZE||n===jp.FACE)||YPt.has(t)}function H3(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===GPt){e.attrs[t].name=VPt;break}}function $3(e){for(let t=0;t<e.attrs.length;t++){let o=WPt.get(e.attrs[t].name);o!=null&&(e.attrs[t].name=o);}}function xB(e){for(let t=0;t<e.attrs.length;t++){let o=qPt.get(e.attrs[t].name);o&&(e.attrs[t].prefix=o.prefix,e.attrs[t].name=o.name,e.attrs[t].namespace=o.namespace);}}function kOe(e){let t=KPt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Tb(e.tagName));}function JPt(e,t){return t===Ie.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function XPt(e,t,o){if(t===Ie.MATHML&&e===T.ANNOTATION_XML){for(let n=0;n<o.length;n++)if(o[n].name===jp.ENCODING){let r=o[n].value.toLowerCase();return r===POe.TEXT_HTML||r===POe.APPLICATION_XML}}return t===Ie.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function MOe(e,t,o,n){return (!n||n===Ie.HTML)&&XPt(e,t,o)||(!n||n===Ie.MATHML)&&JPt(e,t)}var QPt="hidden",ZPt=8,eOt=3,K;(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";})(K||(K={}));var tOt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},BOe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),NOe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Iu,onParseError:null},wx=class{constructor(t,o,n=null,r=null){this.fragmentContext=n,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=K.INITIAL,this.originalInsertionMode=K.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={...NOe,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=o??this.treeAdapter.createDocument(),this.tokenizer=new fx(this.options,this),this.activeFormattingElements=new IB(this.treeAdapter),this.fragmentContextID=n?Tb(this.treeAdapter.getTagName(n)):T.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new CB(this.document,this.treeAdapter,this);}static parse(t,o){let n=new this(o);return n.tokenizer.write(t,true),n.document}static getFragmentParser(t,o){let n={...NOe,...o};t??(t=n.treeAdapter.createElement(ae.TEMPLATE,Ie.HTML,[]));let r=n.treeAdapter.createElement("documentmock",Ie.HTML,[]),i=new this(n,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(K.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),o=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,o),o}_err(t,o,n){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:tOt,a={code:o,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:n?i.startLine:i.endLine,endCol:n?i.startCol:i.endCol,endOffset:n?i.startOffset:i.endOffset};this.onParseError(a);}onItemPush(t,o,n){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),n&&this.openElements.stackTop>0&&this._setContextModes(t,o);}onItemPop(t,o){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(n=this.treeAdapter).onItemPop)===null||r===void 0||r.call(n,t,this.openElements.current),o){let i,a;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,a=this.fragmentContextID):{current:i,currentTagId:a}=this.openElements,this._setContextModes(i,a);}}_setContextModes(t,o){let n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===Ie.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&o!==void 0&&!this._isIntegrationPoint(o,t);}_switchToTextParsing(t,o){this._insertElement(t,Ie.HTML),this.tokenizer.state=o,this.originalInsertionMode=this.insertionMode,this.insertionMode=K.TEXT;}switchToPlaintextParsing(){this.insertionMode=K.TEXT,this.originalInsertionMode=K.IN_BODY,this.tokenizer.state=Fa.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)===ae.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==Ie.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Fa.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Fa.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Fa.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Fa.PLAINTEXT;break}}}_setDocumentType(t){let o=t.name||"",n=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,o,n,r),t.location){let a=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));a&&this.treeAdapter.setNodeSourceCodeLocation(a,t.location);}}_attachElementToTree(t,o){if(this.options.sourceCodeLocationInfo){let n=o&&{...o,startTag:o};this.treeAdapter.setNodeSourceCodeLocation(t,n);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t);}}_appendElement(t,o){let n=this.treeAdapter.createElement(t.tagName,o,t.attrs);this._attachElementToTree(n,t.location);}_insertElement(t,o){let n=this.treeAdapter.createElement(t.tagName,o,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID);}_insertFakeElement(t,o){let n=this.treeAdapter.createElement(t,Ie.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,o);}_insertTemplate(t){let o=this.treeAdapter.createElement(t.tagName,Ie.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(o,n),this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(ae.HTML,Ie.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,T.HTML);}_appendCommentNode(t,o){let n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(o,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location);}_insertCharacters(t){let o,n;if(this._shouldFosterParentOnInsertion()?({parent:o,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(o,t.chars,n):this.treeAdapter.insertText(o,t.chars)):(o=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(o,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(o),i=n?r.lastIndexOf(n):r.length,a=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(a)){let{endLine:l,endCol:c,endOffset:u}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(a,{endLine:l,endCol:c,endOffset:u});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(a,t.location);}_adoptNodes(t,o){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(o,n);}_setEndLocation(t,o){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&o.location){let n=o.location,r=this.treeAdapter.getTagName(t),i=o.type===Mo.END_TAG&&r===o.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let o,n;return this.openElements.stackTop===0&&this.fragmentContext?(o=this.fragmentContext,n=this.fragmentContextID):{current:o,currentTagId:n}=this.openElements,t.tagID===T.SVG&&this.treeAdapter.getTagName(o)===ae.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(o)===Ie.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,o,Ie.HTML)}_processToken(t){switch(t.type){case Mo.CHARACTER:{this.onCharacter(t);break}case Mo.NULL_CHARACTER:{this.onNullCharacter(t);break}case Mo.COMMENT:{this.onComment(t);break}case Mo.DOCTYPE:{this.onDoctype(t);break}case Mo.START_TAG:{this._processStartTag(t);break}case Mo.END_TAG:{this.onEndTag(t);break}case Mo.EOF:{this.onEof(t);break}case Mo.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,o,n){let r=this.treeAdapter.getNamespaceURI(o),i=this.treeAdapter.getAttrList(o);return MOe(t,r,i,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let o=this.activeFormattingElements.entries.findIndex(r=>r.type===Cu.Marker||this.openElements.contains(r.element)),n=o===-1?t-1:o-1;for(let r=n;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=K.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(T.P),this.openElements.popUntilTagNamePopped(T.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case T.TR:{this.insertionMode=K.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=K.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=K.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=K.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=K.IN_TABLE;return}case T.BODY:{this.insertionMode=K.IN_BODY;return}case T.FRAMESET:{this.insertionMode=K.IN_FRAMESET;return}case T.SELECT:{this._resetInsertionModeForSelect(t);return}case T.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case T.HTML:{this.insertionMode=this.headElement?K.AFTER_HEAD:K.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=K.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=K.IN_HEAD;return}break}}this.insertionMode=K.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let o=t-1;o>0;o--){let n=this.openElements.tagIDs[o];if(n===T.TEMPLATE)break;if(n===T.TABLE){this.insertionMode=K.IN_SELECT_IN_TABLE;return}}this.insertionMode=K.IN_SELECT;}_isElementCausesFosterParenting(t){return BOe.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 o=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case T.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(o)===Ie.HTML)return {parent:this.treeAdapter.getTemplateContent(o),beforeElement:null};break}case T.TABLE:{let n=this.treeAdapter.getParentNode(o);return n?{parent:n,beforeElement:o}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let o=this._findFosterParentingLocation();o.beforeElement?this.treeAdapter.insertBefore(o.parent,t,o.beforeElement):this.treeAdapter.appendChild(o.parent,t);}_isSpecialElement(t,o){let n=this.treeAdapter.getNamespaceURI(t);return gOe[n].has(o)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){Okt(this,t);return}switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:{zOe(this,t);break}case K.TEXT:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_TABLE_TEXT:{WOe(this,t);break}case K.IN_COLUMN_GROUP:{PB(this,t);break}case K.AFTER_BODY:{OB(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){Pkt(this,t);return}switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.TEXT:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_COLUMN_GROUP:{PB(this,t);break}case K.AFTER_BODY:{OB(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){V3(this,t);return}switch(this.insertionMode){case K.INITIAL:case K.BEFORE_HTML:case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_TEMPLATE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{V3(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.AFTER_BODY:{lOt(this,t);break}case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{cOt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case K.INITIAL:{uOt(this,t);break}case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:{this._err(t,he.misplacedDoctype);break}case K.IN_TABLE_TEXT:{bx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,he.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?kkt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{dOt(this,t);break}case K.BEFORE_HEAD:{pOt(this,t);break}case K.IN_HEAD:{xu(this,t);break}case K.IN_HEAD_NO_SCRIPT:{fOt(this,t);break}case K.AFTER_HEAD:{bOt(this,t);break}case K.IN_BODY:{Ba(this,t);break}case K.IN_TABLE:{GA(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_CAPTION:{hkt(this,t);break}case K.IN_COLUMN_GROUP:{Y3(this,t);break}case K.IN_TABLE_BODY:{LB(this,t);break}case K.IN_ROW:{NB(this,t);break}case K.IN_CELL:{ykt(this,t);break}case K.IN_SELECT:{YOe(this,t);break}case K.IN_SELECT_IN_TABLE:{Skt(this,t);break}case K.IN_TEMPLATE:{vkt(this,t);break}case K.AFTER_BODY:{Ekt(this,t);break}case K.IN_FRAMESET:{wkt(this,t);break}case K.AFTER_FRAMESET:{Ckt(this,t);break}case K.AFTER_AFTER_BODY:{xkt(this,t);break}case K.AFTER_AFTER_FRAMESET:{_kt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?Mkt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{mOt(this,t);break}case K.BEFORE_HEAD:{hOt(this,t);break}case K.IN_HEAD:{gOt(this,t);break}case K.IN_HEAD_NO_SCRIPT:{yOt(this,t);break}case K.AFTER_HEAD:{SOt(this,t);break}case K.IN_BODY:{MB(this,t);break}case K.TEXT:{rkt(this,t);break}case K.IN_TABLE:{Rx(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_CAPTION:{gkt(this,t);break}case K.IN_COLUMN_GROUP:{fkt(this,t);break}case K.IN_TABLE_BODY:{W3(this,t);break}case K.IN_ROW:{KOe(this,t);break}case K.IN_CELL:{bkt(this,t);break}case K.IN_SELECT:{JOe(this,t);break}case K.IN_SELECT_IN_TABLE:{Tkt(this,t);break}case K.IN_TEMPLATE:{Akt(this,t);break}case K.AFTER_BODY:{QOe(this,t);break}case K.IN_FRAMESET:{Rkt(this,t);break}case K.AFTER_FRAMESET:{Ikt(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onEof(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{GOe(this,t);break}case K.TEXT:{ikt(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_TEMPLATE:{XOe(this,t);break}case K.AFTER_BODY:case K.IN_FRAMESET:case K.AFTER_FRAMESET:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{K3(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===F.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 K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.TEXT:case K.IN_COLUMN_GROUP:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{this._insertCharacters(t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:case K.AFTER_BODY:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{UOe(this,t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_TABLE_TEXT:{VOe(this,t);break}}}};function oOt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return o?e.openElements.contains(o.element)?e.openElements.hasInScope(t.tagID)||(o=null):(e.activeFormattingElements.removeEntry(o),o=null):$Oe(e,t),o}function nOt(e,t){let o=null,n=e.openElements.stackTop;for(;n>=0;n--){let r=e.openElements.items[n];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[n])&&(o=r);}return o||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),o}function rOt(e,t,o){let n=t,r=e.openElements.getCommonAncestor(t);for(let i=0,a=r;a!==o;i++,a=r){r=e.openElements.getCommonAncestor(a);let s=e.activeFormattingElements.getElementEntry(a),l=s&&i>=eOt;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(a)):(a=iOt(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(a,n),n=a);}return n}function iOt(e,t){let o=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,o,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function aOt(e,t,o){let n=e.treeAdapter.getTagName(t),r=Tb(n);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(o);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Ie.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,o);}}function sOt(e,t,o){let n=e.treeAdapter.getNamespaceURI(o.element),{token:r}=o,i=e.treeAdapter.createElement(r.tagName,n,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(o),e.openElements.remove(o.element),e.openElements.insertAfter(t,i,r.tagID);}function q3(e,t){for(let o=0;o<ZPt;o++){let n=oOt(e,t);if(!n)break;let r=nOt(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;let i=rOt(e,r,n.element),a=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),a&&aOt(e,a,i),sOt(e,r,n);}}function V3(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function lOt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function cOt(e,t){e._appendCommentNode(t,e.document);}function K3(e,t){if(e.stopped=true,t.location){let o=e.fragmentContext?0:2;for(let n=e.openElements.stackTop;n>=o;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],a=e.treeAdapter.getNodeSourceCodeLocation(i);a&&!a.endTag&&e._setEndLocation(i,t);}}}}function uOt(e,t){e._setDocumentType(t);let o=t.forceQuirks?Rs.QUIRKS:_Oe(t);xOe(t)||e._err(t,he.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,o),e.insertionMode=K.BEFORE_HTML;}function yx(e,t){e._err(t,he.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Rs.QUIRKS),e.insertionMode=K.BEFORE_HTML,e._processToken(t);}function dOt(e,t){t.tagID===T.HTML?(e._insertElement(t,Ie.HTML),e.insertionMode=K.BEFORE_HEAD):Sx(e,t);}function mOt(e,t){let o=t.tagID;(o===T.HTML||o===T.HEAD||o===T.BODY||o===T.BR)&&Sx(e,t);}function Sx(e,t){e._insertFakeRootElement(),e.insertionMode=K.BEFORE_HEAD,e._processToken(t);}function pOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.HEAD:{e._insertElement(t,Ie.HTML),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD;break}default:Tx(e,t);}}function hOt(e,t){let o=t.tagID;o===T.HEAD||o===T.BODY||o===T.HTML||o===T.BR?Tx(e,t):e._err(t,he.endTagWithoutMatchingOpenElement);}function Tx(e,t){e._insertFakeElement(ae.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD,e._processToken(t);}function xu(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Fa.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Fa.RAWTEXT):(e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Fa.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Fa.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=K.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(K.IN_TEMPLATE);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:vx(e,t);}}function gOt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=K.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{vx(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function vb(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,he.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,he.endTagWithoutMatchingOpenElement);}function vx(e,t){e.openElements.pop(),e.insertionMode=K.AFTER_HEAD,e._processToken(t);}function fOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{xu(e,t);break}case T.NOSCRIPT:{e._err(t,he.nestedNoscriptInHead);break}default:Ax(e,t);}}function yOt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=K.IN_HEAD;break}case T.BR:{Ax(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Ax(e,t){let o=t.type===Mo.EOF?he.openElementsLeftAfterEof:he.disallowedContentInNoscriptInHead;e._err(t,o),e.openElements.pop(),e.insertionMode=K.IN_HEAD,e._processToken(t);}function bOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BODY:{e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET;break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{e._err(t,he.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),xu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Ex(e,t);}}function SOt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Ex(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Ex(e,t){e._insertFakeElement(ae.BODY,T.BODY),e.insertionMode=K.IN_BODY,kB(e,t);}function kB(e,t){switch(t.type){case Mo.CHARACTER:{zOe(e,t);break}case Mo.WHITESPACE_CHARACTER:{UOe(e,t);break}case Mo.COMMENT:{V3(e,t);break}case Mo.START_TAG:{Ba(e,t);break}case Mo.END_TAG:{MB(e,t);break}case Mo.EOF:{GOe(e,t);break}}}function UOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function zOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function TOt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function vOt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(o,t.attrs));}function AOt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&o&&(e.treeAdapter.detachNode(o),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET);}function EOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function wOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&hx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Ie.HTML);}function ROt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function COt(e,t){let o=e.openElements.tmplCount>0;(!e.formElement||o)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),o||(e.formElement=e.openElements.current));}function IOt(e,t){e.framesetOk=false;let o=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){let r=e.openElements.tagIDs[n];if(o===T.LI&&r===T.LI||(o===T.DD||o===T.DT)&&(r===T.DD||r===T.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==T.ADDRESS&&r!==T.DIV&&r!==T.P&&e._isSpecialElement(e.openElements.items[n],r))break}e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function xOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.tokenizer.state=Fa.PLAINTEXT;}function _Ot(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false;}function POt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(ae.A);o&&(q3(e,t),e.openElements.remove(o.element),e.activeFormattingElements.removeEntry(o)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function OOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function kOt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(q3(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function MOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function LOt(e,t){e.treeAdapter.getDocumentMode(e.document)!==Rs.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_TABLE;}function jOe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function HOe(e){let t=AB(e,jp.TYPE);return t!=null&&t.toLowerCase()===QPt}function NOt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),HOe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function DOt(e,t){e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;}function FOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function BOt(e,t){t.tagName=ae.IMG,t.tagID=T.IMG,jOe(e,t);}function UOt(e,t){e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.tokenizer.state=Fa.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=K.TEXT;}function zOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Fa.RAWTEXT);}function jOt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Fa.RAWTEXT);}function DOe(e,t){e._switchToTextParsing(t,Fa.RAWTEXT);}function HOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===K.IN_TABLE||e.insertionMode===K.IN_CAPTION||e.insertionMode===K.IN_TABLE_BODY||e.insertionMode===K.IN_ROW||e.insertionMode===K.IN_CELL?K.IN_SELECT_IN_TABLE:K.IN_SELECT;}function $Ot(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function GOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Ie.HTML);}function VOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Ie.HTML);}function WOt(e,t){e._reconstructActiveFormattingElements(),H3(t),xB(t),t.selfClosing?e._appendElement(t,Ie.MATHML):e._insertElement(t,Ie.MATHML),t.ackSelfClosing=true;}function qOt(e,t){e._reconstructActiveFormattingElements(),$3(t),xB(t),t.selfClosing?e._appendElement(t,Ie.SVG):e._insertElement(t,Ie.SVG),t.ackSelfClosing=true;}function FOe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function Ba(e,t){switch(t.tagID){case T.I:case T.S:case T.B:case T.U:case T.EM:case T.TT:case T.BIG:case T.CODE:case T.FONT:case T.SMALL:case T.STRIKE:case T.STRONG:{OOt(e,t);break}case T.A:{POt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{wOt(e,t);break}case T.P:case T.DL:case T.OL:case T.UL:case T.DIV:case T.DIR:case T.NAV:case T.MAIN:case T.MENU:case T.ASIDE:case T.CENTER:case T.FIGURE:case T.FOOTER:case T.HEADER:case T.HGROUP:case T.DIALOG:case T.DETAILS:case T.ADDRESS:case T.ARTICLE:case T.SEARCH:case T.SECTION:case T.SUMMARY:case T.FIELDSET:case T.BLOCKQUOTE:case T.FIGCAPTION:{EOt(e,t);break}case T.LI:case T.DD:case T.DT:{IOt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{jOe(e,t);break}case T.HR:{FOt(e,t);break}case T.RB:case T.RTC:{GOt(e,t);break}case T.RT:case T.RP:{VOt(e,t);break}case T.PRE:case T.LISTING:{ROt(e,t);break}case T.XMP:{zOt(e,t);break}case T.SVG:{qOt(e,t);break}case T.HTML:{TOt(e,t);break}case T.BASE:case T.LINK:case T.META:case T.STYLE:case T.TITLE:case T.SCRIPT:case T.BGSOUND:case T.BASEFONT:case T.TEMPLATE:{xu(e,t);break}case T.BODY:{vOt(e,t);break}case T.FORM:{COt(e,t);break}case T.NOBR:{kOt(e,t);break}case T.MATH:{WOt(e,t);break}case T.TABLE:{LOt(e,t);break}case T.INPUT:{NOt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{DOt(e,t);break}case T.IMAGE:{BOt(e,t);break}case T.BUTTON:{_Ot(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{MOt(e,t);break}case T.IFRAME:{jOt(e,t);break}case T.SELECT:{HOt(e,t);break}case T.OPTION:case T.OPTGROUP:{$Ot(e,t);break}case T.NOEMBED:case T.NOFRAMES:{DOe(e,t);break}case T.FRAMESET:{AOt(e,t);break}case T.TEXTAREA:{UOt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?DOe(e,t):FOe(e,t);break}case T.PLAINTEXT:{xOt(e,t);break}case T.COL:case T.TH:case T.TD:case T.TR:case T.HEAD:case T.FRAME:case T.TBODY:case T.TFOOT:case T.THEAD:case T.CAPTION:case T.COLGROUP:break;default:FOe(e,t);}}function KOt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,e.options.sourceCodeLocationInfo)){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e._setEndLocation(o,t);}}function YOt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,QOe(e,t));}function JOt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o));}function XOt(e){let t=e.openElements.tmplCount>0,{formElement:o}=e;t||(e.formElement=null),(o||t)&&e.openElements.hasInScope(T.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(T.FORM):o&&e.openElements.remove(o));}function QOt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(ae.P,T.P),e._closePElement();}function ZOt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function ekt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.popUntilTagNamePopped(o));}function tkt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function okt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker());}function nkt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(ae.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function $Oe(e,t){let o=t.tagName,n=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],a=e.openElements.tagIDs[r];if(n===a&&(n!==T.UNKNOWN||e.treeAdapter.getTagName(i)===o)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,a))break}}function MB(e,t){switch(t.tagID){case T.A:case T.B:case T.I:case T.S:case T.U:case T.EM:case T.TT:case T.BIG:case T.CODE:case T.FONT:case T.NOBR:case T.SMALL:case T.STRIKE:case T.STRONG:{q3(e,t);break}case T.P:{QOt(e);break}case T.DL:case T.UL:case T.OL:case T.DIR:case T.DIV:case T.NAV:case T.PRE:case T.MAIN:case T.MENU:case T.ASIDE:case T.BUTTON:case T.CENTER:case T.FIGURE:case T.FOOTER:case T.HEADER:case T.HGROUP:case T.DIALOG:case T.ADDRESS:case T.ARTICLE:case T.DETAILS:case T.SEARCH:case T.SECTION:case T.SUMMARY:case T.LISTING:case T.FIELDSET:case T.BLOCKQUOTE:case T.FIGCAPTION:{JOt(e,t);break}case T.LI:{ZOt(e);break}case T.DD:case T.DT:{ekt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{tkt(e);break}case T.BR:{nkt(e);break}case T.BODY:{KOt(e,t);break}case T.HTML:{YOt(e,t);break}case T.FORM:{XOt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{okt(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:$Oe(e,t);}}function GOe(e,t){e.tmplInsertionModeStack.length>0?XOe(e,t):K3(e,t);}function rkt(e,t){var o;t.tagID===T.SCRIPT&&((o=e.scriptHandler)===null||o===void 0||o.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function ikt(e,t){e._err(t,he.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function G3(e,t){if(e.openElements.currentTagId!==void 0&&BOe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=K.IN_TABLE_TEXT,t.type){case Mo.CHARACTER:{WOe(e,t);break}case Mo.WHITESPACE_CHARACTER:{VOe(e,t);break}}else Cx(e,t);}function akt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CAPTION;}function skt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_COLUMN_GROUP;}function lkt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(ae.COLGROUP,T.COLGROUP),e.insertionMode=K.IN_COLUMN_GROUP,Y3(e,t);}function ckt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_TABLE_BODY;}function ukt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(ae.TBODY,T.TBODY),e.insertionMode=K.IN_TABLE_BODY,LB(e,t);}function dkt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function mkt(e,t){HOe(t)?e._appendElement(t,Ie.HTML):Cx(e,t),t.ackSelfClosing=true;}function pkt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Ie.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function GA(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{ukt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}case T.COL:{lkt(e,t);break}case T.FORM:{pkt(e,t);break}case T.TABLE:{dkt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{ckt(e,t);break}case T.INPUT:{mkt(e,t);break}case T.CAPTION:{akt(e,t);break}case T.COLGROUP:{skt(e,t);break}default:Cx(e,t);}}function Rx(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{vb(e,t);break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TBODY:case T.TD:case T.TFOOT:case T.TH:case T.THEAD:case T.TR:break;default:Cx(e,t);}}function Cx(e,t){let o=e.fosterParentingEnabled;e.fosterParentingEnabled=true,kB(e,t),e.fosterParentingEnabled=o;}function VOe(e,t){e.pendingCharacterTokens.push(t);}function WOe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function bx(e,t){let o=0;if(e.hasNonWhitespacePendingCharacterToken)for(;o<e.pendingCharacterTokens.length;o++)Cx(e,e.pendingCharacterTokens[o]);else for(;o<e.pendingCharacterTokens.length;o++)e._insertCharacters(e.pendingCharacterTokens[o]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var qOe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function hkt(e,t){let o=t.tagID;qOe.has(o)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,GA(e,t)):Ba(e,t);}function gkt(e,t){let o=t.tagID;switch(o){case T.CAPTION:case T.TABLE:{e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,o===T.TABLE&&Rx(e,t));break}case T.BODY:case T.COL:case T.COLGROUP:case T.HTML:case T.TBODY:case T.TD:case T.TFOOT:case T.TH:case T.THEAD:case T.TR:break;default:MB(e,t);}}function Y3(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.COL:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{xu(e,t);break}default:PB(e,t);}}function fkt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TEMPLATE:{vb(e,t);break}case T.COL:break;default:PB(e,t);}}function PB(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE,e._processToken(t));}function LB(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(ae.TR,T.TR),e.insertionMode=K.IN_ROW,NB(e,t);break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,GA(e,t));break}default:GA(e,t);}}function W3(e,t){let o=t.tagID;switch(t.tagID){case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasInTableScope(o)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,Rx(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TD:case T.TH:case T.TR:break;default:Rx(e,t);}}function NB(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CELL,e.activeFormattingElements.insertMarker();break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,LB(e,t));break}default:GA(e,t);}}function KOe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,W3(e,t));break}case T.TBODY:case T.TFOOT:case T.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(T.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,W3(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TD:case T.TH:break;default:Rx(e,t);}}function ykt(e,t){let o=t.tagID;qOe.has(o)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),NB(e,t)):Ba(e,t);}function bkt(e,t){let o=t.tagID;switch(o){case T.TD:case T.TH:{e.openElements.hasInTableScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(o)&&(e._closeTableCell(),KOe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:MB(e,t);}}function YOe(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.INPUT:case T.KEYGEN:case T.TEXTAREA:case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),t.tagID!==T.SELECT&&e._processStartTag(t));break}case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}}}function JOe(e,t){switch(t.tagID){case T.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===T.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===T.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop();break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop();break}case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode());break}case T.TEMPLATE:{vb(e,t);break}}}function Skt(e,t){let o=t.tagID;o===T.CAPTION||o===T.TABLE||o===T.TBODY||o===T.TFOOT||o===T.THEAD||o===T.TR||o===T.TD||o===T.TH?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processStartTag(t)):YOe(e,t);}function Tkt(e,t){let o=t.tagID;o===T.CAPTION||o===T.TABLE||o===T.TBODY||o===T.TFOOT||o===T.THEAD||o===T.TR||o===T.TD||o===T.TH?e.openElements.hasInTableScope(o)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e.onEndTag(t)):JOe(e,t);}function vkt(e,t){switch(t.tagID){case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{xu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=K.IN_TABLE,e.insertionMode=K.IN_TABLE,GA(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=K.IN_COLUMN_GROUP,e.insertionMode=K.IN_COLUMN_GROUP,Y3(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=K.IN_TABLE_BODY,e.insertionMode=K.IN_TABLE_BODY,LB(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=K.IN_ROW,e.insertionMode=K.IN_ROW,NB(e,t);break}default:e.tmplInsertionModeStack[0]=K.IN_BODY,e.insertionMode=K.IN_BODY,Ba(e,t);}}function Akt(e,t){t.tagID===T.TEMPLATE&&vb(e,t);}function XOe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):K3(e,t);}function Ekt(e,t){t.tagID===T.HTML?Ba(e,t):OB(e,t);}function QOe(e,t){var o;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=K.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===T.HTML){e._setEndLocation(e.openElements.items[0],t);let n=e.openElements.items[1];n&&!(!((o=e.treeAdapter.getNodeSourceCodeLocation(n))===null||o===void 0)&&o.endTag)&&e._setEndLocation(n,t);}}else OB(e,t);}function OB(e,t){e.insertionMode=K.IN_BODY,kB(e,t);}function wkt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.FRAMESET:{e._insertElement(t,Ie.HTML);break}case T.FRAME:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{xu(e,t);break}}}function Rkt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=K.AFTER_FRAMESET));}function Ckt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function Ikt(e,t){t.tagID===T.HTML&&(e.insertionMode=K.AFTER_AFTER_FRAMESET);}function xkt(e,t){t.tagID===T.HTML?Ba(e,t):_B(e,t);}function _B(e,t){e.insertionMode=K.IN_BODY,kB(e,t);}function _kt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function Pkt(e,t){t.chars=$n,e._insertCharacters(t);}function Okt(e,t){e._insertCharacters(t),e.framesetOk=false;}function ZOe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Ie.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function kkt(e,t){if(OOe(t))ZOe(e),e._startTagOutsideForeignContent(t);else {let o=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(o);n===Ie.MATHML?H3(t):n===Ie.SVG&&(kOe(t),$3(t)),xB(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=true;}}function Mkt(e,t){if(t.tagID===T.P||t.tagID===T.BR){ZOe(e),e._endTagOutsideForeignContent(t);return}for(let o=e.openElements.stackTop;o>0;o--){let n=e.openElements.items[o];if(e.treeAdapter.getNamespaceURI(n)===Ie.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(n);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(o);break}}}new Set([ae.AREA,ae.BASE,ae.BASEFONT,ae.BGSOUND,ae.BR,ae.COL,ae.EMBED,ae.FRAME,ae.HR,ae.IMG,ae.INPUT,ae.KEYGEN,ae.LINK,ae.META,ae.PARAM,ae.SOURCE,ae.TRACK,ae.WBR]);function eke(e,t,o){typeof e=="string"&&(o=t,t=e,e=null);let n=wx.getFragmentParser(e,o);return n.tokenizer.write(t,true),n.getFragment()}var Lkt=5e3,WA=1024;function VA(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function DB(e){return e.nodeName==="#text"}function FB(e,t){let o=eke(e),n={nodesLeft:Lkt};for(let a of o.childNodes)if(VA(a)&&a.tagName.toLowerCase()==="body"){let s=t(a,n);if(s!==void 0)return s}let r=[];for(let a of o.childNodes){if(n.nodesLeft<=0)break;if(VA(a)){let s=t(a,n);s!==void 0&&r.push(s);}}let i={tag:"body"};return r.length>0&&(i.children=r),i}var Nkt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),Dkt=new Set(["input","textarea","select","button","a","img","video","audio","canvas","svg","label","h1","h2","h3","h4","ol","ul","li","table","tr","td","th","form","nav","main","footer","section","article","dialog","option"]);function Fkt(e,t){return Dkt.has(t)?true:e.attrs.some(({name:o})=>U3.has(o.toLowerCase()))}function tke(e,t){if(t.nodesLeft<=0)return;let o=e.tagName.toLowerCase();if(Nkt.has(o))return;let n,r;for(let{name:c,value:u}of e.attrs){let d=c.toLowerCase();if(d==="role"){r=u;continue}n===void 0&&(n={}),n[d]=u;}let i,a=[];for(let c of e.childNodes){if(t.nodesLeft<=0)break;if(DB(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>WA?u.slice(0,WA):u;i=i===void 0?d:`${i} ${d}`;}}else if(VA(c)){let u=tke(c,t);u!==void 0&&a.push(u);}}let s=o==="body"||Fkt(e,o);if(!s&&a.length===0&&i===void 0)return;if(!s&&a.length===1&&i===void 0)return a[0];t.nodesLeft-=1;let l={tag:o};return r!==void 0&&(l.role=r),n!==void 0&&(l.attributes=n),i!==void 0&&(l.text=i),a.length>0&&(l.children=a),l}function J3(e){return FB(e,tke)}function oke(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let o=e.tagName.toLowerCase(),n,r;for(let{name:l,value:c}of e.attrs){let u=l.toLowerCase();if(u==="role"){r=c;continue}n===void 0&&(n={}),n[u]=c;}let i,a=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(DB(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>WA?c.slice(0,WA):c;i=i===void 0?u:`${i} ${u}`;}}else if(VA(l)){let c=oke(l,t);c!==void 0&&a.push(c);}}let s={tag:o};return r!==void 0&&(s.role=r),n!==void 0&&(s.attributes=n),i!==void 0&&(s.text=i),a.length>0&&(s.children=a),s}function X3(e){return FB(e,oke)}var Bkt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),Ab=class{constructor(t,o,n,r,i,a){this.orgId=t;this.testId=o;this.testName=n;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=a;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.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,o]of Object.entries(this.stepFrequenciesByType))uo.increment("test_step_execution",o,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,o){let{logger:n,step:r,parentStepIdChain:i}=t;this.recordStepStat(r);let a={step:r,status:"RUNNING",startedAt:new Date},s=[...o];this.currentResults=s;let l=new Q3(this.orgId,this.testId,this.testName,a,this.diskStorage,n,c=>{this.flushResults([...s,c]);},i??[],this.appGraphSink);return this.children.push(l),l}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(o=>o.finishInternal({status:IX(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function Ukt(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 Xe(e)}}function BB(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var Q3=class{constructor(t,o,n,r,i,a,s,l,c){this.orgId=t;this.testId=o;this.testName=n;this.metadata=r;this.diskStorage=i;this.logger=a;this.parentFlushResults=s;this.parentStepIdChain=l;this.appGraphSink=c;this.interactionTracer=new Vd({storeTraceAsset:u=>this.storeTraceAsset(u)}),Gd.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;pendingAssetWrites=Promise.resolve();async attachBeforeScreenshot(t){let{snapshotId:o,screenshot:n}=t;if(n){this.metadata.beforeSnapshotId=o;try{await this.diskStorage.storeFileAsync({name:`${rs}/${o}.jpeg`,contents:n});}catch(r){this.logger.warn({err:r,snapshotId:o},"Failed to store before-step screenshot");}}}async attachAfterScreenshot(t){let{snapshotId:o,screenshot:n}=t;if(n){this.metadata.afterSnapshotId=o;try{await this.diskStorage.storeFileAsync({name:`${rs}/${o}.jpeg`,contents:n});}catch(r){this.logger.warn({err:r,snapshotId:o},"Failed to store after-step screenshot");}}}attachBeforeHtmlSnapshot(t){let{snapshotId:o,html:n}=t;this.metadata.beforeSnapshotId=o,this.queueAssetWrite(`${o}.html`,n);}attachAfterHtmlSnapshot(t){let{snapshotId:o,html:n,fingerprintHtml:r,url:i,logger:a}=t;this.metadata.afterSnapshotId=o,this.queueAssetWrite(`${o}.html`,n),this.appGraphSink&&Bkt.has(this.metadata.step.type)&&this.appGraphSink({html:r??n,archivalHtml:n,url:i,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:a});}recordTargetAutoHeal(t){let{healType:o}=t,n=o==="AI"?"ai-target-heal":"cache-heal";uo.increment("test_event",1,[`name:${n}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:o,healedAt:new Date};}storeTraceAsset(t){this.queueAssetWrite(`${t.snapshotId}.${t.extension??"jpeg"}`,t.data);}queueAssetWrite(t,o){this.pendingAssetWrites=this.pendingAssetWrites.then(async()=>{try{await this.diskStorage.storeFileAsync({name:`${rs}/${t}`,contents:o});}catch(n){this.logger.warn({err:n,name:t},"Failed to store run trace asset");}});}async finishInternal(t){this.finished||(this.finished=true,this.interactionTracer.finish(),await Promise.all(this.children.map(o=>o.finish({status:Ukt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,o,n){_O({durationMs:o,executor:"cli",logger:this.logger,orgId:this.orgId,resolvedStep:t,status:n});}async finish(t){!this.finished&&t.resolvedStep!==void 0&&t.durationMs!==void 0&&this.recordStepDuration(t.resolvedStep,t.durationMs,t.step.status),await this.finishInternal(t.step),t.step.trace=this.interactionTracer.getRootSpan();}getResultBuilderForCurrentStep(){let t=this.metadata.step;switch(t.type){case "RESOLVED_MODULE":return o=>({...t,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o,type:"MODULE"});case "CONDITIONAL":return o=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:Tl(r.steps)})),elseSteps:t.elseSteps?Tl(t.elseSteps):void 0,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "WHILE_LOOP":return o=>({...t,steps:Tl(t.steps),status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return o=>({...t,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});default:return Xe(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),o=new Ab(this.orgId,this.testId,this.testName,this.diskStorage,n=>{let r=t(n);this.parentFlushResults(r);});return this.children.push(o),o}};var UB=class{constructor(t,o,n,r,i,a,s,l){this.orgId=t;this.testId=o;this.testName=n;this.runAttemptId=r;this.metadata=i;this.diskStorage=a;this.recordVideo=s;this.progressHandle=l;this.diskStorage.mkdir(rs),this.harWriter=new Vy(this.diskStorage.createFileStream(`${rs}/har-pages.log`),this.diskStorage.createFileStream(`${rs}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${rs}/resource-usage.ndjson`),this.resourceUsageSampler=ooe({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
|
|
10490
|
+
`).map(n=>n.trim()).filter(Boolean)||[];if(!(t.length===0&&o.length===0))return [{expanded:t,backtrace:o}]}function Gxt(e){let t=e.status==="FAILED"?Q0(e):void 0;return sPe([["attempts",e.attempts.toString()],["run_url",e.runId?`https://app.momentic.ai/runs/${e.runId}`:void 0],["failure_section",t],["quarantined",e.quarantined?"true":"false"],["failure_recovery",e.failureRecoveryDetails?.attempts?"true":"false"]])}function Vxt(e,t,o){let n=aPe(o.filePath);return {id:o.runId||randomUUID(),scope:e,name:o.testName,location:n,file_name:mn__default.basename(n),result:zxt(o.status),failure_reason:Hxt(o),failure_expanded:$xt(o),history:jxt(t,o.lastAttemptStartedAt,o.finishedAt),tags:Gxt(o)}}function rPe(e,t,o,n,r){let i=aPe(t);return {id:randomUUID(),scope:e,name:o,location:i,file_name:mn__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:sPe([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function Wxt(e,t){let o=t.map(i=>Vxt(e.suiteName,e.startedAt,i)),n=e.testsToSkip.map(i=>rPe(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>rPe(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...o,...n,...r]}function lPe(e,t,o){let n=Wxt(t,o);nn__default.writeFileSync(mn__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(n,null,2));}function UA(e){return {testName:e.test.name,testId:e.test.id,filePath:e.filePath,labels:e.test.labels,baseUrl:e.baseUrl,runId:e.runId,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata,status:e.status,failureRecoveryDetails:e.failureRecoveryDetails,failureDetails:e.failureDetails,failureReason:e.failureReason,finishedAt:e.finishedAt,lastAttemptStartedAt:e.lastAttemptStartedAt,attempts:e.attempts,parameters:e.parameters}}function uPe(e,t,o){let n=_3(t,o);nn__default.writeFileSync(mn__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(n,null,2));}function _3(e,t){let o=t.map(Kxt),n=[...e.testsToSkip.map(r=>cPe(r,false)),...e.quarantinedTestsToSkip.map(r=>cPe(r,true))];return fX.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:Yxt(o,n),runs:o,skipped:n})}function Kxt(e){let t=e.status==="PASSED"&&(e.failureRecoveryDetails?.attempts??0)>0,o=e.failureDetails?.manualClassification??e.failureDetails?.classification,n=e.status==="FAILED"?{reason:e.failureReason,message:e.failureDetails?.errorMessage}:null;return {runId:e.runId,testId:e.testId,testName:e.testName,filePath:mn__default.relative(".",e.filePath),labels:e.labels,status:e.status,startedAt:e.lastAttemptStartedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.lastAttemptStartedAt.getTime(),attempts:e.attempts,quarantined:e.quarantined??false,recovered:t,parameters:e.parameters,failure:n,classification:o?{reasoning:o.summary,category:o.reason,citations:o.citations}:null}}function cPe(e,t){return {testId:e.id,testName:e.name,filePath:mn__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function Yxt(e,t){return {total:e.length+t.length,executed:e.length,skipped:t.length,passed:e.filter(o=>o.status==="PASSED").length,failed:e.filter(o=>o.status==="FAILED").length,cancelled:e.filter(o=>o.status==="CANCELLED").length,quarantined:e.filter(o=>o.quarantined).length+t.filter(o=>o.quarantined).length,recovered:e.filter(o=>o.recovered).length}}function dPe(e,t){e.property("quarantined","true"),e.property("dd_tags[quarantined]","true"),t.quarantinedReason&&(e.property("quarantined_reason",t.quarantinedReason),e.property("dd_tags[quarantined_reason]",t.quarantinedReason)),t.quarantinedAt&&(e.property("quarantined_at",t.quarantinedAt.toISOString()),e.property("dd_tags[quarantined_at]",t.quarantinedAt.toISOString()));}function Xxt(e,t){let o=Q0(e);if(t.name(e.testName).className(e.testName).file(mn__default.relative(".",e.filePath)).property("id",e.testId).property("dd_tags[id]",e.testId),e.labels&&(t.property("labels",e.labels.join(",")),e.labels.forEach(n=>{t.property("dd_tags[label]",n);})),e.baseUrl&&(t.property("base_url",e.baseUrl),t.property("dd_tags[base_url]",e.baseUrl)),e.runId&&(t.property("run_url",`https://app.momentic.ai/runs/${e.runId}`),t.property("dd_tags[run_url]",`https://app.momentic.ai/runs/${e.runId}`)),e.quarantinedMetadata&&dPe(t,e.quarantinedMetadata),o==="setup"&&(t.property("setup_failed","true"),t.property("dd_tags[setup_failed]","true")),o==="main"&&(t.property("main_failed","true"),t.property("dd_tags[main_failed]","true")),o==="teardown"&&(t.property("teardown_failed","true"),t.property("dd_tags[teardown_failed]","true")),e.status==="FAILED"){let n=ku({failureReason:e.failureReason,classification:e.failureDetails?.classification,manualClassification:e.failureDetails?.manualClassification});if(n.title){let{description:r}=n;e.runId&&(r+=` Visit https://app.momentic.ai/runs/${e.runId} for more details.`),t.failure(r,n.title);}e.failureDetails?.errorStack&&t.stacktrace(e.failureDetails.errorStack);}else e.status==="CANCELLED"&&t.skipped();return t.time((e.finishedAt.getTime()-e.lastAttemptStartedAt.getTime())/1e3).property("started_at",e.lastAttemptStartedAt.toISOString()).property("dd_tags[started_at]",e.lastAttemptStartedAt.toISOString()).property("finished_at",e.finishedAt.toISOString()).property("dd_tags[finished_at]",e.finishedAt.toISOString()),t.property("attempts",e.attempts.toString()).property("dd_tags[attempts]",e.attempts.toString()),e.parameters?.envName&&(t.property("environment",e.parameters.envName),t.property("dd_tags[environment]",e.parameters.envName)),e.parameters?.urlOverride&&t.property("url_override",e.parameters.urlOverride),t}function Qxt(e,t,o){let{suiteId:n,suiteName:r,startedAt:i,finishedAt:a,testsToSkip:s,quarantinedTestsToSkip:l,quarantinedTestsMetadata:c}=t,u=e.testSuite().name(r);n&&u.property("id",n),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",a.toISOString()).time((a.getTime()-i.getTime())/1e3);for(let d of o){let m=u.testCase();Xxt(d,m);}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(mn__default.relative(".",d.relativeFilePath)).property("id",d.id),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(p=>{m.property("dd_tags[label]",p);})),m.skipped();}for(let d of l){let m=u.testCase();m.name(d.name).className(d.name).file(mn__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&dPe(m,p),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(h=>{m.property("dd_tags[label]",h);})),m.skipped();}return u}function mPe(e,t,o){let n=Jxt.newBuilder();Qxt(n,t,o),n.writeTo(mn__default.join(e,`${t.suiteName}.xml`));}var Zxt="insights-collector.newrelic.com",e_t="insights-collector.eu01.nr-data.net",t_t=4e3;async function P3({logger:e,config:t,params:o,runs:n,runGroupId:r,envName:i,appUrl:a,gitMetadata:s}){let l=t.licenseKey??process.env.NEW_RELIC_LICENSE_KEY??"";if(!l){e.error("New Relic reporter is enabled but no license key was found. Set reporting.newrelic.licenseKey in momentic.config.yaml or the NEW_RELIC_LICENSE_KEY environment variable.");return}let c=n.map(UA),u=_3(o,c),d=pPe({...t.attributes,runGroupId:r,environment:i,suiteName:o.suiteName,gitBranch:s.gitBranchName,gitCommit:s.gitCommitSha,gitRepository:s.githubRepository??s.gitOriginUrl,ciRunUrl:o_t()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...pPe({runId:g.runId,testId:g.testId,testName:g.testName,filePath:g.filePath,status:g.status,startedAt:g.startedAt,finishedAt:g.finishedAt,durationMs:g.durationMs,attempts:g.attempts,quarantined:g.quarantined,recovered:g.recovered,labels:g.labels?.join(","),baseUrl:c[f]?.baseUrl,failureReason:g.failure?.reason,failureMessage:g.failure?.message,classificationCategory:g.classification?.category,classificationReasoning:g.classification?.reasoning,runUrl:g.runId?`${a}/runs/${g.runId}`:void 0})}));m.push({...d,eventType:"MomenticRunGroup",timestamp:new Date(o.finishedAt).getTime(),startedAt:o.startedAt.toISOString(),finishedAt:o.finishedAt.toISOString(),durationMs:u.runGroup.durationMs,runGroupUrl:`${a}/run-groups/${r}`,...u.summary,passRate:u.summary.executed>0?u.summary.passed/u.summary.executed:0});let h=`https://${t.region==="EU"?e_t:Zxt}/v1/accounts/${t.accountId}/events`;try{let g=await fetch(h,{method:"POST",headers:{"Content-Type":"application/json","Api-Key":l},body:JSON.stringify(m)});if(!g.ok){let f=await g.text();e.error(`Failed to send test results to New Relic: ${g.status} ${f}`);return}e.info(`Sent ${m.length} events to New Relic account ${t.accountId}`);}catch(g){e.error(`Failed to send test results to New Relic: ${G(g)}`);}}function pPe(e){let t={};for(let[o,n]of Object.entries(e))n==null||n===""||(t[o]=typeof n=="string"?n.slice(0,t_t):n);return t}function o_t(){let e=process.env;return e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:e.CI_JOB_URL??e.BUILDKITE_BUILD_URL??e.CIRCLE_BUILD_URL??void 0}function hPe(e){return {title:on(e),duration:e.finishedAt.getTime()-e.startedAt.getTime(),error:e.status==="FAILED"?{value:e.failureReason}:void 0,steps:e.results&&e.type!=="PRESET_ACTION"?e.results.map(hPe):[]}}async function i_t(e,t,o,n){if(n.results?.length){let r=await X0({logger:e,debugDataStorage:t,folder:o,label:"final-state",snapshotId:n.results[n.results.length-1].afterSnapshot});return r?[{name:"Final state screenshot",path:r,contentType:"image/jpeg"}]:[]}return []}async function a_t(e,t,o,n){let r;if(n.status==="FAILED"&&n.failureReason){let i=ku({failureReason:n.failureReason,classification:n.failureDetails?.classification,manualClassification:n.failureDetails?.manualClassification});r={value:n.failureDetails?.classification?.reason??n.failureReason,message:i.description};}return {status:n.status==="PASSED"?"passed":n.status==="CANCELLED"?"interrupted":"failed",duration:n.finishedAt.getTime()-n.lastAttemptStartedAt.getTime(),error:r,retry:n.attempts-1,steps:n.results?.map(hPe)||[],startTime:n.lastAttemptStartedAt.toISOString(),attachments:await i_t(e,t,o,n)}}async function s_t(e,t,o,n){return {expectedStatus:"passed",status:n.status==="PASSED"?"expected":"unexpected",results:[await a_t(e,t,o,n)]}}async function l_t(e,t,o,n){return {tags:[],title:n.test.name,ok:n.status==="PASSED",tests:[await s_t(e,t,o,n)],id:n.runId,file:n.filePath}}function O3(e,t){return e.reduce((o,n)=>t(n)?o+1:o,0)}async function c_t(e,t,o,n,r){return {suites:[{title:n.suiteName,file:n.projectConfigPath,specs:await Promise.all(r.map(async i=>{let a=i.runId&&i.runAttemptId?t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId):new $w;try{return await l_t(e,a,o,i)}finally{a.close();}}))}],errors:[],stats:{startTime:n.startedAt.toISOString(),duration:n.finishedAt.getTime()-n.startedAt.getTime(),expected:O3(r,i=>i.status==="PASSED"),unexpected:O3(r,i=>i.status!=="PASSED"),flaky:O3(r,i=>!!i.isFlake),skipped:0}}}async function gPe(e,t,o,n,r){let i=await c_t(e,t,o,n,r);nn__default.writeFileSync(mn__default.join(o,`${n.suiteName}.json`),JSON.stringify(i,null,2));}async function fPe({logger:e,callbacks:t,format:o,params:n,runs:r,folder:i}){switch(existsSync(i)&&!statSync(i).isDirectory()&&(C.error(`The specified reporter output directory '${i}' exists on disk but is not a folder. Please move or delete the existing object or specify a different reporter path.`),process.exit(1)),mkdirSync(i,{recursive:true}),o){case "json":{let a=r.map(UA);uPe(i,n,a);return}case "junit":{let a=r.map(UA);mPe(i,n,a);return}case "buildkite-json":{let a=r.map(UA);lPe(i,n,a);return}case "allure":case "allure-json":await oPe(e,t,i,n,r);return;case "playwright-json":await gPe(e,t,i,n,r);return;default:throw new Error(`Unknown reporter format requested: '${o}'`)}}function bb(e){let t=e??y_t();return yPe()&&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 y_t(){let e=yPe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var yPe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function tB(e,t=true,o=false){let n=v_t(e),r=await S_t.which(n[0],true),i=n.slice(1),a=b_t.exec(T_t(r),i,{delay:100,silent:o});if(t)return a;a.catch(s=>{C.warn({err:s},`Background command exited with an error: ${e}`);});}var bPe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function A_t(e,{context:t}){return e instanceof zo?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${bPe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${G(e)}`}function SPe(e){return e instanceof zo?e.rawError.includes("Resource not accessible by integration")?bPe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":G(e)}function TPe(e,t){C.error(A_t(e,t));}function oB(e){return vPe(e,"runs","run")}function k3(e){return vPe(e,"run-groups","run group")}function vPe(e,t,o){let n=e.trim(),r=/^https?:\/\//i.test(n)?w_t(n,t,o):n;if(!z.guid().safeParse(r).success)throw new Error(`Invalid ${o} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function w_t(e,t,o){let n;try{n=new URL(e);}catch{throw new Error(`Invalid ${o} URL: ${e}`)}let r=n.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${o} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function nB(e){return new Promise((t,o)=>{let n=[];createReadStream(e).pipe(R_t()).on("data",r=>n.push(r)).on("end",()=>t(n)).on("error",r=>o(r));})}var Wt="3.58.1",APe={packageName:"momentic",currentVersion:Wt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade",runUpgrade:pq__default.existsSync(rp.join(process.cwd(),"package.json"))?e=>installPackage(`momentic@${e}`,{silent:false,dev:true}):void 0},{checkCLIVersion:ti,getLatestCLIVersion:EPe}=Zme(APe),wPe=e=>Mpe({...APe,logger:e});bmt("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:am,setAnalyticsIdentity:rB,shutdownAnalytics:RPe}=dO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Hpe});var O_t=3e3,iB=new Set;function CPe(e){iB.add(e),e.finally(()=>iB.delete(e));}async function IPe(){if(iB.size!==0)try{await ge(Promise.allSettled([...iB]),{milliseconds:O_t});}catch{}}async function it(){try{await ge(Promise.all([IPe(),cO(),uo.flush(),RPe(),wO(),oW()]),{milliseconds:5e3});}catch{}}async function _Pe({momenticFiles:e,project:t,logger:o}){let n;try{n=await Xg({repoRoot:t.rootDir??process.cwd(),mainBranch:t.config.gitMainBranch,logger:o});}catch(i){let a="Make sure the checkout has enough git history to reach the base ref (CI checkouts are often shallow by default).";throw i instanceof Bp?new ue(`Could not determine the base ref to diff against for --changed. ${a}`):new ue(`--changed could not compute the git diff: ${G(i)}. ${a}`)}let r=k_t({changedFiles:n.changedFiles,repoRoot:n.repoRoot,momenticFiles:e});return C.log(r.length===0?`No changed tests or modules vs ${n.baseRef}.`:`${r.length} changed test(s) vs ${n.baseRef}.`),r.map(i=>i.fullFilePath)}function k_t({changedFiles:e,repoRoot:t,momenticFiles:o}){let n=e.filter(u=>u.status!=="D"),r=n.filter(u=>u.path.endsWith(".test.yaml")),i=n.filter(u=>u.path.endsWith(".module.yaml")),a=Object.values(o.tests),s=new Map(a.map(u=>[u.fullFilePath,u])),l=new Map;for(let u of r){let d=s.get(rp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=M_t({momenticFiles:o,changedModuleFullPaths:i.map(u=>rp.resolve(t,u.path))});if(c.size>0)for(let u of a){if(l.has(u.id))continue;let d=WR(u.fullFilePath,o);for(let m of d)if(c.has(m)){l.set(u.id,{fullFilePath:u.fullFilePath,relativePath:u.relativePath,reason:"module-changed"});break}}return Array.from(l.values())}function M_t({momenticFiles:e,changedModuleFullPaths:t}){let o=new Set(t),n=new Set;for(let[a,s]of Object.entries(e.modules))o.has(s.fullFilePath)&&n.add(a);if(n.size===0)return n;let r=new Map;for(let[a,s]of Object.entries(e.modules))r.set(a,WR(s.fullFilePath,e));let i=true;for(;i;){i=false;for(let[a,s]of r)if(!n.has(a)){for(let l of s)if(n.has(l)){n.add(a),i=true;break}}}return n}async function Zg({tests:e,changed:t,momenticFiles:o,project:n,yes:r,include:i,exclude:a,labels:s,logger:l}){let c=new Set;if(t)(await _Pe({momenticFiles:o,project:n,logger:fe})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>nn__default.existsSync(p)),m=cwd();d?(m!==n.rootDir&&l.warn(`Test paths resolve against the current directory ('${m}'), not the project root ('${n.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!nn__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=nn__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=mn__default.resolve(p);Object.values(o.tests).filter(f=>h?Dte(f.fullFilePath,g):f.fullFilePath===g).forEach(f=>{c.add(f.fullFilePath);});})):Object.values(o.tests).forEach(p=>{e.some(h=>p.relativePath.includes(h))&&c.add(p.fullFilePath);});}else !r&&!await Kr("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),process.exit(1)),Object.values(o.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=mn__default.relative(n.rootDir,d);i&&!i.some(p=>new RegExp(p).test(m))&&c.delete(d),a&&a.some(p=>new RegExp(p).test(m))&&c.delete(d);}let u=Array.from(c).map(async d=>{try{let m=await $s(d,fe,o);if(lp.gt(m.schemaVersion,Ct)&&Eoe(l,`Test ${d} has schema version ${m.schemaVersion}, which is newer than this version of the CLI supports. Update your momentic package to avoid unexpected behavior.`,"newer-schema-version"),s&&s.length>0){let p=m.labels||[];if(!s.some(g=>p.includes(g)))return null}return {...m,fullFilePath:d,relativeFilePath:mn__default.relative(n.rootDir,d),testBundleHash:rM({absoluteTestFilePath:d,momenticFiles:o,logger:fe})}}catch(m){l.error(`Failed to read and resolve test at '${d}': ${G(m)}`),process.exit(1);}});return compact(await Promise.all(u))}function OPe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:o=false,skipQuarantined:n=false}){let[r,i]=partition(e,l=>l.disabled),[a,s]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:n?a:[],testsToRun:o?[]:s,quarantinedTestsToRun:n?[]:a}}function kPe({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:o,testInputMatrix:n}){let r=[],i=(a,s,l)=>{n?n.forEach((c,u)=>{r.push({inputs:c,inputIndex:u,testDefinition:a,quarantined:s,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:a,quarantined:s,quarantinedMetadata:l});};return e.forEach(a=>i(a,false)),t.forEach(a=>i(a,true,o[a.id])),r}var MPe=()=>process.exit(130),LPe=()=>process.exit(143);process.on("SIGINT",MPe);process.on("SIGTERM",LPe);function zA(){process.off("SIGINT",MPe),process.off("SIGTERM",LPe);}async function NPe({orgId:e,codeEvaluator:t,logger:o,outputDefinitions:n,testContext:r}){let i={};for(let a of n){let{name:s,value:l}=a;i[s]=await Ma({orgId:e,s:l,codeEvaluator:t,logger:o,context:r});}return i}var sB=z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),N3=sB,B_t=N3.array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).refine(e=>e.every((t,o)=>o===0||e[o-1]<t),{message:"service IDs must be sorted"}),aB=z.discriminatedUnion("mode",[z.object({mode:z.literal("playwright")}).strict(),z.object({mode:z.literal("private-service"),connectorId:sB,serviceIds:B_t.optional()}).strict()]),FPe=z.record(z.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z.string()),D3=z.union([z.guid(),z.string().regex(/^[a-f0-9]{64}$/)]),F3=z.object({allocationRequestId:z.guid().default(randomUUID$1),concurrencyKey:z.string().regex(/^[A-Za-z0-9][A-Za-z0-9:_-]{0,255}$/).optional(),maxConcurrentSessions:z.number().int().positive().optional(),maxSessionTtlSeconds:z.number().int().min(1).max(3600).default(3600),metadata:FPe.optional(),network:aB.default({mode:"playwright"}),principalId:D3,tokenVersion:z.literal(2)}).strict(),BPe=z.object({accessToken:z.string().min(1),expiresAt:z.iso.datetime(),tokenType:z.literal("Bearer")}),DPe=z.object({host:z.string().trim().min(1).max(253),port:z.number().int().min(1).max(65535)}).strict(),U_t=z.object({browserAddress:DPe,id:N3,target:DPe}).strict(),z_t=z.object({id:N3,mode:z.literal("localhost")}).strict(),j_t=z.union([U_t,z_t]),UPe=z.object({services:j_t.array().min(1).max(32)}).strict().superRefine(({services:e},t)=>{let o=e.filter(n=>"mode"in n);new Set(e.map(({id:n})=>n)).size!==e.length&&t.addIssue({code:"custom",message:"service IDs must be unique"}),o.length>1&&t.addIssue({code:"custom",message:"only one localhost namespace service is allowed"}),o.length===1&&e.length>1&&t.addIssue({code:"custom",message:"localhost cannot be combined with explicit services"});}),H_t=z.object({algorithm:z.literal("RSA-OAEP-256"),chunks:z.string().min(1).array().min(1).max(128)});F3.omit({tokenVersion:true}).partial({principalId:true});var zPe=z.object({metadata:FPe.optional(),browser:z.literal("chromium").default("chromium"),network:aB.default({mode:"playwright"}),playwrightVersion:z.string().default("1.60"),ttlSeconds:z.number().int().min(1).max(3600).default(3600),waitTimeoutMs:z.number().int().min(0).max(1e4).default(5e3)}).strict(),$_t=z.discriminatedUnion("mode",[aB.options[0].strip(),aB.options[1].strip()]),B3=z.object({id:z.string(),status:z.string(),browser:z.string().optional(),playwrightVersion:z.string().optional(),network:$_t.default({mode:"playwright"}),connectToken:z.string().optional(),connectTokenExpiresAt:z.string().optional(),wsEndpoint:z.string().optional(),statusUrl:z.string().optional(),createdAt:z.string().optional(),queuedAt:z.string().nullable().optional(),assignedAt:z.string().nullable().optional(),readyAt:z.string().nullable().optional(),connectedAt:z.string().nullable().optional(),expiresAt:z.string().nullable().optional(),endedAt:z.string().nullable().optional(),failureCode:z.string().nullable().optional(),terminalReason:z.string().nullable().optional()}),jPe=B3.extend({connectToken:z.string(),status:z.literal("READY"),wsEndpoint:z.string()}),HPe=z.object({connectorId:z.string(),state:z.string()}),$Pe=z.object({encryptedEnrollmentCredential:H_t});var zp=class extends Error{constructor(o,n,r){super(`Browser Fleet request failed (${n??"HTTP_ERROR"}, ${o})`);this.status=o;this.code=n;this.retryAfterMs=r;this.name="BrowserFleetAPIError";}},Sb=class extends Error{constructor(t){super("Browser Fleet request failed",{cause:t}),this.name="BrowserFleetConnectionError";}},lB=class extends Error{constructor(o){super(`Browser Fleet session ${o.id} did not become ready (${o.failureCode??o.status})`);this.session=o;this.name="BrowserFleetSessionError";}},Na=class extends Error{constructor(o,n){super(o);this.sessionId=n;this.name="BrowserFleetResponseError";}},cB=class extends Error{constructor(o){super(`Browser Fleet Connector did not become active (${o.state})`);this.connector=o;this.name="BrowserFleetConnectorError";}};function uB(e){return `/v1/private-connectors/${encodeURIComponent(sB.parse(e))}`}function GPe(e){let t=HPe.safeParse(e);if(!t.success)throw new Na("Browser Fleet returned a malformed Connector response");return t.data}var dB=class{constructor(t,o){this.transport=t;this.principalId=o;}async reconcile(t,o,n={}){let r=o.principalId===void 0?this.principalId:o.principalId,i=await this.transport.request(uB(t),{body:JSON.stringify(UPe.parse(o.desiredState)),headers:{"Content-Type":"application/json",...r?{"X-Browser-Fleet-Principal-Id":D3.parse(r)}:{}},method:"PUT"},n,true);return GPe(i.body)}async retrieve(t,o={}){let n=await this.transport.request(uB(t),{},o,true);return GPe(n.body)}async waitUntilActive(t,o={}){let n=o.timeoutMs===null?void 0:AbortSignal.timeout(o.timeoutMs??45e3),r=o.signal&&n?AbortSignal.any([o.signal,n]):o.signal??n;for(;;){r?.throwIfAborted();let i=await this.retrieve(t,{...o,signal:r});if(i.state==="ACTIVE")return i;if(i.state!=="PROVISIONING")throw new cB(i);await setTimeout$1(500,void 0,{signal:r});}}async createEnrollmentCredential(t,o,n={}){let r=await this.transport.request(`${uB(t)}/enrollment-credentials`,{body:JSON.stringify(o),headers:{"Content-Type":"application/json"},method:"POST"},n,true),i=$Pe.safeParse(r.body);if(!i.success)throw new Na("Browser Fleet returned a malformed enrollment response");return i.data.encryptedEnrollmentCredential}async delete(t,o={}){await this.transport.request(uB(t),{method:"DELETE"},o,true);}};var W_t=z.object({id:z.string()}),q_t=1e4,K_t=2e4;function qPe(e){return e+Math.random()*Math.min(250,e/4)}var mB=class{constructor(t,o){this.transport=t;this.accessToken=o;}async create(t={},o={}){return (await this.createResponse(this.creationParams(t),{...o,idempotencyKey:this.idempotencyKey(o)})).session}async retrieve(t,o={}){return (await this.requestSession(`/${encodeURIComponent(t)}`,{},o)).session}async delete(t,o={}){await this.transport.request(`/v1/sessions/${encodeURIComponent(t)}`,{method:"DELETE"},o);}async createAndWait(t={},o={}){o.signal?.throwIfAborted();let n=this.creationParams(t),r={...o,idempotencyKey:this.idempotencyKey(o)},i=o.allocationTimeoutMs??9e4,a=Date.now()+i,s=new AbortController,l=setTimeout(()=>s.abort(new DOMException("Browser Fleet allocation timed out","TimeoutError")),i),c=o.signal?AbortSignal.any([o.signal,s.signal]):s.signal,u={...r,signal:c},d;try{let m=await this.retry(()=>this.createResponse(n,u),a,c);for(d=m.session;(d.status==="QUEUED"||d.status==="PROVISIONING")&&Date.now()<a&&(await setTimeout$1(Math.min(qPe(m.retryAfterMs),a-Date.now()),void 0,{signal:c}),!(Date.now()>=a));){let h=d.id;m=await this.retry(()=>this.requestSession(`/${encodeURIComponent(h)}`,{},u),a,c),d=m.session;}if(c.throwIfAborted(),d.status!=="READY")throw new lB(d);let p=jPe.safeParse(d);if(!p.success)throw new Na("Browser Fleet returned a malformed session response",d.id);return p.data}catch(m){let p=d?.id??(m instanceof Na?m.sessionId:void 0);if(!p&&c.aborted)try{p=(await this.createResponse(n,{...r,signal:AbortSignal.timeout(K_t)})).session.id;}catch(h){h instanceof Na&&(p=h.sessionId);}throw p&&await this.delete(p,{signal:AbortSignal.timeout(q_t)}).catch(()=>{}),m}finally{clearTimeout(l);}}idempotencyKey(t){if(t.idempotencyKey!==void 0)return t.idempotencyKey;if(typeof this.accessToken=="object")return this.accessToken.allocationRequestId;if(this.accessToken)throw new Error("Pass the token object or an explicit idempotencyKey when using a raw access token");return randomUUID$1()}creationParams(t){let o=typeof this.accessToken=="object"?this.accessToken:void 0;return zPe.parse({...t,network:t.network===void 0?o?.network:t.network,ttlSeconds:t.ttlSeconds===void 0?o?.maxSessionTtlSeconds:t.ttlSeconds})}createResponse(t,o){return this.requestSession("",{body:JSON.stringify(t),headers:{"Content-Type":"application/json","Idempotency-Key":o.idempotencyKey},method:"POST"},o)}async requestSession(t,o,n){let r=await this.transport.request(`/v1/sessions${t}`,o,n),i=B3.safeParse(r.body);if(!i.success)throw new Na("Browser Fleet returned a malformed session response",W_t.safeParse(r.body).data?.id);return {session:i.data,retryAfterMs:r.retryAfterMs}}async retry(t,o,n){for(;;)try{return await t()}catch(r){if(n.throwIfAborted(),!(r instanceof Sb||r instanceof zp&&(r.status===408||r.status===429||r.status>=500))||Date.now()>=o)throw r;let a=r instanceof zp?r.retryAfterMs:500;await setTimeout$1(Math.min(qPe(a),o-Date.now()),void 0,{signal:n});}}};var pB=class{constructor(t,o={}){this.transport=t;this.defaults=o;}async create({principalId:t=this.defaults.principalId,concurrencyKey:o=this.defaults.concurrencyKey,maxConcurrentSessions:n=this.defaults.maxConcurrentSessions,...r}={},i={}){let{concurrencyKey:a,maxConcurrentSessions:s,...l}=F3.parse({...r,principalId:t,concurrencyKey:o,maxConcurrentSessions:n,tokenVersion:2}),c=m=>this.transport.request("/v1/token",{body:JSON.stringify({...l,metadata:m}),headers:{"Content-Type":"application/json",...a===void 0?{}:{"X-Browser-Fleet-Concurrency-Key":a},...s===void 0?{}:{"X-Browser-Fleet-Max-Concurrent-Sessions":String(s)}},method:"POST"},i),u;try{u=await c(l.metadata);}catch(m){if(!(m instanceof zp)||m.status!==400||!l.metadata)throw m;u=await c(void 0);}let d=BPe.safeParse(u.body);if(!d.success)throw new Na("Browser Fleet returned a malformed token response");return {...d.data,allocationRequestId:l.allocationRequestId,network:l.network,maxSessionTtlSeconds:l.maxSessionTtlSeconds}}};var KPe=64*1024;function J_t(e){if(!e)return 500;let t=Number(e);if(Number.isFinite(t)&&t>=0)return t*1e3;let o=Date.parse(e);return Number.isNaN(o)?500:Math.max(0,o-Date.now())}async function YPe(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>KPe)throw await e.body?.cancel(),new Na("Browser Fleet response is too large");if(!e.body)return;let o=e.body.getReader(),n=[],r=0;for(let i=await o.read();!i.done;i=await o.read()){if(r+=i.value.byteLength,r>KPe)throw await o.cancel(),new Na("Browser Fleet response is too large");n.push(i.value);}if(r!==0)return JSON.parse(new TextDecoder().decode(Buffer$1.concat(n,r)))}var hB=class{baseUrl;authorization;controlAuthorization;fetch;requestTimeoutMs;constructor({accessToken:t,apiKey:o=process.env.BROWSER_FLEET_API_KEY,baseUrl:n=process.env.BROWSER_FLEET_BASE_URL,controlApiKey:r,fetch:i=globalThis.fetch,requestTimeoutMs:a=15e3}){if(!n)throw new Error("Browser Fleet base URL is not configured");this.baseUrl=n.replace(/\/$/,"");let s=(typeof t=="object"?t.accessToken:t)??o;this.authorization=s?`Bearer ${s}`:void 0,this.controlAuthorization=r?`Bearer ${r}`:void 0,this.fetch=i,this.requestTimeoutMs=a;}async request(t,o,n={},r=false){let i=r?this.controlAuthorization:this.authorization;if(!i)throw new Error(`Browser Fleet ${r?"control":"session"} API key is not configured`);let a=n.timeoutMs===void 0?this.requestTimeoutMs:n.timeoutMs,s=a===null?void 0:AbortSignal.timeout(a),l=n.signal&&s?AbortSignal.any([n.signal,s]):n.signal??s;l?.throwIfAborted();let c;try{c=await this.fetch(`${this.baseUrl}${t}`,{...o,headers:{...o.headers,Authorization:i},redirect:"error",signal:l});}catch(d){throw n.signal?.aborted?d:new Sb(d)}let u=J_t(c.headers.get("Retry-After"));if(!c.ok){let d=await YPe(c).catch(()=>{});n.signal?.throwIfAborted();let m=typeof d=="object"&&d!==null&&"code"in d&&typeof d.code=="string"?d.code:void 0;throw new zp(c.status,m,u)}try{return {body:await YPe(c),retryAfterMs:u}}catch(d){throw n.signal?.aborted||d instanceof Na?d:new Sb(d)}}};var px=class{baseUrl;sessions;tokens;privateConnectors;constructor(t={}){let o=new hB(t);this.baseUrl=o.baseUrl,this.sessions=new mB(o,t.accessToken),this.tokens=new pB(o,{principalId:t.principalId,concurrencyKey:t.concurrencyKey,maxConcurrentSessions:t.maxConcurrentSessions}),this.privateConnectors=new dB(o,t.principalId);}};var JPe=new Set;function XPe(e){return de({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let o=await X_t(e);return t?.setAttribute("momentic.browser_execution_mode",o.controller.browser.executionMode),o}})}async function X_t({baseUrl:e,envName:t,devicePixelRatio:o,apiClient:n,test:r,storageClient:i,codeEvaluator:a,generator:s,orgId:l,variables:c,logger:u,customHeaders:d,testInputs:m,localBrowserConfig:p,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:y,runAttemptId:b,runGroupId:S,browserTypeOverride:E,attemptedRemoteBrowserProviders:v,abortSignal:R}){let w={baseUrl:n.baseUrl,apiKey:n.apiKey,logger:fe,mode:n.mode,runner:n.runner},{controller:P,context:I}=await DI({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:a,storage:i,enricher:new ep(w,s),generator:s,visualDiffScreenshotStorage:g,devicePixelRatio:o,browserTypeOverride:E,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:O})=>{f.setActiveVideo(_,O);}}:void 0,validateBrowserType:_=>{xh(_)||(fe.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!JPe.has(_)&&(JPe.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${sh(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),O,N=v?.slice(-1),D=crypto.randomUUID(),M=async()=>{let z=await n.createRemoteBrowserConnection({attemptedProviders:N,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name});return O=z.provider,z.provider&&v?.push(z.provider),z};try{if(N?.includes("SELF_HOSTED"))return await M();let z=await n.tryCreateBrowserFleetAccessToken({allocationRequestId:D,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name},R);if(!z)return await M();O=z.provider,v?.push(z.provider);let J=await new px({accessToken:z.accessToken,baseUrl:z.fleetApiUrl,requestTimeoutMs:15e3}).sessions.createAndWait({network:z.network,ttlSeconds:3600,waitTimeoutMs:1e4},{allocationTimeoutMs:9e4,idempotencyKey:D,signal:R});return {accessToken:J.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:z.provider,wsEndpoint:J.wsEndpoint}}catch(z){throw R?.aborted?z:new Nc("Browser Fleet session allocation failed",{cause:z})}finally{uo.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${O??"unknown"}`]);}}:void 0});try{await BI({orgId:l,test:r,testInputs:m,codeEvaluator:a,logger:u,context:I});}catch(_){try{await P.browser.cleanup();}catch(O){u.error({err:O},"Failed to clean up browser after test input resolution failed");}throw _ instanceof FI&&(C.error(_.message),process.exit(1)),_}return {controller:P,context:I}}function QPe({testAdvancedSettings:e,orgSettings:t,logger:o}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!is){let n="This test is ineligible for failure recovery since this does not appear to be a CI environment";return o.warn(n),C.debug(n),false}return true}async function ZPe({attemptInputs:e,attemptFixtures:t,attemptMetadata:o,runFixtures:n,recordVideo:r,stepCallbacks:i}){let{orgId:a,userId:s,runId:l}=o,{runTracer:c,runGroupTracer:u,project:d,apiClient:m}=n,{controller:p,context:h,codeEvaluator:g,storageClient:f,cacheStorage:y,logger:b,usageTracker:S,tracer:E}=t,{test:v,orgSettings:R}=e;b.info(`Running test '${v.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:p,storage:f,cacheStorage:y,usageTracker:S,context:h,logger:b,codeEvaluator:g},P={orgId:a,userId:s,runId:l,testMetadata:v,steps:v.steps,beforeSteps:v.beforeSteps,afterSteps:v.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await QPe({testAdvancedSettings:v.advanced,orgSettings:R.ai,logger:b})};return zwe({fixtures:w,inputs:P,options:I,callbacks:{step:i??{},test:{onTestComplete:async O=>{await p.browser.cleanup({saveRemoteVideos:r!=="on-fail"||O?.status!=="PASSED"}),await g.dispose();}}},testParams:{attemptTracer:E},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:am,abortSignal:n.abortSignal}})}async function eOe(e){let{testDefinition:t,traceMetadata:o}=e;return de({name:"cli.test_run",newTrace:true,serviceName:"cli",attributes:{"momentic.org_id":e.orgId,"momentic.run_group_id":o.runGroupId,"momentic.run_id":e.runId,"momentic.test_id":t.id,"momentic.parallel":o.parallel,"momentic.worker_count":o.workerCount,"momentic.worker_index":o.workerIndex,"momentic.remote_browser_run":o.remoteBrowser},fn:async n=>{let r=await ePt(e);return n?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function ePt(e){let{testDefinition:t,logger:o}=e,n=new Date;try{return await tPt(e)}catch(r){Ch(r);let{customHeaders:i,envName:a,testInputs:s,urlOverride:l}=e,c={customHeaders:i,envName:a,testInputs:s,urlOverride:l},u="Fatal error running test";return o.error({err:r},u),C.error({err:r},u),tOe({err:ri(r),parameters:c,test:t,failureReason:ne.reasonFor(r,"UnknownError"),startedAt:n,lastAttemptStartedAt:n,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function tPt(e){let{testDefinition:t,snapshot:o,project:n,apiClient:r,orgId:i,userId:a,urlOverride:s,runGroupTracer:l,logger:c,gitMetadata:u,cacheOptions:d,runId:m,testInputs:p,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=o?{...n.config,...o.metadata.config}:n.config,b=new YT(r,i),S=np({logger:c,orgId:i,client:r,gitMetadata:u,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:o?true:d.noCache,isolateCachesByEnvironment:n.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),E,v,R;o?(E={envName:o.metadata.environment.envName,resolvedEnv:o.metadata.environment.resolvedEnv,environmentVariables:{...o.metadata.environment.variables},baseUrl:o.metadata.environment.baseUrl},v={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(E=Ty({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:k=>gc(k,n,c)}),{stepListsWithCaches:v,restoredStepLists:R}=await uc({cacheStorage:S,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:E.envName,useSnapshotIdentityCache:n.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:P,environmentVariables:I,baseUrl:_}=E,O=v.steps,N=v.beforeSteps??void 0,D=v.afterSteps??void 0,M=lw(t),z=M||(e.recordVideo??false);M&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let J=await l.startRun({logger:c,runId:m,originalSteps:R??{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:_,environmentName:w,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,resolvedInputs:p,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai,recordVideoOverride:M?true:void 0}),W=c.child(J.loggerBindings||{});Object.entries(J.envVarBindings||{}).forEach(([k,Q])=>{I[k]=Q;});let V=await nPt({...e,recordVideo:z,effectiveConfig:y,variables:I,envName:w,resolvedEnv:P,baseUrl:_,storageClient:b,tracer:J,runGroupTracer:l,logger:W,cacheStorage:S,stepsWithCaches:O,beforeStepsWithCaches:N,afterStepsWithCaches:D,usageTracker:f});return await J.finish({logger:c,status:V.status,finishedAt:V.finishedAt,failureDetails:V.failureDetails,failureReason:V.failureReason,isFlake:V.isFlake,failureRecoveryDetails:V.failureRecoveryDetails,runAssertionResults:V.runAssertionResults}),oPt({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:V.status,logger:W}),{runId:J.runId,...V}}function oPt({apiClient:e,classificationEnabled:t,runId:o,environment:n,status:r,logger:i}){if(!t||r!=="PASSED"&&r!=="FAILED")return;let a=e.recordRunOutcomeForFailureRate({runId:o,environment:n,status:r==="PASSED"?"PASSED":"FAILED"}).catch(s=>{i.debug({err:s,runId:o},"Failed to report run outcome for failure rate");});CPe(a);}async function nPt(e){let{testDefinition:t,effectiveConfig:o,stepsWithCaches:n,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:a,regenerateGoldenFiles:s,apiClient:l,generator:c,baseUrl:u,storageClient:d,orgId:m,userId:p,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:b,resolvedEnv:S,retriesOverride:E,devicePixelRatio:v,logUpdate:R,tracer:w,runGroupTracer:P,logger:I,cacheStorage:_,gitMetadata:O,quarantined:N,quarantinedMetadata:D,usageTracker:M}=e,z=o,J=z.ai?.aiFailureAnalysis??false,W=new Date,V=new QT(a,l,s),k={envName:h,urlOverride:g,customHeaders:f,testInputs:y},Q={...z.browser||{},...S?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},H=Q.remoteBrowser===true,$=[],oe,ie=Math.abs(E??t.retries??o.retries??1),Pe=[],Ne=[];I.info({...O,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Fe=0;Fe<=ie;Fe++){let at=randomUUID(),ee=await w.startAttempt(at),Z=I.child(ee.loggerBindings||{}),Se={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Fe!==0&&R("RETRY",`attempt ${Fe+1}/${ie+1}`);let Tt=new Date,Ke=Wy({tools:new op({httpClient:new ms({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Z,mode:l.mode,runner:l.runner}),fakerSeed:z.advanced?.fakerConstantSeed?jw:void 0})}),Re;try{let{controller:dt,context:Mt}=await XPe({tracer:ee,runId:w.runId,runAttemptId:at,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:v,logger:Z,storageClient:d,codeEvaluator:Ke,test:Se,generator:c,orgId:m,variables:b,customHeaders:f,testInputs:y,localBrowserConfig:Q,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:$,abortSignal:e.abortSignal,aiSettings:{...z.ai||{},...Se.advanced||{}},visualDiffScreenshotStorage:V});e.abortSignal&&(e.abortSignal.aborted?dt.executeAbortController.abort():(Re=()=>{dt.executeAbortController.abort();},e.abortSignal.addEventListener("abort",Re,{once:!0}))),oe=await ZPe({attemptMetadata:{attemptNumber:Fe+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:Z,storageClient:d,cacheStorage:_,usageTracker:M,codeEvaluator:Ke,context:Mt,controller:dt,tracer:ee},attemptInputs:{test:Se,orgSettings:z},runFixtures:{runTracer:w,runGroupTracer:P,project:a,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let vo=new Date,et={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:Se.steps,beforeSteps:Se.beforeSteps,afterSteps:Se.afterSteps}};await qf({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:et.updatedStepsWithCaches,useSnapshotIdentityCache:a.config.fileFormat==="v2"}),oe?.status==="PASSED"||oe?.status==="CANCELLED"&&o.advanced?.saveCacheOnCancel?await Kf(et):oe?.status==="FAILED"&&Fe===ie&&await uT(et),await ee.finish({logger:Z,result:oe});let Qe;if(oe.status==="PASSED"&&lw(t)){e.onStepStart?.(cX);let It=await bEe({runAssertions:t.runAssertions??[],orgId:m,project:a,generator:c,apiClient:l,runTracer:w,runGroupTracer:P,logger:Z,testPlatform:"web",captureEvent:am,abortSignal:e.abortSignal});vo=new Date,It&&(Ne.push(It),Qe=uX(It.evaluations));}let qt=Ne.length>0?{attempts:Ne}:void 0;Pe.unshift(Qe!==void 0?"FAILED":oe.status);let Qo=await NPe({orgId:m,codeEvaluator:Ke,logger:Z,outputDefinitions:t.outputs??[],testContext:Mt}),rn=hX(Pe),al=Fe+1;if(oe.status!=="FAILED"&&Qe===void 0)return {...oe,runAttemptId:at,parameters:k,test:Se,filePath:Se.relativeFilePath,startedAt:W,lastAttemptStartedAt:Tt,finishedAt:vo,attempts:al,baseUrl:u,outputs:Qo,isFlake:rn,runAssertionResults:qt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:H};let Bl=oe.failedStepResult,zi=Qe??(Bl?.message||"Unknown failure"),la=Qe?"AssertionFailureError":Bl?.failureReason??o_(zi)??"UnknownError",ar=Z.child({failureReason:la,errorMessage:zi,numAttempts:(ie+1).toString(),name:Se.name});if(Fe<ie){ar.warn(`Retrying failed execution attempt for run: ${zi}`);continue}ar.error({usedRemoteBrowser:H},`Test failed after all exhausting attempts: ${zi}`);let U=new Error(zi),we={errorMessage:zi,errorStack:U.stack},yt;if(z.ai?.classification?.enabled===!0){let It=Bl?.failureClassification;It||(e.onStepStart?.(pm),It=await cF({runTracer:w,runGroupTracer:P,outputDir:e.outputDir,orgId:m,project:a,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:z.ai,captureEvent:am,abortSignal:e.abortSignal,failedStepMessage:Qe??Bl?.message,runAssertionResults:qt})),It&&(yt=It.classification.category,la=It.classification.category,we.classification={reason:It.classification.category,secondaryCategories:It.classification.secondaryCategories,summary:It.classification.reasoning,recoverable:It.classification.recoverable,confidence:It.classification.confidence,action:It.action,citations:It.classification.citations,cache:It.classification.cache,source:"v2"});}else if(J){let It;try{if(oe.results&&oe.results.length>0){e.onStepStart?.(pm);let{classification:eo,aiFailureReason:um}=await tie({logger:Z,browserStateStorage:ee,generator:c,fullResults:oe,failureReason:la,error:U,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});It=eo,yt=um;}}catch(eo){Z.warn({err:eo},"Failed to classify test results");}It&&(we.classification=It,la=yt??la,we.classification.source="v1");}return {...oe,status:"FAILED",runAttemptId:at,parameters:k,failureDetails:we,failureReason:la,test:Se,filePath:Se.relativeFilePath,startedAt:W,lastAttemptStartedAt:Tt,finishedAt:vo,attempts:Fe+1,baseUrl:u,outputs:Qo,runAssertionResults:qt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:H}}catch(dt){let Mt=`Encountered fatal platform error while running test '${Se.name}'`;return Z.error({err:dt},Mt),C.error({err:dt},Mt),await ee.finish({logger:Z,result:{status:"FAILED"}}),tOe({err:ri(dt),parameters:k,test:Se,failureReason:ne.reasonFor(dt,"InternalPlatformError"),startedAt:W,lastAttemptStartedAt:Tt,attempts:Fe+1,quarantined:N,quarantinedMetadata:D,runAttemptId:at,baseUrl:u,usedRemoteBrowser:H})}finally{Re&&e.abortSignal?.removeEventListener("abort",Re);}}throw new Error("This code should not be reachable")}function tOe({err:e,parameters:t,test:o,failureReason:n,startedAt:r,lastAttemptStartedAt:i,attempts:a,quarantined:s,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}){return {status:"FAILED",results:[],parameters:t,test:o,filePath:o.relativeFilePath,failureReason:n,failureDetails:{errorMessage:e.message,errorStack:e.stack},startedAt:r,lastAttemptStartedAt:i,finishedAt:new Date,attempts:a,outputs:{},quarantined:s,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}}var oOe=3e4;async function $A({timeoutMinutes:e,cancel:t,run:o}){let n=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");zA(),process.once("SIGINT",n),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 o()}finally{process.off("SIGINT",n),process.off("SIGTERM",r),clearTimeout(i);}}var HA=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,o=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();o&&await ge(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:oOe}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${oOe}ms reached while waiting for running tests to settle.`);});let n=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||n.has(r.activeRun.runId))continue;let{activeRun:i}=r,a={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,a);}}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:o,reporter:n,runGroupTracer:r,runGroupLogger:i,logger:a,project:s,client:l,generator:c,orgId:u,userId:d,devicePixelRatio:m,outputDir:p,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,gitMetadata:S,cacheOptions:E,browserTypeOverride:v,remoteBrowserOverride:R,onResult:w,onFatal:P}=this.params,I=0,_=true;for(;_;){let O=Object.values(this.runQueue);if(O.length===o&&await Promise.race(O.map(J=>J.promise)),this.cancelled){_=false;continue}let N=await t();if(N===void 0){_=false;continue}let D=`test-${I++}`,M={...N,startedAt:new Date},z=new AbortController;this.runQueue[D]={done:false,activeRun:M,abortController:z,promise:(async({inputs:J,quarantined:W,quarantinedMetadata:V,testDefinition:k,snapshot:Q,runId:H})=>{let $=k.relativeFilePath.includes("..")?k.fullFilePath:k.relativeFilePath;n.onTestBegin($);let oe=i.child({testId:k.id,runId:H}),ie=new $m({logger:oe,reporter:new Qm(l),runType:"test-run",platform:"WEB",runId:H,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:k,suiteMetadata:void 0,runner:"test-runner"});try{let Pe=await eOe({testDefinition:k,snapshot:Q,project:s,testInputs:J,quarantined:W,quarantinedMetadata:V,orgId:u,userId:d,runId:H,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,logUpdate:(Ne,Fe)=>n.onTestStatus($,Ne,Fe),...wpe(n,$),logger:oe,gitMetadata:S,cacheOptions:E,usageTracker:ie,browserTypeOverride:v,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:z.signal,traceMetadata:this.params.traceMetadata});n.onTestEnd($,Pe.status,{recovered:Pe.status==="PASSED"&&!!Pe.failureRecoveryDetails?.attempts}),this.runResults.push(Pe),w?.(Pe);}catch(Pe){let Ne=`Encountered unexpected fatal error when running test '${k.name}'`;oe.error({err:Pe},Ne),C.error({err:Pe},Ne),Ch(Pe),P?.(Pe),await this.cancel("Fatal error occurred",false);}finally{let Pe=this.runQueue[D];Pe&&(Pe.done=true),await ie.flush(a),delete this.runQueue[D];}})(M)};}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 gB(e){return createHash("sha1").update(e).digest("hex")}var iPt=["tab","view","mode","step"],aPt=[/^[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 sPt(e){return aPt.some(t=>t.test(e))}function nOe(e,t={}){let o;try{o=new URL(e);}catch{return e}let n=new Set(t.queryAllowlist??iPt),i=o.pathname.split("/").map(c=>c.length>0&&sPt(c)?"{id}":c).join("/"),a=[],s=Array.from(o.searchParams.keys()).sort();for(let c of s){if(!n.has(c))continue;let u=o.searchParams.getAll(c).sort();for(let d of u)a.push(`${encodeURIComponent(c)}=${encodeURIComponent(d)}`);}let l=a.length>0?`?${a.join("&")}`:"";return `${o.protocol}//${o.host}${i}${l}`}var U3=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),lPt=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,cPt=[/\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],rOe=new Set(["h1","h2","h3","h4","h5","h6"]),uPt=new Set(["input","select","textarea"]);function dPt(e){let t=e;for(let o of cPt)t=t.replace(o,"{id}");return t}function iOe(e){return dPt(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function mPt(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 pPt(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":lPt.test(t)?"@gen":iOe(t)}function aOe(e,t,o){let n=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),a=`<${n}@${i}`;if(r!==void 0&&(a+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>U3.has(c.toLowerCase())).sort();for(let c of l){let u=c.toLowerCase();if(u==="role")continue;let d=e.attributes[c];if(d===void 0)continue;let m=pPt(u,d);a+=` ${u}=${m}`;}}o.tokens.push(a);let s=e.text?.trim();s!==void 0&&s.length>0&&(r==="button"||r==="link"||r==="heading"||n==="button"||n==="a"||n==="label"||rOe.has(n)?o.tokens.push(`label=${iOe(s)}`):o.tokens.push(mPt(s))),(n==="button"||r==="button")&&(o.counts.buttons+=1),(n==="a"||r==="link")&&(o.counts.links+=1),(uPt.has(n)||r==="textbox"||r==="combobox")&&(o.counts.formFields+=1),(rOe.has(n)||r==="heading")&&(o.counts.headings+=1);for(let l of e.children??[])aOe(l,t+1,o);}function sOe(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return aOe(e,0,t),{tokens:t.tokens,counts:t.counts}}function lOe(e,t){let o=new TextEncoder().encode(e),n=o.length,r=Math.floor(n/4),i=t>>>0,a=3432918353,s=461845907;for(let d=0;d<r;d++){let m=d*4,p=o[m]|o[m+1]<<8|o[m+2]<<16|o[m+3]<<24;p=Math.imul(p,a),p=p<<15|p>>>17,p=Math.imul(p,s),i^=p,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=n&3,u=r*4;return c===3&&(l^=o[u+2]<<16),c>=2&&(l^=o[u+1]<<8),c>=1&&(l^=o[u],l=Math.imul(l,a),l=l<<15|l>>>17,l=Math.imul(l,s),i^=l),i^=n,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var fB=128,hPt=4294967295,gPt=(()=>{let e=[];for(let t=0;t<fB;t++)e.push(lOe(`perm:${t}`,0));return e})();function cOe(e){let t=new Uint32Array(fB);for(let n=0;n<fB;n++)t[n]=hPt;let o=new Set(e);for(let n of o)for(let r=0;r<fB;r++){let i=lOe(n,gPt[r]);i<t[r]&&(t[r]=i);}return t}var yPt=32;function yB(e){let t=nOe(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:o,counts:n}=sOe(e.dom),r=[`url:${t}`,`counts:buttons=${n.buttons}`,`counts:links=${n.links}`,`counts:formFields=${n.formFields}`,`counts:headings=${n.headings}`,...o],i=cOe(r),a=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(a).digest("hex").slice(0,yPt),minhash:Array.from(i),canonicalUrl:t}}var bPt=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",F;(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";})(F||(F={}));var ws={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function bB(e){return e>=55296&&e<=57343}function uOe(e){return e>=56320&&e<=57343}function dOe(e,t){return (e-55296)*1024+9216+t}function SB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function TB(e){return e>=64976&&e<=65007||bPt.has(e)}var he;(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";})(he||(he={}));var TPt=65536,vB=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=TPt,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,o){let{line:n,col:r,offset:i}=this,a=r+o,s=i+o;return {code:t,startLine:n,endLine:n,startCol:a,endCol:a,startOffset:s,endOffset:s}}_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 o=this.html.charCodeAt(this.pos+1);if(uOe(o))return this.pos++,this._addGap(),dOe(t,o)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,F.EOF;return this._err(he.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,o){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=o;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,o){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(o)return this.html.startsWith(t,this.pos);for(let n=0;n<t.length;n++)if((this.html.charCodeAt(this.pos+n)|32)!==t.charCodeAt(n))return false;return true}peek(t){let o=this.pos+t;if(o>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let n=this.html.charCodeAt(o);return n===F.CARRIAGE_RETURN?F.LINE_FEED:n}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,F.EOF;let t=this.html.charCodeAt(this.pos);return t===F.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,F.LINE_FEED):t===F.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,bB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===F.LINE_FEED||t===F.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){SB(t)?this._err(he.controlCharacterInInputStream):TB(t)&&this._err(he.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var Mo;(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";})(Mo||(Mo={}));function AB(e,t){for(let o=e.attrs.length-1;o>=0;o--)if(e.attrs[o].name===t)return e.attrs[o].value;return null}var APt=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 mOe(e){return e>=55296&&e<=57343||e>1114111?65533:APt.get(e)??e}function pOe(e){let t=atob(e),o=t.length&-2,n=new Uint16Array(o/2);for(let r=0,i=0;r<o;r+=2){let a=t.charCodeAt(r),s=t.charCodeAt(r+1);n[i++]=a|s<<8;}return n}var z3=pOe("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var Da;(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";})(Da||(Da={}));var hr;(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";})(hr||(hr={}));var hOe=32;function j3(e){return e>=hr.ZERO&&e<=hr.NINE}function EPt(e){return e>=hr.UPPER_A&&e<=hr.UPPER_F||e>=hr.LOWER_A&&e<=hr.LOWER_F}function wPt(e){return e>=hr.UPPER_A&&e<=hr.UPPER_Z||e>=hr.LOWER_A&&e<=hr.LOWER_Z||j3(e)}function RPt(e){return e===hr.EQUALS||wPt(e)}var Ui;(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";})(Ui||(Ui={}));var sm;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(sm||(sm={}));var EB=class{decodeTree;emitCodePoint;errors;constructor(t,o,n){this.decodeTree=t,this.emitCodePoint=o,this.errors=n;}state=Ui.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=sm.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ui.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,o){switch(this.state){case Ui.EntityStart:return t.charCodeAt(o)===hr.NUM?(this.state=Ui.NumericStart,this.consumed+=1,this.stateNumericStart(t,o+1)):(this.state=Ui.NamedEntity,this.stateNamedEntity(t,o));case Ui.NumericStart:return this.stateNumericStart(t,o);case Ui.NumericDecimal:return this.stateNumericDecimal(t,o);case Ui.NumericHex:return this.stateNumericHex(t,o);case Ui.NamedEntity:return this.stateNamedEntity(t,o)}}stateNumericStart(t,o){return o>=t.length?-1:(t.charCodeAt(o)|hOe)===hr.LOWER_X?(this.state=Ui.NumericHex,this.consumed+=1,this.stateNumericHex(t,o+1)):(this.state=Ui.NumericDecimal,this.stateNumericDecimal(t,o))}stateNumericHex(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(j3(n)||EPt(n)){let r=n<=hr.NINE?n-hr.ZERO:(n|hOe)-hr.LOWER_A+10;this.result=this.result*16+r,this.consumed++,o++;}else return this.emitNumericEntity(n,3)}return -1}stateNumericDecimal(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(j3(n))this.result=this.result*10+(n-hr.ZERO),this.consumed++,o++;else return this.emitNumericEntity(n,2)}return -1}emitNumericEntity(t,o){if(this.consumed<=o)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===hr.SEMI)this.consumed+=1;else if(this.decodeMode===sm.Strict)return 0;return this.emitCodePoint(mOe(this.result),this.consumed),this.errors&&(t!==hr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,o){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14;for(;o<t.length;){if(i===0&&r&Da.FLAG13){let s=(r&Da.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Da.JUMP_TABLE;if(t.charCodeAt(o)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();o++,this.excess++,this.runConsumed++;}for(;this.runConsumed<s;){if(o>=t.length)return -1;let l=this.runConsumed-1,c=n[this.treeIndex+1+(l>>1)],u=l%2===0?c&255:c>>8&255;if(t.charCodeAt(o)!==u)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();o++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(s>>1),r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14;}if(o>=t.length)break;let a=t.charCodeAt(o);if(a===hr.SEMI&&i!==0&&r&Da.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=CPt(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===sm.Attribute&&(i===0||RPt(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&Da.VALUE_LENGTH)>>14,i!==0){if(a===hr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==sm.Strict&&!(r&Da.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}o++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:o}=this,n=(o[t]&Da.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,n,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,o,n){let{decodeTree:r}=this;return this.emitCodePoint(o===1?r[t]&~(Da.VALUE_LENGTH|Da.FLAG13):r[t+1],n),o===3&&this.emitCodePoint(r[t+2],n),n}end(){switch(this.state){case Ui.NamedEntity:return this.result!==0&&(this.decodeMode!==sm.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ui.NumericDecimal:return this.emitNumericEntity(0,2);case Ui.NumericHex:return this.emitNumericEntity(0,3);case Ui.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ui.EntityStart:return 0}}};function CPt(e,t,o,n){let r=(t&Da.BRANCH_LENGTH)>>7,i=t&Da.JUMP_TABLE;if(r===0)return i!==0&&n===i?o:-1;if(i){let c=n-i;return c<0||c>=r?-1:e[o+c]-1}let a=r+1>>1,s=0,l=r-1;for(;s<=l;){let c=s+l>>>1,u=c>>1,m=e[o+u]>>(c&1)*8&255;if(m<n)s=c+1;else if(m>n)l=c-1;else return e[o+a+c]}return -1}var Ie;(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/";})(Ie||(Ie={}));var jp;(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";})(jp||(jp={}));var Rs;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Rs||(Rs={}));var ae;(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";})(ae||(ae={}));var T;(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";})(T||(T={}));var IPt=new Map([[ae.A,T.A],[ae.ADDRESS,T.ADDRESS],[ae.ANNOTATION_XML,T.ANNOTATION_XML],[ae.APPLET,T.APPLET],[ae.AREA,T.AREA],[ae.ARTICLE,T.ARTICLE],[ae.ASIDE,T.ASIDE],[ae.B,T.B],[ae.BASE,T.BASE],[ae.BASEFONT,T.BASEFONT],[ae.BGSOUND,T.BGSOUND],[ae.BIG,T.BIG],[ae.BLOCKQUOTE,T.BLOCKQUOTE],[ae.BODY,T.BODY],[ae.BR,T.BR],[ae.BUTTON,T.BUTTON],[ae.CAPTION,T.CAPTION],[ae.CENTER,T.CENTER],[ae.CODE,T.CODE],[ae.COL,T.COL],[ae.COLGROUP,T.COLGROUP],[ae.DD,T.DD],[ae.DESC,T.DESC],[ae.DETAILS,T.DETAILS],[ae.DIALOG,T.DIALOG],[ae.DIR,T.DIR],[ae.DIV,T.DIV],[ae.DL,T.DL],[ae.DT,T.DT],[ae.EM,T.EM],[ae.EMBED,T.EMBED],[ae.FIELDSET,T.FIELDSET],[ae.FIGCAPTION,T.FIGCAPTION],[ae.FIGURE,T.FIGURE],[ae.FONT,T.FONT],[ae.FOOTER,T.FOOTER],[ae.FOREIGN_OBJECT,T.FOREIGN_OBJECT],[ae.FORM,T.FORM],[ae.FRAME,T.FRAME],[ae.FRAMESET,T.FRAMESET],[ae.H1,T.H1],[ae.H2,T.H2],[ae.H3,T.H3],[ae.H4,T.H4],[ae.H5,T.H5],[ae.H6,T.H6],[ae.HEAD,T.HEAD],[ae.HEADER,T.HEADER],[ae.HGROUP,T.HGROUP],[ae.HR,T.HR],[ae.HTML,T.HTML],[ae.I,T.I],[ae.IMG,T.IMG],[ae.IMAGE,T.IMAGE],[ae.INPUT,T.INPUT],[ae.IFRAME,T.IFRAME],[ae.KEYGEN,T.KEYGEN],[ae.LABEL,T.LABEL],[ae.LI,T.LI],[ae.LINK,T.LINK],[ae.LISTING,T.LISTING],[ae.MAIN,T.MAIN],[ae.MALIGNMARK,T.MALIGNMARK],[ae.MARQUEE,T.MARQUEE],[ae.MATH,T.MATH],[ae.MENU,T.MENU],[ae.META,T.META],[ae.MGLYPH,T.MGLYPH],[ae.MI,T.MI],[ae.MO,T.MO],[ae.MN,T.MN],[ae.MS,T.MS],[ae.MTEXT,T.MTEXT],[ae.NAV,T.NAV],[ae.NOBR,T.NOBR],[ae.NOFRAMES,T.NOFRAMES],[ae.NOEMBED,T.NOEMBED],[ae.NOSCRIPT,T.NOSCRIPT],[ae.OBJECT,T.OBJECT],[ae.OL,T.OL],[ae.OPTGROUP,T.OPTGROUP],[ae.OPTION,T.OPTION],[ae.P,T.P],[ae.PARAM,T.PARAM],[ae.PLAINTEXT,T.PLAINTEXT],[ae.PRE,T.PRE],[ae.RB,T.RB],[ae.RP,T.RP],[ae.RT,T.RT],[ae.RTC,T.RTC],[ae.RUBY,T.RUBY],[ae.S,T.S],[ae.SCRIPT,T.SCRIPT],[ae.SEARCH,T.SEARCH],[ae.SECTION,T.SECTION],[ae.SELECT,T.SELECT],[ae.SOURCE,T.SOURCE],[ae.SMALL,T.SMALL],[ae.SPAN,T.SPAN],[ae.STRIKE,T.STRIKE],[ae.STRONG,T.STRONG],[ae.STYLE,T.STYLE],[ae.SUB,T.SUB],[ae.SUMMARY,T.SUMMARY],[ae.SUP,T.SUP],[ae.TABLE,T.TABLE],[ae.TBODY,T.TBODY],[ae.TEMPLATE,T.TEMPLATE],[ae.TEXTAREA,T.TEXTAREA],[ae.TFOOT,T.TFOOT],[ae.TD,T.TD],[ae.TH,T.TH],[ae.THEAD,T.THEAD],[ae.TITLE,T.TITLE],[ae.TR,T.TR],[ae.TRACK,T.TRACK],[ae.TT,T.TT],[ae.U,T.U],[ae.UL,T.UL],[ae.SVG,T.SVG],[ae.VAR,T.VAR],[ae.WBR,T.WBR],[ae.XMP,T.XMP]]);function Tb(e){var t;return (t=IPt.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var Be=T,gOe={[Ie.HTML]:new Set([Be.ADDRESS,Be.APPLET,Be.AREA,Be.ARTICLE,Be.ASIDE,Be.BASE,Be.BASEFONT,Be.BGSOUND,Be.BLOCKQUOTE,Be.BODY,Be.BR,Be.BUTTON,Be.CAPTION,Be.CENTER,Be.COL,Be.COLGROUP,Be.DD,Be.DETAILS,Be.DIR,Be.DIV,Be.DL,Be.DT,Be.EMBED,Be.FIELDSET,Be.FIGCAPTION,Be.FIGURE,Be.FOOTER,Be.FORM,Be.FRAME,Be.FRAMESET,Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6,Be.HEAD,Be.HEADER,Be.HGROUP,Be.HR,Be.HTML,Be.IFRAME,Be.IMG,Be.INPUT,Be.LI,Be.LINK,Be.LISTING,Be.MAIN,Be.MARQUEE,Be.MENU,Be.META,Be.NAV,Be.NOEMBED,Be.NOFRAMES,Be.NOSCRIPT,Be.OBJECT,Be.OL,Be.P,Be.PARAM,Be.PLAINTEXT,Be.PRE,Be.SCRIPT,Be.SECTION,Be.SELECT,Be.SOURCE,Be.STYLE,Be.SUMMARY,Be.TABLE,Be.TBODY,Be.TD,Be.TEMPLATE,Be.TEXTAREA,Be.TFOOT,Be.TH,Be.THEAD,Be.TITLE,Be.TR,Be.TRACK,Be.UL,Be.WBR,Be.XMP]),[Ie.MATHML]:new Set([Be.MI,Be.MO,Be.MN,Be.MS,Be.MTEXT,Be.ANNOTATION_XML]),[Ie.SVG]:new Set([Be.TITLE,Be.FOREIGN_OBJECT,Be.DESC]),[Ie.XLINK]:new Set,[Ie.XML]:new Set,[Ie.XMLNS]:new Set},hx=new Set([Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6]);new Set([ae.STYLE,ae.SCRIPT,ae.XMP,ae.IFRAME,ae.NOEMBED,ae.NOFRAMES,ae.PLAINTEXT]);var j;(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";})(j||(j={}));var Fa={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function _Pt(e){return e>=F.DIGIT_0&&e<=F.DIGIT_9}function gx(e){return e>=F.LATIN_CAPITAL_A&&e<=F.LATIN_CAPITAL_Z}function PPt(e){return e>=F.LATIN_SMALL_A&&e<=F.LATIN_SMALL_Z}function ef(e){return PPt(e)||gx(e)}function fOe(e){return ef(e)||_Pt(e)}function wB(e){return e+32}function bOe(e){return e===F.SPACE||e===F.LINE_FEED||e===F.TABULATION||e===F.FORM_FEED}function yOe(e){return bOe(e)||e===F.SOLIDUS||e===F.GREATER_THAN_SIGN}function OPt(e){return e===F.NULL?he.nullCharacterReference:e>1114111?he.characterReferenceOutsideUnicodeRange:bB(e)?he.surrogateCharacterReference:TB(e)?he.noncharacterCharacterReference:SB(e)||e===F.CARRIAGE_RETURN?he.controlCharacterReference:null}var fx=class{constructor(t,o){this.options=t,this.handler=o,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=j.DATA,this.returnState=j.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new vB(o),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new EB(z3,(n,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(n);},o.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(he.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:n=>{this._err(he.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n);},validateNumericCharacterReference:n=>{let r=OPt(n);r&&this._err(r,1);}}:void 0);}_err(t,o=0){var n,r;(r=(n=this.handler).onParseError)===null||r===void 0||r.call(n,this.preprocessor.getError(t,o));}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,o,n){this.active=true,this.preprocessor.write(t,o),this._runParsingLoop(),this.paused||n?.();}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 o=0;o<t;o++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,o){return this.preprocessor.startsWith(t,o)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:Mo.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:Mo.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:Mo.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:Mo.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,o){this.currentCharacterToken={type:t,chars:o,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,o;let n=this.currentToken;if(AB(n,this.currentAttr.name)===null){if(n.attrs.push(this.currentAttr),n.location&&this.currentLocation){let r=(t=(o=n.location).attrs)!==null&&t!==void 0?t:o.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(he.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=Tb(t.tagName),t.type===Mo.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(he.endTagWithAttributes),t.selfClosing&&this._err(he.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 Mo.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Mo.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Mo.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:Mo.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,o){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=o;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,o);}_emitCodePoint(t){let o=bOe(t)?Mo.WHITESPACE_CHARACTER:t===F.NULL?Mo.NULL_CHARACTER:Mo.CHARACTER;this._appendCharToCurrentCharacterToken(o,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(Mo.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?sm.Attribute:sm.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case j.DATA:{this._stateData(t);break}case j.RCDATA:{this._stateRcdata(t);break}case j.RAWTEXT:{this._stateRawtext(t);break}case j.SCRIPT_DATA:{this._stateScriptData(t);break}case j.PLAINTEXT:{this._statePlaintext(t);break}case j.TAG_OPEN:{this._stateTagOpen(t);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case j.TAG_NAME:{this._stateTagName(t);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case j.BOGUS_COMMENT:{this._stateBogusComment(t);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case j.COMMENT_START:{this._stateCommentStart(t);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case j.COMMENT:{this._stateComment(t);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case j.COMMENT_END:{this._stateCommentEnd(t);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case j.DOCTYPE:{this._stateDoctype(t);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case j.CDATA_SECTION:{this._stateCdataSection(t);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitCodePoint(t);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case F.AMPERSAND:{this._startCharacterReference();break}case F.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(ef(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case F.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case F.QUESTION_MARK:{this._err(he.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(ef(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.GREATER_THAN_SIGN:{this._err(he.missingEndTagName),this.state=j.DATA;break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.tagName+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:o.tagName+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateRcdataLessThanSign(t){t===F.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){ef(t)?(this.state=j.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,false))return !this._ensureHibernation();this._createEndTagToken();let o=this.currentToken;switch(o.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case F.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case F.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===F.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){ef(t)?(this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case F.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case F.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){ef(t)?(this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===F.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:ef(t)?(this._emitChars("<"),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagOpen(t){ef(t)?(this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(ws.SCRIPT,false)&&yOe(this.preprocessor.peek(ws.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ws.SCRIPT.length;o++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars($n);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===F.SOLIDUS?(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(ws.SCRIPT,false)&&yOe(this.preprocessor.peek(ws.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ws.SCRIPT.length;o++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._err(he.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:{this._err(he.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.name+=$n;break}default:this.currentAttr.name+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateAfterAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case F.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=$n;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:case F.EQUALS_SIGN:case F.GRAVE_ACCENT:{this._err(he.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case F.GREATER_THAN_SIGN:{let o=this.currentToken;o.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this.emitCurrentComment(o),this._emitEOFToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.data+=$n;break}default:o.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(ws.DASH_DASH,true)?(this._createCommentToken(ws.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(ws.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(ws.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(ws.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(he.cdataInHtmlContent),this._createCommentToken(ws.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(he.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA;let o=this.currentToken;this.emitCurrentComment(o);break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateComment(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case F.LESS_THAN_SIGN:{o.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.data+=$n;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let o=this.currentToken;switch(t){case F.EXCLAMATION_MARK:{o.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case F.LESS_THAN_SIGN:{o.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==F.GREATER_THAN_SIGN&&t!==F.EOF&&this._err(he.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case F.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case F.HYPHEN_MINUS:{o.data+="-";break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let o=this.currentToken;switch(t){case F.HYPHEN_MINUS:{o.data+="--!",this.state=j.COMMENT_END_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(o);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(gx(t))this._createDoctypeToken(String.fromCharCode(wB(t))),this.state=j.DOCTYPE_NAME;else switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.NULL:{this._err(he.unexpectedNullCharacter),this._createDoctypeToken($n),this.state=j.DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeName),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=j.DOCTYPE_NAME;}}_stateDoctypeName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.name+=$n;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.name+=String.fromCodePoint(gx(t)?wB(t):t);}}_stateAfterDoctypeName(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(ws.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(ws.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(he.invalidCharacterSequenceAfterDoctypeName),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.publicId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let o=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.publicId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.systemId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let o=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),o.systemId+=$n;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(he.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let o=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case F.NULL:{this._err(he.unexpectedNullCharacter);break}case F.EOF:{this.emitCurrentDoctype(o),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case F.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case F.EOF:{this._err(he.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===F.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA;break}case F.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.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(F.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&fOe(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){fOe(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===F.SEMICOLON&&this._err(he.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var AOe=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),SOe=new Set([...AOe,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),RB=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),kPt=new Set([...RB,T.OL,T.UL]),MPt=new Set([...RB,T.BUTTON]),TOe=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),vOe=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),LPt=new Set([T.TR,T.TEMPLATE,T.HTML]),NPt=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),DPt=new Set([T.TABLE,T.TEMPLATE,T.HTML]),FPt=new Set([T.TD,T.TH]),CB=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,o,n){this.treeAdapter=o,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=T.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===T.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===Ie.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,o){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=o,this.currentTagId=o,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,o,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,o){let n=this._indexOf(t);this.items[n]=o,n===this.stackTop&&(this.current=o);}insertAfter(t,o,n){let r=this._indexOf(t)+1;this.items.splice(r,0,o),this.tagIDs.splice(r,0,n),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 o=this.stackTop+1;do o=this.tagIDs.lastIndexOf(t,o-1);while(o>0&&this.treeAdapter.getNamespaceURI(this.items[o])!==Ie.HTML);this.shortenToLength(Math.max(o,0));}shortenToLength(t){for(;this.stackTop>=t;){let o=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(o,this.stackTop<t);}}popUntilElementPopped(t){let o=this._indexOf(t);this.shortenToLength(Math.max(o,0));}popUntilPopped(t,o){let n=this._indexOfTagNames(t,o);this.shortenToLength(Math.max(n,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(hx,Ie.HTML);}popUntilTableCellPopped(){this.popUntilPopped(FPt,Ie.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,o){for(let n=this.stackTop;n>=0;n--)if(t.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===o)return n;return -1}clearBackTo(t,o){let n=this._indexOfTagNames(t,o);this.shortenToLength(n+1);}clearBackToTableContext(){this.clearBackTo(DPt,Ie.HTML);}clearBackToTableBodyContext(){this.clearBackTo(NPt,Ie.HTML);}clearBackToTableRowContext(){this.clearBackTo(LPt,Ie.HTML);}remove(t){let o=this._indexOf(t);o>=0&&(o===this.stackTop?this.pop():(this.items.splice(o,1),this.tagIDs.splice(o,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===T.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let o=this._indexOf(t)-1;return o>=0?this.items[o]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===T.HTML}hasInDynamicScope(t,o){for(let n=this.stackTop;n>=0;n--){let r=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case Ie.HTML:{if(r===t)return true;if(o.has(r))return false;break}case Ie.SVG:{if(vOe.has(r))return false;break}case Ie.MATHML:{if(TOe.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,RB)}hasInListItemScope(t){return this.hasInDynamicScope(t,kPt)}hasInButtonScope(t){return this.hasInDynamicScope(t,MPt)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let o=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Ie.HTML:{if(hx.has(o))return true;if(RB.has(o))return false;break}case Ie.SVG:{if(vOe.has(o))return false;break}case Ie.MATHML:{if(TOe.has(o))return false;break}}}return true}hasInTableScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Ie.HTML)switch(this.tagIDs[o]){case t:return true;case T.TABLE:case T.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===Ie.HTML)switch(this.tagIDs[t]){case T.TBODY:case T.THEAD:case T.TFOOT:return true;case T.TABLE:case T.HTML:return false}return true}hasInSelectScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Ie.HTML)switch(this.tagIDs[o]){case t:return true;case T.OPTION:case T.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&AOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&SOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&SOe.has(this.currentTagId);)this.pop();}};var Cu;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cu||(Cu={}));var EOe={type:Cu.Marker},IB=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,o){let n=[],r=o.length,i=this.treeAdapter.getTagName(t),a=this.treeAdapter.getNamespaceURI(t);for(let s=0;s<this.entries.length;s++){let l=this.entries[s];if(l.type===Cu.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===a){let u=this.treeAdapter.getAttrList(c);u.length===r&&n.push({idx:s,attrs:u});}}return n}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let o=this.treeAdapter.getAttrList(t),n=this._getNoahArkConditionCandidates(t,o);if(n.length<3)return;let r=new Map(o.map(a=>[a.name,a.value])),i=0;for(let a=0;a<n.length;a++){let s=n[a];s.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(s.idx,1));}}insertMarker(){this.entries.unshift(EOe);}pushElement(t,o){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cu.Element,element:t,token:o});}insertElementAfterBookmark(t,o){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:Cu.Element,element:t,token:o});}removeEntry(t){let o=this.entries.indexOf(t);o!==-1&&this.entries.splice(o,1);}clearToLastMarker(){let t=this.entries.indexOf(EOe);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let o=this.entries.find(n=>n.type===Cu.Marker||this.treeAdapter.getTagName(n.element)===t);return o&&o.type===Cu.Element?o:null}getElementEntry(t){return this.entries.find(o=>o.type===Cu.Element&&o.element===t)}};var Iu={createDocument(){return {nodeName:"#document",mode:Rs.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,o){return {nodeName:e,tagName:e,attrs:o,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,o){let n=e.childNodes.indexOf(o);e.childNodes.splice(n,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,o,n){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=o,r.systemId=n;else {let i={nodeName:"#documentType",name:t,publicId:o,systemId:n,parentNode:null};Iu.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 o=e.childNodes[e.childNodes.length-1];if(Iu.isTextNode(o)){o.value+=t;return}}Iu.appendChild(e,Iu.createTextNode(t));},insertTextBefore(e,t,o){let n=e.childNodes[e.childNodes.indexOf(o)-1];n&&Iu.isTextNode(n)?n.value+=t:Iu.insertBefore(e,Iu.createTextNode(t),o);},adoptAttributes(e,t){let o=new Set(e.attrs.map(n=>n.name));for(let n=0;n<t.length;n++)o.has(t[n].name)||e.attrs.push(t[n]);},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 ROe="html",BPt="about:legacy-compat",UPt="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",COe=["+//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//"],zPt=[...COe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],jPt=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),IOe=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],HPt=[...IOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function wOe(e,t){return t.some(o=>e.startsWith(o))}function xOe(e){return e.name===ROe&&e.publicId===null&&(e.systemId===null||e.systemId===BPt)}function _Oe(e){if(e.name!==ROe)return Rs.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===UPt)return Rs.QUIRKS;let{publicId:o}=e;if(o!==null){if(o=o.toLowerCase(),jPt.has(o))return Rs.QUIRKS;let n=t===null?zPt:COe;if(wOe(o,n))return Rs.QUIRKS;if(n=t===null?IOe:HPt,wOe(o,n))return Rs.LIMITED_QUIRKS}return Rs.NO_QUIRKS}var POe={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},GPt="definitionurl",VPt="definitionURL",WPt=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])),qPt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Ie.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Ie.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Ie.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Ie.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Ie.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Ie.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Ie.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Ie.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Ie.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Ie.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Ie.XMLNS}]]),KPt=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])),YPt=new Set([T.B,T.BIG,T.BLOCKQUOTE,T.BODY,T.BR,T.CENTER,T.CODE,T.DD,T.DIV,T.DL,T.DT,T.EM,T.EMBED,T.H1,T.H2,T.H3,T.H4,T.H5,T.H6,T.HEAD,T.HR,T.I,T.IMG,T.LI,T.LISTING,T.MENU,T.META,T.NOBR,T.OL,T.P,T.PRE,T.RUBY,T.S,T.SMALL,T.SPAN,T.STRONG,T.STRIKE,T.SUB,T.SUP,T.TABLE,T.TT,T.U,T.UL,T.VAR]);function OOe(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:n})=>n===jp.COLOR||n===jp.SIZE||n===jp.FACE)||YPt.has(t)}function H3(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===GPt){e.attrs[t].name=VPt;break}}function $3(e){for(let t=0;t<e.attrs.length;t++){let o=WPt.get(e.attrs[t].name);o!=null&&(e.attrs[t].name=o);}}function xB(e){for(let t=0;t<e.attrs.length;t++){let o=qPt.get(e.attrs[t].name);o&&(e.attrs[t].prefix=o.prefix,e.attrs[t].name=o.name,e.attrs[t].namespace=o.namespace);}}function kOe(e){let t=KPt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Tb(e.tagName));}function JPt(e,t){return t===Ie.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function XPt(e,t,o){if(t===Ie.MATHML&&e===T.ANNOTATION_XML){for(let n=0;n<o.length;n++)if(o[n].name===jp.ENCODING){let r=o[n].value.toLowerCase();return r===POe.TEXT_HTML||r===POe.APPLICATION_XML}}return t===Ie.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function MOe(e,t,o,n){return (!n||n===Ie.HTML)&&XPt(e,t,o)||(!n||n===Ie.MATHML)&&JPt(e,t)}var QPt="hidden",ZPt=8,eOt=3,K;(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";})(K||(K={}));var tOt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},BOe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),NOe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Iu,onParseError:null},wx=class{constructor(t,o,n=null,r=null){this.fragmentContext=n,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=K.INITIAL,this.originalInsertionMode=K.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={...NOe,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=o??this.treeAdapter.createDocument(),this.tokenizer=new fx(this.options,this),this.activeFormattingElements=new IB(this.treeAdapter),this.fragmentContextID=n?Tb(this.treeAdapter.getTagName(n)):T.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new CB(this.document,this.treeAdapter,this);}static parse(t,o){let n=new this(o);return n.tokenizer.write(t,true),n.document}static getFragmentParser(t,o){let n={...NOe,...o};t??(t=n.treeAdapter.createElement(ae.TEMPLATE,Ie.HTML,[]));let r=n.treeAdapter.createElement("documentmock",Ie.HTML,[]),i=new this(n,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(K.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),o=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,o),o}_err(t,o,n){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:tOt,a={code:o,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:n?i.startLine:i.endLine,endCol:n?i.startCol:i.endCol,endOffset:n?i.startOffset:i.endOffset};this.onParseError(a);}onItemPush(t,o,n){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),n&&this.openElements.stackTop>0&&this._setContextModes(t,o);}onItemPop(t,o){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(n=this.treeAdapter).onItemPop)===null||r===void 0||r.call(n,t,this.openElements.current),o){let i,a;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,a=this.fragmentContextID):{current:i,currentTagId:a}=this.openElements,this._setContextModes(i,a);}}_setContextModes(t,o){let n=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===Ie.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&o!==void 0&&!this._isIntegrationPoint(o,t);}_switchToTextParsing(t,o){this._insertElement(t,Ie.HTML),this.tokenizer.state=o,this.originalInsertionMode=this.insertionMode,this.insertionMode=K.TEXT;}switchToPlaintextParsing(){this.insertionMode=K.TEXT,this.originalInsertionMode=K.IN_BODY,this.tokenizer.state=Fa.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)===ae.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==Ie.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Fa.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Fa.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Fa.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Fa.PLAINTEXT;break}}}_setDocumentType(t){let o=t.name||"",n=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,o,n,r),t.location){let a=this.treeAdapter.getChildNodes(this.document).find(s=>this.treeAdapter.isDocumentTypeNode(s));a&&this.treeAdapter.setNodeSourceCodeLocation(a,t.location);}}_attachElementToTree(t,o){if(this.options.sourceCodeLocationInfo){let n=o&&{...o,startTag:o};this.treeAdapter.setNodeSourceCodeLocation(t,n);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,t);}}_appendElement(t,o){let n=this.treeAdapter.createElement(t.tagName,o,t.attrs);this._attachElementToTree(n,t.location);}_insertElement(t,o){let n=this.treeAdapter.createElement(t.tagName,o,t.attrs);this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID);}_insertFakeElement(t,o){let n=this.treeAdapter.createElement(t,Ie.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,o);}_insertTemplate(t){let o=this.treeAdapter.createElement(t.tagName,Ie.HTML,t.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(o,n),this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(ae.HTML,Ie.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,T.HTML);}_appendCommentNode(t,o){let n=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(o,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,t.location);}_insertCharacters(t){let o,n;if(this._shouldFosterParentOnInsertion()?({parent:o,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(o,t.chars,n):this.treeAdapter.insertText(o,t.chars)):(o=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(o,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(o),i=n?r.lastIndexOf(n):r.length,a=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(a)){let{endLine:l,endCol:c,endOffset:u}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(a,{endLine:l,endCol:c,endOffset:u});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(a,t.location);}_adoptNodes(t,o){for(let n=this.treeAdapter.getFirstChild(t);n;n=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(o,n);}_setEndLocation(t,o){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&o.location){let n=o.location,r=this.treeAdapter.getTagName(t),i=o.type===Mo.END_TAG&&r===o.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let o,n;return this.openElements.stackTop===0&&this.fragmentContext?(o=this.fragmentContext,n=this.fragmentContextID):{current:o,currentTagId:n}=this.openElements,t.tagID===T.SVG&&this.treeAdapter.getTagName(o)===ae.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(o)===Ie.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,o,Ie.HTML)}_processToken(t){switch(t.type){case Mo.CHARACTER:{this.onCharacter(t);break}case Mo.NULL_CHARACTER:{this.onNullCharacter(t);break}case Mo.COMMENT:{this.onComment(t);break}case Mo.DOCTYPE:{this.onDoctype(t);break}case Mo.START_TAG:{this._processStartTag(t);break}case Mo.END_TAG:{this.onEndTag(t);break}case Mo.EOF:{this.onEof(t);break}case Mo.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,o,n){let r=this.treeAdapter.getNamespaceURI(o),i=this.treeAdapter.getAttrList(o);return MOe(t,r,i,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let o=this.activeFormattingElements.entries.findIndex(r=>r.type===Cu.Marker||this.openElements.contains(r.element)),n=o===-1?t-1:o-1;for(let r=n;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=K.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(T.P),this.openElements.popUntilTagNamePopped(T.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case T.TR:{this.insertionMode=K.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=K.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=K.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=K.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=K.IN_TABLE;return}case T.BODY:{this.insertionMode=K.IN_BODY;return}case T.FRAMESET:{this.insertionMode=K.IN_FRAMESET;return}case T.SELECT:{this._resetInsertionModeForSelect(t);return}case T.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case T.HTML:{this.insertionMode=this.headElement?K.AFTER_HEAD:K.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=K.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=K.IN_HEAD;return}break}}this.insertionMode=K.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let o=t-1;o>0;o--){let n=this.openElements.tagIDs[o];if(n===T.TEMPLATE)break;if(n===T.TABLE){this.insertionMode=K.IN_SELECT_IN_TABLE;return}}this.insertionMode=K.IN_SELECT;}_isElementCausesFosterParenting(t){return BOe.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 o=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case T.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(o)===Ie.HTML)return {parent:this.treeAdapter.getTemplateContent(o),beforeElement:null};break}case T.TABLE:{let n=this.treeAdapter.getParentNode(o);return n?{parent:n,beforeElement:o}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let o=this._findFosterParentingLocation();o.beforeElement?this.treeAdapter.insertBefore(o.parent,t,o.beforeElement):this.treeAdapter.appendChild(o.parent,t);}_isSpecialElement(t,o){let n=this.treeAdapter.getNamespaceURI(t);return gOe[n].has(o)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){Okt(this,t);return}switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:{zOe(this,t);break}case K.TEXT:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_TABLE_TEXT:{WOe(this,t);break}case K.IN_COLUMN_GROUP:{PB(this,t);break}case K.AFTER_BODY:{OB(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){Pkt(this,t);return}switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.TEXT:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_COLUMN_GROUP:{PB(this,t);break}case K.AFTER_BODY:{OB(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){V3(this,t);return}switch(this.insertionMode){case K.INITIAL:case K.BEFORE_HTML:case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_TEMPLATE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{V3(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.AFTER_BODY:{lOt(this,t);break}case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{cOt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case K.INITIAL:{uOt(this,t);break}case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:{this._err(t,he.misplacedDoctype);break}case K.IN_TABLE_TEXT:{bx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,he.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?kkt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{dOt(this,t);break}case K.BEFORE_HEAD:{pOt(this,t);break}case K.IN_HEAD:{xu(this,t);break}case K.IN_HEAD_NO_SCRIPT:{fOt(this,t);break}case K.AFTER_HEAD:{bOt(this,t);break}case K.IN_BODY:{Ba(this,t);break}case K.IN_TABLE:{GA(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_CAPTION:{hkt(this,t);break}case K.IN_COLUMN_GROUP:{Y3(this,t);break}case K.IN_TABLE_BODY:{LB(this,t);break}case K.IN_ROW:{NB(this,t);break}case K.IN_CELL:{ykt(this,t);break}case K.IN_SELECT:{YOe(this,t);break}case K.IN_SELECT_IN_TABLE:{Skt(this,t);break}case K.IN_TEMPLATE:{vkt(this,t);break}case K.AFTER_BODY:{Ekt(this,t);break}case K.IN_FRAMESET:{wkt(this,t);break}case K.AFTER_FRAMESET:{Ckt(this,t);break}case K.AFTER_AFTER_BODY:{xkt(this,t);break}case K.AFTER_AFTER_FRAMESET:{_kt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?Mkt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{mOt(this,t);break}case K.BEFORE_HEAD:{hOt(this,t);break}case K.IN_HEAD:{gOt(this,t);break}case K.IN_HEAD_NO_SCRIPT:{yOt(this,t);break}case K.AFTER_HEAD:{SOt(this,t);break}case K.IN_BODY:{MB(this,t);break}case K.TEXT:{rkt(this,t);break}case K.IN_TABLE:{Rx(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_CAPTION:{gkt(this,t);break}case K.IN_COLUMN_GROUP:{fkt(this,t);break}case K.IN_TABLE_BODY:{W3(this,t);break}case K.IN_ROW:{KOe(this,t);break}case K.IN_CELL:{bkt(this,t);break}case K.IN_SELECT:{JOe(this,t);break}case K.IN_SELECT_IN_TABLE:{Tkt(this,t);break}case K.IN_TEMPLATE:{Akt(this,t);break}case K.AFTER_BODY:{QOe(this,t);break}case K.IN_FRAMESET:{Rkt(this,t);break}case K.AFTER_FRAMESET:{Ikt(this,t);break}case K.AFTER_AFTER_BODY:{_B(this,t);break}}}onEof(t){switch(this.insertionMode){case K.INITIAL:{yx(this,t);break}case K.BEFORE_HTML:{Sx(this,t);break}case K.BEFORE_HEAD:{Tx(this,t);break}case K.IN_HEAD:{vx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{Ax(this,t);break}case K.AFTER_HEAD:{Ex(this,t);break}case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{GOe(this,t);break}case K.TEXT:{ikt(this,t);break}case K.IN_TABLE_TEXT:{bx(this,t);break}case K.IN_TEMPLATE:{XOe(this,t);break}case K.AFTER_BODY:case K.IN_FRAMESET:case K.AFTER_FRAMESET:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{K3(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===F.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 K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.TEXT:case K.IN_COLUMN_GROUP:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{this._insertCharacters(t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:case K.AFTER_BODY:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{UOe(this,t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{G3(this,t);break}case K.IN_TABLE_TEXT:{VOe(this,t);break}}}};function oOt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return o?e.openElements.contains(o.element)?e.openElements.hasInScope(t.tagID)||(o=null):(e.activeFormattingElements.removeEntry(o),o=null):$Oe(e,t),o}function nOt(e,t){let o=null,n=e.openElements.stackTop;for(;n>=0;n--){let r=e.openElements.items[n];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[n])&&(o=r);}return o||(e.openElements.shortenToLength(Math.max(n,0)),e.activeFormattingElements.removeEntry(t)),o}function rOt(e,t,o){let n=t,r=e.openElements.getCommonAncestor(t);for(let i=0,a=r;a!==o;i++,a=r){r=e.openElements.getCommonAncestor(a);let s=e.activeFormattingElements.getElementEntry(a),l=s&&i>=eOt;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(a)):(a=iOt(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(a,n),n=a);}return n}function iOt(e,t){let o=e.treeAdapter.getNamespaceURI(t.element),n=e.treeAdapter.createElement(t.token.tagName,o,t.token.attrs);return e.openElements.replace(t.element,n),t.element=n,n}function aOt(e,t,o){let n=e.treeAdapter.getTagName(t),r=Tb(n);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(o);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Ie.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,o);}}function sOt(e,t,o){let n=e.treeAdapter.getNamespaceURI(o.element),{token:r}=o,i=e.treeAdapter.createElement(r.tagName,n,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(o),e.openElements.remove(o.element),e.openElements.insertAfter(t,i,r.tagID);}function q3(e,t){for(let o=0;o<ZPt;o++){let n=oOt(e,t);if(!n)break;let r=nOt(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;let i=rOt(e,r,n.element),a=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),a&&aOt(e,a,i),sOt(e,r,n);}}function V3(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function lOt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function cOt(e,t){e._appendCommentNode(t,e.document);}function K3(e,t){if(e.stopped=true,t.location){let o=e.fragmentContext?0:2;for(let n=e.openElements.stackTop;n>=o;n--)e._setEndLocation(e.openElements.items[n],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],a=e.treeAdapter.getNodeSourceCodeLocation(i);a&&!a.endTag&&e._setEndLocation(i,t);}}}}function uOt(e,t){e._setDocumentType(t);let o=t.forceQuirks?Rs.QUIRKS:_Oe(t);xOe(t)||e._err(t,he.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,o),e.insertionMode=K.BEFORE_HTML;}function yx(e,t){e._err(t,he.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Rs.QUIRKS),e.insertionMode=K.BEFORE_HTML,e._processToken(t);}function dOt(e,t){t.tagID===T.HTML?(e._insertElement(t,Ie.HTML),e.insertionMode=K.BEFORE_HEAD):Sx(e,t);}function mOt(e,t){let o=t.tagID;(o===T.HTML||o===T.HEAD||o===T.BODY||o===T.BR)&&Sx(e,t);}function Sx(e,t){e._insertFakeRootElement(),e.insertionMode=K.BEFORE_HEAD,e._processToken(t);}function pOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.HEAD:{e._insertElement(t,Ie.HTML),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD;break}default:Tx(e,t);}}function hOt(e,t){let o=t.tagID;o===T.HEAD||o===T.BODY||o===T.HTML||o===T.BR?Tx(e,t):e._err(t,he.endTagWithoutMatchingOpenElement);}function Tx(e,t){e._insertFakeElement(ae.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD,e._processToken(t);}function xu(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Fa.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Fa.RAWTEXT):(e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Fa.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Fa.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=K.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(K.IN_TEMPLATE);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:vx(e,t);}}function gOt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=K.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{vx(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function vb(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,he.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,he.endTagWithoutMatchingOpenElement);}function vx(e,t){e.openElements.pop(),e.insertionMode=K.AFTER_HEAD,e._processToken(t);}function fOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{xu(e,t);break}case T.NOSCRIPT:{e._err(t,he.nestedNoscriptInHead);break}default:Ax(e,t);}}function yOt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=K.IN_HEAD;break}case T.BR:{Ax(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Ax(e,t){let o=t.type===Mo.EOF?he.openElementsLeftAfterEof:he.disallowedContentInNoscriptInHead;e._err(t,o),e.openElements.pop(),e.insertionMode=K.IN_HEAD,e._processToken(t);}function bOt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.BODY:{e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET;break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{e._err(t,he.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),xu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Ex(e,t);}}function SOt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Ex(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Ex(e,t){e._insertFakeElement(ae.BODY,T.BODY),e.insertionMode=K.IN_BODY,kB(e,t);}function kB(e,t){switch(t.type){case Mo.CHARACTER:{zOe(e,t);break}case Mo.WHITESPACE_CHARACTER:{UOe(e,t);break}case Mo.COMMENT:{V3(e,t);break}case Mo.START_TAG:{Ba(e,t);break}case Mo.END_TAG:{MB(e,t);break}case Mo.EOF:{GOe(e,t);break}}}function UOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function zOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function TOt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function vOt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(o,t.attrs));}function AOt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&o&&(e.treeAdapter.detachNode(o),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET);}function EOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function wOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&hx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Ie.HTML);}function ROt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function COt(e,t){let o=e.openElements.tmplCount>0;(!e.formElement||o)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),o||(e.formElement=e.openElements.current));}function IOt(e,t){e.framesetOk=false;let o=t.tagID;for(let n=e.openElements.stackTop;n>=0;n--){let r=e.openElements.tagIDs[n];if(o===T.LI&&r===T.LI||(o===T.DD||o===T.DT)&&(r===T.DD||r===T.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==T.ADDRESS&&r!==T.DIV&&r!==T.P&&e._isSpecialElement(e.openElements.items[n],r))break}e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function xOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.tokenizer.state=Fa.PLAINTEXT;}function _Ot(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false;}function POt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(ae.A);o&&(q3(e,t),e.openElements.remove(o.element),e.activeFormattingElements.removeEntry(o)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function OOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function kOt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(q3(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function MOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function LOt(e,t){e.treeAdapter.getDocumentMode(e.document)!==Rs.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_TABLE;}function jOe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function HOe(e){let t=AB(e,jp.TYPE);return t!=null&&t.toLowerCase()===QPt}function NOt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),HOe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function DOt(e,t){e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;}function FOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function BOt(e,t){t.tagName=ae.IMG,t.tagID=T.IMG,jOe(e,t);}function UOt(e,t){e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.tokenizer.state=Fa.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=K.TEXT;}function zOt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Fa.RAWTEXT);}function jOt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Fa.RAWTEXT);}function DOe(e,t){e._switchToTextParsing(t,Fa.RAWTEXT);}function HOt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===K.IN_TABLE||e.insertionMode===K.IN_CAPTION||e.insertionMode===K.IN_TABLE_BODY||e.insertionMode===K.IN_ROW||e.insertionMode===K.IN_CELL?K.IN_SELECT_IN_TABLE:K.IN_SELECT;}function $Ot(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function GOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Ie.HTML);}function VOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Ie.HTML);}function WOt(e,t){e._reconstructActiveFormattingElements(),H3(t),xB(t),t.selfClosing?e._appendElement(t,Ie.MATHML):e._insertElement(t,Ie.MATHML),t.ackSelfClosing=true;}function qOt(e,t){e._reconstructActiveFormattingElements(),$3(t),xB(t),t.selfClosing?e._appendElement(t,Ie.SVG):e._insertElement(t,Ie.SVG),t.ackSelfClosing=true;}function FOe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function Ba(e,t){switch(t.tagID){case T.I:case T.S:case T.B:case T.U:case T.EM:case T.TT:case T.BIG:case T.CODE:case T.FONT:case T.SMALL:case T.STRIKE:case T.STRONG:{OOt(e,t);break}case T.A:{POt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{wOt(e,t);break}case T.P:case T.DL:case T.OL:case T.UL:case T.DIV:case T.DIR:case T.NAV:case T.MAIN:case T.MENU:case T.ASIDE:case T.CENTER:case T.FIGURE:case T.FOOTER:case T.HEADER:case T.HGROUP:case T.DIALOG:case T.DETAILS:case T.ADDRESS:case T.ARTICLE:case T.SEARCH:case T.SECTION:case T.SUMMARY:case T.FIELDSET:case T.BLOCKQUOTE:case T.FIGCAPTION:{EOt(e,t);break}case T.LI:case T.DD:case T.DT:{IOt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{jOe(e,t);break}case T.HR:{FOt(e,t);break}case T.RB:case T.RTC:{GOt(e,t);break}case T.RT:case T.RP:{VOt(e,t);break}case T.PRE:case T.LISTING:{ROt(e,t);break}case T.XMP:{zOt(e,t);break}case T.SVG:{qOt(e,t);break}case T.HTML:{TOt(e,t);break}case T.BASE:case T.LINK:case T.META:case T.STYLE:case T.TITLE:case T.SCRIPT:case T.BGSOUND:case T.BASEFONT:case T.TEMPLATE:{xu(e,t);break}case T.BODY:{vOt(e,t);break}case T.FORM:{COt(e,t);break}case T.NOBR:{kOt(e,t);break}case T.MATH:{WOt(e,t);break}case T.TABLE:{LOt(e,t);break}case T.INPUT:{NOt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{DOt(e,t);break}case T.IMAGE:{BOt(e,t);break}case T.BUTTON:{_Ot(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{MOt(e,t);break}case T.IFRAME:{jOt(e,t);break}case T.SELECT:{HOt(e,t);break}case T.OPTION:case T.OPTGROUP:{$Ot(e,t);break}case T.NOEMBED:case T.NOFRAMES:{DOe(e,t);break}case T.FRAMESET:{AOt(e,t);break}case T.TEXTAREA:{UOt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?DOe(e,t):FOe(e,t);break}case T.PLAINTEXT:{xOt(e,t);break}case T.COL:case T.TH:case T.TD:case T.TR:case T.HEAD:case T.FRAME:case T.TBODY:case T.TFOOT:case T.THEAD:case T.CAPTION:case T.COLGROUP:break;default:FOe(e,t);}}function KOt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,e.options.sourceCodeLocationInfo)){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e._setEndLocation(o,t);}}function YOt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,QOe(e,t));}function JOt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o));}function XOt(e){let t=e.openElements.tmplCount>0,{formElement:o}=e;t||(e.formElement=null),(o||t)&&e.openElements.hasInScope(T.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(T.FORM):o&&e.openElements.remove(o));}function QOt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(ae.P,T.P),e._closePElement();}function ZOt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function ekt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.popUntilTagNamePopped(o));}function tkt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function okt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker());}function nkt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(ae.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function $Oe(e,t){let o=t.tagName,n=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],a=e.openElements.tagIDs[r];if(n===a&&(n!==T.UNKNOWN||e.treeAdapter.getTagName(i)===o)){e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,a))break}}function MB(e,t){switch(t.tagID){case T.A:case T.B:case T.I:case T.S:case T.U:case T.EM:case T.TT:case T.BIG:case T.CODE:case T.FONT:case T.NOBR:case T.SMALL:case T.STRIKE:case T.STRONG:{q3(e,t);break}case T.P:{QOt(e);break}case T.DL:case T.UL:case T.OL:case T.DIR:case T.DIV:case T.NAV:case T.PRE:case T.MAIN:case T.MENU:case T.ASIDE:case T.BUTTON:case T.CENTER:case T.FIGURE:case T.FOOTER:case T.HEADER:case T.HGROUP:case T.DIALOG:case T.ADDRESS:case T.ARTICLE:case T.DETAILS:case T.SEARCH:case T.SECTION:case T.SUMMARY:case T.LISTING:case T.FIELDSET:case T.BLOCKQUOTE:case T.FIGCAPTION:{JOt(e,t);break}case T.LI:{ZOt(e);break}case T.DD:case T.DT:{ekt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{tkt(e);break}case T.BR:{nkt(e);break}case T.BODY:{KOt(e,t);break}case T.HTML:{YOt(e,t);break}case T.FORM:{XOt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{okt(e,t);break}case T.TEMPLATE:{vb(e,t);break}default:$Oe(e,t);}}function GOe(e,t){e.tmplInsertionModeStack.length>0?XOe(e,t):K3(e,t);}function rkt(e,t){var o;t.tagID===T.SCRIPT&&((o=e.scriptHandler)===null||o===void 0||o.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function ikt(e,t){e._err(t,he.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function G3(e,t){if(e.openElements.currentTagId!==void 0&&BOe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=K.IN_TABLE_TEXT,t.type){case Mo.CHARACTER:{WOe(e,t);break}case Mo.WHITESPACE_CHARACTER:{VOe(e,t);break}}else Cx(e,t);}function akt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CAPTION;}function skt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_COLUMN_GROUP;}function lkt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(ae.COLGROUP,T.COLGROUP),e.insertionMode=K.IN_COLUMN_GROUP,Y3(e,t);}function ckt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_TABLE_BODY;}function ukt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(ae.TBODY,T.TBODY),e.insertionMode=K.IN_TABLE_BODY,LB(e,t);}function dkt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function mkt(e,t){HOe(t)?e._appendElement(t,Ie.HTML):Cx(e,t),t.ackSelfClosing=true;}function pkt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Ie.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function GA(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{ukt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}case T.COL:{lkt(e,t);break}case T.FORM:{pkt(e,t);break}case T.TABLE:{dkt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{ckt(e,t);break}case T.INPUT:{mkt(e,t);break}case T.CAPTION:{akt(e,t);break}case T.COLGROUP:{skt(e,t);break}default:Cx(e,t);}}function Rx(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{vb(e,t);break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TBODY:case T.TD:case T.TFOOT:case T.TH:case T.THEAD:case T.TR:break;default:Cx(e,t);}}function Cx(e,t){let o=e.fosterParentingEnabled;e.fosterParentingEnabled=true,kB(e,t),e.fosterParentingEnabled=o;}function VOe(e,t){e.pendingCharacterTokens.push(t);}function WOe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function bx(e,t){let o=0;if(e.hasNonWhitespacePendingCharacterToken)for(;o<e.pendingCharacterTokens.length;o++)Cx(e,e.pendingCharacterTokens[o]);else for(;o<e.pendingCharacterTokens.length;o++)e._insertCharacters(e.pendingCharacterTokens[o]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var qOe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function hkt(e,t){let o=t.tagID;qOe.has(o)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,GA(e,t)):Ba(e,t);}function gkt(e,t){let o=t.tagID;switch(o){case T.CAPTION:case T.TABLE:{e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,o===T.TABLE&&Rx(e,t));break}case T.BODY:case T.COL:case T.COLGROUP:case T.HTML:case T.TBODY:case T.TD:case T.TFOOT:case T.TH:case T.THEAD:case T.TR:break;default:MB(e,t);}}function Y3(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.COL:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{xu(e,t);break}default:PB(e,t);}}function fkt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TEMPLATE:{vb(e,t);break}case T.COL:break;default:PB(e,t);}}function PB(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE,e._processToken(t));}function LB(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(ae.TR,T.TR),e.insertionMode=K.IN_ROW,NB(e,t);break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,GA(e,t));break}default:GA(e,t);}}function W3(e,t){let o=t.tagID;switch(t.tagID){case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasInTableScope(o)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,Rx(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TD:case T.TH:case T.TR:break;default:Rx(e,t);}}function NB(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CELL,e.activeFormattingElements.insertMarker();break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,LB(e,t));break}default:GA(e,t);}}function KOe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,W3(e,t));break}case T.TBODY:case T.TFOOT:case T.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(T.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,W3(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:case T.TD:case T.TH:break;default:Rx(e,t);}}function ykt(e,t){let o=t.tagID;qOe.has(o)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),NB(e,t)):Ba(e,t);}function bkt(e,t){let o=t.tagID;switch(o){case T.TD:case T.TH:{e.openElements.hasInTableScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(o)&&(e._closeTableCell(),KOe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:MB(e,t);}}function YOe(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.INPUT:case T.KEYGEN:case T.TEXTAREA:case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),t.tagID!==T.SELECT&&e._processStartTag(t));break}case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}}}function JOe(e,t){switch(t.tagID){case T.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===T.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===T.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop();break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop();break}case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode());break}case T.TEMPLATE:{vb(e,t);break}}}function Skt(e,t){let o=t.tagID;o===T.CAPTION||o===T.TABLE||o===T.TBODY||o===T.TFOOT||o===T.THEAD||o===T.TR||o===T.TD||o===T.TH?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processStartTag(t)):YOe(e,t);}function Tkt(e,t){let o=t.tagID;o===T.CAPTION||o===T.TABLE||o===T.TBODY||o===T.TFOOT||o===T.THEAD||o===T.TR||o===T.TD||o===T.TH?e.openElements.hasInTableScope(o)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e.onEndTag(t)):JOe(e,t);}function vkt(e,t){switch(t.tagID){case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{xu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=K.IN_TABLE,e.insertionMode=K.IN_TABLE,GA(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=K.IN_COLUMN_GROUP,e.insertionMode=K.IN_COLUMN_GROUP,Y3(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=K.IN_TABLE_BODY,e.insertionMode=K.IN_TABLE_BODY,LB(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=K.IN_ROW,e.insertionMode=K.IN_ROW,NB(e,t);break}default:e.tmplInsertionModeStack[0]=K.IN_BODY,e.insertionMode=K.IN_BODY,Ba(e,t);}}function Akt(e,t){t.tagID===T.TEMPLATE&&vb(e,t);}function XOe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):K3(e,t);}function Ekt(e,t){t.tagID===T.HTML?Ba(e,t):OB(e,t);}function QOe(e,t){var o;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=K.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===T.HTML){e._setEndLocation(e.openElements.items[0],t);let n=e.openElements.items[1];n&&!(!((o=e.treeAdapter.getNodeSourceCodeLocation(n))===null||o===void 0)&&o.endTag)&&e._setEndLocation(n,t);}}else OB(e,t);}function OB(e,t){e.insertionMode=K.IN_BODY,kB(e,t);}function wkt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.FRAMESET:{e._insertElement(t,Ie.HTML);break}case T.FRAME:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{xu(e,t);break}}}function Rkt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=K.AFTER_FRAMESET));}function Ckt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function Ikt(e,t){t.tagID===T.HTML&&(e.insertionMode=K.AFTER_AFTER_FRAMESET);}function xkt(e,t){t.tagID===T.HTML?Ba(e,t):_B(e,t);}function _B(e,t){e.insertionMode=K.IN_BODY,kB(e,t);}function _kt(e,t){switch(t.tagID){case T.HTML:{Ba(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function Pkt(e,t){t.chars=$n,e._insertCharacters(t);}function Okt(e,t){e._insertCharacters(t),e.framesetOk=false;}function ZOe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Ie.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function kkt(e,t){if(OOe(t))ZOe(e),e._startTagOutsideForeignContent(t);else {let o=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(o);n===Ie.MATHML?H3(t):n===Ie.SVG&&(kOe(t),$3(t)),xB(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=true;}}function Mkt(e,t){if(t.tagID===T.P||t.tagID===T.BR){ZOe(e),e._endTagOutsideForeignContent(t);return}for(let o=e.openElements.stackTop;o>0;o--){let n=e.openElements.items[o];if(e.treeAdapter.getNamespaceURI(n)===Ie.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(n);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(o);break}}}new Set([ae.AREA,ae.BASE,ae.BASEFONT,ae.BGSOUND,ae.BR,ae.COL,ae.EMBED,ae.FRAME,ae.HR,ae.IMG,ae.INPUT,ae.KEYGEN,ae.LINK,ae.META,ae.PARAM,ae.SOURCE,ae.TRACK,ae.WBR]);function eke(e,t,o){typeof e=="string"&&(o=t,t=e,e=null);let n=wx.getFragmentParser(e,o);return n.tokenizer.write(t,true),n.getFragment()}var Lkt=5e3,WA=1024;function VA(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function DB(e){return e.nodeName==="#text"}function FB(e,t){let o=eke(e),n={nodesLeft:Lkt};for(let a of o.childNodes)if(VA(a)&&a.tagName.toLowerCase()==="body"){let s=t(a,n);if(s!==void 0)return s}let r=[];for(let a of o.childNodes){if(n.nodesLeft<=0)break;if(VA(a)){let s=t(a,n);s!==void 0&&r.push(s);}}let i={tag:"body"};return r.length>0&&(i.children=r),i}var Nkt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),Dkt=new Set(["input","textarea","select","button","a","img","video","audio","canvas","svg","label","h1","h2","h3","h4","ol","ul","li","table","tr","td","th","form","nav","main","footer","section","article","dialog","option"]);function Fkt(e,t){return Dkt.has(t)?true:e.attrs.some(({name:o})=>U3.has(o.toLowerCase()))}function tke(e,t){if(t.nodesLeft<=0)return;let o=e.tagName.toLowerCase();if(Nkt.has(o))return;let n,r;for(let{name:c,value:u}of e.attrs){let d=c.toLowerCase();if(d==="role"){r=u;continue}n===void 0&&(n={}),n[d]=u;}let i,a=[];for(let c of e.childNodes){if(t.nodesLeft<=0)break;if(DB(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>WA?u.slice(0,WA):u;i=i===void 0?d:`${i} ${d}`;}}else if(VA(c)){let u=tke(c,t);u!==void 0&&a.push(u);}}let s=o==="body"||Fkt(e,o);if(!s&&a.length===0&&i===void 0)return;if(!s&&a.length===1&&i===void 0)return a[0];t.nodesLeft-=1;let l={tag:o};return r!==void 0&&(l.role=r),n!==void 0&&(l.attributes=n),i!==void 0&&(l.text=i),a.length>0&&(l.children=a),l}function J3(e){return FB(e,tke)}function oke(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let o=e.tagName.toLowerCase(),n,r;for(let{name:l,value:c}of e.attrs){let u=l.toLowerCase();if(u==="role"){r=c;continue}n===void 0&&(n={}),n[u]=c;}let i,a=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(DB(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>WA?c.slice(0,WA):c;i=i===void 0?u:`${i} ${u}`;}}else if(VA(l)){let c=oke(l,t);c!==void 0&&a.push(c);}}let s={tag:o};return r!==void 0&&(s.role=r),n!==void 0&&(s.attributes=n),i!==void 0&&(s.text=i),a.length>0&&(s.children=a),s}function X3(e){return FB(e,oke)}var Bkt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),Ab=class{constructor(t,o,n,r,i,a){this.orgId=t;this.testId=o;this.testName=n;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=a;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.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,o]of Object.entries(this.stepFrequenciesByType))uo.increment("test_step_execution",o,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,o){let{logger:n,step:r,parentStepIdChain:i}=t;this.recordStepStat(r);let a={step:r,status:"RUNNING",startedAt:new Date},s=[...o];this.currentResults=s;let l=new Q3(this.orgId,this.testId,this.testName,a,this.diskStorage,n,c=>{this.flushResults([...s,c]);},i??[],this.appGraphSink);return this.children.push(l),l}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(o=>o.finishInternal({status:IX(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function Ukt(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 Xe(e)}}function BB(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var Q3=class{constructor(t,o,n,r,i,a,s,l,c){this.orgId=t;this.testId=o;this.testName=n;this.metadata=r;this.diskStorage=i;this.logger=a;this.parentFlushResults=s;this.parentStepIdChain=l;this.appGraphSink=c;this.interactionTracer=new Vd({storeTraceAsset:u=>this.storeTraceAsset(u)}),Gd.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;pendingAssetWrites=Promise.resolve();async attachBeforeScreenshot(t){let{snapshotId:o,screenshot:n}=t;if(n){this.metadata.beforeSnapshotId=o;try{await this.diskStorage.storeFileAsync({name:`${rs}/${o}.jpeg`,contents:n});}catch(r){this.logger.warn({err:r,snapshotId:o},"Failed to store before-step screenshot");}}}async attachAfterScreenshot(t){let{snapshotId:o,screenshot:n}=t;if(n){this.metadata.afterSnapshotId=o;try{await this.diskStorage.storeFileAsync({name:`${rs}/${o}.jpeg`,contents:n});}catch(r){this.logger.warn({err:r,snapshotId:o},"Failed to store after-step screenshot");}}}attachBeforeHtmlSnapshot(t){let{snapshotId:o,html:n}=t;this.metadata.beforeSnapshotId=o,this.queueAssetWrite(`${o}.html`,n);}attachAfterHtmlSnapshot(t){let{snapshotId:o,html:n,fingerprintHtml:r,url:i,logger:a}=t;this.metadata.afterSnapshotId=o,this.queueAssetWrite(`${o}.html`,n),this.appGraphSink&&Bkt.has(this.metadata.step.type)&&this.appGraphSink({html:r??n,archivalHtml:n,url:i,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:a});}recordTargetAutoHeal(t){let{healType:o}=t,n=o==="AI"?"ai-target-heal":"cache-heal";uo.increment("test_event",1,[`name:${n}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:o,healedAt:new Date};}storeTraceAsset(t){this.queueAssetWrite(`${t.snapshotId}.${t.extension??"jpeg"}`,t.data);}queueAssetWrite(t,o){this.pendingAssetWrites=this.pendingAssetWrites.then(async()=>{try{await this.diskStorage.storeFileAsync({name:`${rs}/${t}`,contents:o});}catch(n){this.logger.warn({err:n,name:t},"Failed to store run trace asset");}});}async finishInternal(t){this.finished||(this.finished=true,this.interactionTracer.finish(),await Promise.all(this.children.map(o=>o.finish({status:Ukt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,o,n){_O({durationMs:o,executor:"cli",logger:this.logger,orgId:this.orgId,resolvedStep:t,status:n});}async finish(t){!this.finished&&t.resolvedStep!==void 0&&t.durationMs!==void 0&&this.recordStepDuration(t.resolvedStep,t.durationMs,t.step.status),await this.finishInternal(t.step),t.step.trace=this.interactionTracer.getRootSpan();}getResultBuilderForCurrentStep(){let t=this.metadata.step;switch(t.type){case "RESOLVED_MODULE":return o=>({...t,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o,type:"MODULE"});case "CONDITIONAL":return o=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:Tl(r.steps)})),elseSteps:t.elseSteps?Tl(t.elseSteps):void 0,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "WHILE_LOOP":return o=>({...t,steps:Tl(t.steps),status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return o=>({...t,status:BB(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});default:return Xe(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),o=new Ab(this.orgId,this.testId,this.testName,this.diskStorage,n=>{let r=t(n);this.parentFlushResults(r);});return this.children.push(o),o}};var UB=class{constructor(t,o,n,r,i,a,s,l){this.orgId=t;this.testId=o;this.testName=n;this.runAttemptId=r;this.metadata=i;this.diskStorage=a;this.recordVideo=s;this.progressHandle=l;this.diskStorage.mkdir(rs),this.harWriter=new Vy(this.diskStorage.createFileStream(`${rs}/har-pages.log`),this.diskStorage.createFileStream(`${rs}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${rs}/resource-usage.ndjson`),this.resourceUsageSampler=ooe({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
|
|
10491
10491
|
`),c.system.cpu&&(this.cpuUsageSum+=c.system.cpu.total,this.cpuSampleCount++);let u=c.system.memory.total-c.system.memory.free;this.memoryUsageSum+=u,this.memorySampleCount++;}});}finished=false;children=[];beforeResults;mainResults=[];afterResults;harWriter;resourceUsageStream;resourceUsageSampler;uiStatesStream;previousHtmlByteHash;previousFingerprint;previousArchivalHtmlByteHash;previousArchivalFingerprint;cpuUsageSum=0;cpuSampleCount=0;memoryUsageSum=0;memorySampleCount=0;get loggerBindings(){return {runAttemptId:this.runAttemptId}}getResourceUsageAverages(){return {avgCpuUsage:this.cpuSampleCount>0?this.cpuUsageSum/this.cpuSampleCount:0,avgMemoryUsage:this.memorySampleCount>0?this.memoryUsageSum/this.memorySampleCount:0}}get videoOutputPath(){if(this.recordVideo)return mn__default.resolve(this.diskStorage.cwd(),rs)}setActiveVideo(t,o){this.recordVideo&&(this.metadata.activeVideos=this.metadata.activeVideos||[],this.metadata.activeVideos.push({videoName:t,timestamp:o}));}setViewport(t){this.metadata.viewport=t;}onNetworkPage(t){this.finished||this.harWriter.writePage(t);}appendUiState(t){this.finished||(this.uiStatesStream||(this.uiStatesStream=this.diskStorage.createFileStream(l8)),this.uiStatesStream.write(`${JSON.stringify(t)}
|
|
10492
10492
|
`));}buildAppGraphSink(){return ({html:t,archivalHtml:o,url:n,stepId:r,parentStepIdChain:i,logger:a})=>{let s=gB(t),l=s===this.previousHtmlByteHash?this.previousFingerprint:void 0;if(!l){try{l=yB({url:n,dom:X3(t)});}catch(u){a.debug({err:u,stepId:r},"Failed to compute app-graph UIState fingerprint");return}this.previousHtmlByteHash=s,this.previousFingerprint=l;}let c=this.computeArchivalFingerprint({archivalHtml:o,url:n,stepId:r,logger:a});this.appendUiState({stepId:r,parentStepIdChain:i,fingerprintHash:l.fingerprintHash,minhash:Array.from(l.minhash),canonicalUrl:l.canonicalUrl,capturedAt:Date.now(),archivalFingerprintHash:c?.fingerprintHash,archivalMinhash:c?Array.from(c.minhash):void 0});}}computeArchivalFingerprint({archivalHtml:t,url:o,stepId:n,logger:r}){let i=gB(t);if(i===this.previousArchivalHtmlByteHash)return this.previousArchivalFingerprint;try{let a=yB({url:o,dom:J3(t)});return this.previousArchivalHtmlByteHash=i,this.previousArchivalFingerprint=a,a}catch(a){r.debug({err:a,stepId:n},"Failed to compute archival app-graph UIState fingerprint");return}}onNetworkLogs(t){this.finished||this.harWriter.writeEntries(t);}attachConsoleLogs(t){let{logs:o}=t;this.diskStorage.storeFile({name:"console.json",contents:JSON.stringify(o,null,2)});}attachBrowserCrashDump(t){let{crashReportDirFetcher:o,logger:n}=t,r=o();if(!r)return;let i=new MW;i.addLocalFolder(r,void 0,a=>a!==".DS_Store"),this.diskStorage.storeFile({name:`${rs}/${KH}`,contents:i.toBuffer()}),n.info({browserCrashZipName:KH},"Attached browser crash ZIP");}writeMetadata(t){this.diskStorage.storeFile({name:mt,contents:JSON.stringify(t,null,2)});}flushResults(t){let{results:o,beforeResults:n,afterResults:r}=u1({results:t?.mainResults??this.mainResults,beforeResults:t?.beforeResults??this.beforeResults,afterResults:t?.afterResults??this.afterResults},ba);this.writeMetadata({...this.metadata,results:o,beforeResults:n,afterResults:r}),this.reportProgress(n,o,r);}reportProgress(t,o,n){try{this.progressHandle.reportCompletedSteps(ik(t??[])+ik(o)+ik(n??[]));}catch(r){ba.warn({err:r},"Failed to report run progress");}}async finish(t){if(this.finished){t.logger.info({runAttemptId:this.runAttemptId,callerStatus:t.result.status},"CliRunAttemptTracer.finish() called but already finished \u2014 ignoring (real results already written)");return}this.finished=true;let{logger:o,result:n}=t,{results:r,beforeResults:i,afterResults:a}=u1({...n,results:n.results??this.mainResults,beforeResults:n.beforeResults??this.beforeResults,afterResults:n.afterResults??this.afterResults},o),s={...this.metadata,status:n.status,finishedAt:new Date,results:r,beforeResults:i,afterResults:a};await Promise.all(this.children.map(l=>l.finish({status:s.status,finishedAt:s.finishedAt}))),this.harWriter.close();try{this.resourceUsageSampler.stop(),this.resourceUsageStream.end();}catch{}if(this.uiStatesStream)try{this.uiStatesStream.end();}catch{}this.recordVideo==="on-fail"&&n.status==="PASSED"&&(Mne(o,this.videoOutputPath),s.activeVideos=void 0),this.writeMetadata(s),this.reportProgress(i,r,a);}finishBeforeStepList(t){this.beforeResults=t;}finishAfterStepList(t){this.afterResults=t;}async startBeforeStepList(t=[]){this.beforeResults=t;let o=new Ab(this.orgId,this.testId,this.testName,this.diskStorage,n=>this.flushResults({beforeResults:n}),this.buildAppGraphSink());return this.children.push(o),o}async startMainStepList(t=[]){this.mainResults=t;let o=new Ab(this.orgId,this.testId,this.testName,this.diskStorage,n=>this.flushResults({mainResults:n}),this.buildAppGraphSink());return this.children.push(o),o}async startAfterStepList(t=[]){this.afterResults=t;let o=new Ab(this.orgId,this.testId,this.testName,this.diskStorage,n=>this.flushResults({afterResults:n}),this.buildAppGraphSink());return this.children.push(o),o}async getScreenshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${rs}/${o}.html`)?.toString()}};var zB=class{constructor(t,o,n,r,i,a,s,l){this.orgId=t;this.testId=o;this.testName=n;this.runId=r;this.metadata=i;this.diskStorage=a;this.recordVideo=s;this.progressHandle=l;}children=[];finished=false;get loggerBindings(){return {runId:this.runId}}get envVarBindings(){return {[Nwe]:this.runId}}get runMetadata(){return this.metadata}get storageDirectoryPath(){return this.diskStorage.cwd()}async finish(t){if(this.finished)return;this.finished=true;let n=this.children[this.children.length-1]?.getResourceUsageAverages(),r={...this.metadata,schemaVersion:Ct,finishedAt:t.finishedAt||new Date,status:t.status,failureDetails:t.failureDetails,failureReason:t.failureReason,flake:t.isFlake||false,failureRecoveryDetails:t.failureRecoveryDetails,avgCpuUsage:n?.avgCpuUsage,avgMemoryUsage:n?.avgMemoryUsage,runAssertionResults:t.runAssertionResults};await Promise.all(this.children.map(i=>i.finish({logger:t.logger,result:{status:r.status}}))),this.diskStorage.storeFile({name:mt,contents:JSON.stringify(r,null,2)}),this.diskStorage.close(),this.progressHandle.setStatus(t.status);}async startAttempt(t){this.metadata.attempts=this.metadata.attempts+1,this.metadata.status="RUNNING",this.metadata.schemaVersion=Ct,this.diskStorage.storeFile({name:mt,contents:JSON.stringify(this.metadata,null,2)});let o=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),n={id:t,schemaVersion:Ct,runAttemptSchemaVersion:xte,startedAt:new Date,status:"RUNNING"};o.storeFile({name:mt,contents:JSON.stringify(n,null,2)});let r=new UB(this.orgId,this.testId,this.testName,t,n,o,this.recordVideo,this.progressHandle);return this.children.push(r),r}};var Eb=class e{constructor(t,o,n,r,i,a=true,s){this.orgId=t;this.runGroupId=o;this.metadata=n;this.diskStorage=r;this.recordVideo=i;this.ownsRunGroupMetadata=a;this.progressWriter=s;}children=[];finished=false;get loggerBindings(){return {orgId:this.orgId,runGroupId:this.runGroupId,branch:this.metadata.gitBranchName}}get runGroupMetadata(){return this.metadata}setAiSelectMetadata(t){this.metadata={...this.metadata,aiSelect:[t]};}static async start({suiteName:t,projectName:o,relativeProjectDir:n,orgId:r,runGroupId:i,outputDir:a,gitMetadata:s,labels:l,recordVideo:c,ai:u,browser:d,ownsRunGroupMetadata:m,progressSink:p,logger:h}){let g=m??true,f={...s,suiteName:t&&vn(t),projectName:o,relativeProjectDir:n,id:i,trigger:hl.CLI,startedAt:new Date,status:"RUNNING",cliVersion:Wt,labels:l??[],ai:u,browser:d},y=new mC(a,h,g);return g&&y.storeFile({name:mt,contents:JSON.stringify(f,null,2)}),new e(r,i,f,y,c??false,g,p??new rk(a,i,h))}getLiveRunStatusCounts(){return this.progressWriter.getRunStatusCounts()}registerWorkerRun(t){this.progressWriter.registerRun(t);}updateWorkerRun(t,o){this.progressWriter.updateRun(t,o);}async finish(t){this.finished||(this.finished=true,await de({name:"cli.finish_run_group",serviceName:"cli",fn:()=>this.finishHelper(t)}));}async finishHelper(t){let{status:o}=t,n={...this.metadata,status:o,updatedAt:new Date,finishedAt:new Date};await Promise.all(this.children.map(r=>r.finish({logger:t.logger,status:n.status,finishedAt:n.finishedAt}))),this.ownsRunGroupMetadata&&(this.diskStorage.storeFile({name:mt,contents:JSON.stringify(n,null,2)}),this.progressWriter.finish(o));}async startRun(t){let o=this.diskStorage.createRunArchive(t.runId,t.logger),n={stepsSnapshot:t.originalSteps.steps,beforeStepsSnapshot:t.originalSteps.beforeSteps??void 0,afterStepsSnapshot:t.originalSteps.afterSteps??void 0,runGroupId:this.runGroupId,testId:t.testId,testName:t.testName?vn(t.testName):t.testName,directory:t.directory,testDescription:t.testDescription,labels:t.testLabels,trigger:"CLI",status:"RUNNING",healStatus:"NOT_ATTEMPTED",resolvedBaseUrl:t.baseUrl,environmentName:t.environmentName,resolvedInputs:t.resolvedInputs,cliVersion:Wt,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,startedAt:new Date,attempts:0,quarantined:t.quarantined??false,quarantinedReason:t.quarantinedReason,executionType:"WEB",aiSettings:t.aiSettings};o.storeFile({name:mt,contents:JSON.stringify(n,null,2)});let r=this.progressWriter.registerRun({runId:t.runId,testId:t.testId,testName:t.testName,directory:t.directory,totalSteps:Nne([...t.originalSteps.beforeSteps??[],...t.originalSteps.steps,...t.originalSteps.afterSteps??[]])}),i=new zB(this.orgId,t.testId,t.testName,t.runId,n,o,t.recordVideoOverride??this.recordVideo,r);return this.children.push(i),i}};async function nke(e,t,o){if(o)return {};try{let{quarantined:n}=await t.getQuarantinedTests();return Object.fromEntries(n.map(r=>[r.testId,{quarantinedAt:r.quarantinedAt,quarantinedReason:r.quarantinedReason,quarantinedBy:r.quarantinedBy}]))}catch(n){return e.warn({err:n},"Failed to fetch quarantined tests, proceeding without them."),{}}}var jB=class{constructor(t){this.send=t;}onBegin(t){}onTestBegin(t){this.send({type:"reporter",event:"testBegin",testRef:t});}onTestStatus(t,o,n){this.send({type:"reporter",event:"testStatus",testRef:t,status:o,note:n});}onStepStart(t,o,n){this.send({type:"reporter",event:"stepStart",testRef:t,label:o,depth:n});}onStepEnd(t,o,n){this.send({type:"reporter",event:"stepEnd",testRef:t,label:o,depth:n.depth,durationMs:n.durationMs,success:n.success});}onSectionStart(t,o){this.send({type:"reporter",event:"sectionStart",testRef:t,label:o});}onTestEnd(t,o,n){this.send({type:"reporter",event:"testEnd",testRef:t,status:o,recovered:n?.recovered});}onEnd(t){}};var Ix="__run-worker";function Hkt(){let e=[],t=false,o=[];return {next:()=>{let a=e.shift();return a?Promise.resolve(a):t?Promise.resolve(void 0):new Promise(s=>o.push(s))},assignTest:a=>{let s=o.shift();s?s(a):e.push(a);},markNoMoreTests:()=>{for(t=true;o.length>0;)o.shift()(void 0);}}}var Z3=class{constructor(t){this.emit=t;}registerRun(t){return this.emit({type:"progressRegister",params:t}),new AR(this,t.runId)}updateRun(t,o){this.emit({type:"progressUpdate",runId:t,update:o});}finish(){}getRunStatusCounts(){}};async function e4(){let e=process.send?.bind(process);e||(C.error("Worker process started without an IPC channel."),process.exit(1));let t=f=>new Promise(y=>e(f,void 0,void 0,()=>y())),o=Hkt(),n=[],r=await new Promise((f,y)=>{let b=false,S=()=>{process.off("message",R),process.off("disconnect",w);},E=P=>{b||(b=true,S(),y(P));},v=P=>{b||(b=true,S(),f(P));},R=P=>{if(P.type==="init"){v(P.config);return}n.push(P);},w=()=>{E(new Error("Parent process disconnected before sending init"));};process.on("message",R),process.on("disconnect",w),t({type:"ready"});}),i,a=[],s=f=>{switch(f.type){case "assignTest":o.assignTest(f.test);return;case "noMoreTests":o.markNoMoreTests();return;case "cancel":o.markNoMoreTests(),i?i.cancel(f.reason,f.waitForRunsToSettle):a.push(f);return}};process.on("message",s);for(let f of n)s(f);r.shareDiagnostics&&await sc({serviceName:"cli",enabled:true});let l=new Nt({baseUrl:r.serverUrl??"",apiKey:r.apiKey??"",logger:fe,mode:"runner",runner:"test-runner"}),c=new Cr(r.project.config.ai?.agentConfig,{baseUrl:l.baseUrl,apiKey:l.apiKey,logger:fe,mode:"runner",runner:"test-runner"}),u=await Eb.start({orgId:r.orgId,runGroupId:r.runGroupId,projectName:r.project.config.name,relativeProjectDir:await ZT(r.project.rootDir),outputDir:r.outputDir,gitMetadata:r.gitMetadata,recordVideo:r.recordVideo,ai:r.project.config.ai,browser:r.project.config.browser,ownsRunGroupMetadata:false,progressSink:new Z3(f=>void t(f)),logger:fe}),d=fe,m=d.child(u.loggerBindings||{}),p=new jB(f=>void t(f));i=new HA({next:o.next,parallel:r.parallel,reporter:p,runGroupTracer:u,runGroupLogger:m,logger:d,project:r.project,client:l,generator:c,orgId:r.orgId,userId:r.userId,devicePixelRatio:r.devicePixelRatio,outputDir:r.outputDir,retriesOverride:r.retriesOverride,urlOverride:r.urlOverride,envName:r.envName,customHeaders:r.customHeaders,regenerateGoldenFiles:r.regenerateGoldenFiles,gitMetadata:r.gitMetadata,cacheOptions:r.cacheOptions,browserTypeOverride:r.browserTypeOverride,remoteBrowserOverride:r.remoteBrowserOverride,recordVideo:r.recordVideo,traceMetadata:{runGroupId:r.runGroupId,parallel:r.runParallel,workerCount:r.workerCount,workerIndex:r.workerIndex,remoteBrowser:r.remoteBrowser},onResult:f=>void t({type:"result",result:f}),onFatal:f=>void t({type:"fatal",message:G(f)})});for(let f of a)s(f);let h=await $A({cancel:f=>i.cancel(f),run:()=>i.run()});process.off("message",s);let g=h.cancelled?"CANCELLED":iP(h.runResults);await u.finish({logger:m,status:g}),await t({type:"done",cancelledRuns:[...h.cancelledRunsById.values()],cancelled:h.cancelled,cancellationReason:h.cancellationReason}),await it(),process.exit(0);}var Gkt=3e4,Vkt=5e3,Wkt="MOMENTIC_WORKER_PROCESSES";function rke({parallel:e,testCount:t,override:o=process.env[Wkt]}){let n=Math.max(1,Math.min(e,t));if(o===void 0||o.trim().length===0)return 1;let r=Number(o);return !Number.isFinite(r)||r<1?1:Math.min(Math.floor(r),n)}function qkt(e,t){if(t<=0)return [];let o=Math.floor(e/t),n=e-o*t;return Array.from({length:t},(r,i)=>i<n?o+1:o)}var t4=class{constructor(t){this.params=t;}runResults=[];cancelledRunsById=new Map;reportedRunIds=new Set;cancelled=false;cancellationReason;workers=[];pendingQueue=[];async cancel(t){this.cancelled||(this.cancelled=true,this.cancellationReason=t);let o={type:"cancel",reason:t,waitForRunsToSettle:true};for(let n of this.workers)this.cancelWorker(n,o);}async start(){let{engineTests:t,parallel:o,workerCount:n}=this.params,r=qkt(o,n);return this.pendingQueue=[...t],this.workers=r.map((i,a)=>this.spawnWorker({index:a,parallel:i})),await Promise.all(this.workers.map(i=>i.donePromise)),{runResults:this.runResults,cancelledRunsById:this.cancelledRunsById,cancelled:this.cancelled,cancellationReason:this.cancellationReason}}spawnWorker({index:t,parallel:o}){let n=process.argv[1];if(!n)throw new Error("Cannot fork worker: process.argv[1] is undefined.");let r=fork(n,[Ix],{serialization:"advanced",stdio:["ignore","pipe","pipe","ipc"],env:process.env}),i,a=new Promise(l=>{i=l;}),s={index:t,child:r,parallel:o,inFlight:0,dispatchedTests:[],noMoreTestsSent:false,donePromise:a,resolveDone:i,settled:false,exitCode:null,exitSignal:null};return this.forwardChildLogs(r,t),r.on("message",l=>this.handleWorkerMessage(s,l)),r.on("error",l=>{this.params.logger.error({err:l,workerIndex:t},"Worker error");}),r.on("exit",(l,c)=>{s.exitCode=l,s.exitSignal=c;}),r.on("close",()=>this.handleWorkerClose(s)),s}dispatchToWorker(t){if(t.settled||this.cancelled)return;let o=Math.max(0,t.parallel-t.inFlight),n=this.pendingQueue.splice(0,Math.min(o,this.pendingQueue.length));for(let r of n)t.dispatchedTests.push(r),t.inFlight++,t.child.send({type:"assignTest",test:r});!t.noMoreTestsSent&&this.pendingQueue.length===0&&t.inFlight===0&&t.child.connected&&(t.noMoreTestsSent=true,t.child.send({type:"noMoreTests"}));}handleWorkerMessage(t,o){switch(o.type){case "ready":t.child.send({type:"init",config:{...this.params.baseConfig,workerIndex:t.index,parallel:t.parallel}}),this.dispatchToWorker(t);return;case "reporter":this.relayReporterEvent(o);return;case "result":o.result.runId&&this.reportedRunIds.add(o.result.runId),this.runResults.push(o.result),t.inFlight=Math.max(0,t.inFlight-1),this.dispatchToWorker(t);return;case "progressRegister":this.params.runGroupTracer.registerWorkerRun(o.params);return;case "progressUpdate":this.params.runGroupTracer.updateWorkerRun(o.runId,o.update);return;case "fatal":this.params.logger.error({workerIndex:t.index,message:o.message},"Worker reported a fatal error"),this.cancel("Fatal error occurred");return;case "done":for(let n of o.cancelledRuns)n.runId&&(this.reportedRunIds.add(n.runId),this.cancelledRunsById.set(n.runId,n));o.cancelled&&!this.cancelled&&(this.cancelled=true,this.cancellationReason=o.cancellationReason),this.settleWorker(t);return}}relayReporterEvent(t){let{reporter:o}=this.params;switch(t.event){case "testBegin":o.onTestBegin(t.testRef);return;case "testStatus":o.onTestStatus(t.testRef,t.status??"",t.note);return;case "stepStart":o.onStepStart(t.testRef,t.label??"",t.depth);return;case "stepEnd":o.onStepEnd(t.testRef,t.label??"",{durationMs:t.durationMs??0,success:t.success??false,depth:t.depth??0});return;case "sectionStart":o.onSectionStart(t.testRef,t.label??"");return;case "testEnd":o.onTestEnd(t.testRef,t.status??"",{recovered:t.recovered});return}}handleWorkerClose(t){t.settled||(this.params.logger.error({workerIndex:t.index,code:t.exitCode,signal:t.exitSignal},"Worker exited before reporting completion"),this.cancel("Worker process exited unexpectedly"),this.settleWorker(t));}settleWorker(t){t.settled||(t.settled=true,clearTimeout(t.cancelTimer),clearTimeout(t.forceKillTimer),this.synthesizeMissingResults(t),t.resolveDone());}cancelWorker(t,o){t.settled||(t.child.connected&&t.child.send(o),!t.cancelTimer&&(t.cancelTimer=setTimeout(()=>{t.settled||(this.params.logger.warn({workerIndex:t.index},"Worker did not exit after cancellation"),t.child.kill("SIGTERM"),t.forceKillTimer=setTimeout(()=>{t.settled||t.child.kill("SIGKILL");},Vkt),t.forceKillTimer.unref());},Gkt),t.cancelTimer.unref()));}synthesizeMissingResults(t){let o=this.cancellationReason??"Worker process exited unexpectedly";for(let n of t.dispatchedTests){if(this.reportedRunIds.has(n.runId))continue;this.reportedRunIds.add(n.runId);let r=new Date;this.cancelledRunsById.set(n.runId,{results:[],beforeResults:[],afterResults:[],test:n.testDefinition,filePath:n.testDefinition.relativeFilePath,startedAt:r,lastAttemptStartedAt:r,finishedAt:r,status:"CANCELLED",attempts:0,runId:n.runId,cancellationReason:o,quarantined:n.quarantined,quarantinedMetadata:n.quarantinedMetadata,parameters:{testInputs:n.inputs,envName:this.params.baseConfig.envName,urlOverride:this.params.baseConfig.urlOverride,customHeaders:this.params.baseConfig.customHeaders},outputs:{}});}}forwardChildLogs(t,o){let n=r=>{let i=r.toString().trimEnd();i.length>0&&this.params.logger.debug({workerIndex:o},i);};t.stdout?.on("data",n),t.stderr?.on("data",n);}};async function ike(e){let t=new t4({engineTests:e.engineTests,parallel:e.parallel,workerCount:e.workerCount,reporter:e.reporter,logger:e.logger,baseConfig:e.baseConfig,runGroupTracer:e.runGroupTracer});return e.logger.info({workerCount:e.workerCount,parallel:e.parallel,testCount:e.engineTests.length},"Running local tests with a worker pool"),$A({timeoutMinutes:e.timeoutMinutes,cancel:o=>t.cancel(o),run:()=>t.start()})}async function r4({logger:e,orgId:t,waitOn:o,waitOnProxy:n,waitOnTimeout:r,log:i=true}){e.info({orgId:t},`Waiting for url: ${o} with timeout: ${r} seconds.`);let a=n?new URL(n):void 0,s;a&&(s={host:a.hostname,port:a.port?parseInt(a.port):a.protocol.startsWith("https")?443:80,auth:a.username||a.password?{username:a.username,password:a.password}:void 0}),await Ykt({resources:[o],interval:2500,timeout:r*1e3,headers:{Accept:"*/*"},followRedirect:true,verbose:false,log:i,strictSSL:false,proxy:s});}async function ske(e){let{suiteName:t,logger:o,tests:n,snapshots:r,yes:i,start:a,waitOn:s,waitOnProxy:l,client:c,project:u,retriesOverride:d,urlOverride:m,envName:p,orgId:h,userId:g,devicePixelRatio:f,customHeaders:y,testInputMatrix:b,include:S,exclude:E,labels:v,reporterDir:R=Kue,outputDir:w=du,uploadResults:P=false,waitOnTimeout:I=60,parallel:_,shardIndex:O=1,shardCount:N=1,regenerateGoldenFiles:D,gitMetadata:M,cacheOptions:z,ignoreQuarantine:J,skipQuarantined:W,onlyQuarantined:V,runGroupId:k,recordVideo:Q,timeoutMinutes:H,workers:$,browserTypeOverride:oe,remoteBrowserOverride:ie,aiSelect:Pe=false,aiSelectBase:Ne,aiSelectBudget:Fe,aiSelectDryRun:at=false,aiSelectPrompts:ee=[],shareDiagnostics:Z}=e,Se=Pe||at,Tt=Se&&!r;at||(a&&(o.info({orgId:h},`Executing start command: ${a}`),await tB(a,false)),s&&await r4({logger:o,orgId:h,waitOn:s,waitOnProxy:l,waitOnTimeout:I}));let Ke=new Cr(u.config.ai?.agentConfig,{baseUrl:c.baseUrl,apiKey:c.apiKey,logger:o,mode:"runner",runner:"test-runner"}),Re=null,dt=null,Mt=[],vo=[],et={},Qe,qt=[];if(r)Qe=r.map(Dt=>({inputs:void 0,testDefinition:Dt.testDefinition,snapshot:Dt}));else {let Dt=await tt(u);qt=await Zg({tests:n,momenticFiles:Dt,yes:i,project:u,include:S,exclude:E,labels:v,logger:C}),Tt&&C.log(`Momentic CLI v${Wt}`);let Yn=await Xkt({envName:p,aiSelect:Se,aiSelectBase:Ne,aiSelectBudget:Fe,aiSelectDryRun:at,aiSelectPrompts:ee,allTestDefinitions:qt,client:c,gitMetadata:M,logger:o,orgId:h,project:u});Re=Yn.selectionPlanResult,dt=Yn.aiSelectMetadata;let za=Yn.testDefinitions;et=await nke(o,c,J);let Pu=OPe({testDefinitions:za,quarantinedTestsMetadata:et,onlyQuarantined:V,skipQuarantined:W});Mt=Pu.testsToSkip,vo=Pu.quarantinedTestsToSkip,Qe=kPe({testsToRun:Pu.testsToRun,quarantinedTestsToRun:Pu.quarantinedTestsToRun,quarantinedTestsMetadata:et,testInputMatrix:b});}let Qo=Koe({items:Qe,shardIndex:O,shardCount:N,sortKey:Dt=>`${Dt.testDefinition.fullFilePath}:${Dt.inputIndex??0}`}),rn=Qo.some(Dt=>lw(Dt.testDefinition));rn&&SR(),o.info({tests:Qo.length,shardCount:N,shardIndex:O,parallel:_},"Running local tests");let al=Qo.filter(Dt=>Dt.quarantined).length,Bl=Qo.length-al,zi=rke({parallel:_,testCount:Qo.length,override:$!==void 0?String($):void 0}),la=O===1?[...Mt.map(Dt=>({relativeFilePath:Dt.relativeFilePath,skipped:{kind:"disabled"}})),...vo.map(Dt=>({relativeFilePath:Dt.relativeFilePath,quarantined:true,skipped:{kind:"quarantined",reason:et[Dt.id]?.quarantinedReason??void 0}}))]:[],ar=qe(),U=ie??u.config.browser?.remoteBrowser??false;C.log(Bme({cliName:Tt?void 0:"Momentic CLI",cliVersion:Tt?void 0:Wt,parallel:_,workerCount:zi,timeoutMinutes:H,runningCount:Bl,quarantinedCount:al,skippedCount:la.length,shardIndex:O,shardCount:N},ar));let{live:we,files:yt,network:It}=Ope({reporter:e.reporter,screen:ar});C.log(""),we.onBegin({parallel:_,shardCount:N,shardIndex:O,tests:[...la,...Qo.map(Dt=>({relativeFilePath:Dt.testDefinition.relativeFilePath,inputIndex:Dt.inputIndex,quarantined:Dt.quarantined}))]});let eo=[],um=new Map,af=false,Rb,sf=new Date,gr=async()=>{let Dt=c.getAppUrl(),Yn=[...um.values(),...eo.filter(Zo=>!Zo.runId||!um.has(Zo.runId))].map(Zo=>Zo.status==="CANCELLED"&&!Zo.cancellationReason?{...Zo,cancellationReason:Rb}:Zo),za=b$(Yn),Pu=Yn.filter(Zo=>Zo.status==="PASSED"&&!!Zo.failureRecoveryDetails?.attempts).length,$x={results:Yn,startTime:sf.getTime(),getPath:Zo=>Zo.filePath,getUrl:Zo=>Zo.runId?`${Dt}/runs/${Zo.runId}`:void 0,getFailureSummary:Zo=>Zo.failureReason?ku({failureReason:Zo.failureReason,classification:Zo.failureDetails?.classification,manualClassification:Zo.failureDetails?.manualClassification}).title??Zo.failureReason:"Test failed",printFailureBody:MO,getCancellationReason:Zo=>Zo.cancellationReason,recoveredCount:Pu,skippedCount:la.length,videoRecordingActive:(!!Q||rn)&&U};if(we.onEnd($x),S$($x),ape({errorMessages:Yn.map(Zo=>Zo.failureDetails?.errorMessage),doctorCommand:"`npx momentic doctor`"}),C.log(""),P){let Zo=await mo({text:"Uploading to Momentic\u2026",screen:ar},()=>de({name:"file-storage.upload_test_outputs",serviceName:"file-storage",fn:()=>dC({client:c,resultsPath:w})}));Zo.success?(C.success("Uploaded to Momentic."),C.dimmed(` ${tr(Zo.runGroupUrl,ar)}`)):(C.error(`Upload failed: ${Zo.error}.`),C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`)),am({type:"cli:results_uploaded",test_platform:"web",success:Zo.success});}else if(C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`),N>1||O>1){let Gx=rp.dirname(w)||".";C.dimmed(` merge shards: npx momentic results merge ${Gx} --output-dir ${rp.join(Gx,"merged")}`);}else {let Gx=`${Dt}/run-groups/${k}`;C.dimmed(` after upload: ${tr(Gx,ar)}`);}return za},fr=await Eb.start({suiteName:t,projectName:u.config.name,relativeProjectDir:await ZT(u.rootDir),orgId:h,runGroupId:k,outputDir:w,gitMetadata:M,labels:v,recordVideo:Q,ai:u.config.ai,browser:u.config.browser,logger:o});dt&&fr.setAiSelectMetadata(dt);let Ua=o.child(fr.loggerBindings||{}),Ul=Qo.map(Dt=>({...Dt,runId:randomUUID()}));if(zi>1){let Dt=await ike({engineTests:Ul,parallel:_,workerCount:zi,timeoutMinutes:H,reporter:we,logger:Ua,runGroupTracer:fr,baseConfig:{project:u,serverUrl:c.baseUrl,apiKey:c.apiKey,orgId:h,userId:g,runGroupId:k,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:D,gitMetadata:M,cacheOptions:z,browserTypeOverride:oe,remoteBrowserOverride:ie,recordVideo:Q,shareDiagnostics:Z,runParallel:_,workerCount:zi,remoteBrowser:U}});eo.push(...Dt.runResults);for(let[Yn,za]of Dt.cancelledRunsById)um.set(Yn,za);af=Dt.cancelled,Rb=Dt.cancellationReason;}else {let Dt=new HA({testsToRun:Ul,parallel:_,reporter:we,runGroupTracer:fr,runGroupLogger:Ua,logger:o,project:u,client:c,generator:Ke,orgId:h,userId:g,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:D,gitMetadata:M,cacheOptions:z,browserTypeOverride:oe,remoteBrowserOverride:ie,recordVideo:Q,traceMetadata:{runGroupId:k,parallel:_,workerCount:zi,workerIndex:0,remoteBrowser:U}}),Yn=await $A({timeoutMinutes:H,cancel:za=>Dt.cancel(za),run:()=>Dt.run()});eo.push(...Yn.runResults);for(let[za,Pu]of Yn.cancelledRunsById)um.set(za,Pu);af=Yn.cancelled,Rb=Yn.cancellationReason;}let dm=af?"CANCELLED":iP(eo,{onlyQuarantined:V});await fr.finish({logger:Ua,status:dm}),am({type:"cli:run_completed",test_platform:"web",status:dm,test_count:eo.length,duration_ms:Date.now()-sf.getTime()});for(let Dt of yt)await de({name:"reporting.write_standard_report",serviceName:"reporting",fn:()=>fPe({logger:Ua,callbacks:{createDebugDataReaderForRunAttempt:(Yn,za)=>new tL(w,Yn,za)},format:Dt,params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:sf,finishedAt:new Date,testsToSkip:Mt,quarantinedTestsToSkip:vo,quarantinedTestsMetadata:et},runs:eo,folder:R})});if(It.includes("newrelic")){let Dt=u.config.reporting?.newrelic;if(!Dt)C.error("The newrelic reporter requires a reporting.newrelic block in momentic.config.yaml.");else try{await de({name:"reporting.send_new_relic_report",serviceName:"reporting",fn:()=>P3({logger:C,config:{...Dt,accountId:wl(Dt.accountId),licenseKey:Dt.licenseKey?wl(Dt.licenseKey):void 0,attributes:Dt.attributes?Object.fromEntries(Object.entries(Dt.attributes).map(([Yn,za])=>[Yn,wl(za)])):void 0},params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:sf,finishedAt:new Date,testsToSkip:Mt,quarantinedTestsToSkip:vo,quarantinedTestsMetadata:et},runs:eo,runGroupId:k,envName:p,appUrl:c.getAppUrl(),gitMetadata:M})});}catch(Yn){C.error(`Failed to send report to New Relic: ${G(Yn)}`);}}let ZLe=await gr();if(Jkt(),Re){let Dt=M.githubRepository??M.gitOriginUrl??"",Yn=Re.diff?.headSha??"";if(Dt.length>0&&Yn.length>0){let za=Re.kind==="ready"?Re.plan.selectedTests.map($x=>$x.testId):[],Pu=Re.kind==="ready"?Re.planId:null;o.info({event:"ai_select.run_outcome",repository:Dt,headSha:Yn,runGroupId:k,planId:Pu,mode:at?"SHADOW":"SELECTED",totalCandidates:qt.length,selectedCount:za.length,excludedCount:0,unobservedRunCount:dt?.forcedTests.length??0},"ai-select run outcome");}}return ZLe}function Jkt(){if(!Su.isEnabled()||Su.getTotalRecords()===0)return;let e=Su.getSummary(),t=Su.getTotalRecords(),o=e.reduce((n,r)=>n+r.totalMs,0);C.log(""),C.dimmed(`CDP Performance Summary (${t} calls, ${xx(o)} total)`),C.dimmed(ake("Method",40)+lm("Count",8)+lm("Total",12)+lm("Avg",12)+lm("Min",12)+lm("Max",12));for(let n of e)C.dimmed(ake(n.method,40)+lm(String(n.count),8)+lm(xx(n.totalMs),12)+lm(xx(n.avgMs),12)+lm(xx(n.minMs),12)+lm(xx(n.maxMs),12));C.log("");}function xx(e){return e>=1e3?`${(e/1e3).toFixed(2)}s`:`${e.toFixed(1)}ms`}async function Xkt(e){let{aiSelect:t,aiSelectBase:o,aiSelectBudget:n,aiSelectDryRun:r,aiSelectPrompts:i,allTestDefinitions:a,client:s,gitMetadata:l,logger:c,orgId:u,project:d}=e;if(!t)return {selectionPlanResult:null,aiSelectMetadata:null,testDefinitions:a};let m=l.githubRepository??l.gitlabProjectPath??l.gitOriginUrl??"";if(m.length===0)return C.warn("AI test selection unavailable; running all tests."),C.dimmed(" Reason: could not determine repository identity from git metadata."),{selectionPlanResult:null,aiSelectMetadata:null,testDefinitions:a};let p=d.config.ai?.select,h={baseUrl:s.baseUrl,apiKey:s.apiKey,logger:c,mode:s.mode,runner:"ai-select"},g=new Nt(h),f=new Cr(d.config.ai?.agentConfig,h),y=await JM({client:g,gitMetadata:l,logger:c}),b=n??p?.targetTests??null,S="default";n!==void 0?S="cli-flag":p?.targetTests!==void 0&&(S="config");let E;try{E=await C3({apiClient:g,generator:f,logger:c,orgId:u,repoRoot:d.rootDir??process.cwd(),repository:m,explicitBase:o,config:p,mainBranch:d.config.gitMainBranch,budgetCap:b,budgetSource:S,dryRun:r,customPrompt:ux(i),environmentName:e.envName,changeRequestDescription:y,candidateTests:a.map(I=>({testPath:I.relativeFilePath.split(rp.sep).join("/"),testId:I.id,baseUrl:I.baseUrl??void 0,description:I.description??void 0})),allTestDefinitions:a.map(I=>({id:I.id,name:I.name,relativeFilePath:I.relativeFilePath})),agentOutputStream:process.stdout});}catch(I){c.warn({err:I},"ai-select failed; falling back to run-all");let _={kind:"run-all",reason:`AI selection failed: ${G(I)}.`,diff:null},O=o4({selectionPlanResult:_,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:a.length,forcedTests:[]});return n4(O),{selectionPlanResult:_,aiSelectMetadata:O,testDefinitions:a}}let v=E.kind==="ready"&&E.diff?ox({allTestDefinitions:a,changedFiles:E.diff.changedFiles,repoRoot:E.diff.repoRoot,projectRoot:d.rootDir??process.cwd()}):[],R=E.kind==="ready"?Qkt(a,E.plan.selectedTests,v,c):{tests:[],planMatchedCount:0};if(E.kind==="ready"&&!r&&a.length>0&&R.tests.length===0&&E.plan.selectedTests.length>0){c.warn({planId:E.planId,planSize:E.plan.selectedTests.length,candidateCount:a.length},"ai-select: plan matched zero in-scope tests; falling back to run-all");let I={kind:"run-all",reason:"AI-selected tests did not match any in-scope tests; running all tests instead.",diff:E.diff},_=o4({selectionPlanResult:I,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:a.length,forcedTests:v});return n4(_),{selectionPlanResult:I,aiSelectMetadata:_,testDefinitions:a}}let w=a;E.kind==="ready"&&!r?w=R.tests:E.kind==="run-none"&&!r&&(w=[]);let P=o4({selectionPlanResult:E,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:R.planMatchedCount,forcedTests:v});return n4(P),r&&process.exit(0),{selectionPlanResult:E,aiSelectMetadata:P,testDefinitions:w}}function o4(e){let{selectionPlanResult:t,aiSelectDryRun:o,forcedTests:n}=e,r=n.map(a=>({name:a.test.name,testPath:a.test.relativeFilePath,status:a.status}));if(t.kind==="run-all")return {mode:"RUN_ALL",baseRef:t.diff?.baseRef??null,headSha:t.diff?.headSha??"",planId:null,totalCandidates:e.totalCandidates,selectedCount:e.totalCandidates,anchorSegmentIds:[],userSummary:"",toolCallCount:0,selectedTests:[],forcedTests:r,runAllReason:t.reason};if(t.kind==="run-none")return {mode:"RUN_NONE",baseRef:t.diff.baseRef,headSha:t.diff.headSha,planId:null,totalCandidates:e.totalCandidates,selectedCount:0,anchorSegmentIds:[],userSummary:"",toolCallCount:0,selectedTests:[],forcedTests:r,runAllReason:t.reason};let{plan:i}=t;return {mode:o?"SHADOW":"SELECTED",baseRef:t.diff.baseRef,headSha:t.diff.headSha,planId:t.planId,totalCandidates:e.totalCandidates,selectedCount:e.selectedCount,anchorSegmentIds:i.anchorSegmentIds,userSummary:i.userSummary,toolCallCount:i.toolCallCount,selectedTests:i.selectedTests.map(a=>({testId:a.testId,name:a.name,testPath:a.testPath,confidence:a.confidence,signals:a.signals,rationale:a.rationale})),forcedTests:r,runAllReason:null}}function n4(e){let t=qe(),o=Je(t),n=[],r=i=>ra({label:"",text:i,screen:t,indent:4});switch(e.mode){case "RUN_ALL":n.push(` ${o.statusGlyph("cancel")} AI selection unavailable${o.dim(`${o.separator}running all ${e.totalCandidates} tests`)}`),e.runAllReason&&n.push(...r(e.runAllReason));break;case "RUN_NONE":n.push(` ${o.statusGlyph("skip")} No relevant tests${o.dim(`${o.separator}skipping all ${e.totalCandidates} tests`)}`),e.runAllReason&&n.push(...r(e.runAllReason));break;case "SHADOW":n.push(` ${o.statusGlyph("pass")} Dry run${o.separator}AI would have selected ${e.selectedCount} of ${e.totalCandidates} tests`),n.push(...r(e.userSummary));break;case "SELECTED":if(n.push(` ${o.statusGlyph("pass")} Selected ${e.selectedCount} of ${e.totalCandidates} tests with AI`),n.push(...r(e.userSummary)),e.forcedTests.length>0){n.push("",` ${o.statusGlyph("pass")} ${e.forcedTests.length} ${e.forcedTests.length===1?"test":"tests"} force-included${o.dim(`${o.separator}edited or added in this change`)}`);for(let i of e.forcedTests)n.push(` ${o.dim("-")} ${i.name} ${o.dim(`(${i.testPath})`)}`);}break;default:Xe(e.mode);}n.push(""),C.log(n.join(`
|
|
10493
10493
|
`));}function Qkt(e,t,o,n){let r=new Set,i=new Set;for(let c of t)r.add(c.testId),c.testPath&&i.add(c.testPath);let a=new Set(o.map(c=>c.test.id)),s=[],l=0;for(let c of e){let u=c.relativeFilePath.split(rp.sep).join("/"),d=r.has(c.id)||i.has(u);d&&l++,(d||a.has(c.id))&&s.push(c);}return n.info({total:e.length,selected:s.length,planSize:t.length,forcedCount:o.length},"ai-select: intersected plan with local tests"),{tests:s,planMatchedCount:l}}function ake(e,t){return e.length>t?e.substring(0,t-1)+"\u2026":e+" ".repeat(t-e.length)}function lm(e,t){return e.length>=t?e:" ".repeat(t-e.length)+e}var lke=30,oMt=1e3,$B=32;function uke(e){let t=new Set([...e.recoveredPromotedRunIds??[],...e.quarantinedSelectedRunIds??[]]);return e.selectedForHealing.filter(o=>!t.has(o.runId))}function dke(e){return uke(e).length+e.failed.length}function mke(e,t){return t?R5({failureCount:dke(e),totalCount:nMt(e)}):{withinBudget:true}}function nMt(e){return dke(e)+(e.quarantinedSelectedRunIds??[]).length+e.quarantined.failed.length+e.passed.length+e.recovered.length+e.quarantined.passed.length}function qA(){return {selectedForHealing:[],recovered:[],passed:[],failed:[],quarantined:{passed:[],failed:[]}}}async function pke({resultsDir:e,excludePatterns:t,...o}){let n=mn__default.resolve(e);await _u("load_target");let r=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"results"},fn:async()=>aMt({resultsDir:n,logger:o.logger})}),{healableFailures:i,triageInputSummary:a}=qB({runs:r,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),s=o.agentOutputStream?new Oa(o.agentOutputStream):void 0,l=YA(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await VB({candidates:r,excludePatterns:t,triageInputSummary:a,isCompleteRunGroup:!0,outputDir:n,output:s,timelineRecorder:l,shared:o}),d=[...i,...u];return {...await KA({...o,healingCandidates:d,triageInputSummary:a,outputDir:n,output:s,timelineRecorder:l,source:n,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered test results found in ${n}.`}),recoveryAssessments:c}}finally{s?.finalize();}}async function hke({runGroupId:e,excludePatterns:t,...o}){await _u("load_target");let n=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run-group"},fn:()=>i4({agentOutputStream:o.agentOutputStream,text:`Loading run group ${e}...`,fn:()=>iMt({apiClient:o.apiClient,logger:o.logger,runGroupId:e})})}),{healableFailures:r,triageInputSummary:i}=qB({runs:n,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),a=o.agentOutputStream?new Oa(o.agentOutputStream):void 0,s=YA(o);try{let{recoveryAssessments:l,permanentRecoveryCandidates:c}=await VB({candidates:n,excludePatterns:t,triageInputSummary:i,isCompleteRunGroup:!0,output:a,timelineRecorder:s,shared:o});o.logger.info({runGroupId:e,healableFailureCount:r.length,permanentRecoveryCandidateCount:c.length},`Identified ${r.length+c.length} run${r.length+c.length===1?"":"s"} to heal from run group.`);let u=[...r,...c];return {...await KA({...o,healingCandidates:u,triageInputSummary:i,output:a,timelineRecorder:s,source:`run group ${e}`,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered runs found in run group ${e}.`}),recoveryAssessments:l}}finally{a?.finalize();}}async function gke({runIds:e,excludePatterns:t,...o}){await _u("load_target");let n=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run","momentic.run_count":e.length},fn:()=>i4({agentOutputStream:o.agentOutputStream,text:e.length===1?`Loading run ${e[0]}...`:`Loading ${e.length} runs...`,fn:()=>Promise.all(e.map(async c=>{let u=await o.apiClient.getRun(c);if(!u)throw new ue(`Run ${c} was not found. Check the run ID and that your API key belongs to the same organization.`);return WB({run:u,logger:o.logger,scopeLabel:`run ${c}`})}))})}),{healableFailures:r,triageInputSummary:i}=qB({runs:n,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),a=e.length===1?`run ${e[0]}`:`${e.length} runs`,s=o.agentOutputStream?new Oa(o.agentOutputStream):void 0,l=YA(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await VB({candidates:n,excludePatterns:t,triageInputSummary:i,isCompleteRunGroup:!1,output:s,timelineRecorder:l,shared:o});o.logger.info({runIds:e,healableFailureCount:r.length,permanentRecoveryCandidateCount:u.length},`Identified ${r.length+u.length} run${r.length+u.length===1?"":"s"} to heal.`);let d=[...r,...u];return {...await KA({...o,healingCandidates:d,triageInputSummary:i,output:s,timelineRecorder:l,source:a,isCompleteRunGroup:!1,noResultsMessage:`No failed or permanently-healable recovered runs found for ${a}.`}),recoveryAssessments:c}}finally{s?.finalize();}}async function fke({gitCommitSha:e,excludePatterns:t,...o}){await _u("load_target");let r=(await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"commit"},fn:()=>i4({agentOutputStream:o.agentOutputStream,text:`Loading runs for commit ${e}...`,fn:()=>o.apiClient.getRunsByCommit(e)})})).map(c=>WB({run:c,logger:o.logger,scopeLabel:`commit ${e}`})),{healableFailures:i,triageInputSummary:a}=qB({runs:r,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),s=o.agentOutputStream?new Oa(o.agentOutputStream):void 0,l=YA(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await VB({candidates:r,excludePatterns:t,triageInputSummary:a,isCompleteRunGroup:!0,output:s,timelineRecorder:l,shared:o});o.logger.info({gitCommitSha:e,healableFailureCount:i.length,permanentRecoveryCandidateCount:u.length},`Identified ${i.length+u.length} run${i.length+u.length===1?"":"s"} to heal from commit.`);let d=[...i,...u];return {...await KA({...o,healingCandidates:d,triageInputSummary:a,output:s,timelineRecorder:l,source:`commit ${e}`,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered runs found for commit ${e}.`}),recoveryAssessments:c}}finally{s?.finalize();}}async function yke({output:e,generator:t,logger:o,serverId:n,dryRun:r,categoryDefinitions:i,healingConfig:a,abortSignal:s}){if(e)return fxe({logger:o,generator:t,sessionId:n,dryRun:r,summaryContext:e.summaryContext,healResults:e.heals,bucketingIterations:e.bucketingIterations,failureMessage:e.failure?.message,triageInputSummary:e.triageInputSummary,categoryDefinitions:i,healingConfig:a,abortSignal:s})}function bke({resultsDir:e,summary:t}){let o=mn__default.join(mn__default.resolve(e),mt),n=ic.parse(JSON.parse(nn__default.readFileSync(o,"utf-8")));nn__default.writeFileSync(o,JSON.stringify({...n,healRiskSummary:t},null,2));}async function VB({candidates:e,excludePatterns:t,triageInputSummary:o,isCompleteRunGroup:n,outputDir:r,output:i,timelineRecorder:a,shared:s}){if(!mke(o,n).withinBudget)return {recoveryAssessments:[],permanentRecoveryCandidates:[]};let l=t?.map(p=>new RegExp(p)),c=[];for(let p of e)if(!(s.skipRecovered||!p.recoveryInput)&&!(s.skipQuarantined&&p.quarantined&&!s.ignoreQuarantine)&&!Eke({run:p,excludeRegexes:l})){if(s.ignoreQuarantine&&p.recoveryInput.quarantined){c.push({...p.recoveryInput,quarantined:false});continue}c.push(p.recoveryInput);}c.length>0&&i?.commitSection("Recovery assessment"),await _u("recovery_assessment");let u;try{u=await de({name:"heal.recovery_assessment",attributes:{"momentic.recovery_run_count":c.length},fn:()=>Sxe({recoveryRuns:c,orgId:s.orgId,serverId:s.serverId,project:s.project,logger:s.logger,generator:s.generator,apiClient:s.apiClient,outputDir:r,abortSignal:s.healingAbortSignal,output:i,timelineRecorder:a})});}catch(p){if(!s.healingAbortSignal.aborted)throw p;s.logger.info({reason:s.healingAbortSignal.reason},"Stopped recovery assessment at the triage deadline"),u=[];}let d=new Map(c.map(p=>[p.runId,p])),m=u.flatMap(p=>{if(!p.shouldPermanentHeal)return [];let h=d.get(p.runId);return h?[{...h,source:"recovery-assessor",failureReason:p.failureReason,classification:{activeClassification:null}}]:[]});for(let p of m)o.selectedForHealing.push({runId:p.runId,testId:p.testId,testName:p.testName,classification:{activeClassification:null}}),(o.recoveredPromotedRunIds??=[]).push(p.runId);return m.length>0&&i?.commitItems(m.map(p=>`${p.testName} \u2014 queued for permanent healing.`)),{recoveryAssessments:u,permanentRecoveryCandidates:m}}async function KA({healingCandidates:e,triageInputSummary:t,serverId:o,noResultsMessage:n,outputDir:r,limit:i,project:a,apiClient:s,generator:l,logger:c,orgId:u,apiKey:d,start:m,waitOn:p,waitOnProxy:h,waitOnTimeout:g,alwaysSaveCache:f,noCache:y,regenerateHeal:b,sessionOptions:S,timeoutMinutes:E,parallel:v,resolveGitMetadataForCache:R,resolveGitMetadata:w,source:P,sessionManager:I,dryRun:_,jsonOutput:O,abortController:N,healingAbortSignal:D,prepareCheckoutForHealing:M,healingConfig:z,reclassifyContradictions:J,output:W,timelineRecorder:V,isCompleteRunGroup:k}){if(D.throwIfAborted(),i!==void 0&&e.length>i)return {...GB({triageInputSummary:t,err:new Error(`Found ${e.length} healing candidate${e.length===1?"":"s"}, which exceeds the configured limit of ${i}.`)}),...tf(V)};let Q=mke(t,k);if(!Q.withinBudget)return C.warn(Q.reason??"Skipping AI triage for this run group."),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:{...t,declinedForOutage:uke(t)},healPatches:[],...tf(V)};if(e.length===0)return C.info(n),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:t,healPatches:[],...tf(V)};let H=qe();await _u("resolve_git_cache_metadata");let $=await de({name:"heal.resolve_git_cache_metadata",fn:()=>O?R():mo({text:"Resolving git cache context...",screen:H},R)});if(c.info({gitCacheMetadata:$},"Got local git cache metadata"),!O){let Qe=Je(H),qt=[`${v} ${v===1?"worker":"workers"}`];E!==void 0&&E>0&&qt.push(`timeout=${E}m`);let Qo=[{label:"source",value:P}];$.gitBranchName&&Qo.push({label:"branch",value:$.gitBranchName});let rn=[`Healing ${e.length} ${e.length===1?"test":"tests"}`,...qt].join(Qe.separator);C.log(`Momentic CLI v${Wt}
|
|
@@ -10861,4 +10861,4 @@ smol-toml/dist/index.js:
|
|
|
10861
10861
|
*/
|
|
10862
10862
|
//# sourceMappingURL=out.js.map
|
|
10863
10863
|
//# sourceMappingURL=cli.js.map
|
|
10864
|
-
//# debugId=
|
|
10864
|
+
//# debugId=56b007c6-ebb7-5dfa-b4ed-de4afd3ae4d3
|